From 95887780b91f3acd2a7fff4032e17b2ed3dadecd Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 8 Dec 2024 12:15:13 +0800 Subject: [PATCH 001/100] enable cache --- .github/workflows/build_all.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index f71148e6ed..76df77eead 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -76,5 +76,4 @@ jobs: with: bundle: orcaslicer.flatpak manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml - cache-key: flatpak-builder-${{ github.sha }} - cache: false + cache: true From 50089ded0a047021dac9d1ee3f6254e929c93031 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 8 Dec 2024 12:16:05 +0800 Subject: [PATCH 002/100] disable other jobs temporarily --- .github/workflows/build_all.yml | 19 ------------------- flatpak/setup_env_ubuntu24.04.sh | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 19 deletions(-) create mode 100755 flatpak/setup_env_ubuntu24.04.sh diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 76df77eead..fa20b3a12c 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -41,25 +41,6 @@ concurrency: jobs: - build_all: - name: Build All - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-20.04 - - os: ubuntu-24.04 - - os: windows-latest - - os: macos-14 - arch: x86_64 - - os: macos-14 - arch: arm64 - uses: ./.github/workflows/build_check_cache.yml - with: - os: ${{ matrix.os }} - arch: ${{ matrix.arch }} - build-deps-only: ${{ inputs.build-deps-only || false }} - secrets: inherit flatpak: name: "Flatpak" runs-on: ubuntu-latest diff --git a/flatpak/setup_env_ubuntu24.04.sh b/flatpak/setup_env_ubuntu24.04.sh new file mode 100755 index 0000000000..e184e81d52 --- /dev/null +++ b/flatpak/setup_env_ubuntu24.04.sh @@ -0,0 +1,14 @@ +#! /bin/bash + +sudo apt update +sudo apt install build-essential flatpak flatpak-builder gnome-software-plugin-flatpak -y +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +flatpak install flathub org.gnome.Platform//46 org.gnome.Sdk//46 + +mkdir orcaslicer-build +cd orcaslicer-build + +git clone https://github.com/SoftFever/OrcaSlicer.git +cd OrcaSlicer + +flatpak-builder --force-clean build-dir flatpak/io.github.softfever.OrcaSlicer.yml \ No newline at end of file From 50b7c9fca1616f23e797816e9117142960d01087 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 8 Dec 2024 17:08:41 +0800 Subject: [PATCH 003/100] test --- flatpak/setup_env_ubuntu24.04.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/flatpak/setup_env_ubuntu24.04.sh b/flatpak/setup_env_ubuntu24.04.sh index e184e81d52..d26531e001 100755 --- a/flatpak/setup_env_ubuntu24.04.sh +++ b/flatpak/setup_env_ubuntu24.04.sh @@ -5,10 +5,11 @@ sudo apt install build-essential flatpak flatpak-builder gnome-software-plugin-f flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install flathub org.gnome.Platform//46 org.gnome.Sdk//46 -mkdir orcaslicer-build -cd orcaslicer-build -git clone https://github.com/SoftFever/OrcaSlicer.git -cd OrcaSlicer +## +# in OrcaSlicer folder, run following command to build Orca +# # First time build +# flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user --force-clean build-dir flatpak/io.github.softfever.OrcaSlicer.yml -flatpak-builder --force-clean build-dir flatpak/io.github.softfever.OrcaSlicer.yml \ No newline at end of file +# # Subsequent builds (only rebuilding OrcaSlicer) +# flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user build-dir flatpak/io.github.softfever.OrcaSlicer.yml --build-only=OrcaSlicer \ No newline at end of file From ad4725342a78ee04e2e55e619c72ef603b5de3ed Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 8 Dec 2024 17:40:10 +0800 Subject: [PATCH 004/100] try to fix orca_deps cache miss --- flatpak/io.github.softfever.OrcaSlicer.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml index 0eb8b86c14..69f641efb9 100755 --- a/flatpak/io.github.softfever.OrcaSlicer.yml +++ b/flatpak/io.github.softfever.OrcaSlicer.yml @@ -138,26 +138,31 @@ modules: - name: orca_deps buildsystem: simple + build-options: + env: + # Keep downloads in a persistent location + DEP_DOWNLOAD_DIR: /app/external-packages build-commands: # start build - | mkdir deps/build && cd deps/build cmake ../ \ -DDEP_WX_GTK3=ON \ - -DDEP_DOWNLOAD_DIR=/run/build/orca_deps/external-packages \ + -DDEP_DOWNLOAD_DIR=/app/external-packages \ -DCMAKE_PREFIX_PATH=/app \ -DDESTDIR=/app \ -DCMAKE_INSTALL_LIBDIR=/app/lib \ -DFLATPAK=ON \ -DCMAKE_INSTALL_PREFIX=/app cmake --build . - rm -r /run/build/orca_deps/external-packages + # Don't remove external-packages cleanup: - /app/include - "*.a" - "*.la" - /app/lib/cmake + - /app/external-packages # Clean up after build instead sources: # - From 5a9f4f9a89c65bd4020a284a5d06c5b9cb36d2b8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 8 Dec 2024 17:45:52 +0800 Subject: [PATCH 005/100] revert and test --- flatpak/io.github.softfever.OrcaSlicer.yml | 9 ++------- version.inc | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml index 69f641efb9..0eb8b86c14 100755 --- a/flatpak/io.github.softfever.OrcaSlicer.yml +++ b/flatpak/io.github.softfever.OrcaSlicer.yml @@ -138,31 +138,26 @@ modules: - name: orca_deps buildsystem: simple - build-options: - env: - # Keep downloads in a persistent location - DEP_DOWNLOAD_DIR: /app/external-packages build-commands: # start build - | mkdir deps/build && cd deps/build cmake ../ \ -DDEP_WX_GTK3=ON \ - -DDEP_DOWNLOAD_DIR=/app/external-packages \ + -DDEP_DOWNLOAD_DIR=/run/build/orca_deps/external-packages \ -DCMAKE_PREFIX_PATH=/app \ -DDESTDIR=/app \ -DCMAKE_INSTALL_LIBDIR=/app/lib \ -DFLATPAK=ON \ -DCMAKE_INSTALL_PREFIX=/app cmake --build . - # Don't remove external-packages + rm -r /run/build/orca_deps/external-packages cleanup: - /app/include - "*.a" - "*.la" - /app/lib/cmake - - /app/external-packages # Clean up after build instead sources: # - diff --git a/version.inc b/version.inc index 7eb37fdde4..959a5a14d6 100644 --- a/version.inc +++ b/version.inc @@ -10,7 +10,7 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.3.0-dev") +set(SoftFever_VERSION "2.35.0-dev") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) From f3619434438b80b67733a75ca177a51f973abc30 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Dec 2024 22:26:41 +0800 Subject: [PATCH 006/100] tweak naming --- .github/workflows/build_all.yml | 37 ++++++++++++++++++- ...o.github.softfever.OrcaSlicer.metainfo.xml | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index fa20b3a12c..46cd8f1783 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -41,9 +41,32 @@ concurrency: jobs: + build_all: + name: Build All + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-24.04 + - os: windows-latest + - os: macos-14 + arch: x86_64 + - os: macos-14 + arch: arm64 + uses: ./.github/workflows/build_check_cache.yml + with: + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + build-deps-only: ${{ inputs.build-deps-only || false }} + secrets: inherit flatpak: name: "Flatpak" runs-on: ubuntu-latest + env: + date: + ver: + ver_pure: container: image: bilelmoussaoui/flatpak-github-actions:gnome-46 options: --privileged @@ -53,8 +76,20 @@ jobs: run: sudo rm -rf /usr/share/dotnet /opt/ghc "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY" - uses: actions/checkout@v4 + - name: Get the version and date + run: | + ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + ver="PR-${{ github.event.number }}" + else + ver=V$ver_pure + fi + echo "ver=$ver" >> $GITHUB_ENV + echo "ver_pure=$ver_pure" >> $GITHUB_ENV + echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV + shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 with: - bundle: orcaslicer.flatpak + bundle: OrcaSlicer-Linux_${{ env.ver }}.flatpak manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml cache: true diff --git a/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml b/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml index 1b2a60d743..4c04ff99a0 100755 --- a/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml +++ b/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml @@ -36,7 +36,7 @@ -

A 3D printer slicer forked from Bambu Studio, PrusaSlicer, and SuperSlicer with many more printer profiles, helpful calibration prints, and many more features to get your 3D printer printing perfectly!

+

A powerful, free and open-source 3D printer slicer that features cutting-edge technology.

#009688 From d39799c2c30a429235d6d86560a16dd640570768 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Dec 2024 23:29:56 +0800 Subject: [PATCH 007/100] free space --- .github/workflows/build_all.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 46cd8f1783..bfccd53b9f 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -71,10 +71,16 @@ jobs: image: bilelmoussaoui/flatpak-github-actions:gnome-46 options: --privileged steps: - # maybe i'm too dumb and fucked up to do CI. OH WELL :D -ppd - - name: "Remove unneeded stuff to free disk space" - run: - sudo rm -rf /usr/share/dotnet /opt/ghc "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY" + - name: free disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + android: true + dotnet: true + haskell: true + large-packages: true + docker-images: true + swap-storage: true - uses: actions/checkout@v4 - name: Get the version and date run: | From ca2db3a60fab7f15b0a7a2f58bfc13239ca819ac Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Dec 2024 23:30:55 +0800 Subject: [PATCH 008/100] keep docker --- .github/workflows/build_all.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index bfccd53b9f..59f8f1b9f4 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -79,7 +79,7 @@ jobs: dotnet: true haskell: true large-packages: true - docker-images: true + docker-images: false swap-storage: true - uses: actions/checkout@v4 - name: Get the version and date From 3a43050ad109fdbe3be1f908ef555f1b6fe03c71 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 16:32:24 +0800 Subject: [PATCH 009/100] Remove some unused functions from Arachne perimeter generator. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@e704d8216dc966db8889c0c6cefb10f6f60c19d8 Co-authored-by: Lukáš Hejl --- .../Arachne/SkeletalTrapezoidation.cpp | 14 ++++------ .../Arachne/SkeletalTrapezoidationGraph.cpp | 2 +- .../Arachne/SkeletalTrapezoidationGraph.hpp | 2 +- .../Arachne/utils/ExtrusionJunction.cpp | 18 ------------- .../Arachne/utils/ExtrusionJunction.hpp | 6 +++-- src/libslic3r/Arachne/utils/ExtrusionLine.cpp | 9 ------- src/libslic3r/Arachne/utils/ExtrusionLine.hpp | 5 ---- .../Arachne/utils/SparsePointGrid.hpp | 27 ------------------- src/libslic3r/Arachne/utils/SquareGrid.cpp | 5 +++- src/libslic3r/CMakeLists.txt | 1 - 10 files changed, 15 insertions(+), 74 deletions(-) delete mode 100644 src/libslic3r/Arachne/utils/ExtrusionJunction.cpp diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index 19d49c3e12..0cbfedef69 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -152,8 +152,7 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, const VD::edge_t assert(twin->prev->twin); // Back rib assert(twin->prev->twin->prev); // Prev segment along parabola - constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + graph.makeRib(prev_edge, start_source_point, end_source_point); } assert(prev_edge); } @@ -203,10 +202,8 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, const VD::edge_t p0 = p1; v0 = v1; - if (p1_idx < discretized.size() - 1) - { // Rib for last segment gets introduced outside this function! - constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + if (p1_idx < discretized.size() - 1) { // Rib for last segment gets introduced outside this function! + graph.makeRib(prev_edge, start_source_point, end_source_point); } } assert(prev_edge); @@ -462,8 +459,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) node_t *starting_node = vd_node_to_he_node[starting_voronoi_edge->vertex0()]; starting_node->data.distance_to_boundary = 0; - constexpr bool is_next_to_start_or_end = true; - graph.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); + graph.makeRib(prev_edge, start_source_point, end_source_point); for (const VD::edge_type* vd_edge = starting_voronoi_edge->next(); vd_edge != ending_voronoi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); assert(Geometry::VoronoiUtils::is_in_range(*vd_edge)); @@ -471,7 +467,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) Point v1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex0()).cast(); Point v2 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()).cast(); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, segments); - graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_voronoi_edge); + graph.makeRib(prev_edge, start_source_point, end_source_point); } transferEdge(Geometry::VoronoiUtils::to_point(ending_voronoi_edge->vertex0()).cast(), end_source_point, *ending_voronoi_edge, prev_edge, start_source_point, end_source_point, segments); diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp index c49340ec59..dc0acd532a 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -315,7 +315,7 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) } } -void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point, bool is_next_to_start_or_end) +void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point) { Point p; Line(start_source_point, end_source_point).distance_to_infinite_squared(prev_edge->to->p, &p); diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp index cfdbfecdaf..bae84cb955 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp @@ -83,7 +83,7 @@ public: */ void collapseSmallEdges(coord_t snap_dist = 5); - void makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point, bool is_next_to_start_or_end); + void makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point); /*! * Insert a node into the graph and connect it to the input polygon using ribs diff --git a/src/libslic3r/Arachne/utils/ExtrusionJunction.cpp b/src/libslic3r/Arachne/utils/ExtrusionJunction.cpp deleted file mode 100644 index 3cdfa0d8d2..0000000000 --- a/src/libslic3r/Arachne/utils/ExtrusionJunction.cpp +++ /dev/null @@ -1,18 +0,0 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "ExtrusionJunction.hpp" - -namespace Slic3r::Arachne -{ - -bool ExtrusionJunction::operator ==(const ExtrusionJunction& other) const -{ - return p == other.p - && w == other.w - && perimeter_index == other.perimeter_index; -} - -ExtrusionJunction::ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index) : p(p), w(w), perimeter_index(perimeter_index) {} - -} diff --git a/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp b/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp index 942f828b3b..7789612e4b 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionJunction.hpp @@ -37,9 +37,11 @@ struct ExtrusionJunction */ size_t perimeter_index; - ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index); + ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index) : p(p), w(w), perimeter_index(perimeter_index) {} - bool operator==(const ExtrusionJunction& other) const; + bool operator==(const ExtrusionJunction &other) const { + return p == other.p && w == other.w && perimeter_index == other.perimeter_index; + } coord_t x() const { return p.x(); } coord_t y() const { return p.y(); } diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index 35233f1075..561fd7c5ea 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -29,15 +29,6 @@ int64_t ExtrusionLine::getLength() const return len; } -coord_t ExtrusionLine::getMinimalWidth() const -{ - return std::min_element(junctions.cbegin(), junctions.cend(), - [](const ExtrusionJunction& l, const ExtrusionJunction& r) - { - return l.w < r.w; - })->w; -} - void ExtrusionLine::simplify(const int64_t smallest_line_segment_squared, const int64_t allowed_error_distance_squared, const int64_t maximum_extrusion_area_deviation) { const size_t min_path_size = is_closed ? 3 : 2; diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index 8438a4c003..11b9d005ba 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -136,11 +136,6 @@ struct ExtrusionLine return ret; } - /*! - * Get the minimal width of this path - */ - coord_t getMinimalWidth() const; - /*! * Removes vertices of the ExtrusionLines to make sure that they are not too high * resolution. diff --git a/src/libslic3r/Arachne/utils/SparsePointGrid.hpp b/src/libslic3r/Arachne/utils/SparsePointGrid.hpp index 31c1965357..127380b3eb 100644 --- a/src/libslic3r/Arachne/utils/SparsePointGrid.hpp +++ b/src/libslic3r/Arachne/utils/SparsePointGrid.hpp @@ -6,7 +6,6 @@ #define UTILS_SPARSE_POINT_GRID_H #include -#include #include #include "SparseGrid.hpp" @@ -40,16 +39,6 @@ public: */ void insert(const Elem &elem); - /*! - * Get just any element that's within a certain radius of a point. - * - * Rather than giving a vector of nearby elements, this function just gives - * a single element, any element, in no particular order. - * \param query_pt The point to query for an object nearby. - * \param radius The radius of what is considered "nearby". - */ - const ElemT *getAnyNearby(const Point &query_pt, coord_t radius); - protected: using GridPoint = typename SparseGrid::GridPoint; @@ -69,22 +58,6 @@ void SparsePointGrid::insert(const Elem &elem) SparseGrid::m_grid.emplace(grid_loc, elem); } -template -const ElemT *SparsePointGrid::getAnyNearby(const Point &query_pt, coord_t radius) -{ - const ElemT *ret = nullptr; - const std::function &process_func = [&ret, query_pt, radius, this](const ElemT &maybe_nearby) { - if (shorter_then(m_locator(maybe_nearby) - query_pt, radius)) { - ret = &maybe_nearby; - return false; - } - return true; - }; - SparseGrid::processNearby(query_pt, radius, process_func); - - return ret; -} - } // namespace Slic3r::Arachne #endif // UTILS_SPARSE_POINT_GRID_H diff --git a/src/libslic3r/Arachne/utils/SquareGrid.cpp b/src/libslic3r/Arachne/utils/SquareGrid.cpp index ae89965795..1af9910426 100644 --- a/src/libslic3r/Arachne/utils/SquareGrid.cpp +++ b/src/libslic3r/Arachne/utils/SquareGrid.cpp @@ -2,7 +2,10 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "SquareGrid.hpp" -#include "../../Point.hpp" + +#include + +#include "libslic3r/Point.hpp" using namespace Slic3r::Arachne; diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 2c362dba23..7781000f66 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -420,7 +420,6 @@ set(lisbslic3r_sources Arachne/BeadingStrategy/WideningBeadingStrategy.hpp Arachne/BeadingStrategy/WideningBeadingStrategy.cpp Arachne/utils/ExtrusionJunction.hpp - Arachne/utils/ExtrusionJunction.cpp Arachne/utils/ExtrusionLine.hpp Arachne/utils/ExtrusionLine.cpp Arachne/utils/HalfEdge.hpp From 862acea2af4f29eb37e20ef4a757bd0708343bd5 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 16:44:36 +0800 Subject: [PATCH 010/100] SPE-2298: Fix crash caused by a numerical issue during testing if a Voronoi vertex is inside a corner of a polygon. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@669c931b7743ef74dd005819449b27a1544018c3 Co-authored-by: Lukáš Hejl --- .../Arachne/SkeletalTrapezoidation.cpp | 60 ++++--------------- .../Arachne/SkeletalTrapezoidation.hpp | 28 +-------- .../Arachne/SkeletalTrapezoidationGraph.cpp | 3 +- .../Arachne/SkeletalTrapezoidationGraph.hpp | 2 +- src/libslic3r/Arachne/utils/linearAlg2D.hpp | 57 ------------------ src/libslic3r/Geometry.cpp | 46 ++++++++++++++ src/libslic3r/Geometry.hpp | 17 ++++++ src/libslic3r/Geometry/VoronoiUtils.cpp | 58 ++++++++++++++++++ src/libslic3r/Geometry/VoronoiUtils.hpp | 54 ++++++++++++++--- 9 files changed, 181 insertions(+), 144 deletions(-) diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index 0cbfedef69..f1e03d225e 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include "utils/linearAlg2D.hpp" @@ -104,7 +103,7 @@ SkeletalTrapezoidation::node_t &SkeletalTrapezoidation::makeNode(const VD::verte } } -void SkeletalTrapezoidation::transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments) { +void SkeletalTrapezoidation::transferEdge(const Point &from, const Point &to, const VD::edge_type &vd_edge, edge_t *&prev_edge, const Point &start_source_point, const Point &end_source_point, const std::vector &segments) { auto he_edge_it = vd_edge_to_he_edge.find(vd_edge.twin()); if (he_edge_it != vd_edge_to_he_edge.end()) { // Twin segment(s) have already been made @@ -323,50 +322,6 @@ Points SkeletalTrapezoidation::discretize(const VD::edge_type& vd_edge, const st } } -bool SkeletalTrapezoidation::computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments) { - if (cell.incident_edge()->is_infinite()) - return false; //Infinite edges only occur outside of the polygon. Don't copy any part of this cell. - - // Check if any point of the cell is inside or outside polygon - // Copy whole cell into graph or not at all - - // If the cell.incident_edge()->vertex0() is far away so much that it doesn't even fit into Vec2i64, then there is no way that it will be inside the input polygon. - if (const VD::vertex_type &vert = *cell.incident_edge()->vertex0(); - vert.x() >= double(std::numeric_limits::max()) || vert.x() <= double(std::numeric_limits::lowest()) || - vert.y() >= double(std::numeric_limits::max()) || vert.y() <= double(std::numeric_limits::lowest())) - return false; // Don't copy any part of this cell - - const Point source_point = Geometry::VoronoiUtils::get_source_point(cell, segments.begin(), segments.end()); - const PolygonsPointIndex source_point_index = Geometry::VoronoiUtils::get_source_point_index(cell, segments.begin(), segments.end()); - Vec2i64 some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex0()); - if (some_point == source_point.cast()) - some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex1()); - - //Test if the some_point is even inside the polygon. - //The edge leading out of a polygon must have an endpoint that's not in the corner following the contour of the polygon at that vertex. - //So if it's inside the corner formed by the polygon vertex, it's all fine. - //But if it's outside of the corner, it must be a vertex of the Voronoi diagram that goes outside of the polygon towards infinity. - if (!LinearAlg2D::isInsideCorner(source_point_index.prev().p(), source_point_index.p(), source_point_index.next().p(), some_point)) - return false; // Don't copy any part of this cell - - const VD::edge_type* vd_edge = cell.incident_edge(); - do { - assert(vd_edge->is_finite()); - if (Vec2i64 p1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()); p1 == source_point.cast()) { - start_source_point = source_point; - end_source_point = source_point; - starting_vd_edge = vd_edge->next(); - ending_vd_edge = vd_edge; - } else { - assert((Geometry::VoronoiUtils::to_point(vd_edge->vertex0()) == source_point.cast() || !vd_edge->is_secondary()) && "point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); - } - } - while (vd_edge = vd_edge->next(), vd_edge != cell.incident_edge()); - assert(starting_vd_edge && ending_vd_edge); - assert(starting_vd_edge != ending_vd_edge); - return true; -} - SkeletalTrapezoidation::SkeletalTrapezoidation(const Polygons& polys, const BeadingStrategy& beading_strategy, double transitioning_angle, coord_t discretization_step_size, coord_t transition_filter_dist, coord_t allowed_filter_deviation, @@ -434,15 +389,20 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) // Compute and store result in above variables if (cell.contains_point()) { - const bool keep_going = computePointCellRange(cell, start_source_point, end_source_point, starting_voronoi_edge, ending_voronoi_edge, segments); - if (!keep_going) + Geometry::PointCellRange cell_range = Geometry::VoronoiUtils::compute_point_cell_range(cell, segments.cbegin(), segments.cend()); + start_source_point = cell_range.source_point; + end_source_point = cell_range.source_point; + starting_voronoi_edge = cell_range.edge_begin; + ending_voronoi_edge = cell_range.edge_end; + + if (!cell_range.is_valid()) continue; } else { assert(cell.contains_segment()); Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, segments.cbegin(), segments.cend()); assert(cell_range.is_valid()); - start_source_point = cell_range.segment_start_point; - end_source_point = cell_range.segment_end_point; + start_source_point = cell_range.source_segment_start_point; + end_source_point = cell_range.source_segment_end_point; starting_voronoi_edge = cell_range.edge_begin; ending_voronoi_edge = cell_range.edge_end; } diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp index ca8e13473f..3bd00f839b 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp @@ -182,7 +182,7 @@ protected: * Transfer an edge from the VD to the HE and perform discretization of parabolic edges (and vertex-vertex edges) * \p prev_edge serves as input and output. May be null as input. */ - void transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments); + void transferEdge(const Point &from, const Point &to, const VD::edge_type &vd_edge, edge_t *&prev_edge, const Point &start_source_point, const Point &end_source_point, const std::vector &segments); /*! * Discretize a Voronoi edge that represents the medial axis of a vertex- @@ -211,32 +211,6 @@ protected: */ Points discretize(const VD::edge_type& segment, const std::vector& segments); - /*! - * Compute the range of line segments that surround a cell of the skeletal - * graph that belongs to a point on the medial axis. - * - * This should only be used on cells that belong to a corner in the skeletal - * graph, e.g. triangular cells, not trapezoid cells. - * - * The resulting line segments is just the first and the last segment. They - * are linked to the neighboring segments, so you can iterate over the - * segments until you reach the last segment. - * \param cell The cell to compute the range of line segments for. - * \param[out] start_source_point The start point of the source segment of - * this cell. - * \param[out] end_source_point The end point of the source segment of this - * cell. - * \param[out] starting_vd_edge The edge of the Voronoi diagram where the - * loop around the cell starts. - * \param[out] ending_vd_edge The edge of the Voronoi diagram where the loop - * around the cell ends. - * \param points All vertices of the input Polygons. - * \param segments All edges of the input Polygons. - * /return Whether the cell is inside of the polygon. If it's outside of the - * polygon we should skip processing it altogether. - */ - static bool computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments); - /*! * For VD cells associated with an input polygon vertex, we need to separate the node at the end and start of the cell into two * That way we can reach both the quad_start and the quad_end from the [incident_edge] of the two new nodes diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp index dc0acd532a..686a6055f8 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -315,8 +315,7 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) } } -void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point) -{ +void SkeletalTrapezoidationGraph::makeRib(edge_t *&prev_edge, const Point &start_source_point, const Point &end_source_point) { Point p; Line(start_source_point, end_source_point).distance_to_infinite_squared(prev_edge->to->p, &p); coord_t dist = (prev_edge->to->p - p).cast().norm(); diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp index bae84cb955..33e43156ec 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp @@ -83,7 +83,7 @@ public: */ void collapseSmallEdges(coord_t snap_dist = 5); - void makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point); + void makeRib(edge_t*& prev_edge, const Point &start_source_point, const Point &end_source_point); /*! * Insert a node into the graph and connect it to the input polygon using ribs diff --git a/src/libslic3r/Arachne/utils/linearAlg2D.hpp b/src/libslic3r/Arachne/utils/linearAlg2D.hpp index 1db85c268b..7ece14c24c 100644 --- a/src/libslic3r/Arachne/utils/linearAlg2D.hpp +++ b/src/libslic3r/Arachne/utils/linearAlg2D.hpp @@ -9,63 +9,6 @@ namespace Slic3r::Arachne::LinearAlg2D { -/*! - * Test whether a point is inside a corner. - * Whether point \p query_point is left of the corner abc. - * Whether the \p query_point is in the circle half left of ab and left of bc, rather than to the right. - * - * Test whether the \p query_point is inside of a polygon w.r.t a single corner. - */ -inline static bool isInsideCorner(const Point &a, const Point &b, const Point &c, const Vec2i64 &query_point) -{ - // Visualisation for the algorithm below: - // - // query - // | - // | - // | - // perp-----------b - // / \ (note that the lines - // / \ AB and AC are normalized - // / \ to 10000 units length) - // a c - // - - auto normal = [](const Point &p0, coord_t len) -> Point { - int64_t _len = p0.norm(); - if (_len < 1) - return {len, 0}; - return (p0.cast() * int64_t(len) / _len).cast(); - }; - - auto rotate_90_degree_ccw = [](const Vec2d &p) -> Vec2d { - return {-p.y(), p.x()}; - }; - - constexpr coord_t normal_length = 10000; //Create a normal vector of reasonable length in order to reduce rounding error. - const Point ba = normal(a - b, normal_length); - const Point bc = normal(c - b, normal_length); - const Vec2d bq = query_point.cast() - b.cast(); - const Vec2d perpendicular = rotate_90_degree_ccw(bq); //The query projects to this perpendicular to coordinate 0. - - const double project_a_perpendicular = ba.cast().dot(perpendicular); //Project vertex A on the perpendicular line. - const double project_c_perpendicular = bc.cast().dot(perpendicular); //Project vertex C on the perpendicular line. - if ((project_a_perpendicular > 0.) != (project_c_perpendicular > 0.)) //Query is between A and C on the projection. - { - return project_a_perpendicular > 0.; //Due to the winding order of corner ABC, this means that the query is inside. - } - else //Beyond either A or C, but it could still be inside of the polygon. - { - const double project_a_parallel = ba.cast().dot(bq); //Project not on the perpendicular, but on the original. - const double project_c_parallel = bc.cast().dot(bq); - - //Either: - // * A is to the right of B (project_a_perpendicular > 0) and C is below A (project_c_parallel < project_a_parallel), or - // * A is to the left of B (project_a_perpendicular < 0) and C is above A (project_c_parallel > project_a_parallel). - return (project_c_parallel < project_a_parallel) == (project_a_perpendicular > 0.); - } -} - /*! * Returns the determinant of the 2D matrix defined by the the vectors ab and ap as rows. * diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index 3e67d4e1ba..7c89a5c00a 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -839,4 +839,50 @@ TransformationSVD::TransformationSVD(const Transform3d& trafo) return curMat; } +bool is_point_inside_polygon_corner(const Point &a, const Point &b, const Point &c, const Point &query_point) { + // Cast all input points into int64_t to prevent overflows when points are close to max values of coord_t. + const Vec2i64 a_i64 = a.cast(); + const Vec2i64 b_i64 = b.cast(); + const Vec2i64 c_i64 = c.cast(); + const Vec2i64 query_point_i64 = query_point.cast(); + + // Shift all points to have a base in vertex B. + // Then construct normalized vectors to ensure that we will work with vectors with endpoints on the unit circle. + const Vec2d ba = (a_i64 - b_i64).cast().normalized(); + const Vec2d bc = (c_i64 - b_i64).cast().normalized(); + const Vec2d bq = (query_point_i64 - b_i64).cast().normalized(); + + // Points A and C has to be different. + assert(ba != bc); + + // Construct a normal for the vector BQ that points to the left side of the vector BQ. + const Vec2d bq_left_normal = perp(bq); + + const double proj_a_on_bq_normal = ba.dot(bq_left_normal); // Project point A on the normal of BQ. + const double proj_c_on_bq_normal = bc.dot(bq_left_normal); // Project point C on the normal of BQ. + if ((proj_a_on_bq_normal > 0. && proj_c_on_bq_normal <= 0.) || (proj_a_on_bq_normal <= 0. && proj_c_on_bq_normal > 0.)) { + // Q is between points A and C or lies on one of those vectors (BA or BC). + + // Based on the CCW order of polygons (contours) and order of corner ABC, + // when this condition is met, the query point is inside the corner. + return proj_a_on_bq_normal > 0.; + } else { + // Q isn't between points A and C, but still it can be inside the corner. + + const double proj_a_on_bq = ba.dot(bq); // Project point A on BQ. + const double proj_c_on_bq = bc.dot(bq); // Project point C on BQ. + + // The value of proj_a_on_bq_normal is the same when we project the vector BA on the normal of BQ. + // So we can say that the Q is on the right side of the vector BA when proj_a_on_bq_normal > 0, and + // that the Q is on the left side of the vector BA proj_a_on_bq_normal < 0. + // Also, the Q is on the right side of the bisector of oriented angle ABC when proj_c_on_bq < proj_a_on_bq, and + // the Q is on the left side of the bisector of oriented angle ABC when proj_c_on_bq > proj_a_on_bq. + + // So the Q is inside the corner when one of the following conditions is met: + // * The Q is on the right side of the vector BA, and the Q is on the right side of the bisector of the oriented angle ABC. + // * The Q is on the left side of the vector BA, and the Q is on the left side of the bisector of the oriented angle ABC. + return (proj_a_on_bq_normal > 0. && proj_c_on_bq < proj_a_on_bq) || (proj_a_on_bq_normal <= 0. && proj_c_on_bq >= proj_a_on_bq); + } +} + }} // namespace Slic3r::Geometry diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp index 8183dcb7e8..0383aadb07 100644 --- a/src/libslic3r/Geometry.hpp +++ b/src/libslic3r/Geometry.hpp @@ -545,6 +545,23 @@ inline bool is_rotation_ninety_degrees(const Vec3d &rotation) } Transformation mat_around_a_point_rotate(const Transformation& innMat, const Vec3d &pt, const Vec3d &axis, float rotate_theta_radian); + +/** + * Checks if a given point is inside a corner of a polygon. + * + * The corner of a polygon is defined by three points A, B, C in counterclockwise order. + * + * Adapted from CuraEngine LinearAlg2D::isInsideCorner by Tim Kuipers @BagelOrb + * and @Ghostkeeper. + * + * @param a The first point of the corner. + * @param b The second point of the corner (the common vertex of the two edges forming the corner). + * @param c The third point of the corner. + * @param query_point The point to be checked if is inside the corner. + * @return True if the query point is inside the corner, false otherwise. + */ +bool is_point_inside_polygon_corner(const Point &a, const Point &b, const Point &c, const Point &query_point); + } } // namespace Slicer::Geometry #endif diff --git a/src/libslic3r/Geometry/VoronoiUtils.cpp b/src/libslic3r/Geometry/VoronoiUtils.cpp index f126258d28..33a68f8b19 100644 --- a/src/libslic3r/Geometry/VoronoiUtils.cpp +++ b/src/libslic3r/Geometry/VoronoiUtils.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "VoronoiUtils.hpp" #include "libslic3r.h" @@ -28,6 +29,7 @@ template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, VD::SegmentIt, VD::SegmentIt); template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, ColoredLinesConstIt, ColoredLinesConstIt); template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); +template PointCellRange VoronoiUtils::compute_point_cell_range(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); template Points VoronoiUtils::discretize_parabola(const Point &, const Arachne::PolygonsSegmentIndex &, const Point &, const Point &, coord_t, float); template Arachne::PolygonsPointIndex VoronoiUtils::get_source_point_index(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); @@ -245,6 +247,62 @@ VoronoiUtils::compute_segment_cell_range(const VD::cell_type &cell, const Segmen return cell_range; } +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Geometry::PointCellRange< + typename boost::polygon::segment_point_type::value_type>::type>>::type +VoronoiUtils::compute_point_cell_range(const VD::cell_type &cell, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + using Segment = typename std::iterator_traits::value_type; + using Point = typename boost::polygon::segment_point_type::type; + using PointCellRange = PointCellRange; + using CoordType = typename Point::coord_type; + + const Point source_point = Geometry::VoronoiUtils::get_source_point(cell, segment_begin, segment_end); + + // We want to ignore (by returning PointCellRange without assigned edge_begin and edge_end) cells outside the input polygon. + PointCellRange cell_range(source_point); + + const VD::edge_type *edge = cell.incident_edge(); + if (edge->is_infinite() || !is_in_range(*edge)) { + // Ignore infinite edges, because they only occur outside the polygon. + // Also ignore edges with endpoints that don't fit into CoordType, because such edges are definitely outside the polygon. + return cell_range; + } + + const Arachne::PolygonsPointIndex source_point_idx = Geometry::VoronoiUtils::get_source_point_index(cell, segment_begin, segment_end); + const Point edge_v0 = Geometry::VoronoiUtils::to_point(edge->vertex0()).template cast(); + const Point edge_v1 = Geometry::VoronoiUtils::to_point(edge->vertex1()).template cast(); + const Point edge_query_point = (edge_v0 == source_point) ? edge_v1 : edge_v0; + + // Check if the edge has another endpoint inside the corner of the polygon. + if (!Geometry::is_point_inside_polygon_corner(source_point_idx.prev().p(), source_point_idx.p(), source_point_idx.next().p(), edge_query_point)) { + // If the endpoint isn't inside the corner of the polygon, it means that + // the whole cell isn't inside the polygons, and we will ignore such cells. + return cell_range; + } + + const Vec2i64 source_point_i64 = source_point.template cast(); + edge = cell.incident_edge(); + do { + assert(edge->is_finite()); + + if (Vec2i64 v1 = Geometry::VoronoiUtils::to_point(edge->vertex1()); v1 == source_point_i64) { + cell_range.edge_begin = edge->next(); + cell_range.edge_end = edge; + } else { + // FIXME @hejllukas: With Arachne, we don't support polygons with collinear edges, + // because with collinear edges we have to handle secondary edges. + // Such edges goes through the endpoints of the input segments. + assert((Geometry::VoronoiUtils::to_point(edge->vertex0()) == source_point_i64 || edge->is_primary()) && "Point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); + } + } while (edge = edge->next(), edge != cell.incident_edge()); + + return cell_range; +} + Vec2i64 VoronoiUtils::to_point(const VD::vertex_type *vertex) { assert(vertex != nullptr); diff --git a/src/libslic3r/Geometry/VoronoiUtils.hpp b/src/libslic3r/Geometry/VoronoiUtils.hpp index bf63914677..9c915e223b 100644 --- a/src/libslic3r/Geometry/VoronoiUtils.hpp +++ b/src/libslic3r/Geometry/VoronoiUtils.hpp @@ -11,15 +11,28 @@ namespace Slic3r::Geometry { // Represent trapezoid Voronoi cell around segment. template struct SegmentCellRange { - const PT segment_start_point; // The start point of the source segment of this cell. - const PT segment_end_point; // The end point of the source segment of this cell. + const PT source_segment_start_point; // The start point of the source segment of this cell. + const PT source_segment_end_point; // The end point of the source segment of this cell. + const VD::edge_type *edge_begin = nullptr; // The edge of the Voronoi diagram where the loop around the cell starts. + const VD::edge_type *edge_end = nullptr; // The edge of the Voronoi diagram where the loop around the cell ends. + + SegmentCellRange() = delete; + explicit SegmentCellRange(const PT &source_segment_start_point, const PT &source_segment_end_point) + : source_segment_start_point(source_segment_start_point), source_segment_end_point(source_segment_end_point) + {} + + bool is_valid() const { return edge_begin && edge_end && edge_begin != edge_end; } +}; + +// Represent trapezoid Voronoi cell around point. +template struct PointCellRange +{ + const PT source_point; // The source point of this cell. const VD::edge_type *edge_begin = nullptr; // The edge of the Voronoi diagram where the loop around the cell starts. const VD::edge_type *edge_end = nullptr; // The edge of the Voronoi diagram where the loop around the cell ends. - SegmentCellRange() = delete; - explicit SegmentCellRange(const PT &segment_start_point, const PT &segment_end_point) - : segment_start_point(segment_start_point), segment_end_point(segment_end_point) - {} + PointCellRange() = delete; + explicit PointCellRange(const PT &source_point) : source_point(source_point) {} bool is_valid() const { return edge_begin && edge_end && edge_begin != edge_end; } }; @@ -80,7 +93,7 @@ public: * are linked to the neighboring segments, so you can iterate over the * segments until you reach the last segment. * - * Adapted from CuraEngine VoronoiUtils::computePointCellRange by Tim Kuipers @BagelOrb, + * Adapted from CuraEngine VoronoiUtils::computeSegmentCellRange by Tim Kuipers @BagelOrb, * Jaime van Kessel @nallath, Remco Burema @rburema and @Ghostkeeper. * * @param cell The cell to compute the range of line segments for. @@ -96,6 +109,33 @@ public: typename boost::polygon::segment_point_type::value_type>::type>>::type compute_segment_cell_range(const VD::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + /** + * Compute the range of line segments that surround a cell of the skeletal + * graph that belongs to a point on the medial axis. + * + * This should only be used on cells that belong to a corner in the skeletal + * graph, e.g. triangular cells, not trapezoid cells. + * + * The resulting line segments is just the first and the last segment. They + * are linked to the neighboring segments, so you can iterate over the + * segments until you reach the last segment. + * + * Adapted from CuraEngine VoronoiUtils::computePointCellRange by Tim Kuipers @BagelOrb + * Jaime van Kessel @nallath, Remco Burema @rburema and @Ghostkeeper. + * + * @param cell The cell to compute the range of line segments for. + * @param segment_begin Begin iterator for all edges of the input Polygons. + * @param segment_end End iterator for all edges of the input Polygons. + * @return Range of line segments that surround the cell. + */ + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Geometry::PointCellRange< + typename boost::polygon::segment_point_type::value_type>::type>>::type + compute_point_cell_range(const VD::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + template static bool is_in_range(double value) { return double(std::numeric_limits::lowest()) <= value && value <= double(std::numeric_limits::max()); From 44e53c90f061f589749b631316f6b2e9d4e30f8f Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 16:45:37 +0800 Subject: [PATCH 011/100] Add missing header guards to VoronoiVisualUtils. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@34d9b0678b5f0ce97dfb10a1de8ab48585fa2503 Co-authored-by: Lukáš Hejl --- src/libslic3r/Geometry/VoronoiVisualUtils.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libslic3r/Geometry/VoronoiVisualUtils.hpp b/src/libslic3r/Geometry/VoronoiVisualUtils.hpp index 177f27293a..c89d59bf9a 100644 --- a/src/libslic3r/Geometry/VoronoiVisualUtils.hpp +++ b/src/libslic3r/Geometry/VoronoiVisualUtils.hpp @@ -1,3 +1,6 @@ +#ifndef slic3r_VoronoiVisualUtils_hpp_ +#define slic3r_VoronoiVisualUtils_hpp_ + #include #include @@ -451,3 +454,5 @@ static inline void dump_voronoi_to_svg( } } // namespace Slic3r + +#endif // slic3r_VoronoiVisualUtils_hpp_ From 4b739539a46c1ad30fff58edf2be5b3e7a068c30 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 17:01:54 +0800 Subject: [PATCH 012/100] SPE-2298: Add detection of Voronoi diagram with parabolic edge without a focus point. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@c44ffed475f55f5203142c20005568b497e6362d Co-authored-by: Lukáš Hejl --- src/libslic3r/Geometry/Voronoi.cpp | 18 +++++++++++++----- src/libslic3r/Geometry/Voronoi.hpp | 8 ++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index 58923b9ada..32dc5f1488 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -35,6 +35,8 @@ VoronoiDiagram::construct_voronoi(const SegmentIterator segment_begin, const Seg BOOST_LOG_TRIVIAL(warning) << "Detected Voronoi edge intersecting input segment, input polygons will be rotated back and forth."; } else if (m_issue_type == IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX) { BOOST_LOG_TRIVIAL(warning) << "Detected finite Voronoi vertex with non finite vertex, input polygons will be rotated back and forth."; + } else if (m_issue_type == IssueType::PARABOLIC_VORONOI_EDGE_WITHOUT_FOCUS_POINT) { + BOOST_LOG_TRIVIAL(warning) << "Detected parabolic Voronoi edges without focus point, input polygons will be rotated back and forth."; } else { BOOST_LOG_TRIVIAL(error) << "Detected unknown Voronoi diagram issue, input polygons will be rotated back and forth."; } @@ -48,6 +50,8 @@ VoronoiDiagram::construct_voronoi(const SegmentIterator segment_begin, const Seg BOOST_LOG_TRIVIAL(error) << "Detected Voronoi edge intersecting input segment even after the rotation of input."; } else if (m_issue_type == IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX) { BOOST_LOG_TRIVIAL(error) << "Detected finite Voronoi vertex with non finite vertex even after the rotation of input."; + } else if (m_issue_type == IssueType::PARABOLIC_VORONOI_EDGE_WITHOUT_FOCUS_POINT) { + BOOST_LOG_TRIVIAL(error) << "Detected parabolic Voronoi edges without focus point even after the rotation of input."; } else { BOOST_LOG_TRIVIAL(error) << "Detected unknown Voronoi diagram issue even after the rotation of input."; } @@ -159,8 +163,8 @@ typename boost::polygon::enable_if< VoronoiDiagram::IssueType>::type VoronoiDiagram::detect_known_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end) { - if (has_finite_edge_with_non_finite_vertex(voronoi_diagram)) { - return IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX; + if (const IssueType edge_issue_type = detect_known_voronoi_edge_issues(voronoi_diagram); edge_issue_type != IssueType::NO_ISSUE_DETECTED) { + return edge_issue_type; } else if (const IssueType cell_issue_type = detect_known_voronoi_cell_issues(voronoi_diagram, segment_begin, segment_end); cell_issue_type != IssueType::NO_ISSUE_DETECTED) { return cell_issue_type; } @@ -220,16 +224,20 @@ VoronoiDiagram::detect_known_voronoi_cell_issues(const VoronoiDiagram &voronoi_d return IssueType::NO_ISSUE_DETECTED; } -bool VoronoiDiagram::has_finite_edge_with_non_finite_vertex(const VoronoiDiagram &voronoi_diagram) +VoronoiDiagram::IssueType VoronoiDiagram::detect_known_voronoi_edge_issues(const VoronoiDiagram &voronoi_diagram) { for (const voronoi_diagram_type::edge_type &edge : voronoi_diagram.edges()) { if (edge.is_finite()) { assert(edge.vertex0() != nullptr && edge.vertex1() != nullptr); if (edge.vertex0() == nullptr || edge.vertex1() == nullptr || !VoronoiUtils::is_finite(*edge.vertex0()) || !VoronoiUtils::is_finite(*edge.vertex1())) - return true; + return IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX; + + if (edge.is_curved() && !edge.cell()->contains_point() && !edge.twin()->cell()->contains_point()) + return IssueType::PARABOLIC_VORONOI_EDGE_WITHOUT_FOCUS_POINT; } } - return false; + + return IssueType::NO_ISSUE_DETECTED; } template diff --git a/src/libslic3r/Geometry/Voronoi.hpp b/src/libslic3r/Geometry/Voronoi.hpp index ef1c622769..fffc958b0a 100644 --- a/src/libslic3r/Geometry/Voronoi.hpp +++ b/src/libslic3r/Geometry/Voronoi.hpp @@ -44,7 +44,8 @@ public: MISSING_VORONOI_VERTEX, NON_PLANAR_VORONOI_DIAGRAM, VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT, - UNKNOWN // Repairs are disabled in the constructor. + PARABOLIC_VORONOI_EDGE_WITHOUT_FOCUS_POINT, + UNKNOWN // Repairs are disabled in the constructor. }; enum class State { @@ -158,7 +159,10 @@ private: IssueType>::type detect_known_voronoi_cell_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); - static bool has_finite_edge_with_non_finite_vertex(const VoronoiDiagram &voronoi_diagram); + // Detect issues related to Voronoi edges, or that can be detected by iterating over Voronoi edges. + // The first type of issue that can be detected is a finite Voronoi edge with a non-finite vertex. + // The second type of issue that can be detected is a parabolic Voronoi edge without a focus point (produced by two segments). + static IssueType detect_known_voronoi_edge_issues(const VoronoiDiagram &voronoi_diagram); voronoi_diagram_type m_voronoi_diagram; vertex_container_type m_vertices; From babb84c70ac855a037b9f6b20cacf0190a053aed Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 17:49:08 +0800 Subject: [PATCH 013/100] SPE-1963: Improve ordering of perimeters with Arachne perimeter generator Especially in cases when the object is composed only of 2 external perimeters and 1 or 2 internal perimeters, the order of perimeters wasn't optimal and differed from the Classic perimeter generator. That caused unnecessary long travels before the external contour was printed. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ordering of perimeters is slightly inspired by the latest changes in CuraEngine. Cherry-picked from prusa3d/PrusaSlicer@10875082de537793f6e62ce719b3e4defd57cfa1 Co-authored-by: Lukáš Hejl --- src/libslic3r/Arachne/PerimeterOrder.cpp | 276 ++++ src/libslic3r/Arachne/PerimeterOrder.hpp | 44 + src/libslic3r/Arachne/WallToolPaths.cpp | 94 -- src/libslic3r/Arachne/WallToolPaths.hpp | 10 - src/libslic3r/Arachne/utils/ExtrusionLine.cpp | 23 +- src/libslic3r/Arachne/utils/ExtrusionLine.hpp | 24 +- src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/PerimeterGenerator.cpp | 1173 ++++++++--------- 8 files changed, 890 insertions(+), 756 deletions(-) create mode 100644 src/libslic3r/Arachne/PerimeterOrder.cpp create mode 100644 src/libslic3r/Arachne/PerimeterOrder.hpp diff --git a/src/libslic3r/Arachne/PerimeterOrder.cpp b/src/libslic3r/Arachne/PerimeterOrder.cpp new file mode 100644 index 0000000000..01d50feb1e --- /dev/null +++ b/src/libslic3r/Arachne/PerimeterOrder.cpp @@ -0,0 +1,276 @@ +#include "PerimeterOrder.hpp" + +namespace Slic3r::Arachne::PerimeterOrder { + +using namespace Arachne; + +static size_t get_extrusion_lines_count(const Perimeters &perimeters) { + size_t extrusion_lines_count = 0; + for (const Perimeter &perimeter : perimeters) + extrusion_lines_count += perimeter.size(); + + return extrusion_lines_count; +} + +static PerimeterExtrusions get_sorted_perimeter_extrusions_by_area(const Perimeters &perimeters) { + PerimeterExtrusions sorted_perimeter_extrusions; + sorted_perimeter_extrusions.reserve(get_extrusion_lines_count(perimeters)); + + for (const Perimeter &perimeter : perimeters) { + for (const ExtrusionLine &extrusion_line : perimeter) { + if (extrusion_line.empty()) + continue; // This shouldn't ever happen. + + const BoundingBox bbox = get_extents(extrusion_line); + // Be aware that Arachne produces contours with clockwise orientation and holes with counterclockwise orientation. + const double area = std::abs(extrusion_line.area()); + const Polygon polygon = extrusion_line.is_closed ? to_polygon(extrusion_line) : Polygon{}; + + sorted_perimeter_extrusions.emplace_back(extrusion_line, area, polygon, bbox); + } + } + + // Open extrusions have an area equal to zero, so sorting based on the area ensures that open extrusions will always be before closed ones. + std::sort(sorted_perimeter_extrusions.begin(), sorted_perimeter_extrusions.end(), + [](const PerimeterExtrusion &l, const PerimeterExtrusion &r) { return l.area < r.area; }); + + return sorted_perimeter_extrusions; +} + +// Functions fill adjacent_perimeter_extrusions field for every PerimeterExtrusion by pointers to PerimeterExtrusions that contain or are inside this PerimeterExtrusion. +static void construct_perimeter_extrusions_adjacency_graph(PerimeterExtrusions &sorted_perimeter_extrusions) { + // Construct a graph (defined using adjacent_perimeter_extrusions field) where two PerimeterExtrusion are adjacent when one is inside the other. + std::vector root_candidates(sorted_perimeter_extrusions.size(), false); + for (PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { + const size_t perimeter_extrusion_idx = &perimeter_extrusion - sorted_perimeter_extrusions.data(); + + if (!perimeter_extrusion.is_closed()) { + root_candidates[perimeter_extrusion_idx] = true; + continue; + } + + for (PerimeterExtrusion &root_candidate : sorted_perimeter_extrusions) { + const size_t root_candidate_idx = &root_candidate - sorted_perimeter_extrusions.data(); + + if (!root_candidates[root_candidate_idx]) + continue; + + if (perimeter_extrusion.bbox.contains(root_candidate.bbox) && perimeter_extrusion.polygon.contains(root_candidate.extrusion.junctions.front().p)) { + perimeter_extrusion.adjacent_perimeter_extrusions.emplace_back(&root_candidate); + root_candidate.adjacent_perimeter_extrusions.emplace_back(&perimeter_extrusion); + root_candidates[root_candidate_idx] = false; + } + } + + root_candidates[perimeter_extrusion_idx] = true; + } +} + +// Perform the depth-first search to assign the nearest external perimeter for every PerimeterExtrusion. +// When some PerimeterExtrusion is achievable from more than one external perimeter, then we choose the +// one that comes from a contour. +static void assign_nearest_external_perimeter(PerimeterExtrusions &sorted_perimeter_extrusions) { + std::stack stack; + for (PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { + if (perimeter_extrusion.is_external_perimeter()) { + perimeter_extrusion.depth = 0; + perimeter_extrusion.nearest_external_perimeter = &perimeter_extrusion; + stack.push(&perimeter_extrusion); + } + } + + while (!stack.empty()) { + PerimeterExtrusion *current_extrusion = stack.top(); + stack.pop(); + + for (PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { + const size_t adjacent_extrusion_depth = current_extrusion->depth + 1; + // Update depth when the new depth is smaller or when we can achieve the same depth from a contour. + // This will ensure that the internal perimeter will be extruded before the outer external perimeter + // when there are two external perimeters and one internal. + if (adjacent_extrusion_depth < adjacent_extrusion->depth) { + adjacent_extrusion->nearest_external_perimeter = current_extrusion->nearest_external_perimeter; + adjacent_extrusion->depth = adjacent_extrusion_depth; + stack.push(adjacent_extrusion); + } else if (adjacent_extrusion_depth == adjacent_extrusion->depth && !adjacent_extrusion->nearest_external_perimeter->is_contour() && current_extrusion->is_contour()) { + adjacent_extrusion->nearest_external_perimeter = current_extrusion->nearest_external_perimeter; + stack.push(adjacent_extrusion); + } + } + } +} + +inline Point get_end_position(const ExtrusionLine &extrusion) { + if (extrusion.is_closed) + return extrusion.junctions[0].p; // We ended where we started. + else + return extrusion.junctions.back().p; // Pick the other end from where we started. +} + +// Returns ordered extrusions. +static std::vector ordered_perimeter_extrusions_to_minimize_distances(Point current_position, std::vector extrusions) { + // Ensure that open extrusions will be placed before the closed one. + std::sort(extrusions.begin(), extrusions.end(), + [](const PerimeterExtrusion *l, const PerimeterExtrusion *r) -> bool { return l->is_closed() < r->is_closed(); }); + + std::vector ordered_extrusions; + std::vector already_selected(extrusions.size(), false); + while (ordered_extrusions.size() < extrusions.size()) { + double nearest_distance_sqr = std::numeric_limits::max(); + size_t nearest_extrusion_idx = 0; + bool is_nearest_closed = false; + + for (size_t extrusion_idx = 0; extrusion_idx < extrusions.size(); ++extrusion_idx) { + if (already_selected[extrusion_idx]) + continue; + + const ExtrusionLine &extrusion_line = extrusions[extrusion_idx]->extrusion; + const Point &extrusion_start_position = extrusion_line.junctions.front().p; + const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); + if (distance_sqr < nearest_distance_sqr) { + if (extrusion_line.is_closed || (!extrusion_line.is_closed && nearest_distance_sqr != std::numeric_limits::max()) || (!extrusion_line.is_closed && !is_nearest_closed)) { + nearest_extrusion_idx = extrusion_idx; + nearest_distance_sqr = distance_sqr; + is_nearest_closed = extrusion_line.is_closed; + } + } + } + + already_selected[nearest_extrusion_idx] = true; + const PerimeterExtrusion *nearest_extrusion = extrusions[nearest_extrusion_idx]; + current_position = get_end_position(nearest_extrusion->extrusion); + ordered_extrusions.emplace_back(nearest_extrusion); + } + + return ordered_extrusions; +} + +struct GroupedPerimeterExtrusions +{ + GroupedPerimeterExtrusions() = delete; + explicit GroupedPerimeterExtrusions(const PerimeterExtrusion *external_perimeter_extrusion) + : external_perimeter_extrusion(external_perimeter_extrusion) {} + + std::vector extrusions; + const PerimeterExtrusion *external_perimeter_extrusion = nullptr; +}; + +// Returns vector of indexes that represent the order of grouped extrusions in grouped_extrusions. +static std::vector order_of_grouped_perimeter_extrusions_to_minimize_distances(Point current_position, std::vector grouped_extrusions) { + // Ensure that holes will be placed before contour and open extrusions before the closed one. + std::sort(grouped_extrusions.begin(), grouped_extrusions.end(), [](const GroupedPerimeterExtrusions &l, const GroupedPerimeterExtrusions &r) -> bool { + return (l.external_perimeter_extrusion->is_contour() < r.external_perimeter_extrusion->is_contour()) || + (l.external_perimeter_extrusion->is_contour() == r.external_perimeter_extrusion->is_contour() && l.external_perimeter_extrusion->is_closed() < r.external_perimeter_extrusion->is_closed()); + }); + + const size_t holes_cnt = std::count_if(grouped_extrusions.begin(), grouped_extrusions.end(), [](const GroupedPerimeterExtrusions &grouped_extrusions) { + return !grouped_extrusions.external_perimeter_extrusion->is_contour(); + }); + + std::vector grouped_extrusions_order; + std::vector already_selected(grouped_extrusions.size(), false); + while (grouped_extrusions_order.size() < grouped_extrusions.size()) { + double nearest_distance_sqr = std::numeric_limits::max(); + size_t nearest_grouped_extrusions_idx = 0; + bool is_nearest_closed = false; + + // First we order all holes and then we start ordering contours. + const size_t grouped_extrusion_end = grouped_extrusions_order.size() < holes_cnt ? holes_cnt: grouped_extrusions.size(); + for (size_t grouped_extrusion_idx = 0; grouped_extrusion_idx < grouped_extrusion_end; ++grouped_extrusion_idx) { + if (already_selected[grouped_extrusion_idx]) + continue; + + const ExtrusionLine &external_perimeter_extrusion_line = grouped_extrusions[grouped_extrusion_idx].external_perimeter_extrusion->extrusion; + const Point &extrusion_start_position = external_perimeter_extrusion_line.junctions.front().p; + const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); + if (distance_sqr < nearest_distance_sqr) { + if (external_perimeter_extrusion_line.is_closed || (!external_perimeter_extrusion_line.is_closed && nearest_distance_sqr != std::numeric_limits::max()) || (!external_perimeter_extrusion_line.is_closed && !is_nearest_closed)) { + nearest_grouped_extrusions_idx = grouped_extrusion_idx; + nearest_distance_sqr = distance_sqr; + is_nearest_closed = external_perimeter_extrusion_line.is_closed; + } + } + } + + grouped_extrusions_order.emplace_back(nearest_grouped_extrusions_idx); + already_selected[nearest_grouped_extrusions_idx] = true; + const GroupedPerimeterExtrusions &nearest_grouped_extrusions = grouped_extrusions[nearest_grouped_extrusions_idx]; + const ExtrusionLine &last_extrusion_line = nearest_grouped_extrusions.extrusions.back()->extrusion; + current_position = get_end_position(last_extrusion_line); + } + + return grouped_extrusions_order; +} + +static PerimeterExtrusions extract_ordered_perimeter_extrusions(const PerimeterExtrusions &sorted_perimeter_extrusions, const bool external_perimeters_first) { + // Extrusions are ordered inside each group. + std::vector grouped_extrusions; + + std::stack stack; + std::vector visited(sorted_perimeter_extrusions.size(), false); + for (const PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { + if (!perimeter_extrusion.is_external_perimeter()) + continue; + + stack.push(&perimeter_extrusion); + visited.assign(sorted_perimeter_extrusions.size(), false); + + grouped_extrusions.emplace_back(&perimeter_extrusion); + while (!stack.empty()) { + const PerimeterExtrusion *current_extrusion = stack.top(); + const size_t current_extrusion_idx = current_extrusion - sorted_perimeter_extrusions.data(); + stack.pop(); + + if (visited[current_extrusion_idx]) + continue; + + if (current_extrusion->nearest_external_perimeter == &perimeter_extrusion) + grouped_extrusions.back().extrusions.emplace_back(current_extrusion); + + if (current_extrusion->adjacent_perimeter_extrusions.size() == 1) { + const PerimeterExtrusion *adjacent_extrusion = current_extrusion->adjacent_perimeter_extrusions.front(); + stack.push(adjacent_extrusion); + } else if (current_extrusion->adjacent_perimeter_extrusions.size() > 1) { + // When there is more than one available candidate, then order candidates to minimize distances between + // candidates and also to minimize the distance from the current_position. + std::vector available_candidates; + for (const PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { + if (const size_t adjacent_extrusion_idx = adjacent_extrusion - sorted_perimeter_extrusions.data(); !visited[adjacent_extrusion_idx]) + available_candidates.emplace_back(adjacent_extrusion); + } + + std::vector adjacent_extrusions = ordered_perimeter_extrusions_to_minimize_distances(Point::Zero(), available_candidates); + std::reverse(adjacent_extrusions.begin(), adjacent_extrusions.end()); + for (const PerimeterExtrusion *adjacent_extrusion : adjacent_extrusions) + stack.push(adjacent_extrusion); + } + + visited[current_extrusion_idx] = true; + } + + if (!external_perimeters_first) + std::reverse(grouped_extrusions.back().extrusions.begin(), grouped_extrusions.back().extrusions.end()); + } + + const std::vector grouped_extrusion_order = order_of_grouped_perimeter_extrusions_to_minimize_distances(Point::Zero(), grouped_extrusions); + assert(grouped_extrusion_order.size() == grouped_ordered_extrusions.size()); + + PerimeterExtrusions ordered_extrusions; + for (size_t order_idx : grouped_extrusion_order) { + for (const PerimeterExtrusion *perimeter_extrusion : grouped_extrusions[order_idx].extrusions) + ordered_extrusions.emplace_back(*perimeter_extrusion); + } + + return ordered_extrusions; +} + +// FIXME: From the point of better patch planning, it should be better to do ordering when we have generated all extrusions (for now, when G-Code is exported). +// FIXME: It would be better to extract the adjacency graph of extrusions from the SkeletalTrapezoidation graph. +PerimeterExtrusions ordered_perimeter_extrusions(const Perimeters &perimeters, const bool external_perimeters_first) { + PerimeterExtrusions sorted_perimeter_extrusions = get_sorted_perimeter_extrusions_by_area(perimeters); + construct_perimeter_extrusions_adjacency_graph(sorted_perimeter_extrusions); + assign_nearest_external_perimeter(sorted_perimeter_extrusions); + return extract_ordered_perimeter_extrusions(sorted_perimeter_extrusions, external_perimeters_first); +} + +} // namespace Slic3r::Arachne::PerimeterOrder \ No newline at end of file diff --git a/src/libslic3r/Arachne/PerimeterOrder.hpp b/src/libslic3r/Arachne/PerimeterOrder.hpp new file mode 100644 index 0000000000..edb13094f9 --- /dev/null +++ b/src/libslic3r/Arachne/PerimeterOrder.hpp @@ -0,0 +1,44 @@ +#ifndef slic3r_GCode_PerimeterOrder_hpp_ +#define slic3r_GCode_PerimeterOrder_hpp_ + +#include + +namespace Slic3r::Arachne::PerimeterOrder { + +// Data structure stores ExtrusionLine (closed and open) together with additional data. +struct PerimeterExtrusion +{ + explicit PerimeterExtrusion(const Arachne::ExtrusionLine &extrusion, const double area, const Polygon &polygon, const BoundingBox &bbox) + : extrusion(extrusion), area(area), polygon(polygon), bbox(bbox) {} + + Arachne::ExtrusionLine extrusion; + // Absolute value of the area of the polygon. The value is always non-negative, even for holes. + double area = 0; + + // Polygon is non-empty only for closed extrusions. + Polygon polygon; + BoundingBox bbox; + + std::vector adjacent_perimeter_extrusions; + + // How far is this perimeter from the nearest external perimeter. Contour is always preferred over holes. + size_t depth = std::numeric_limits::max(); + PerimeterExtrusion *nearest_external_perimeter = nullptr; + + // Returns if ExtrusionLine is a contour or a hole. + bool is_contour() const { return extrusion.is_contour(); } + + // Returns if ExtrusionLine is closed or opened. + bool is_closed() const { return extrusion.is_closed; } + + // Returns if ExtrusionLine is an external or an internal perimeter. + bool is_external_perimeter() const { return extrusion.is_external_perimeter(); } +}; + +using PerimeterExtrusions = std::vector; + +PerimeterExtrusions ordered_perimeter_extrusions(const Perimeters &perimeters, bool external_perimeters_first); + +} // namespace Slic3r::Arachne::PerimeterOrder + +#endif // slic3r_GCode_Travels_hpp_ diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index 20e9a4f597..55aabd9b02 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -782,98 +782,4 @@ bool WallToolPaths::removeEmptyToolPaths(std::vector &toolpa return toolpaths.empty(); } -/*! - * 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. - * - * Odd walls should always go after their enclosing wall polygons. - * - * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. - */ -WallToolPaths::ExtrusionLineSet WallToolPaths::getRegionOrder(const std::vector &input, const bool outer_to_inner) -{ - 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. - // - // We use a PointGrid rather than a LineGrid to save on computation time. - // In very rare cases two insets might lie next to each other without having neighboring vertices, e.g. - // \ . - // | / . - // | / . - // || . - // | \ . - // | \ . - // / . - // However, because of how Arachne works this will likely never be the case for two consecutive insets. - // On the other hand one could imagine that two consecutive insets of a very large circle - // could be simplify()ed such that the remaining vertices of the two insets don't align. - // In those cases the order requirement is not captured, - // which means that the PathOrderOptimizer *might* result in a violation of the user set path order. - // This problem is expected to be not so severe and happen very sparsely. - - coord_t max_line_w = 0u; - for (const ExtrusionLine *line : input) // compute max_line_w - for (const ExtrusionJunction &junction : *line) - max_line_w = std::max(max_line_w, junction.w); - if (max_line_w == 0u) - return order_requirements; - - struct LineLoc - { - ExtrusionJunction j; - const ExtrusionLine *line; - }; - struct Locator - { - Point operator()(const LineLoc &elem) { return elem.j.p; } - }; - - // How much farther two verts may be apart due to corners. - // This distance must be smaller than 2, because otherwise - // we could create an order requirement between e.g. - // wall 2 of one region and wall 3 of another region, - // while another wall 3 of the first region would lie in between those two walls. - // However, higher values are better against the limitations of using a PointGrid rather than a LineGrid. - constexpr float diagonal_extension = 1.9f; - const auto searching_radius = coord_t(max_line_w * diagonal_extension); - using GridT = SparsePointGrid; - GridT grid(searching_radius); - - for (const ExtrusionLine *line : input) - for (const ExtrusionJunction &junction : *line) grid.insert(LineLoc{junction, line}); - for (const std::pair &pair : grid) { - const LineLoc &lineloc_here = pair.second; - const ExtrusionLine *here = lineloc_here.line; - Point loc_here = pair.second.j.p; - std::vector nearby_verts = grid.getNearby(loc_here, searching_radius); - for (const LineLoc &lineloc_nearby : nearby_verts) { - const ExtrusionLine *nearby = lineloc_nearby.line; - if (nearby == here) - continue; - if (nearby->inset_idx == here->inset_idx) - continue; - if (nearby->inset_idx > here->inset_idx + 1) - continue; // not directly adjacent - if (here->inset_idx > nearby->inset_idx + 1) - continue; // not directly adjacent - if (!shorter_then(loc_here - lineloc_nearby.j.p, (lineloc_here.j.w + lineloc_nearby.j.w) / 2 * diagonal_extension)) - continue; // points are too far away from each other - if (here->is_odd || nearby->is_odd) { - if (here->is_odd && !nearby->is_odd && nearby->inset_idx < here->inset_idx) - order_requirements.emplace(std::make_pair(nearby, here)); - if (nearby->is_odd && !here->is_odd && here->inset_idx < nearby->inset_idx) - order_requirements.emplace(std::make_pair(here, nearby)); - } else if ((nearby->inset_idx < here->inset_idx) == outer_to_inner) { - order_requirements.emplace(std::make_pair(nearby, here)); - } else { - assert((nearby->inset_idx > here->inset_idx) == outer_to_inner); - order_requirements.emplace(std::make_pair(here, nearby)); - } - } - } - return order_requirements; -} - } // namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/WallToolPaths.hpp b/src/libslic3r/Arachne/WallToolPaths.hpp index 457f7e7149..00652fc091 100644 --- a/src/libslic3r/Arachne/WallToolPaths.hpp +++ b/src/libslic3r/Arachne/WallToolPaths.hpp @@ -90,16 +90,6 @@ public: 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. - * - * Odd walls should always go after their enclosing wall polygons. - * - * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. - */ - static ExtrusionLineSet getRegionOrder(const std::vector &input, bool outer_to_inner); - protected: /*! * Stitch the polylines together and form closed polygons. diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index 561fd7c5ea..03fb4ebb55 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -253,9 +253,10 @@ bool ExtrusionLine::is_contour() const return poly.is_clockwise(); } -double ExtrusionLine::area() const -{ - assert(this->is_closed); +double ExtrusionLine::area() const { + if (!this->is_closed) + return 0.; + double a = 0.; if (this->junctions.size() >= 3) { Vec2d p1 = this->junctions.back().p.cast(); @@ -265,9 +266,25 @@ double ExtrusionLine::area() const p1 = p2; } } + return 0.5 * a; } +Points to_points(const ExtrusionLine &extrusion_line) { + Points points; + points.reserve(extrusion_line.junctions.size()); + for (const ExtrusionJunction &junction : extrusion_line.junctions) + points.emplace_back(junction.p); + return points; +} + +BoundingBox get_extents(const ExtrusionLine &extrusion_line) { + BoundingBox bbox; + for (const ExtrusionJunction &junction : extrusion_line.junctions) + bbox.merge(junction.p); + return bbox; +} + } // namespace Slic3r::Arachne namespace Slic3r { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index 11b9d005ba..fe021941a9 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -187,6 +187,8 @@ struct ExtrusionLine bool is_contour() const; double area() const; + + bool is_external_perimeter() const { return this->inset_idx == 0; } }; template @@ -213,6 +215,7 @@ static inline Slic3r::ThickPolyline to_thick_polyline(const PathType &path) static inline Polygon to_polygon(const ExtrusionLine &line) { Polygon out; + assert(line.is_closed); assert(line.junctions.size() >= 3); assert(line.junctions.front().p == line.junctions.back().p); out.points.reserve(line.junctions.size() - 1); @@ -221,24 +224,11 @@ static inline Polygon to_polygon(const ExtrusionLine &line) return out; } -static Points to_points(const ExtrusionLine &extrusion_line) -{ - Points points; - points.reserve(extrusion_line.junctions.size()); - for (const ExtrusionJunction &junction : extrusion_line.junctions) - points.emplace_back(junction.p); - return points; -} +Points to_points(const ExtrusionLine &extrusion_line); + +BoundingBox get_extents(const ExtrusionLine &extrusion_line); #if 0 -static BoundingBox get_extents(const ExtrusionLine &extrusion_line) -{ - BoundingBox bbox; - for (const ExtrusionJunction &junction : extrusion_line.junctions) - bbox.merge(junction.p); - return bbox; -} - static BoundingBox get_extents(const std::vector &extrusion_lines) { BoundingBox bbox; @@ -269,6 +259,8 @@ static std::vector to_points(const std::vector &e #endif using VariableWidthLines = std::vector; //; } // namespace Slic3r::Arachne diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 7781000f66..da4fb9c1df 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -434,6 +434,8 @@ set(lisbslic3r_sources Arachne/utils/PolygonsSegmentIndex.hpp Arachne/utils/PolylineStitcher.hpp Arachne/utils/PolylineStitcher.cpp + Arachne/PerimeterOrder.hpp + Arachne/PerimeterOrder.cpp Arachne/SkeletalTrapezoidation.hpp Arachne/SkeletalTrapezoidation.cpp Arachne/SkeletalTrapezoidationEdge.hpp diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 624a710902..5c142db471 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -9,6 +9,7 @@ #include "VariableWidth.hpp" #include "CurveAnalyzer.hpp" #include "Clipper2Utils.hpp" +#include "Arachne/PerimeterOrder.hpp" #include "Arachne/WallToolPaths.hpp" #include "Geometry/ConvexHull.hpp" #include "ExPolygonCollection.hpp" @@ -566,7 +567,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime for (const auto & r : fuzzified_regions) { BoundingBox bbox = get_extents(perimeter_generator.slices->surfaces); bbox.offset(scale_(1.)); - ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, loop.is_contour ? 0 : 1, loop.depth, i).c_str(), bbox); + ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, loop.is_contour() ? 0 : 1, loop.depth, i).c_str(), bbox); svg.draw_outline(perimeter_generator.slices->surfaces); svg.draw_outline(loop.polygon, "green"); svg.draw(r.second, "red", 0.5); @@ -876,13 +877,6 @@ static ClipperLib_Z::Paths clip_extrusion(const ClipperLib_Z::Path& subject, con return clipped_paths; } -struct PerimeterGeneratorArachneExtrusion -{ - Arachne::ExtrusionLine* extrusion = nullptr; - // Indicates if closed ExtrusionLine is a contour or a hole. Used it only when ExtrusionLine is a closed loop. - bool is_contour = false; -}; - static void smooth_overhang_level(ExtrusionPaths &paths) { @@ -967,7 +961,7 @@ static void smooth_overhang_level(ExtrusionPaths &paths) } } -static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, std::vector& pg_extrusions, +static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, Arachne::PerimeterOrder::PerimeterExtrusions& pg_extrusions, bool &steep_overhang_contour, bool &steep_overhang_hole) { // Detect steep overhangs @@ -975,34 +969,34 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p perimeter_generator.layer_id % 2 == 1; // Only calculate overhang degree on even (from GUI POV) layers ExtrusionEntityCollection extrusion_coll; - for (PerimeterGeneratorArachneExtrusion& pg_extrusion : pg_extrusions) { - Arachne::ExtrusionLine* extrusion = pg_extrusion.extrusion; - if (extrusion->empty()) + for (Arachne::PerimeterOrder::PerimeterExtrusion &pg_extrusion : pg_extrusions) { + Arachne::ExtrusionLine &extrusion = pg_extrusion.extrusion; + if (extrusion.empty()) continue; - const bool is_external = extrusion->inset_idx == 0; + const bool is_external = extrusion.inset_idx == 0; ExtrusionRole role = is_external ? erExternalPerimeter : erPerimeter; const auto& regions = perimeter_generator.regions_by_fuzzify; - const bool is_contour = !extrusion->is_closed || pg_extrusion.is_contour; + const bool is_contour = !extrusion.is_closed || pg_extrusion.is_contour(); if (regions.size() == 1) { // optimization const auto& config = regions.begin()->first; - const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); + const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion.inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion->junctions, config); + fuzzy_extrusion_line(extrusion.junctions, config); } else { // Find all affective regions std::vector> fuzzified_regions; fuzzified_regions.reserve(regions.size()); for (const auto& region : regions) { - if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion->inset_idx, is_contour)) { + if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion.inset_idx, is_contour)) { fuzzified_regions.emplace_back(region.first, region.second); } } if (!fuzzified_regions.empty()) { // Split the loops into lines with different config, and fuzzy them separately for (const auto& r : fuzzified_regions) { - const auto splitted = Algorithm::split_line(*extrusion, r.second, false); + const auto splitted = Algorithm::split_line(extrusion, r.second, false); if (splitted.empty()) { // No intersection, skip continue; @@ -1011,19 +1005,19 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion->junctions, r.first); + fuzzy_extrusion_line(extrusion.junctions, r.first); } else { - const auto current_ext = extrusion->junctions; + const auto current_ext = extrusion.junctions; std::vector segment; segment.reserve(current_ext.size()); - extrusion->junctions.clear(); + extrusion.junctions.clear(); - const auto fuzzy_current_segment = [&segment, extrusion, &r]() { - extrusion->junctions.push_back(segment.front()); + const auto fuzzy_current_segment = [&segment, &extrusion, &r]() { + extrusion.junctions.push_back(segment.front()); const auto back = segment.back(); fuzzy_extrusion_line(segment, r.first); - extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); - extrusion->junctions.push_back(back); + extrusion.junctions.insert(extrusion.junctions.end(), segment.begin(), segment.end()); + extrusion.junctions.push_back(back); segment.clear(); }; @@ -1040,7 +1034,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p segment.push_back(to_ex_junction(p)); } else { if (segment.empty()) { - extrusion->junctions.push_back(to_ex_junction(p)); + extrusion.junctions.push_back(to_ex_junction(p)); } else { segment.push_back(to_ex_junction(p)); fuzzy_current_segment(); @@ -1059,9 +1053,9 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // detect overhanging/bridging perimeters if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) { ClipperLib_Z::Path extrusion_path; - extrusion_path.reserve(extrusion->size()); + extrusion_path.reserve(extrusion.size()); BoundingBox extrusion_path_bbox; - for (const Arachne::ExtrusionJunction &ej : extrusion->junctions) { + for (const Arachne::ExtrusionJunction &ej : extrusion.junctions) { extrusion_path.emplace_back(ej.p.x(), ej.p.y(), ej.w); extrusion_path_bbox.merge(Point(ej.p.x(), ej.p.y())); } @@ -1091,7 +1085,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Always reverse extrusion if use fuzzy skin: https://github.com/SoftFever/OrcaSlicer/pull/2413#issuecomment-1769735357 if (overhangs_reverse && perimeter_generator.has_fuzzy_skin) { - if (pg_extrusion.is_contour) { + if (pg_extrusion.is_contour()) { steep_overhang_contour = true; } else if (perimeter_generator.has_fuzzy_hole) { steep_overhang_hole = true; @@ -1099,7 +1093,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p } // Detect steep overhang // Skip the check if we already found steep overhangs - bool found_steep_overhang = (pg_extrusion.is_contour && steep_overhang_contour) || (!pg_extrusion.is_contour && steep_overhang_hole); + bool found_steep_overhang = (pg_extrusion.is_contour() && steep_overhang_contour) || (!pg_extrusion.is_contour() && steep_overhang_hole); if (overhangs_reverse && !found_steep_overhang) { std::map recognization_paths; for (const ExtrusionPath &path : temp_paths) { @@ -1117,7 +1111,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p BoundingBox extrusion_bboxs = get_extents(be_clipped); - if (detect_steep_overhang(perimeter_generator.config, pg_extrusion.is_contour, extrusion_bboxs, it.first, be_clipped, perimeter_generator.lower_slices, + if (detect_steep_overhang(perimeter_generator.config, pg_extrusion.is_contour(), extrusion_bboxs, it.first, be_clipped, perimeter_generator.lower_slices, steep_overhang_contour, steep_overhang_hole)) { break; } @@ -1185,7 +1179,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Arachne sometimes creates extrusion with zero-length (just two same endpoints); if (!paths.empty()) { Point start_point = paths.front().first_point(); - if (!extrusion->is_closed) { + if (!extrusion.is_closed) { // Especially for open extrusion, we need to select a starting point that is at the start // or the end of the extrusions to make one continuous line. Also, we prefer a non-overhang // starting point. @@ -1225,7 +1219,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (overhangs_reverse) { for (const ExtrusionPath& path : paths) { if (path.role() == erOverhangPerimeter) { - if (pg_extrusion.is_contour) + if (pg_extrusion.is_contour()) steep_overhang_contour = true; else steep_overhang_hole = true; @@ -1242,13 +1236,13 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p steep_overhang_hole = true; } - extrusion_paths_append(paths, *extrusion, role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); + extrusion_paths_append(paths, extrusion, role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); } // Append paths to collection. if (!paths.empty()) { - if (extrusion->is_closed) { - ExtrusionLoop extrusion_loop(std::move(paths), pg_extrusion.is_contour ? elrDefault : elrHole); + if (extrusion.is_closed) { + ExtrusionLoop extrusion_loop(std::move(paths), pg_extrusion.is_contour() ? elrDefault : elrHole); extrusion_loop.make_counter_clockwise(); // TODO: it seems in practice that ExtrusionLoops occasionally have significantly disconnected paths, // triggering the asserts below. Is this a problem? @@ -1883,6 +1877,516 @@ static void group_region_by_fuzzify(PerimeterGenerator& g) } } + +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions +/** + * @brief Finds all perimeters touching a given set of reference lines, given as indexes. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndices A set of indices representing the reference points. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @param considered_inset_idx What perimeter inset index are we searching for (eg. if we are searching for first internal perimeters proximate to the current reference perimeter, this value should be set to 1 etc). + * @return std::vector A vector of indices representing the touching perimeters. + */ +std::vector findAllTouchingPerimeters(const Arachne::PerimeterOrder::PerimeterExtrusions& entities, const std::unordered_set& referenceIndices, size_t threshold_external, size_t threshold_internal , size_t considered_inset_idx) { + std::unordered_set touchingIndices; + + for (const int refIdx : referenceIndices) { + const auto& referenceEntity = entities[refIdx]; + Points referencePoints = Arachne::to_points(referenceEntity.extrusion); + for (size_t i = 0; i < entities.size(); ++i) { + // Skip already considered references and the reference entity + if (referenceIndices.count(i) > 0) continue; + const auto& entity = entities[i]; + if (entity.extrusion.is_external_perimeter()) continue; // Ignore inset index 0 (external) perimeters from the re-ordering even if they are touching + + if (entity.extrusion.inset_idx != considered_inset_idx) { // Find Inset index perimeters that match the requested inset index + continue; // skip if they dont match + } + + Points points = Arachne::to_points(entity.extrusion); + double distance = MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(referencePoints, points); + // Add to touchingIndices if within threshold distance + size_t threshold=0; + if(referenceEntity.extrusion.is_external_perimeter()) + threshold = threshold_external; + else + threshold = threshold_internal; + if (distance <= threshold) { + touchingIndices.insert(i); + } + } + } + return std::vector(touchingIndices.begin(), touchingIndices.end()); +} + +/** + * @brief Reorders perimeters based on proximity to the reference perimeter + * + * This approach finds all perimeters touching the external perimeter first and then finds all perimeters touching these new ones until none are left + * It ensures a level-by-level traversal, similar to BFS in graph theory. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndex The index of the reference perimeter. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @return Arachne::PerimeterOrder::PerimeterExtrusions The reordered list of perimeters based on proximity. + */ +Arachne::PerimeterOrder::PerimeterExtrusions reorderPerimetersByProximity(Arachne::PerimeterOrder::PerimeterExtrusions entities, size_t threshold_external, size_t threshold_internal) { + Arachne::PerimeterOrder::PerimeterExtrusions reordered; + std::unordered_set includedIndices; + + // Function to reorder perimeters starting from a given reference index + auto reorderFromReference = [&](int referenceIndex) { + std::unordered_set firstLevelIndices; + firstLevelIndices.insert(referenceIndex); + + // Find first level touching perimeters + std::vector firstLevelTouchingIndices = findAllTouchingPerimeters(entities, firstLevelIndices, threshold_external, threshold_internal, 1); + // Bring the largest first level perimeter to the front + // The longest first neighbour is most likely the dominant proximate perimeter + // hence printing it immediately after the external perimeter should speed things up + if (!firstLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion.getLength() < entities[b].extrusion.getLength(); + }); + std::iter_swap(maxIt, firstLevelTouchingIndices.end() - 1); + } + // Insert first level perimeters into reordered list + reordered.push_back(entities[referenceIndex]); + includedIndices.insert(referenceIndex); + + for (int idx : firstLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Loop through all inset indices above 1 + size_t currentInsetIndex = 2; + while (true) { + std::unordered_set currentLevelIndices(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end()); + std::vector currentLevelTouchingIndices = findAllTouchingPerimeters(entities, currentLevelIndices, threshold_external, threshold_internal, currentInsetIndex); + + // Break if no more touching perimeters are found + if (currentLevelTouchingIndices.empty()) { + break; + } + + // Exclude any already included indices from the current level touching indices + currentLevelTouchingIndices.erase( + std::remove_if(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), + [&](int idx) { return includedIndices.count(idx) > 0; }), + currentLevelTouchingIndices.end()); + + // Bring the largest current level perimeter to the end + if (!currentLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion.getLength() < entities[b].extrusion.getLength(); + }); + std::iter_swap(maxIt, currentLevelTouchingIndices.begin()); + } + + // Insert current level perimeters into reordered list + for (int idx : currentLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Prepare for the next level + firstLevelTouchingIndices = currentLevelTouchingIndices; + currentInsetIndex++; + } + }; + + // Loop through all perimeters and reorder starting from each inset index 0 perimeter + for (size_t refIdx = 0; refIdx < entities.size(); ++refIdx) { + if (entities[refIdx].extrusion.is_external_perimeter() && includedIndices.count(refIdx) == 0) { + reorderFromReference(refIdx); + } + } + + // Append any remaining entities that were not included + for (size_t i = 0; i < entities.size(); ++i) { + if (includedIndices.count(i) == 0) { + reordered.push_back(entities[i]); + } + } + + return reordered; +} + +/** + * @brief Reorders the vector to bring external perimeter (i.e. paths with inset index 0) that are also contours (i.e. external facing lines) to the front. + * + * This function uses a stable partition to move all external perimeter contour elements to the front of the vector, + * while maintaining the relative order of non-contour elements. + * + * @param ordered_extrusions The vector of PerimeterGeneratorArachneExtrusion to reorder. + */ +void bringContoursToFront(Arachne::PerimeterOrder::PerimeterExtrusions& ordered_extrusions) { + std::stable_partition(ordered_extrusions.begin(), ordered_extrusions.end(), [](const Arachne::PerimeterOrder::PerimeterExtrusion& extrusion) { + return (extrusion.extrusion.is_contour() && extrusion.extrusion.is_external_perimeter()); + }); +} +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions ended + +// Thanks, Cura developers, for implementing an algorithm for generating perimeters with variable width (Arachne) that is based on the paper +// "A framework for adaptive width control of dense contour-parallel toolpaths in fused deposition modeling" +void PerimeterGenerator::process_arachne() +{ + group_region_by_fuzzify(*this); + + // other perimeters + m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); + coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing(); + + // external perimeters + m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm(); + coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width(); + coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); + coord_t ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing())); + // overhang perimeters + m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); + + // solid infill + coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); + + // prepare grown lower layer slices for overhang detection + if (this->lower_slices != nullptr && this->config->detect_overhang_wall) { + // We consider overhang any part where the entire nozzle diameter is not supported by the + // lower layer, so we take lower slices and offset them by half the nozzle diameter used + // in the current layer + double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->wall_filament - 1); + m_lower_slices_polygons = offset(*this->lower_slices, float(scale_(+nozzle_diameter / 2))); + } + + Surfaces all_surfaces = this->slices->surfaces; + + process_no_bridge(all_surfaces, perimeter_spacing, ext_perimeter_width); + // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled + double surface_simplify_resolution = (print_config->enable_arc_fitting && !this->has_fuzzy_skin) ? 0.2 * m_scaled_resolution : m_scaled_resolution; + // we need to process each island separately because we might have different + // extra perimeters for each one + for (const Surface& surface : all_surfaces) { + 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 + int sparse_infill_density = this->config->sparse_infill_density.value; + if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase && sparse_infill_density > 0) // add alternating extra wall + loop_number++; + + // Set the bottommost layer to be one wall + const bool is_bottom_layer = (this->layer_id == object_config->raft_layers) ? true : false; + if (is_bottom_layer && this->config->only_one_wall_first_layer) + loop_number = 0; + + // Orca: set the topmost layer to be one wall according to the config + const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false; + if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top) + loop_number = 0; + + auto apply_precise_outer_wall = config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter; + // Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled. + ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), + apply_precise_outer_wall? -float(ext_perimeter_width - ext_perimeter_spacing ) + : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); + + Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config); + // Set params is_top_or_bottom_layer for adjusting short-wall removal sensitivity. + input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false; + + coord_t wall_0_inset = 0; + if (apply_precise_outer_wall) + wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2); + + //PS: One wall top surface for Arachne + ExPolygons top_expolygons; + // Calculate how many inner loops remain when TopSurfaces is selected. + const int inner_loop_number = (config->only_one_wall_top && upper_slices != nullptr) ? loop_number - 1 : -1; + + // Set one perimeter when TopSurfaces is selected. + if (config->only_one_wall_top) + loop_number = 0; + + Arachne::WallToolPathsParams input_params_tmp = input_params; + + Polygons last_p = to_polygons(last); + Arachne::WallToolPaths wall_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(loop_number + 1), + wall_0_inset, layer_height, input_params_tmp); + Arachne::Perimeters perimeters = wall_tool_paths.getToolPaths(); + ExPolygons infill_contour = union_ex(wall_tool_paths.getInnerContour()); + + // Check if there are some remaining perimeters to generate (the number of perimeters + // is greater than one together with enabled the single perimeter on top surface feature). + if (inner_loop_number >= 0) { + assert(upper_slices != nullptr); + + // Infill contour bounding box. + BoundingBox infill_contour_bbox = get_extents(infill_contour); + infill_contour_bbox.offset(SCALED_EPSILON); + + coord_t perimeter_width = this->perimeter_flow.scaled_width(); + + // Get top ExPolygons from current infill contour. + Polygons upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); + top_expolygons = diff_ex(infill_contour, upper_slices_clipped); + + if (!top_expolygons.empty()) { + if (lower_slices != nullptr) { + const float bridge_offset = float(std::max(ext_perimeter_spacing, perimeter_width)); + const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, infill_contour_bbox); + const ExPolygons current_slices_bridges = offset_ex(diff_ex(top_expolygons, lower_slices_clipped), bridge_offset); + + // Remove bridges from top surface polygons. + top_expolygons = diff_ex(top_expolygons, current_slices_bridges); + } + + // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. + // ORCA: skip if the top surface area is smaller than "min_width_top_surface" + const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); + // Shrink the polygon to remove the small areas, then expand it back out plus a maragin to hide the wall line a little. + // ORCA: Expand the polygon with half the perimeter width in addition to the contracted amount, + // not the full perimeter width as PS does, to enable thin lettering to print on the top surface without nozzle collisions + // due to thin lines being generated + top_expolygons = offset2_ex(top_expolygons, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); + + // Get the not-top ExPolygons (including bridges) from current slices and expanded real top ExPolygons (without bridges). + const ExPolygons not_top_expolygons = diff_ex(infill_contour, top_expolygons); + + // Get final top ExPolygons. + top_expolygons = intersection_ex(top_expolygons, infill_contour); + + const Polygons not_top_polygons = to_polygons(not_top_expolygons); + Arachne::WallToolPaths inner_wall_tool_paths(not_top_polygons, perimeter_spacing, perimeter_spacing, coord_t(inner_loop_number + 1), 0, layer_height, input_params_tmp); + Arachne::Perimeters inner_perimeters = inner_wall_tool_paths.getToolPaths(); + + // Recalculate indexes of inner perimeters before merging them. + if (!perimeters.empty()) { + for (Arachne::VariableWidthLines &inner_perimeter : inner_perimeters) { + if (inner_perimeter.empty()) + continue; + for (Arachne::ExtrusionLine &el : inner_perimeter) + ++el.inset_idx; + } + } + + perimeters.insert(perimeters.end(), inner_perimeters.begin(), inner_perimeters.end()); + infill_contour = union_ex(top_expolygons, inner_wall_tool_paths.getInnerContour()); + } else { + // There is no top surface ExPolygon, so we call Arachne again with parameters + // like when the single perimeter feature is disabled. + Arachne::WallToolPaths no_single_perimeter_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); + perimeters = no_single_perimeter_tool_paths.getToolPaths(); + infill_contour = union_ex(no_single_perimeter_tool_paths.getInnerContour()); + } + } + //PS + + loop_number = int(perimeters.size()) - 1; + +#ifdef ARACHNE_DEBUG + { + static int iRun = 0; + export_perimeters_to_svg(debug_out_path("arachne-perimeters-%d-%d.svg", params.layer_id, iRun++), to_polygons(last), perimeters, union_ex(wallToolPaths.getInnerContour())); + } +#endif + + // All closed ExtrusionLine should have the same the first and the last point. + // But in rare cases, Arachne produce ExtrusionLine marked as closed but without + // equal the first and the last point. + assert([&perimeters = std::as_const(perimeters)]() -> bool { + for (const Arachne::Perimeter& perimeter : perimeters) + for (const Arachne::ExtrusionLine& el : perimeter) + if (el.is_closed && el.junctions.front().p != el.junctions.back().p) + return false; + return true; + }()); + + bool is_outer_wall_first = + this->config->wall_sequence == WallSequence::OuterInner || + this->config->wall_sequence == WallSequence::InnerOuterInner; + + if (layer_id == 0){ // disable inner outer inner algorithm after the first layer + is_outer_wall_first = + this->config->wall_sequence == WallSequence::OuterInner; + } + Arachne::PerimeterOrder::PerimeterExtrusions ordered_extrusions = Arachne::PerimeterOrder::ordered_perimeter_extrusions(perimeters, is_outer_wall_first); + + // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer + if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer + if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering + int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. + int arr_i, arr_j = 0; // indexes to run through the walls in the for loops + int outer, first_internal, second_internal, max_internal, current_perimeter; // allocate index values + + // To address any remaining scenarios where the outer perimeter contour is not first on the list as arachne sometimes reorders the perimeters when clustering + // for OI mode that is used the basis for IOI + bringContoursToFront(ordered_extrusions); + Arachne::PerimeterOrder::PerimeterExtrusions reordered_extrusions; + + // Debug statement to print spacing values: + //printf("External threshold - Ext perimeter: %d Ext spacing: %d Int perimeter: %d Int spacing: %d\n", this->ext_perimeter_flow.scaled_width(),this->ext_perimeter_flow.scaled_spacing(),this->perimeter_flow.scaled_width(), this->perimeter_flow.scaled_spacing()); + + // Get searching thresholds. For an external perimeter we take the external perimeter spacing/2 plus the internal perimeter spacing/2 and expand by 3% to cover + // rounding errors + coord_t threshold_external = (this->ext_perimeter_flow.scaled_spacing()/2 + this->perimeter_flow.scaled_spacing()/2)*1.03; + + // For the intenal perimeter threshold, the distance is the internal perimeter spacing expanded by 3% to cover rounding errors. + coord_t threshold_internal = this->perimeter_flow.scaled_spacing() * 1.03; + + // Re-order extrusions based on distance + // Alorithm will aggresively optimise for the appearance of the outermost perimeter + ordered_extrusions = reorderPerimetersByProximity(ordered_extrusions,threshold_external,threshold_internal ); + reordered_extrusions = ordered_extrusions; // copy them into the reordered extrusions vector to allow for IOI operations to be performed below without altering the base ordered extrusions list. + + // Now start the sandwich mode wall re-ordering using the reordered_extrusions as the basis + // scan to find the external perimeter, first internal, second internal and last perimeter in the island. + // We then advance the position index to move to the second island and continue until there are no more + // perimeters left. + while (position < reordered_extrusions.size()) { + outer = first_internal = second_internal = current_perimeter = -1; // initialise all index values to -1 + max_internal = reordered_extrusions.size()-1; // initialise the maximum internal perimeter to the last perimeter on the extrusion list + // run through the walls to get the index values that need re-ordering until the first one for each + // is found. Start at "position" index to enable the for loop to iterate for multiple external + // perimeters in a single island + // printf("Reorder Loop. Position %d, extrusion list size: %d, Outer index %d, inner index %d, second inner index %d\n", position, reordered_extrusions.size(),outer,first_internal,second_internal); + for (arr_i = position; arr_i < reordered_extrusions.size(); ++arr_i) { + // printf("Perimeter: extrusion inset index %d, ordered extrusions array position %d\n",reordered_extrusions[arr_i].extrusion->inset_idx, arr_i); + switch (reordered_extrusions[arr_i].extrusion.inset_idx) { + case 0: // external perimeter + if (outer == -1) + outer = arr_i; + break; + case 1: // first internal wall + if (first_internal==-1 && arr_i>outer && outer!=-1){ + first_internal = arr_i; + } + break; + case 2: // second internal wall + if (second_internal == -1 && arr_i > first_internal && outer!=-1){ + second_internal = arr_i; + } + break; + } + if(outer >-1 && first_internal>-1 && reordered_extrusions[arr_i].extrusion.is_external_perimeter()){ // found a new external perimeter after we've found at least a first internal perimeter to re-order. + // This means we entered a new island. + arr_i=arr_i-1; //step back one perimeter + max_internal = arr_i; // new maximum internal perimeter is now this as we have found a new external perimeter, hence a new island. + break; // exit the for loop + } + } + + // printf("Layer ID %d, Outer index %d, inner index %d, second inner index %d, maximum internal perimeter %d \n",layer_id,outer,first_internal,second_internal, max_internal); + if (outer > -1 && first_internal > -1 && second_internal > -1) { // found all three perimeters to re-order? If not the perimeters will be processed outside in. + Arachne::PerimeterOrder::PerimeterExtrusions inner_outer_extrusions; // temporary array to hold extrusions for reordering + inner_outer_extrusions.resize(max_internal - position + 1, Arachne::PerimeterOrder::PerimeterExtrusion{{},0.0,{},{}}); // reserve array containing the number of perimeters before a new island. Variables are array indexes hence need to add +1 to convert to position allocations + // printf("Allocated array size %d, max_internal index %d, start position index %d \n",max_internal-position+1,max_internal,position); + + for (arr_j = max_internal; arr_j >=position; --arr_j){ // go inside out towards the external perimeter (perimeters in reverse order) and store all internal perimeters until the first one identified with inset index 2 + if(arr_j >= second_internal){ + //printf("Inside out loop: Mapped perimeter index %d to array position %d\n", arr_j, max_internal-arr_j); + inner_outer_extrusions[max_internal-arr_j] = reordered_extrusions[arr_j]; + current_perimeter++; + } + } + + for (arr_j = position; arr_j < second_internal; ++arr_j){ // go outside in and map the remaining perimeters (external and first internal wall(s)) using the outside in wall order + // printf("Outside in loop: Mapped perimeter index %d to array position %d\n", arr_j, current_perimeter+1); + inner_outer_extrusions[++current_perimeter] = reordered_extrusions[arr_j]; + } + + for(arr_j = position; arr_j <= max_internal; ++arr_j) // replace perimeter array with the new re-ordered array + ordered_extrusions[arr_j] = inner_outer_extrusions[arr_j-position]; + } + // go to the next perimeter from the current position to continue scanning for external walls in the same island + position = arr_i + 1; + } + } + } + + bool steep_overhang_contour = false; + bool steep_overhang_hole = false; + const WallDirection wall_direction = config->wall_direction; + if (wall_direction != WallDirection::Auto) { + // Skip steep overhang detection if wall direction is specified + steep_overhang_contour = true; + steep_overhang_hole = true; + } + if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions, steep_overhang_contour, steep_overhang_hole); !extrusion_coll.empty()) { + // All walls are counter-clockwise initially, so we don't need to reorient it if that's what we want + if (wall_direction != WallDirection::CounterClockwise) { + reorient_perimeters(extrusion_coll, steep_overhang_contour, steep_overhang_hole, + // Reverse internal only if the wall direction is auto + this->config->overhang_reverse_internal_only && wall_direction == WallDirection::Auto); + } + this->loops->append(extrusion_coll); + } + + const coord_t spacing = (perimeters.size() == 1) ? ext_perimeter_spacing2 : perimeter_spacing; + + if (offset_ex(infill_contour, -float(spacing / 2.)).empty()) + infill_contour.clear(); // Infill region is too small, so let's filter it out. + + // create one more offset to be used as boundary for fill + // we offset by half the perimeter spacing (to get to the actual infill boundary) + // and then we offset back and forth by half the infill spacing to only consider the + // non-collapsing regions + coord_t inset = + (loop_number < 0) ? 0 : + (loop_number == 0) ? + // one loop + ext_perimeter_spacing : + // two or more loops? + perimeter_spacing; + coord_t top_inset = inset; + + top_inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + if(is_topmost_layer || is_bottom_layer) + inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + else + inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); + + // simplify infill contours according to resolution + Polygons pp; + for (ExPolygon& ex : infill_contour) + ex.simplify_p(m_scaled_resolution, &pp); + ExPolygons not_filled_exp = union_ex(pp); + // collapse too narrow infill areas + const auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE)); + + ExPolygons infill_exp = offset2_ex( + not_filled_exp, + float(-min_perimeter_infill_spacing / 2.), + float(inset + min_perimeter_infill_spacing / 2.)); + // append infill areas to fill_surfaces + if (!top_expolygons.empty()) { + infill_exp = union_ex(infill_exp, offset_ex(top_expolygons, double(top_inset))); + } + this->fill_surfaces->append(infill_exp, stInternal); + + apply_extra_perimeters(infill_exp); + + // BBS: get the no-overlap infill expolygons + { + ExPolygons polyWithoutOverlap; + polyWithoutOverlap = offset2_ex( + not_filled_exp, + float(-min_perimeter_infill_spacing / 2.), + float(+min_perimeter_infill_spacing / 2.)); + if (!top_expolygons.empty()) + polyWithoutOverlap = union_ex(polyWithoutOverlap, top_expolygons); + this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); + } + } +} + void PerimeterGenerator::process_classic() { group_region_by_fuzzify(*this); @@ -2683,603 +3187,6 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim } } -// ORCA: -// Inner Outer Inner wall ordering mode perimeter order optimisation functions -/** - * @brief Finds all perimeters touching a given set of reference lines, given as indexes. - * - * @param entities The list of PerimeterGeneratorArachneExtrusion entities. - * @param referenceIndices A set of indices representing the reference points. - * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 - * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ - * @param considered_inset_idx What perimeter inset index are we searching for (eg. if we are searching for first internal perimeters proximate to the current reference perimeter, this value should be set to 1 etc). - * @return std::vector A vector of indices representing the touching perimeters. - */ -std::vector findAllTouchingPerimeters(const std::vector& entities, const std::unordered_set& referenceIndices, size_t threshold_external, size_t threshold_internal , size_t considered_inset_idx) { - std::unordered_set touchingIndices; - - for (const int refIdx : referenceIndices) { - const auto& referenceEntity = entities[refIdx]; - Points referencePoints = Arachne::to_points(*referenceEntity.extrusion); - for (size_t i = 0; i < entities.size(); ++i) { - // Skip already considered references and the reference entity - if (referenceIndices.count(i) > 0) continue; - const auto& entity = entities[i]; - if (entity.extrusion->inset_idx == 0) continue; // Ignore inset index 0 (external) perimeters from the re-ordering even if they are touching - - if (entity.extrusion->inset_idx != considered_inset_idx) { // Find Inset index perimeters that match the requested inset index - continue; // skip if they dont match - } - - Points points = Arachne::to_points(*entity.extrusion); - double distance = MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(referencePoints, points); - // Add to touchingIndices if within threshold distance - size_t threshold=0; - if(referenceEntity.extrusion->inset_idx == 0) - threshold = threshold_external; - else - threshold = threshold_internal; - if (distance <= threshold) { - touchingIndices.insert(i); - } - } - } - return std::vector(touchingIndices.begin(), touchingIndices.end()); -} - -/** - * @brief Reorders perimeters based on proximity to the reference perimeter - * - * This approach finds all perimeters touching the external perimeter first and then finds all perimeters touching these new ones until none are left - * It ensures a level-by-level traversal, similar to BFS in graph theory. - * - * @param entities The list of PerimeterGeneratorArachneExtrusion entities. - * @param referenceIndex The index of the reference perimeter. - * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 - * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ - * @return std::vector The reordered list of perimeters based on proximity. - */ -std::vector reorderPerimetersByProximity(std::vector entities, size_t threshold_external, size_t threshold_internal) { - std::vector reordered; - std::unordered_set includedIndices; - - // Function to reorder perimeters starting from a given reference index - auto reorderFromReference = [&](int referenceIndex) { - std::unordered_set firstLevelIndices; - firstLevelIndices.insert(referenceIndex); - - // Find first level touching perimeters - std::vector firstLevelTouchingIndices = findAllTouchingPerimeters(entities, firstLevelIndices, threshold_external, threshold_internal, 1); - // Bring the largest first level perimeter to the front - // The longest first neighbour is most likely the dominant proximate perimeter - // hence printing it immediately after the external perimeter should speed things up - if (!firstLevelTouchingIndices.empty()) { - auto maxIt = std::max_element(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end(), [&entities](int a, int b) { - return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); - }); - std::iter_swap(maxIt, firstLevelTouchingIndices.end() - 1); - } - // Insert first level perimeters into reordered list - reordered.push_back(entities[referenceIndex]); - includedIndices.insert(referenceIndex); - - for (int idx : firstLevelTouchingIndices) { - if (includedIndices.count(idx) == 0) { - reordered.push_back(entities[idx]); - includedIndices.insert(idx); - } - } - - // Loop through all inset indices above 1 - size_t currentInsetIndex = 2; - while (true) { - std::unordered_set currentLevelIndices(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end()); - std::vector currentLevelTouchingIndices = findAllTouchingPerimeters(entities, currentLevelIndices, threshold_external, threshold_internal, currentInsetIndex); - - // Break if no more touching perimeters are found - if (currentLevelTouchingIndices.empty()) { - break; - } - - // Exclude any already included indices from the current level touching indices - currentLevelTouchingIndices.erase( - std::remove_if(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), - [&](int idx) { return includedIndices.count(idx) > 0; }), - currentLevelTouchingIndices.end()); - - // Bring the largest current level perimeter to the end - if (!currentLevelTouchingIndices.empty()) { - auto maxIt = std::max_element(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), [&entities](int a, int b) { - return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); - }); - std::iter_swap(maxIt, currentLevelTouchingIndices.begin()); - } - - // Insert current level perimeters into reordered list - for (int idx : currentLevelTouchingIndices) { - if (includedIndices.count(idx) == 0) { - reordered.push_back(entities[idx]); - includedIndices.insert(idx); - } - } - - // Prepare for the next level - firstLevelTouchingIndices = currentLevelTouchingIndices; - currentInsetIndex++; - } - }; - - // Loop through all perimeters and reorder starting from each inset index 0 perimeter - for (size_t refIdx = 0; refIdx < entities.size(); ++refIdx) { - if (entities[refIdx].extrusion->inset_idx == 0 && includedIndices.count(refIdx) == 0) { - reorderFromReference(refIdx); - } - } - - // Append any remaining entities that were not included - for (size_t i = 0; i < entities.size(); ++i) { - if (includedIndices.count(i) == 0) { - reordered.push_back(entities[i]); - } - } - - return reordered; -} - -/** - * @brief Reorders the vector to bring external perimeter (i.e. paths with inset index 0) that are also contours (i.e. external facing lines) to the front. - * - * This function uses a stable partition to move all external perimeter contour elements to the front of the vector, - * while maintaining the relative order of non-contour elements. - * - * @param ordered_extrusions The vector of PerimeterGeneratorArachneExtrusion to reorder. - */ -void bringContoursToFront(std::vector& ordered_extrusions) { - std::stable_partition(ordered_extrusions.begin(), ordered_extrusions.end(), [](const PerimeterGeneratorArachneExtrusion& extrusion) { - return (extrusion.extrusion->is_contour() && extrusion.extrusion->inset_idx==0); - }); -} -// ORCA: -// Inner Outer Inner wall ordering mode perimeter order optimisation functions ended - - -// Thanks, Cura developers, for implementing an algorithm for generating perimeters with variable width (Arachne) that is based on the paper -// "A framework for adaptive width control of dense contour-parallel toolpaths in fused deposition modeling" -void PerimeterGenerator::process_arachne() -{ - group_region_by_fuzzify(*this); - - // other perimeters - m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); - coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing(); - - // external perimeters - m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm(); - coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width(); - coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); - coord_t ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing())); - // overhang perimeters - m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); - - // solid infill - coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); - - // prepare grown lower layer slices for overhang detection - if (this->lower_slices != nullptr && this->config->detect_overhang_wall) { - // We consider overhang any part where the entire nozzle diameter is not supported by the - // lower layer, so we take lower slices and offset them by half the nozzle diameter used - // in the current layer - double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->wall_filament - 1); - m_lower_slices_polygons = offset(*this->lower_slices, float(scale_(+nozzle_diameter / 2))); - } - - Surfaces all_surfaces = this->slices->surfaces; - - process_no_bridge(all_surfaces, perimeter_spacing, ext_perimeter_width); - // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled - double surface_simplify_resolution = (print_config->enable_arc_fitting && !this->has_fuzzy_skin) ? 0.2 * m_scaled_resolution : m_scaled_resolution; - // we need to process each island separately because we might have different - // extra perimeters for each one - for (const Surface& surface : all_surfaces) { - 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 - int sparse_infill_density = this->config->sparse_infill_density.value; - if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase && sparse_infill_density > 0) // add alternating extra wall - loop_number++; - - // Set the bottommost layer to be one wall - const bool is_bottom_layer = (this->layer_id == object_config->raft_layers) ? true : false; - if (is_bottom_layer && this->config->only_one_wall_first_layer) - loop_number = 0; - - // Orca: set the topmost layer to be one wall according to the config - const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false; - if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top) - loop_number = 0; - - auto apply_precise_outer_wall = config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter; - // Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled. - ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), - apply_precise_outer_wall? -float(ext_perimeter_width - ext_perimeter_spacing ) - : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); - - Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config); - // Set params is_top_or_bottom_layer for adjusting short-wall removal sensitivity. - input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false; - - coord_t wall_0_inset = 0; - if (apply_precise_outer_wall) - wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2); - - //PS: One wall top surface for Arachne - ExPolygons top_expolygons; - // Calculate how many inner loops remain when TopSurfaces is selected. - const int inner_loop_number = (config->only_one_wall_top && upper_slices != nullptr) ? loop_number - 1 : -1; - - // Set one perimeter when TopSurfaces is selected. - if (config->only_one_wall_top) - loop_number = 0; - - Arachne::WallToolPathsParams input_params_tmp = input_params; - - Polygons last_p = to_polygons(last); - Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, perimeter_spacing, coord_t(loop_number + 1), - wall_0_inset, layer_height, input_params_tmp); - std::vector perimeters = wallToolPaths.getToolPaths(); - ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); - - // Check if there are some remaining perimeters to generate (the number of perimeters - // is greater than one together with enabled the single perimeter on top surface feature). - if (inner_loop_number >= 0) { - assert(upper_slices != nullptr); - - // Infill contour bounding box. - BoundingBox infill_contour_bbox = get_extents(infill_contour); - infill_contour_bbox.offset(SCALED_EPSILON); - - coord_t perimeter_width = this->perimeter_flow.scaled_width(); - - // Get top ExPolygons from current infill contour. - Polygons upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); - top_expolygons = diff_ex(infill_contour, upper_slices_clipped); - - if (!top_expolygons.empty()) { - if (lower_slices != nullptr) { - const float bridge_offset = float(std::max(ext_perimeter_spacing, perimeter_width)); - const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, infill_contour_bbox); - const ExPolygons current_slices_bridges = offset_ex(diff_ex(top_expolygons, lower_slices_clipped), bridge_offset); - - // Remove bridges from top surface polygons. - top_expolygons = diff_ex(top_expolygons, current_slices_bridges); - } - - // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. - // ORCA: skip if the top surface area is smaller than "min_width_top_surface" - const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); - // Shrink the polygon to remove the small areas, then expand it back out plus a maragin to hide the wall line a little. - // ORCA: Expand the polygon with half the perimeter width in addition to the contracted amount, - // not the full perimeter width as PS does, to enable thin lettering to print on the top surface without nozzle collisions - // due to thin lines being generated - top_expolygons = offset2_ex(top_expolygons, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); - - // Get the not-top ExPolygons (including bridges) from current slices and expanded real top ExPolygons (without bridges). - const ExPolygons not_top_expolygons = diff_ex(infill_contour, top_expolygons); - - // Get final top ExPolygons. - top_expolygons = intersection_ex(top_expolygons, infill_contour); - - const Polygons not_top_polygons = to_polygons(not_top_expolygons); - Arachne::WallToolPaths inner_wall_tool_paths(not_top_polygons, perimeter_spacing, perimeter_spacing, coord_t(inner_loop_number + 1), 0, layer_height, input_params_tmp); - std::vector inner_perimeters = inner_wall_tool_paths.getToolPaths(); - - // Recalculate indexes of inner perimeters before merging them. - if (!perimeters.empty()) { - for (Arachne::VariableWidthLines &inner_perimeter : inner_perimeters) { - if (inner_perimeter.empty()) - continue; - for (Arachne::ExtrusionLine &el : inner_perimeter) - ++el.inset_idx; - } - } - - perimeters.insert(perimeters.end(), inner_perimeters.begin(), inner_perimeters.end()); - infill_contour = union_ex(top_expolygons, inner_wall_tool_paths.getInnerContour()); - } else { - // There is no top surface ExPolygon, so we call Arachne again with parameters - // like when the single perimeter feature is disabled. - Arachne::WallToolPaths no_single_perimeter_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); - perimeters = no_single_perimeter_tool_paths.getToolPaths(); - infill_contour = union_ex(no_single_perimeter_tool_paths.getInnerContour()); - } - } - //PS - - loop_number = int(perimeters.size()) - 1; - - #ifdef ARACHNE_DEBUG - { - static int iRun = 0; - export_perimeters_to_svg(debug_out_path("arachne-perimeters-%d-%d.svg", layer_id, iRun++), to_polygons(last), perimeters, union_ex(wallToolPaths.getInnerContour())); - } -#endif - - // All closed ExtrusionLine should have the same the first and the last point. - // But in rare cases, Arachne produce ExtrusionLine marked as closed but without - // equal the first and the last point. - assert([&perimeters = std::as_const(perimeters)]() -> bool { - for (const Arachne::VariableWidthLines& perimeter : perimeters) - for (const Arachne::ExtrusionLine& el : perimeter) - if (el.is_closed && el.junctions.front().p != el.junctions.back().p) - return false; - return true; - }()); - - int start_perimeter = int(perimeters.size()) - 1; - int end_perimeter = -1; - int direction = -1; - - bool is_outer_wall_first = - this->config->wall_sequence == WallSequence::OuterInner || - this->config->wall_sequence == WallSequence::InnerOuterInner; - - if (layer_id == 0){ // disable inner outer inner algorithm after the first layer - is_outer_wall_first = - this->config->wall_sequence == WallSequence::OuterInner; - } - if (is_outer_wall_first) { - start_perimeter = 0; - end_perimeter = int(perimeters.size()); - direction = 1; - } - - std::vector all_extrusions; - for (int perimeter_idx = start_perimeter; perimeter_idx != end_perimeter; perimeter_idx += direction) { - if (perimeters[perimeter_idx].empty()) - continue; - for (Arachne::ExtrusionLine& wall : perimeters[perimeter_idx]) - all_extrusions.emplace_back(&wall); - } - - // Find topological order with constraints from extrusions_constrains. - std::vector blocked(all_extrusions.size(), 0); // Value indicating how many extrusions it is blocking (preceding extrusions) an extrusion. - std::vector> blocking(all_extrusions.size()); // Each extrusion contains a vector of extrusions that are blocked by this extrusion. - std::unordered_map map_extrusion_to_idx; - for (size_t idx = 0; idx < all_extrusions.size(); idx++) - map_extrusion_to_idx.emplace(all_extrusions[idx], idx); - - auto extrusions_constrains = Arachne::WallToolPaths::getRegionOrder(all_extrusions, is_outer_wall_first); - for (auto [before, after] : extrusions_constrains) { - auto after_it = map_extrusion_to_idx.find(after); - ++blocked[after_it->second]; - blocking[map_extrusion_to_idx.find(before)->second].emplace_back(after_it->second); - } - - std::vector processed(all_extrusions.size(), false); // Indicate that the extrusion was already processed. - Point current_position = all_extrusions.empty() ? Point::Zero() : all_extrusions.front()->junctions.front().p; // Some starting position. - std::vector ordered_extrusions; // To store our result in. At the end we'll std::swap. - ordered_extrusions.reserve(all_extrusions.size()); - - while (ordered_extrusions.size() < all_extrusions.size()) { - size_t best_candidate = 0; - double best_distance_sqr = std::numeric_limits::max(); - bool is_best_closed = false; - - std::vector available_candidates; - for (size_t candidate = 0; candidate < all_extrusions.size(); ++candidate) { - if (processed[candidate] || blocked[candidate]) - continue; // Not a valid candidate. - available_candidates.push_back(candidate); - } - - std::sort(available_candidates.begin(), available_candidates.end(), [&all_extrusions](const size_t a_idx, const size_t b_idx) -> bool { - return all_extrusions[a_idx]->is_closed < all_extrusions[b_idx]->is_closed; - }); - - for (const size_t candidate_path_idx : available_candidates) { - auto& path = all_extrusions[candidate_path_idx]; - - if (path->junctions.empty()) { // No vertices in the path. Can't find the start position then or really plan it in. Put that at the end. - if (best_distance_sqr == std::numeric_limits::max()) { - best_candidate = candidate_path_idx; - is_best_closed = path->is_closed; - } - continue; - } - - const Point candidate_position = path->junctions.front().p; - double distance_sqr = (current_position - candidate_position).cast().norm(); - if (distance_sqr < best_distance_sqr) { // Closer than the best candidate so far. - if (path->is_closed || (!path->is_closed && best_distance_sqr != std::numeric_limits::max()) || (!path->is_closed && !is_best_closed)) { - best_candidate = candidate_path_idx; - best_distance_sqr = distance_sqr; - is_best_closed = path->is_closed; - } - } - } - - auto& best_path = all_extrusions[best_candidate]; - ordered_extrusions.push_back({ best_path, best_path->is_contour() }); - processed[best_candidate] = true; - for (size_t unlocked_idx : blocking[best_candidate]) - blocked[unlocked_idx]--; - - if (!best_path->junctions.empty()) { //If all paths were empty, the best path is still empty. We don't upate the current position then. - if (best_path->is_closed) - current_position = best_path->junctions[0].p; //We end where we started. - else - current_position = best_path->junctions.back().p; //Pick the other end from where we started. - } - } - - // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer - if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer - if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering - int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. - int arr_i, arr_j = 0; // indexes to run through the walls in the for loops - int outer, first_internal, second_internal, max_internal, current_perimeter; // allocate index values - - // To address any remaining scenarios where the outer perimeter contour is not first on the list as arachne sometimes reorders the perimeters when clustering - // for OI mode that is used the basis for IOI - bringContoursToFront(ordered_extrusions); - std::vector reordered_extrusions; - - // Debug statement to print spacing values: - //printf("External threshold - Ext perimeter: %d Ext spacing: %d Int perimeter: %d Int spacing: %d\n", this->ext_perimeter_flow.scaled_width(),this->ext_perimeter_flow.scaled_spacing(),this->perimeter_flow.scaled_width(), this->perimeter_flow.scaled_spacing()); - - // Get searching thresholds. For an external perimeter we take the external perimeter spacing/2 plus the internal perimeter spacing/2 and expand by 3% to cover - // rounding errors - coord_t threshold_external = (this->ext_perimeter_flow.scaled_spacing()/2 + this->perimeter_flow.scaled_spacing()/2)*1.03; - - // For the intenal perimeter threshold, the distance is the internal perimeter spacing expanded by 3% to cover rounding errors. - coord_t threshold_internal = this->perimeter_flow.scaled_spacing() * 1.03; - - // Re-order extrusions based on distance - // Alorithm will aggresively optimise for the appearance of the outermost perimeter - ordered_extrusions = reorderPerimetersByProximity(ordered_extrusions,threshold_external,threshold_internal ); - reordered_extrusions = ordered_extrusions; // copy them into the reordered extrusions vector to allow for IOI operations to be performed below without altering the base ordered extrusions list. - - // Now start the sandwich mode wall re-ordering using the reordered_extrusions as the basis - // scan to find the external perimeter, first internal, second internal and last perimeter in the island. - // We then advance the position index to move to the second island and continue until there are no more - // perimeters left. - while (position < reordered_extrusions.size()) { - outer = first_internal = second_internal = current_perimeter = -1; // initialise all index values to -1 - max_internal = reordered_extrusions.size()-1; // initialise the maximum internal perimeter to the last perimeter on the extrusion list - // run through the walls to get the index values that need re-ordering until the first one for each - // is found. Start at "position" index to enable the for loop to iterate for multiple external - // perimeters in a single island - // printf("Reorder Loop. Position %d, extrusion list size: %d, Outer index %d, inner index %d, second inner index %d\n", position, reordered_extrusions.size(),outer,first_internal,second_internal); - for (arr_i = position; arr_i < reordered_extrusions.size(); ++arr_i) { - // printf("Perimeter: extrusion inset index %d, ordered extrusions array position %d\n",reordered_extrusions[arr_i].extrusion->inset_idx, arr_i); - switch (reordered_extrusions[arr_i].extrusion->inset_idx) { - case 0: // external perimeter - if (outer == -1) - outer = arr_i; - break; - case 1: // first internal wall - if (first_internal==-1 && arr_i>outer && outer!=-1){ - first_internal = arr_i; - } - break; - case 2: // second internal wall - if (second_internal == -1 && arr_i > first_internal && outer!=-1){ - second_internal = arr_i; - } - break; - } - if(outer >-1 && first_internal>-1 && reordered_extrusions[arr_i].extrusion->inset_idx == 0){ // found a new external perimeter after we've found at least a first internal perimeter to re-order. - // This means we entered a new island. - arr_i=arr_i-1; //step back one perimeter - max_internal = arr_i; // new maximum internal perimeter is now this as we have found a new external perimeter, hence a new island. - break; // exit the for loop - } - } - - // printf("Layer ID %d, Outer index %d, inner index %d, second inner index %d, maximum internal perimeter %d \n",layer_id,outer,first_internal,second_internal, max_internal); - if (outer > -1 && first_internal > -1 && second_internal > -1) { // found all three perimeters to re-order? If not the perimeters will be processed outside in. - std::vector inner_outer_extrusions; // temporary array to hold extrusions for reordering - inner_outer_extrusions.resize(max_internal - position + 1); // reserve array containing the number of perimeters before a new island. Variables are array indexes hence need to add +1 to convert to position allocations - // printf("Allocated array size %d, max_internal index %d, start position index %d \n",max_internal-position+1,max_internal,position); - - for (arr_j = max_internal; arr_j >=position; --arr_j){ // go inside out towards the external perimeter (perimeters in reverse order) and store all internal perimeters until the first one identified with inset index 2 - if(arr_j >= second_internal){ - //printf("Inside out loop: Mapped perimeter index %d to array position %d\n", arr_j, max_internal-arr_j); - inner_outer_extrusions[max_internal-arr_j] = reordered_extrusions[arr_j]; - current_perimeter++; - } - } - - for (arr_j = position; arr_j < second_internal; ++arr_j){ // go outside in and map the remaining perimeters (external and first internal wall(s)) using the outside in wall order - // printf("Outside in loop: Mapped perimeter index %d to array position %d\n", arr_j, current_perimeter+1); - inner_outer_extrusions[++current_perimeter] = reordered_extrusions[arr_j]; - } - - for(arr_j = position; arr_j <= max_internal; ++arr_j) // replace perimeter array with the new re-ordered array - ordered_extrusions[arr_j] = inner_outer_extrusions[arr_j-position]; - } - // go to the next perimeter from the current position to continue scanning for external walls in the same island - position = arr_i + 1; - } - } - } - - bool steep_overhang_contour = false; - bool steep_overhang_hole = false; - const WallDirection wall_direction = config->wall_direction; - if (wall_direction != WallDirection::Auto) { - // Skip steep overhang detection if wall direction is specified - steep_overhang_contour = true; - steep_overhang_hole = true; - } - if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions, steep_overhang_contour, steep_overhang_hole); !extrusion_coll.empty()) { - // All walls are counter-clockwise initially, so we don't need to reorient it if that's what we want - if (wall_direction != WallDirection::CounterClockwise) { - reorient_perimeters(extrusion_coll, steep_overhang_contour, steep_overhang_hole, - // Reverse internal only if the wall direction is auto - this->config->overhang_reverse_internal_only && wall_direction == WallDirection::Auto); - } - this->loops->append(extrusion_coll); - } - - const coord_t spacing = (perimeters.size() == 1) ? ext_perimeter_spacing2 : perimeter_spacing; - - if (offset_ex(infill_contour, -float(spacing / 2.)).empty()) - infill_contour.clear(); // Infill region is too small, so let's filter it out. - - // create one more offset to be used as boundary for fill - // we offset by half the perimeter spacing (to get to the actual infill boundary) - // and then we offset back and forth by half the infill spacing to only consider the - // non-collapsing regions - coord_t inset = - (loop_number < 0) ? 0 : - (loop_number == 0) ? - // one loop - ext_perimeter_spacing : - // two or more loops? - perimeter_spacing; - coord_t top_inset = inset; - - top_inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); - if(is_topmost_layer || is_bottom_layer) - inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); - else - inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); - - // simplify infill contours according to resolution - Polygons pp; - for (ExPolygon& ex : infill_contour) - ex.simplify_p(m_scaled_resolution, &pp); - ExPolygons not_filled_exp = union_ex(pp); - // collapse too narrow infill areas - const auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE)); - - ExPolygons infill_exp = offset2_ex( - not_filled_exp, - float(-min_perimeter_infill_spacing / 2.), - float(inset + min_perimeter_infill_spacing / 2.)); - // append infill areas to fill_surfaces - if (!top_expolygons.empty()) { - infill_exp = union_ex(infill_exp, offset_ex(top_expolygons, double(top_inset))); - } - this->fill_surfaces->append(infill_exp, stInternal); - - apply_extra_perimeters(infill_exp); - - // BBS: get the no-overlap infill expolygons - { - ExPolygons polyWithoutOverlap; - polyWithoutOverlap = offset2_ex( - not_filled_exp, - float(-min_perimeter_infill_spacing / 2.), - float(+min_perimeter_infill_spacing / 2.)); - if (!top_expolygons.empty()) - polyWithoutOverlap = union_ex(polyWithoutOverlap, top_expolygons); - this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); - } - } -} - bool PerimeterGeneratorLoop::is_internal_contour() const { // An internal contour is a contour containing no other contours From 47ec9b9b0692d094f534ee891f30e00198be1338 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 17:53:03 +0800 Subject: [PATCH 014/100] SPE-1950: Optimization of computation complexity of perimeter ordering for Arachne generator. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous implementation during the grouping of perimeters using depth-first searches unnecessarily searched nodes that had no impact on grouping, which significantly increased the search space. Cherry-picked from prusa3d/PrusaSlicer@86309ba939c17ae6e35f0cecb5db6f3032c71fe8 Co-authored-by: Lukáš Hejl --- src/libslic3r/Arachne/PerimeterOrder.cpp | 54 +++++++++++++----------- src/libslic3r/Arachne/PerimeterOrder.hpp | 9 +++- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/libslic3r/Arachne/PerimeterOrder.cpp b/src/libslic3r/Arachne/PerimeterOrder.cpp index 01d50feb1e..c6c2755a48 100644 --- a/src/libslic3r/Arachne/PerimeterOrder.cpp +++ b/src/libslic3r/Arachne/PerimeterOrder.cpp @@ -1,4 +1,10 @@ +#include +#include +#include + #include "PerimeterOrder.hpp" +#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" +#include "libslic3r/Point.hpp" namespace Slic3r::Arachne::PerimeterOrder { @@ -128,7 +134,7 @@ static std::vector ordered_perimeter_extrusions_to_m const Point &extrusion_start_position = extrusion_line.junctions.front().p; const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); if (distance_sqr < nearest_distance_sqr) { - if (extrusion_line.is_closed || (!extrusion_line.is_closed && nearest_distance_sqr != std::numeric_limits::max()) || (!extrusion_line.is_closed && !is_nearest_closed)) { + if (extrusion_line.is_closed || (!extrusion_line.is_closed && nearest_distance_sqr == std::numeric_limits::max()) || (!extrusion_line.is_closed && !is_nearest_closed)) { nearest_extrusion_idx = extrusion_idx; nearest_distance_sqr = distance_sqr; is_nearest_closed = extrusion_line.is_closed; @@ -184,7 +190,7 @@ static std::vector order_of_grouped_perimeter_extrusions_to_minimize_dis const Point &extrusion_start_position = external_perimeter_extrusion_line.junctions.front().p; const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); if (distance_sqr < nearest_distance_sqr) { - if (external_perimeter_extrusion_line.is_closed || (!external_perimeter_extrusion_line.is_closed && nearest_distance_sqr != std::numeric_limits::max()) || (!external_perimeter_extrusion_line.is_closed && !is_nearest_closed)) { + if (external_perimeter_extrusion_line.is_closed || (!external_perimeter_extrusion_line.is_closed && nearest_distance_sqr == std::numeric_limits::max()) || (!external_perimeter_extrusion_line.is_closed && !is_nearest_closed)) { nearest_grouped_extrusions_idx = grouped_extrusion_idx; nearest_distance_sqr = distance_sqr; is_nearest_closed = external_perimeter_extrusion_line.is_closed; @@ -219,33 +225,32 @@ static PerimeterExtrusions extract_ordered_perimeter_extrusions(const PerimeterE while (!stack.empty()) { const PerimeterExtrusion *current_extrusion = stack.top(); const size_t current_extrusion_idx = current_extrusion - sorted_perimeter_extrusions.data(); + stack.pop(); + visited[current_extrusion_idx] = true; - if (visited[current_extrusion_idx]) - continue; - - if (current_extrusion->nearest_external_perimeter == &perimeter_extrusion) + if (current_extrusion->nearest_external_perimeter == &perimeter_extrusion) { grouped_extrusions.back().extrusions.emplace_back(current_extrusion); - - if (current_extrusion->adjacent_perimeter_extrusions.size() == 1) { - const PerimeterExtrusion *adjacent_extrusion = current_extrusion->adjacent_perimeter_extrusions.front(); - stack.push(adjacent_extrusion); - } else if (current_extrusion->adjacent_perimeter_extrusions.size() > 1) { - // When there is more than one available candidate, then order candidates to minimize distances between - // candidates and also to minimize the distance from the current_position. - std::vector available_candidates; - for (const PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { - if (const size_t adjacent_extrusion_idx = adjacent_extrusion - sorted_perimeter_extrusions.data(); !visited[adjacent_extrusion_idx]) - available_candidates.emplace_back(adjacent_extrusion); - } - - std::vector adjacent_extrusions = ordered_perimeter_extrusions_to_minimize_distances(Point::Zero(), available_candidates); - std::reverse(adjacent_extrusions.begin(), adjacent_extrusions.end()); - for (const PerimeterExtrusion *adjacent_extrusion : adjacent_extrusions) - stack.push(adjacent_extrusion); } - visited[current_extrusion_idx] = true; + std::vector available_candidates; + for (const PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { + const size_t adjacent_extrusion_idx = adjacent_extrusion - sorted_perimeter_extrusions.data(); + if (!visited[adjacent_extrusion_idx] && !adjacent_extrusion->is_external_perimeter() && adjacent_extrusion->nearest_external_perimeter == &perimeter_extrusion) { + available_candidates.emplace_back(adjacent_extrusion); + } + } + + if (available_candidates.size() == 1) { + stack.push(available_candidates.front()); + } else if (available_candidates.size() > 1) { + // When there is more than one available candidate, then order candidates to minimize distances between + // candidates and also to minimize the distance from the current_position. + std::vector adjacent_extrusions = ordered_perimeter_extrusions_to_minimize_distances(Point::Zero(), available_candidates); + for (auto extrusion_it = adjacent_extrusions.rbegin(); extrusion_it != adjacent_extrusions.rend(); ++extrusion_it) { + stack.push(*extrusion_it); + } + } } if (!external_perimeters_first) @@ -253,7 +258,6 @@ static PerimeterExtrusions extract_ordered_perimeter_extrusions(const PerimeterE } const std::vector grouped_extrusion_order = order_of_grouped_perimeter_extrusions_to_minimize_distances(Point::Zero(), grouped_extrusions); - assert(grouped_extrusion_order.size() == grouped_ordered_extrusions.size()); PerimeterExtrusions ordered_extrusions; for (size_t order_idx : grouped_extrusion_order) { diff --git a/src/libslic3r/Arachne/PerimeterOrder.hpp b/src/libslic3r/Arachne/PerimeterOrder.hpp index edb13094f9..f8469d917f 100644 --- a/src/libslic3r/Arachne/PerimeterOrder.hpp +++ b/src/libslic3r/Arachne/PerimeterOrder.hpp @@ -1,7 +1,14 @@ #ifndef slic3r_GCode_PerimeterOrder_hpp_ #define slic3r_GCode_PerimeterOrder_hpp_ -#include +#include +#include +#include +#include + +#include "libslic3r/Arachne/utils/ExtrusionLine.hpp" +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/Polygon.hpp" namespace Slic3r::Arachne::PerimeterOrder { From 5d1583db8523f11fa96251529053df190418857c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 18:35:45 +0800 Subject: [PATCH 015/100] Apply fix includes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@919740fb3e27eb1725b8c4fa19295d0b7e6ca560 Co-authored-by: Martin Šach --- .../BeadingStrategy/BeadingStrategy.cpp | 4 +- .../BeadingStrategy/BeadingStrategy.hpp | 6 ++- .../BeadingStrategyFactory.cpp | 53 +++++++++---------- .../BeadingStrategyFactory.hpp | 4 ++ .../DistributedBeadingStrategy.cpp | 5 ++ .../DistributedBeadingStrategy.hpp | 1 + .../LimitedBeadingStrategy.cpp | 7 ++- .../LimitedBeadingStrategy.hpp | 3 ++ .../OuterWallInsetBeadingStrategy.cpp | 3 ++ .../OuterWallInsetBeadingStrategy.hpp | 3 ++ .../RedistributeBeadingStrategy.cpp | 3 ++ .../RedistributeBeadingStrategy.hpp | 3 ++ .../WideningBeadingStrategy.cpp | 16 +++--- .../WideningBeadingStrategy.hpp | 4 ++ .../Arachne/SkeletalTrapezoidation.cpp | 33 ++++++++---- .../Arachne/SkeletalTrapezoidation.hpp | 19 +++---- .../Arachne/SkeletalTrapezoidationGraph.cpp | 18 ++++--- .../Arachne/SkeletalTrapezoidationGraph.hpp | 10 ++++ src/libslic3r/Arachne/utils/ExtrusionLine.cpp | 13 ++++- src/libslic3r/Arachne/utils/ExtrusionLine.hpp | 14 ++++- src/libslic3r/Arachne/utils/HalfEdgeGraph.hpp | 6 ++- .../Arachne/utils/PolygonsPointIndex.hpp | 2 - .../Arachne/utils/PolylineStitcher.cpp | 9 ++++ .../Arachne/utils/PolylineStitcher.hpp | 13 ++++- src/libslic3r/Arachne/utils/SparseGrid.hpp | 1 - .../Arachne/utils/SparseLineGrid.hpp | 1 - src/libslic3r/Arachne/utils/SquareGrid.hpp | 9 ++-- src/libslic3r/Geometry/MedialAxis.cpp | 11 +++- src/libslic3r/Geometry/MedialAxis.hpp | 7 +++ src/libslic3r/Geometry/Voronoi.cpp | 6 ++- src/libslic3r/Geometry/Voronoi.hpp | 13 +++++ src/libslic3r/Geometry/VoronoiOffset.cpp | 18 ++++--- src/libslic3r/Geometry/VoronoiOffset.hpp | 8 ++- src/libslic3r/Geometry/VoronoiUtils.cpp | 16 ++++-- src/libslic3r/Geometry/VoronoiUtils.hpp | 7 +++ src/libslic3r/Geometry/VoronoiUtilsCgal.cpp | 12 +++-- src/libslic3r/Geometry/VoronoiUtilsCgal.hpp | 3 ++ 37 files changed, 266 insertions(+), 98 deletions(-) diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp index b57c84d639..5ade0c9207 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp @@ -1,10 +1,8 @@ //Copyright (c) 2022 Ultimaker B.V. //CuraEngine is released under the terms of the AGPLv3 or higher. -#include - #include "BeadingStrategy.hpp" -#include "Point.hpp" +#include "libslic3r/Point.hpp" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp index 99e38239f9..0a08f5d2d0 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp @@ -4,9 +4,13 @@ #ifndef BEADING_STRATEGY_H #define BEADING_STRATEGY_H +#include #include +#include +#include +#include -#include "../../libslic3r.h" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp index 97acd271ac..911cd78bc1 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp @@ -3,51 +3,50 @@ #include "BeadingStrategyFactory.hpp" +#include +#include +#include + #include "LimitedBeadingStrategy.hpp" #include "WideningBeadingStrategy.hpp" #include "DistributedBeadingStrategy.hpp" #include "RedistributeBeadingStrategy.hpp" #include "OuterWallInsetBeadingStrategy.hpp" +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" -#include -#include +namespace Slic3r::Arachne { -namespace Slic3r::Arachne -{ - -BeadingStrategyPtr BeadingStrategyFactory::makeStrategy( - const coord_t preferred_bead_width_outer, - const coord_t preferred_bead_width_inner, - const coord_t preferred_transition_length, - const float transitioning_angle, - const bool print_thin_walls, - const coord_t min_bead_width, - const coord_t min_feature_size, - const double wall_split_middle_threshold, - const double wall_add_middle_threshold, - const coord_t max_bead_count, - const coord_t outer_wall_offset, - const int inward_distributed_center_wall_count, - const double minimum_variable_line_ratio -) +BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(const coord_t preferred_bead_width_outer, + const coord_t preferred_bead_width_inner, + const coord_t preferred_transition_length, + const float transitioning_angle, + const bool print_thin_walls, + const coord_t min_bead_width, + const coord_t min_feature_size, + const double wall_split_middle_threshold, + const double wall_add_middle_threshold, + const coord_t max_bead_count, + const coord_t outer_wall_offset, + const int inward_distributed_center_wall_count, + const double minimum_variable_line_ratio) { BeadingStrategyPtr ret = std::make_unique(preferred_bead_width_inner, preferred_transition_length, transitioning_angle, wall_split_middle_threshold, wall_add_middle_threshold, inward_distributed_center_wall_count); - BOOST_LOG_TRIVIAL(debug) << "Applying the Redistribute meta-strategy with outer-wall width = " << preferred_bead_width_outer << ", inner-wall width = " << preferred_bead_width_inner << "."; + + BOOST_LOG_TRIVIAL(trace) << "Applying the Redistribute meta-strategy with outer-wall width = " << preferred_bead_width_outer << ", inner-wall width = " << preferred_bead_width_inner << "."; ret = std::make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, std::move(ret)); if (print_thin_walls) { - BOOST_LOG_TRIVIAL(debug) << "Applying the Widening Beading meta-strategy with minimum input width " << min_feature_size << " and minimum output width " << min_bead_width << "."; + BOOST_LOG_TRIVIAL(trace) << "Applying the Widening Beading meta-strategy with minimum input width " << min_feature_size << " and minimum output width " << min_bead_width << "."; ret = std::make_unique(std::move(ret), min_feature_size, min_bead_width); } // Orca: we allow negative outer_wall_offset here - if (outer_wall_offset != 0) - { - BOOST_LOG_TRIVIAL(debug) << "Applying the OuterWallOffset meta-strategy with offset = " << outer_wall_offset << "."; + if (outer_wall_offset != 0) { + BOOST_LOG_TRIVIAL(trace) << "Applying the OuterWallOffset meta-strategy with offset = " << outer_wall_offset << "."; ret = std::make_unique(outer_wall_offset, std::move(ret)); } - //Apply the LimitedBeadingStrategy last, since that adds a 0-width marker wall which other beading strategies shouldn't touch. - BOOST_LOG_TRIVIAL(debug) << "Applying the Limited Beading meta-strategy with maximum bead count = " << max_bead_count << "."; + // Apply the LimitedBeadingStrategy last, since that adds a 0-width marker wall which other beading strategies shouldn't touch. + BOOST_LOG_TRIVIAL(trace) << "Applying the Limited Beading meta-strategy with maximum bead count = " << max_bead_count << "."; ret = std::make_unique(max_bead_count, std::move(ret)); return ret; } diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp index a586906f45..e24a85e5c5 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp @@ -4,8 +4,12 @@ #ifndef BEADING_STRATEGY_FACTORY_H #define BEADING_STRATEGY_FACTORY_H +#include +#include + #include "BeadingStrategy.hpp" #include "../../Point.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.cpp index c8a84c4011..7234015ae2 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.cpp @@ -1,7 +1,12 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. #include +#include +#include +#include + #include "DistributedBeadingStrategy.hpp" +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.hpp index 4d651732d4..991d5028b7 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/DistributedBeadingStrategy.hpp @@ -5,6 +5,7 @@ #define DISTRIBUTED_BEADING_STRATEGY_H #include "BeadingStrategy.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.cpp index 97d854b418..24e04c3f26 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.cpp @@ -1,11 +1,14 @@ //Copyright (c) 2022 Ultimaker B.V. //CuraEngine is released under the terms of the AGPLv3 or higher. -#include #include +#include +#include +#include #include "LimitedBeadingStrategy.hpp" -#include "Point.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.hpp index 33292bc09f..166057f03e 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/LimitedBeadingStrategy.hpp @@ -4,7 +4,10 @@ #ifndef LIMITED_BEADING_STRATEGY_H #define LIMITED_BEADING_STRATEGY_H +#include + #include "BeadingStrategy.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp index 1406f7daa8..ac9edb1dba 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp @@ -4,6 +4,9 @@ #include "OuterWallInsetBeadingStrategy.hpp" #include +#include + +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.hpp index 45a700b02e..f0b4622df3 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.hpp @@ -4,7 +4,10 @@ #ifndef OUTER_WALL_INSET_BEADING_STRATEGY_H #define OUTER_WALL_INSET_BEADING_STRATEGY_H +#include + #include "BeadingStrategy.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp index 2b4dda0272..7307781840 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp @@ -5,6 +5,9 @@ #include #include +#include + +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.hpp index f0fefe2389..701aa63041 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.hpp @@ -4,7 +4,10 @@ #ifndef REDISTRIBUTE_DISTRIBUTED_BEADING_STRATEGY_H #define REDISTRIBUTE_DISTRIBUTED_BEADING_STRATEGY_H +#include + #include "BeadingStrategy.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.cpp index eefcab8e7b..4c6dbb2706 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.cpp @@ -3,6 +3,11 @@ #include "WideningBeadingStrategy.hpp" +#include +#include + +#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" + namespace Slic3r::Arachne { @@ -24,17 +29,16 @@ WideningBeadingStrategy::Beading WideningBeadingStrategy::compute(coord_t thickn if (thickness < optimal_width) { Beading ret; ret.total_thickness = thickness; - if (thickness >= min_input_width) - { + if (thickness >= min_input_width) { ret.bead_widths.emplace_back(std::max(thickness, min_output_width)); ret.toolpath_locations.emplace_back(thickness / 2); - } else { + ret.left_over = 0; + } else ret.left_over = thickness; - } + return ret; - } else { + } else return parent->compute(thickness, bead_count); - } } coord_t WideningBeadingStrategy::getOptimalThickness(coord_t bead_count) const diff --git a/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.hpp b/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.hpp index 3e799b9af7..225aeed88b 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.hpp +++ b/src/libslic3r/Arachne/BeadingStrategy/WideningBeadingStrategy.hpp @@ -4,7 +4,11 @@ #ifndef WIDENING_BEADING_STRATEGY_H #define WIDENING_BEADING_STRATEGY_H +#include +#include + #include "BeadingStrategy.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index f1e03d225e..2d2cf9896d 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -3,20 +3,27 @@ #include "SkeletalTrapezoidation.hpp" -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "utils/linearAlg2D.hpp" -#include "Utils.hpp" -#include "SVG.hpp" -#include "Geometry/VoronoiVisualUtils.hpp" -#include "Geometry/VoronoiUtilsCgal.hpp" -#include "../EdgeGrid.hpp" +#include "libslic3r/Geometry/VoronoiUtils.hpp" +#include "ankerl/unordered_dense.h" +#include "libslic3r/Arachne/SkeletalTrapezoidationEdge.hpp" +#include "libslic3r/Arachne/SkeletalTrapezoidationJoint.hpp" +#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" +#include "libslic3r/Arachne/utils/ExtrusionLine.hpp" -#include "Geometry/VoronoiUtils.hpp" +#ifndef NDEBUG + #include "libslic3r/EdgeGrid.hpp" +#endif #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). @@ -449,6 +456,8 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) edge.from->incident_edge = &edge; } +using NodeSet = SkeletalTrapezoidation::NodeSet; + void SkeletalTrapezoidation::separatePointyQuadEndNodes() { NodeSet visited_nodes; @@ -1924,6 +1933,8 @@ void SkeletalTrapezoidation::addToolpathSegment(const ExtrusionJunction& from, c void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_junctions) { + using EdgeSet = ankerl::unordered_dense::set; + EdgeSet unprocessed_quad_starts(graph.edges.size() * 5 / 2); for (edge_t& edge : graph.edges) { diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp index 3bd00f839b..70c2a7d9a3 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp @@ -5,11 +5,11 @@ #define SKELETAL_TRAPEZOIDATION_H #include - +#include #include // smart pointers #include // pair - -#include +#include +#include #include "utils/HalfEdgeGraph.hpp" #include "utils/PolygonsSegmentIndex.hpp" @@ -20,6 +20,10 @@ #include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" #include "SkeletalTrapezoidationGraph.hpp" #include "../Geometry/Voronoi.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/Polygon.hpp" +#include "libslic3r/libslic3r.h" //#define ARACHNE_DEBUG //#define ARACHNE_DEBUG_VORONOI @@ -82,10 +86,7 @@ class SkeletalTrapezoidation public: using Segment = PolygonsSegmentIndex; - using NodeSet = ankerl::unordered_dense::set; - using EdgeSet = ankerl::unordered_dense::set; - using EdgeMap = ankerl::unordered_dense::map; - using NodeMap = ankerl::unordered_dense::map; + using NodeSet = ankerl::unordered_dense::set; /*! * Construct a new trapezoidation problem to solve. @@ -169,8 +170,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 */ - EdgeMap vd_edge_to_he_edge; - NodeMap 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(const VD::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 686a6055f8..f7a30c32db 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -2,14 +2,18 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "SkeletalTrapezoidationGraph.hpp" -#include "../Line.hpp" + #include - - #include +#include +#include +#include +#include -#include "utils/linearAlg2D.hpp" #include "../Line.hpp" +#include "libslic3r/Arachne/SkeletalTrapezoidationEdge.hpp" +#include "libslic3r/Arachne/SkeletalTrapezoidationJoint.hpp" +#include "libslic3r/Point.hpp" namespace Slic3r::Arachne { @@ -182,8 +186,8 @@ bool STHalfEdgeNode::isLocalMaximum(bool strict) const void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) { - ankerl::unordered_dense::map::iterator> edge_locator; - ankerl::unordered_dense::map::iterator> node_locator; + ankerl::unordered_dense::map edge_locator; + ankerl::unordered_dense::map node_locator; for (auto edge_it = edges.begin(); edge_it != edges.end(); ++edge_it) { @@ -195,7 +199,7 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) node_locator.emplace(&*node_it, node_it); } - auto safelyRemoveEdge = [this, &edge_locator](edge_t* to_be_removed, std::list::iterator& current_edge_it, bool& edge_it_is_updated) + auto safelyRemoveEdge = [this, &edge_locator](edge_t* to_be_removed, Edges::iterator& current_edge_it, bool& edge_it_is_updated) { if (current_edge_it != edges.end() && to_be_removed == &*current_edge_it) diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp index 33e43156ec..5baac24acc 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.hpp @@ -5,10 +5,20 @@ #define SKELETAL_TRAPEZOIDATION_GRAPH_H #include +#include #include "utils/HalfEdgeGraph.hpp" #include "SkeletalTrapezoidationEdge.hpp" #include "SkeletalTrapezoidationJoint.hpp" +#include "libslic3r/Arachne/utils/HalfEdge.hpp" +#include "libslic3r/Arachne/utils/HalfEdgeNode.hpp" +#include "libslic3r/libslic3r.h" + +namespace Slic3r +{ +class Line; +class Point; +}; namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index 03fb4ebb55..49449cc59d 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -2,10 +2,21 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include +#include +#include #include "ExtrusionLine.hpp" -#include "linearAlg2D.hpp" #include "../../VariableWidth.hpp" +#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ExtrusionEntity.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Polygon.hpp" +#include "libslic3r/Polyline.hpp" + +namespace Slic3r { +class Flow; +} // namespace Slic3r namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index fe021941a9..d8cad702ac 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -5,16 +5,28 @@ #ifndef UTILS_EXTRUSION_LINE_H #define UTILS_EXTRUSION_LINE_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "ExtrusionJunction.hpp" #include "../../Polyline.hpp" #include "../../Polygon.hpp" #include "../../BoundingBox.hpp" #include "../../ExtrusionEntity.hpp" #include "../../Flow.hpp" -#include "../../../clipper/clipper_z.hpp" +#include "libslic3r/Point.hpp" namespace Slic3r { class ThickPolyline; +class Flow; } namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/utils/HalfEdgeGraph.hpp b/src/libslic3r/Arachne/utils/HalfEdgeGraph.hpp index 99efff6a07..17b06f2be2 100644 --- a/src/libslic3r/Arachne/utils/HalfEdgeGraph.hpp +++ b/src/libslic3r/Arachne/utils/HalfEdgeGraph.hpp @@ -21,8 +21,10 @@ class HalfEdgeGraph public: using edge_t = derived_edge_t; using node_t = derived_node_t; - std::list edges; - std::list nodes; + using Edges = std::list; + using Nodes = std::list; + Edges edges; + Nodes nodes; }; } // namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/utils/PolygonsPointIndex.hpp b/src/libslic3r/Arachne/utils/PolygonsPointIndex.hpp index 125b3ef926..04f017f86a 100644 --- a/src/libslic3r/Arachne/utils/PolygonsPointIndex.hpp +++ b/src/libslic3r/Arachne/utils/PolygonsPointIndex.hpp @@ -156,8 +156,6 @@ struct PathsPointIndexLocator } }; -using PolygonsPointIndexLocator = PathsPointIndexLocator; - }//namespace Slic3r::Arachne namespace std diff --git a/src/libslic3r/Arachne/utils/PolylineStitcher.cpp b/src/libslic3r/Arachne/utils/PolylineStitcher.cpp index 89ec929540..0abf63ac10 100644 --- a/src/libslic3r/Arachne/utils/PolylineStitcher.cpp +++ b/src/libslic3r/Arachne/utils/PolylineStitcher.cpp @@ -2,7 +2,16 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "PolylineStitcher.hpp" + #include "ExtrusionLine.hpp" +#include "libslic3r/Arachne/utils/PolygonsPointIndex.hpp" +#include "libslic3r/Polygon.hpp" + +namespace Slic3r { +namespace Arachne { +struct ExtrusionJunction; +} // namespace Arachne +} // namespace Slic3r namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/PolylineStitcher.hpp b/src/libslic3r/Arachne/utils/PolylineStitcher.hpp index 2ab770a3ec..7f547f4f23 100644 --- a/src/libslic3r/Arachne/utils/PolylineStitcher.hpp +++ b/src/libslic3r/Arachne/utils/PolylineStitcher.hpp @@ -4,11 +4,20 @@ #ifndef UTILS_POLYLINE_STITCHER_H #define UTILS_POLYLINE_STITCHER_H +#include +#include +#include +#include +#include +#include +#include +#include + #include "SparsePointGrid.hpp" #include "PolygonsPointIndex.hpp" #include "../../Polygon.hpp" -#include -#include +#include "libslic3r/Point.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/SparseGrid.hpp b/src/libslic3r/Arachne/utils/SparseGrid.hpp index be461d4241..45876fb9a7 100644 --- a/src/libslic3r/Arachne/utils/SparseGrid.hpp +++ b/src/libslic3r/Arachne/utils/SparseGrid.hpp @@ -6,7 +6,6 @@ #define UTILS_SPARSE_GRID_H #include -#include #include #include diff --git a/src/libslic3r/Arachne/utils/SparseLineGrid.hpp b/src/libslic3r/Arachne/utils/SparseLineGrid.hpp index a9b5368697..0b38988f92 100644 --- a/src/libslic3r/Arachne/utils/SparseLineGrid.hpp +++ b/src/libslic3r/Arachne/utils/SparseLineGrid.hpp @@ -6,7 +6,6 @@ #define UTILS_SPARSE_LINE_GRID_H #include -#include #include #include diff --git a/src/libslic3r/Arachne/utils/SquareGrid.hpp b/src/libslic3r/Arachne/utils/SquareGrid.hpp index c59c3ee1b9..ff45d85354 100644 --- a/src/libslic3r/Arachne/utils/SquareGrid.hpp +++ b/src/libslic3r/Arachne/utils/SquareGrid.hpp @@ -4,12 +4,15 @@ #ifndef UTILS_SQUARE_GRID_H #define UTILS_SQUARE_GRID_H -#include "../../Point.hpp" - +#include #include -#include #include #include +#include +#include + +#include "../../Point.hpp" +#include "libslic3r/libslic3r.h" namespace Slic3r::Arachne { diff --git a/src/libslic3r/Geometry/MedialAxis.cpp b/src/libslic3r/Geometry/MedialAxis.cpp index f3514bb512..7fece75e63 100644 --- a/src/libslic3r/Geometry/MedialAxis.cpp +++ b/src/libslic3r/Geometry/MedialAxis.cpp @@ -1,9 +1,16 @@ #include #include "MedialAxis.hpp" -#include "clipper.hpp" +#include +#include +#include +#include + #include "VoronoiOffset.hpp" -#include "../ClipperUtils.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/ExPolygon.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/libslic3r.h" #ifdef SLIC3R_DEBUG namespace boost { namespace polygon { diff --git a/src/libslic3r/Geometry/MedialAxis.hpp b/src/libslic3r/Geometry/MedialAxis.hpp index b1354ddb2f..cd1404f915 100644 --- a/src/libslic3r/Geometry/MedialAxis.hpp +++ b/src/libslic3r/Geometry/MedialAxis.hpp @@ -1,8 +1,15 @@ #ifndef slic3r_Geometry_MedialAxis_hpp_ #define slic3r_Geometry_MedialAxis_hpp_ +#include +#include +#include +#include + #include "Voronoi.hpp" #include "../ExPolygon.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Polyline.hpp" namespace Slic3r::Geometry { diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index 32dc5f1488..69db537698 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -1,11 +1,13 @@ #include "Voronoi.hpp" +#include +#include + #include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" #include "libslic3r/Geometry/VoronoiUtils.hpp" #include "libslic3r/Geometry/VoronoiUtilsCgal.hpp" #include "libslic3r/MultiMaterialSegmentation.hpp" - -#include +#include "libslic3r/Line.hpp" namespace Slic3r::Geometry { diff --git a/src/libslic3r/Geometry/Voronoi.hpp b/src/libslic3r/Geometry/Voronoi.hpp index fffc958b0a..23a50bb8f7 100644 --- a/src/libslic3r/Geometry/Voronoi.hpp +++ b/src/libslic3r/Geometry/Voronoi.hpp @@ -1,8 +1,15 @@ #ifndef slic3r_Geometry_Voronoi_hpp_ #define slic3r_Geometry_Voronoi_hpp_ +#include +#include +#include +#include + #include "../Line.hpp" #include "../Polyline.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/libslic3r.h" #ifdef _MSC_VER // Suppress warning C4146 in OpenVDB: unary minus operator applied to unsigned type, result still unsigned @@ -10,6 +17,12 @@ #pragma warning(disable : 4146) #endif // _MSC_VER #include "boost/polygon/voronoi.hpp" + +namespace boost { +namespace polygon { +template struct segment_traits; +} // namespace polygon +} // namespace boost #ifdef _MSC_VER #pragma warning(pop) #endif // _MSC_VER diff --git a/src/libslic3r/Geometry/VoronoiOffset.cpp b/src/libslic3r/Geometry/VoronoiOffset.cpp index 46105220a4..8ecd370235 100644 --- a/src/libslic3r/Geometry/VoronoiOffset.cpp +++ b/src/libslic3r/Geometry/VoronoiOffset.cpp @@ -1,15 +1,21 @@ // Polygon offsetting using Voronoi diagram prodiced by boost::polygon. -#include "Geometry.hpp" -#include "VoronoiOffset.hpp" -#include "libslic3r.h" - #include +#include +#include +#include +#include +#include +#include +#include + +#include "libslic3r/Geometry.hpp" +#include "VoronoiOffset.hpp" +#include "libslic3r/libslic3r.h" +#include "libslic3r/Geometry/Voronoi.hpp" // #define VORONOI_DEBUG_OUT -#include - #ifdef VORONOI_DEBUG_OUT #include #endif diff --git a/src/libslic3r/Geometry/VoronoiOffset.hpp b/src/libslic3r/Geometry/VoronoiOffset.hpp index 359fe010c8..747538e8b6 100644 --- a/src/libslic3r/Geometry/VoronoiOffset.hpp +++ b/src/libslic3r/Geometry/VoronoiOffset.hpp @@ -3,9 +3,15 @@ #ifndef slic3r_VoronoiOffset_hpp_ #define slic3r_VoronoiOffset_hpp_ -#include "../libslic3r.h" +#include +#include +#include +#include "libslic3r/libslic3r.h" #include "Voronoi.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/Polygon.hpp" namespace Slic3r { diff --git a/src/libslic3r/Geometry/VoronoiUtils.cpp b/src/libslic3r/Geometry/VoronoiUtils.cpp index 33a68f8b19..b34e538232 100644 --- a/src/libslic3r/Geometry/VoronoiUtils.cpp +++ b/src/libslic3r/Geometry/VoronoiUtils.cpp @@ -1,11 +1,17 @@ #include - -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "VoronoiUtils.hpp" -#include "libslic3r.h" +#include "libslic3r/Exception.hpp" +#include "libslic3r/Line.hpp" namespace Slic3r::Geometry { diff --git a/src/libslic3r/Geometry/VoronoiUtils.hpp b/src/libslic3r/Geometry/VoronoiUtils.hpp index 9c915e223b..6872e4ea72 100644 --- a/src/libslic3r/Geometry/VoronoiUtils.hpp +++ b/src/libslic3r/Geometry/VoronoiUtils.hpp @@ -1,8 +1,15 @@ #ifndef slic3r_VoronoiUtils_hpp_ #define slic3r_VoronoiUtils_hpp_ +#include +#include +#include + #include "libslic3r/Geometry/Voronoi.hpp" #include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" +#include "libslic3r/Arachne/utils/PolygonsPointIndex.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/libslic3r.h" using VD = Slic3r::Geometry::VoronoiDiagram; diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp index 3118bf8280..7797a5a29f 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp @@ -1,15 +1,21 @@ -// Needed since the CGAL headers are not self-contained. -#include #include #include #include +#include +#include +#include #include "libslic3r/Geometry/Voronoi.hpp" #include "libslic3r/Geometry/VoronoiUtils.hpp" #include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" #include "libslic3r/MultiMaterialSegmentation.hpp" - #include "VoronoiUtilsCgal.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/Point.hpp" + +namespace CGAL { +class MP_Float; +} // namespace CGAL using VD = Slic3r::Geometry::VoronoiDiagram; diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp index 33ae847802..baafbc7a1a 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp @@ -1,6 +1,9 @@ #ifndef slic3r_VoronoiUtilsCgal_hpp_ #define slic3r_VoronoiUtilsCgal_hpp_ +#include +#include + #include "Voronoi.hpp" #include "../Arachne/utils/PolygonsSegmentIndex.hpp" From 71304368d0fd41f8c7f79a002a43ea676ef4a5e6 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 18:52:23 +0800 Subject: [PATCH 016/100] Update to latest PS code --- src/libslic3r/Geometry/VoronoiUtils.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Geometry/VoronoiUtils.cpp b/src/libslic3r/Geometry/VoronoiUtils.cpp index b34e538232..f140782891 100644 --- a/src/libslic3r/Geometry/VoronoiUtils.cpp +++ b/src/libslic3r/Geometry/VoronoiUtils.cpp @@ -132,7 +132,7 @@ VoronoiUtils::discretize_parabola(const Point &source_point, const Segment &sour Point pxx; Line(a, b).distance_to_infinite_squared(source_point, &pxx); const Point ppxx = pxx - source_point; - const coord_t d = ppxx.norm(); + const coord_t d = ppxx.cast().norm(); const Vec2d rot = perp(ppxx).cast().normalized(); const double rot_cos_theta = rot.x(); @@ -145,8 +145,8 @@ VoronoiUtils::discretize_parabola(const Point &source_point, const Segment &sour } const double marking_bound = atan(transitioning_angle * 0.5); - int64_t msx = -marking_bound * d; // projected marking_start - int64_t mex = marking_bound * d; // projected marking_end + int64_t msx = -marking_bound * int64_t(d); // projected marking_start + int64_t mex = marking_bound * int64_t(d); // projected marking_end const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; Point marking_start = Point(coord_t(msx), marking_start_end_h).rotated(rot_cos_theta, rot_sin_theta) + pxx; @@ -160,7 +160,7 @@ VoronoiUtils::discretize_parabola(const Point &source_point, const Segment &sour bool add_marking_start = msx * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && msx * int64_t(dir) < int64_t(ex - px) * int64_t(dir); bool add_marking_end = mex * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && mex * int64_t(dir) < int64_t(ex - px) * int64_t(dir); - const Point apex = Point(coord_t(0), coord_t(d / 2)).rotated(rot_cos_theta, rot_sin_theta) + pxx; + const Point apex = Point(0, d / 2).rotated(rot_cos_theta, rot_sin_theta) + pxx; bool add_apex = int64_t(sx - px) * int64_t(dir) < 0 && int64_t(ex - px) * int64_t(dir) > 0; assert(!add_marking_start || !add_marking_end || add_apex); From f2f827c175a41170f6780c3c5242f14b6cfffa94 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 18:53:36 +0800 Subject: [PATCH 017/100] Revert the changes BBL made for diagram fix, because this happens! (SoftFever/OrcaSlicer#7815) --- src/libslic3r/Geometry/Voronoi.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index 69db537698..4f7173e5c2 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -169,12 +169,10 @@ VoronoiDiagram::detect_known_issues(const VoronoiDiagram &voronoi_diagram, Segme return edge_issue_type; } else if (const IssueType cell_issue_type = detect_known_voronoi_cell_issues(voronoi_diagram, segment_begin, segment_end); cell_issue_type != IssueType::NO_ISSUE_DETECTED) { return cell_issue_type; + } else if (!VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segment_begin, segment_end)) { + // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. + return IssueType::NON_PLANAR_VORONOI_DIAGRAM; } - // BBS: test no problem in BBS - //} else if (!VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segment_begin, segment_end)) { - // // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. - // return IssueType::NON_PLANAR_VORONOI_DIAGRAM; - //} return IssueType::NO_ISSUE_DETECTED; } From 6575bd1ead42ab069290b42e7fec725fffe67587 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 20:51:15 +0800 Subject: [PATCH 018/100] SPE-1837: Fixed issue when perimeters weren't generated with Arachne. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@6df4891e6cb98541d23b4c2b83b84a314e23e1ef Co-authored-by: Lukáš Hejl --- .../Arachne/BeadingStrategy/BeadingStrategyFactory.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp index 911cd78bc1..d6cb1331c1 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp @@ -30,7 +30,12 @@ BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(const coord_t preferred_ const int inward_distributed_center_wall_count, const double minimum_variable_line_ratio) { - BeadingStrategyPtr ret = std::make_unique(preferred_bead_width_inner, preferred_transition_length, transitioning_angle, wall_split_middle_threshold, wall_add_middle_threshold, inward_distributed_center_wall_count); + // Handle a special case when there is just one external perimeter. + // Because big differences in bead width for inner and other perimeters cause issues with current beading strategies. + const coord_t optimal_width = max_bead_count <= 2 ? preferred_bead_width_outer : preferred_bead_width_inner; + BeadingStrategyPtr ret = std::make_unique(optimal_width, preferred_transition_length, transitioning_angle, + wall_split_middle_threshold, wall_add_middle_threshold, + inward_distributed_center_wall_count); BOOST_LOG_TRIVIAL(trace) << "Applying the Redistribute meta-strategy with outer-wall width = " << preferred_bead_width_outer << ", inner-wall width = " << preferred_bead_width_inner << "."; ret = std::make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, std::move(ret)); From 1c68e19aca490d33fc4e99c8ad3d02458b7afcf0 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 20:52:02 +0800 Subject: [PATCH 019/100] Update to latest code from PS --- src/libslic3r/Arachne/WallToolPaths.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index 55aabd9b02..8f2b04cf42 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -361,7 +361,7 @@ void removeSmallAreas(Polygons &thiss, const double min_area_size, const bool re } } else { // For each polygon, computes the signed area, move small outlines at the end of the vector and keep pointer on small holes - std::vector small_holes; + Polygons small_holes; for (auto it = thiss.begin(); it < new_end;) { if (double area = ClipperLib::Area(to_path(*it)); fabs(area) < min_area_size) { if (area >= 0) { From efa6fc9b8c5213182caf08cf14e2fde1fae7e4d9 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 30 Dec 2024 23:35:06 +0800 Subject: [PATCH 020/100] 11 --- .github/workflows/build_all.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 59f8f1b9f4..4ca93aa033 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -70,17 +70,20 @@ jobs: container: image: bilelmoussaoui/flatpak-github-actions:gnome-46 options: --privileged + volumes: + - /usr/local/lib/android:/usr/local/lib/android + - /usr/share/dotnet:/usr/share/dotnet steps: - name: free disk space uses: jlumbroso/free-disk-space@main with: - tool-cache: true + tool-cache: false android: true dotnet: true - haskell: true - large-packages: true + haskell: false + large-packages: false docker-images: false - swap-storage: true + swap-storage: false - uses: actions/checkout@v4 - name: Get the version and date run: | From 8219b553921efa99d12f50cad1951011650bb342 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 31 Dec 2024 11:28:31 +0800 Subject: [PATCH 021/100] 12 --- .github/workflows/build_all.yml | 31 ++++++++++++++++++++----------- .github/workflows/build_orca.yml | 10 +++++----- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 4ca93aa033..da3141250b 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -73,17 +73,12 @@ jobs: volumes: - /usr/local/lib/android:/usr/local/lib/android - /usr/share/dotnet:/usr/share/dotnet + - /opt/ghc:/opt/ghc1 + - /usr/local/share/boost:/usr/local/share/boost1 steps: - - name: free disk space - uses: jlumbroso/free-disk-space@main - with: - tool-cache: false - android: true - dotnet: true - haskell: false - large-packages: false - docker-images: false - swap-storage: false + - name: "Remove unneeded stuff to free disk space" + run: + sudo rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" - uses: actions/checkout@v4 - name: Get the version and date run: | @@ -99,6 +94,20 @@ jobs: shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 with: - bundle: OrcaSlicer-Linux_${{ env.ver }}.flatpak + bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml cache: true + - name: test + run: | + apt install tree + tree + - name: Deploy Flatpak to daily release + if: ${{github.ref == 'refs/heads/main'}} + uses: WebFreak001/deploy-nightly@v3.1.0 + with: + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 + asset_path: ./build/OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak + asset_name: OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak + asset_content_type: application/octet-stream + max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index ae855633d7..56548dc46a 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -257,8 +257,8 @@ jobs: ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} run: | ./BuildLinux.sh -isr - mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage ./build/OrcaSlicer_Linux${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage - chmod +x ./build/OrcaSlicer_Linux${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage + mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage + chmod +x ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage - name: Build orca_custom_preset_tests if: github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' @@ -277,7 +277,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} - path: './build/OrcaSlicer_Linux${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage' + path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage' - name: Deploy Ubuntu release if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} @@ -287,8 +287,8 @@ jobs: with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 - asset_path: ./build/OrcaSlicer_Linux${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage - asset_name: OrcaSlicer_Linux${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage + asset_path: ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage + asset_name: OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted From 4d5944090fcecb5bc4da7349011240dd05119284 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 31 Dec 2024 12:54:16 +0800 Subject: [PATCH 022/100] nightly build --- .github/workflows/build_all.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index da3141250b..6aa50095c0 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -97,17 +97,13 @@ jobs: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml cache: true - - name: test - run: | - apt install tree - tree - - name: Deploy Flatpak to daily release + - name: Deploy Flatpak to nightly release if: ${{github.ref == 'refs/heads/main'}} uses: WebFreak001/deploy-nightly@v3.1.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 - asset_path: ./build/OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak + asset_path: /__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak asset_name: OrcaSlicer-Linux-flatpak_${{ env.ver }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted From 3e13ee049d1234257c2befdf7d92f523af947408 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 31 Dec 2024 14:42:30 +0800 Subject: [PATCH 023/100] revert version --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 959a5a14d6..7eb37fdde4 100644 --- a/version.inc +++ b/version.inc @@ -10,7 +10,7 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.35.0-dev") +set(SoftFever_VERSION "2.3.0-dev") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) From 2f55dd7cfe3e3d2c41fdd73dddc31f1c5dcbdf83 Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Wed, 1 Jan 2025 14:34:38 +0000 Subject: [PATCH 024/100] Fix regressions with introduction of supertak plate for non BBL printers. Generalised plate title. (#7883) --- src/libslic3r/PrintConfig.cpp | 6 +++--- src/slic3r/GUI/Tab.cpp | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index ac992d1ef8..2877fa7169 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -722,7 +722,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Initial layer"); def->full_label = L("Initial layer bed temperature"); def->tooltip = L("Bed temperature of the initial layer. " - "Value 0 means the filament does not support to print on the Bambu Cool Plate SuperTack"); + "Value 0 means the filament does not support to print on the Cool Plate SuperTack"); def->sidetext = "°C"; def->min = 0; def->max = 120; @@ -789,8 +789,8 @@ void PrintConfigDef::init_fff_params() def->enum_values.emplace_back("High Temp Plate"); def->enum_values.emplace_back("Textured PEI Plate"); def->enum_values.emplace_back("Textured Cool Plate"); - def->enum_labels.emplace_back(L("Bambu Cool Plate SuperTack")); - def->enum_labels.emplace_back(L("Smooth Cool Plate / PLA Plate")); + def->enum_labels.emplace_back(L("Cool Plate (SuperTack)")); + def->enum_labels.emplace_back(L("Smooth Cool Plate")); def->enum_labels.emplace_back(L("Engineering Plate")); def->enum_labels.emplace_back(L("Smooth High Temp Plate")); def->enum_labels.emplace_back(L("Textured PEI Plate")); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 9ec397be77..e3a981287a 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3335,12 +3335,12 @@ void TabFilament::build() optgroup->append_line(line); optgroup = page->new_optgroup(L("Bed temperature"), L"param_bed_temp"); - line = {L("Bambu Cool Plate SuperTack"), L("Bed temperature when cool plate is installed. Value 0 means the filament does not support to print on the Bambu Cool Plate SuperTack")}; + line = {L("Cool Plate (SuperTack)"), L("Bed temperature when cool plate is installed. Value 0 means the filament does not support to print on the Cool Plate SuperTack")}; line.append_option(optgroup->get_option("supertack_plate_temp_initial_layer")); line.append_option(optgroup->get_option("supertack_plate_temp")); optgroup->append_line(line); - line = { L("Cool Plate / PLA Plate"), L("Bed temperature when cool plate is installed. Value 0 means the filament does not support to print on the Cool Plate") }; + line = { L("Cool Plate"), L("Bed temperature when cool plate is installed. Value 0 means the filament does not support to print on the Cool Plate") }; line.append_option(optgroup->get_option("cool_plate_temp_initial_layer")); line.append_option(optgroup->get_option("cool_plate_temp")); optgroup->append_line(line); @@ -3611,7 +3611,9 @@ void TabFilament::toggle_options() { bool pa = m_config->opt_bool("enable_pressure_advance", 0); toggle_option("pressure_advance", pa); + // Orca: Enable the plates that should be visible when multi bed support is enabled or a BBL printer is selected auto support_multi_bed_types = is_BBL_printer || cfg.opt_bool("support_multi_bed_types"); + toggle_line("supertack_plate_temp_initial_layer", support_multi_bed_types ); toggle_line("cool_plate_temp_initial_layer", support_multi_bed_types ); toggle_line("textured_cool_plate_temp_initial_layer", support_multi_bed_types); toggle_line("eng_plate_temp_initial_layer", support_multi_bed_types); @@ -3633,9 +3635,6 @@ void TabFilament::toggle_options() bool support_chamber_temp_control = this->m_preset_bundle->printers.get_edited_preset().config.opt_bool("support_chamber_temp_control"); toggle_line("chamber_temperatures", support_chamber_temp_control); - - for (auto el : {"supertack_plate_temp", "supertack_plate_temp_initial_layer", "cool_plate_temp", "cool_plate_temp_initial_layer", "eng_plate_temp", "eng_plate_temp_initial_layer", "textured_plate_temp", "textured_plate_temp_initial_layer"}) - toggle_line(el, is_BBL_printer); } if (m_active_page->title() == L("Setting Overrides")) update_filament_overrides_page(&cfg); From 02438e25bc8ed52d084f158523cde168edce7425 Mon Sep 17 00:00:00 2001 From: Mike Bignell <1911467+mikezs@users.noreply.github.com> Date: Thu, 2 Jan 2025 09:47:21 +0000 Subject: [PATCH 025/100] Update calib_dlg.cpp (#7867) Added values for missing PCTG temperature range. Fixes bug #7323 which caused subsiquent values to not be correct. --- src/slic3r/GUI/calib_dlg.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index 0bdc34f660..9dcd5ee7c8 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -227,6 +227,7 @@ enum FILAMENT_TYPE : int tPLA = 0, tABS_ASA, tPETG, + tPCTG, tTPU, tPA_CF, tPET_CF, @@ -384,6 +385,10 @@ void Temp_Calibration_Dlg::on_filament_type_changed(wxCommandEvent& event) { start = 250; end = 230; break; + case tPCTG: + start = 240; + end = 280; + break; case tTPU: start = 240; end = 210; From 091ab688117de91671aaea02663d77f2d7dfff6c Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 3 Jan 2025 01:38:25 +0900 Subject: [PATCH 026/100] Display Commit ID Used for Build in AboutDialog (#6516) * Display commit ID used for build in AboutDialog * Dynamically check for snapshots --------- Co-authored-by: SoftFever --- CMakeLists.txt | 22 ++++++++++++++++++++++ src/libslic3r/libslic3r_version.h.in | 3 +++ src/slic3r/GUI/AboutDialog.cpp | 11 +++++++++++ 3 files changed, 36 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40fe0d0918..78fb7da8c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,28 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (default Release)" FORCE) endif() +find_package(Git) +if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") + # Check if Orca is on a tag + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --exact-match --tags + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE GIT_TAG_CHECK + ) + if(NOT GIT_TAG_CHECK EQUAL 0) + add_definitions("-DSNAPSHOT_BUILD=1") + endif() + + # Check current Git commit hash + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") +endif() + if(DEFINED ENV{SLIC3R_STATIC}) set(SLIC3R_STATIC_INITIAL $ENV{SLIC3R_STATIC}) else() diff --git a/src/libslic3r/libslic3r_version.h.in b/src/libslic3r/libslic3r_version.h.in index 90383c93af..31af715bc7 100644 --- a/src/libslic3r/libslic3r_version.h.in +++ b/src/libslic3r/libslic3r_version.h.in @@ -5,6 +5,9 @@ #define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@" #define SLIC3R_VERSION "@SLIC3R_VERSION@" #define SoftFever_VERSION "@SoftFever_VERSION@" +#ifndef GIT_COMMIT_HASH + #define GIT_COMMIT_HASH "0000000" // 0000000 means uninitialized +#endif #define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@" #define SLIC3R_BUILD_TIME "@SLIC3R_BUILD_TIME@" //#define SLIC3R_RC_VERSION "@SLIC3R_VERSION@" diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 52d04bed54..e7ff3caa3f 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -259,8 +259,19 @@ AboutDialog::AboutDialog() version->SetBackgroundColour(wxColour("#4d4d4d")); bs_version->SetBackgroundColour(wxColour("#4d4d4d")); + #ifdef SNAPSHOT_BUILD + auto build_string = _L("build") + " " + std::string(GIT_COMMIT_HASH); + wxStaticText* version_build = new wxStaticText(this, wxID_ANY, build_string.c_str(), wxDefaultPosition, wxDefaultSize); + version_build->SetFont(Label::Body_12); + + version_build->SetForegroundColour(wxColour("#FFFFFD")); + version_build->SetBackgroundColour(wxColour("#4d4d4d")); + #endif vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + #ifdef SNAPSHOT_BUILD + vesizer->Add(version_build, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + #endif vesizer->Add(bs_version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); // #if BBL_INTERNAL_TESTING // wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME)); From d1dfcbe168837bca52ea7cd16f9f722fb0e9c1ae Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jan 2025 00:54:17 +0800 Subject: [PATCH 027/100] aesthetic change for build info (#7896) aesthetic change --- CMakeLists.txt | 10 ---------- src/slic3r/GUI/AboutDialog.cpp | 31 +++++++++++++------------------ 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78fb7da8c9..9b1b293ced 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,16 +24,6 @@ endif() find_package(Git) if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Check if Orca is on a tag - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --exact-match --tags - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - RESULT_VARIABLE GIT_TAG_CHECK - ) - if(NOT GIT_TAG_CHECK EQUAL 0) - add_definitions("-DSNAPSHOT_BUILD=1") - endif() - # Check current Git commit hash execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --format=%h diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index e7ff3caa3f..435cc62bb4 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -241,11 +241,18 @@ AboutDialog::AboutDialog() // version { + + auto _build_string_font = Label::Body_10; + // _build_string_font.SetStyle(wxFONTSTYLE_ITALIC); + vesizer->Add(0, FromDIP(165), 1, wxEXPAND, FromDIP(5)); - auto version_string = _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION); + auto version_string = _L("Orca Slicer") + " " + std::string(SoftFever_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); - wxStaticText* bs_version = new wxStaticText(this, wxID_ANY, wxString::Format("Based on PrusaSlicer and BambuStudio"), wxDefaultPosition, wxDefaultSize); - bs_version->SetFont(Label::Body_12); + wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, + wxString::Format("Build %s.\nOrcaSlicer is based on PrusaSlicer and BambuStudio", + std::string(GIT_COMMIT_HASH)), + wxDefaultPosition, wxDefaultSize); + credits_string->SetFont(_build_string_font); wxFont version_font = GetFont(); #ifdef __WXMSW__ version_font.SetPointSize(version_font.GetPointSize()-1); @@ -255,24 +262,12 @@ AboutDialog::AboutDialog() version_font.SetPointSize(FromDIP(16)); version->SetFont(version_font); version->SetForegroundColour(wxColour("#FFFFFD")); - bs_version->SetForegroundColour(wxColour("#FFFFFD")); + credits_string->SetForegroundColour(wxColour("#FFFFFD")); version->SetBackgroundColour(wxColour("#4d4d4d")); - bs_version->SetBackgroundColour(wxColour("#4d4d4d")); - - #ifdef SNAPSHOT_BUILD - auto build_string = _L("build") + " " + std::string(GIT_COMMIT_HASH); - wxStaticText* version_build = new wxStaticText(this, wxID_ANY, build_string.c_str(), wxDefaultPosition, wxDefaultSize); - version_build->SetFont(Label::Body_12); - - version_build->SetForegroundColour(wxColour("#FFFFFD")); - version_build->SetBackgroundColour(wxColour("#4d4d4d")); - #endif + credits_string->SetBackgroundColour(wxColour("#4d4d4d")); vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); - #ifdef SNAPSHOT_BUILD - vesizer->Add(version_build, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); - #endif - vesizer->Add(bs_version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + vesizer->Add(credits_string, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); // #if BBL_INTERNAL_TESTING // wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME)); // wxStaticText* build_time_text = new wxStaticText(this, wxID_ANY, build_time, wxDefaultPosition, wxDefaultSize); From f0e773f891a10e0cd1a3369515a96d7cf23a1198 Mon Sep 17 00:00:00 2001 From: "Lin Yu-Chieh (Victor)" Date: Fri, 3 Jan 2025 23:18:45 +0800 Subject: [PATCH 028/100] Revise OrcaSlicer_zh_TW.po (#6790) * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po up to L3875 * Update OrcaSlicer_zh_TW.po up to L7955 * Merge branch 'main' into main * Update OrcaSlicer_zh_TW.po L7817 * Update OrcaSlicer_zh_TW.po L10000 * Update OrcaSlicer_zh_TW.po L11567 * Update OrcaSlicer_zh_TW.po L12684 * Update OrcaSlicer_zh_TW.po L15950 * Revised fuzzy L335 * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Merge branch 'main' into main * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po * Update OrcaSlicer_zh_TW.po --- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 3126 +++++++++---------- 1 file changed, 1468 insertions(+), 1658 deletions(-) diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 19599b5f6c..d2c70544f5 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -1,14 +1,15 @@ -# Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C)2019 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST Translator Jiang Yue , 2019. +# REVISED Victor Lin, 2024 # msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" -"PO-Revision-Date: 2023-11-06 14:37+0800\n" -"Last-Translator: ablegods \n" +"POT-Creation-Date: 2024-09-11 22:56+0800\n" +"PO-Revision-Date: 2024-12-31 23:58+0800\n" +"Last-Translator: lin-ycv \n" "Language-Team: \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" @@ -17,9 +18,8 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.4.1\n" -#, fuzzy msgid "Supports Painting" -msgstr "自訂支撐" +msgstr "支撐筆刷" msgid "Alt + Mouse wheel" msgstr "Alt + 滑鼠滾輪" @@ -33,36 +33,30 @@ msgstr "重置方向" msgid "Ctrl + Mouse wheel" msgstr "Ctrl + 滑鼠滾輪" -#, fuzzy msgid "Pen size" msgstr "筆刷尺寸" msgid "Left mouse button" msgstr "滑鼠左鍵" -#, fuzzy msgid "Enforce supports" msgstr "新增支撐區" msgid "Right mouse button" msgstr "滑鼠右鍵" -#, fuzzy msgid "Block supports" msgstr "不產生支撐區" msgid "Shift + Left mouse button" msgstr "Shift + 滑鼠左鍵" -#, fuzzy msgid "Erase" msgstr "擦除" -#, fuzzy msgid "Erase all painting" -msgstr "擦除所有手繪支撐" +msgstr "擦除所有自訂支撐" -#, fuzzy msgid "Highlight overhang areas" msgstr "突顯出懸空區域" @@ -75,7 +69,6 @@ msgstr "套用" msgid "Gap area" msgstr "間隙面積" -#, fuzzy msgid "Tool type" msgstr "筆刷類型" @@ -88,13 +81,11 @@ msgstr "僅對懸空區生效" msgid "Auto support threshold angle: " msgstr "自動支撐角度臨界值:" -#, fuzzy msgid "Circle" msgstr "圓形" -#, fuzzy msgid "Sphere" -msgstr "球形" +msgstr "球體" msgid "Fill" msgstr "填充" @@ -106,9 +97,8 @@ msgstr "縫隙填充" msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "僅允許在由以下條件選擇的平面上進行繪製:%1%" -#, fuzzy msgid "Highlight faces according to overhang angle." -msgstr "根據懸空角度突出顯示面。" +msgstr "根據懸空角度突顯出表面。" msgid "No auto support" msgstr "無自動支撐" @@ -128,27 +118,23 @@ msgid "" "the first %1% filaments will be available in painting tool." msgstr "線材數量超過上色工具支援的最大值,僅前 %1% 個線材可在上色工具中使用。" -#, fuzzy msgid "Color Painting" -msgstr "自訂顏色" +msgstr "顏色筆刷" -#, fuzzy msgid "Pen shape" msgstr "筆刷形狀" msgid "Paint" msgstr "繪製" -#, fuzzy msgid "Key 1~9" msgstr "按鍵 1~9" msgid "Choose filament" msgstr "選擇線材" -#, fuzzy msgid "Edge detection" -msgstr "邊緣偵測" +msgstr "偵測邊緣" msgid "Triangles" msgstr "三角形" @@ -156,7 +142,6 @@ msgstr "三角形" msgid "Filaments" msgstr "線材" -#, fuzzy msgid "Brush" msgstr "筆刷" @@ -193,9 +178,9 @@ msgstr "水平" msgid "Remove painted color" msgstr "移除已繪製的顏色" -#, fuzzy, boost-format +#, boost-format msgid "Painted using: Filament %1%" -msgstr "使用:線材 %1% 上色" +msgstr "上色:線材 %1% " msgid "Move" msgstr "移動" @@ -253,7 +238,7 @@ msgid "Translate" msgstr "平移" msgid "Group Operations" -msgstr "群組操作" +msgstr "裙組操作" msgid "Set Position" msgstr "設定位置" @@ -264,11 +249,9 @@ msgstr "設定方向" msgid "Set Scale" msgstr "設定縮放" -#, fuzzy msgid "Reset Position" msgstr "重設位置" -#, fuzzy msgid "Reset Rotation" msgstr "重設旋轉" @@ -276,7 +259,7 @@ msgid "World coordinates" msgstr "世界坐標" msgid "Object coordinates" -msgstr "" +msgstr "物件坐標" msgid "°" msgstr "°" @@ -292,16 +275,16 @@ msgid "uniform scale" msgstr "等比例縮放" msgid "Planar" -msgstr "" +msgstr "平面" msgid "Dovetail" -msgstr "" +msgstr "鳩尾榫" msgid "Auto" msgstr "自動" msgid "Manual" -msgstr "" +msgstr "手動" msgid "Plug" msgstr "插銷" @@ -313,10 +296,10 @@ msgid "Snap" msgstr "" msgid "Prism" -msgstr "" +msgstr "錐體" msgid "Frustum" -msgstr "錐體" +msgstr "截頭圓錐" msgid "Square" msgstr "正方形" @@ -325,14 +308,13 @@ msgid "Hexagon" msgstr "六邊形" msgid "Keep orientation" -msgstr "" +msgstr "保持方向" -#, fuzzy msgid "Place on cut" -msgstr "切割面放置到列印板上" +msgstr "切割面貼其於列印底板" msgid "Flip upside down" -msgstr "" +msgstr "倒轉" msgid "Connectors" msgstr "連接件" @@ -350,7 +332,7 @@ msgstr "形狀" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "深度" msgid "Groove" msgstr "溝槽" @@ -374,21 +356,26 @@ msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane" msgstr "" +"點擊翻轉切割面\n" +"拖曳移動切割面" 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 "" +msgstr "移動切割面" msgid "Mode" msgstr "模式" msgid "Change cut mode" -msgstr "" +msgstr "變更切割模式" msgid "Tolerance" msgstr "公差" @@ -397,7 +384,7 @@ msgid "Drag" msgstr "拖拉" msgid "Draw cut line" -msgstr "" +msgstr "畫切割線" msgid "Left click" msgstr "滑鼠左鍵" @@ -423,12 +410,11 @@ msgstr "取消選擇連接件" msgid "Select all connectors" msgstr "選擇所有連接件" -#, fuzzy msgid "Cut" msgstr "切割" msgid "Rotate cut plane" -msgstr "" +msgstr "旋轉切割面" msgid "Remove connectors" msgstr "刪除所有連接件" @@ -452,10 +438,10 @@ msgid "Cancel" msgstr "取消" msgid "Build Volume" -msgstr "" +msgstr "列印體積" msgid "Flip cut plane" -msgstr "" +msgstr "翻轉切割面" msgid "Groove change" msgstr "" @@ -465,13 +451,13 @@ 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 "" +msgstr "編輯" msgid "Cut position" -msgstr "" +msgstr "切割位置" msgid "Reset cutting plane" -msgstr "" +msgstr "重設切割面" msgid "Edit connectors" msgstr "編輯連接件" @@ -480,10 +466,10 @@ msgid "Add connectors" msgstr "新增連接件" msgid "Reset cut" -msgstr "" +msgstr "重設切割" msgid "Reset cutting plane and remove connectors" -msgstr "" +msgstr "重設切割面且移除連接件" msgid "Upper part" msgstr "上半部分" @@ -491,7 +477,6 @@ msgstr "上半部分" msgid "Lower part" msgstr "下半部分" -#, fuzzy msgid "Keep" msgstr "保留" @@ -521,16 +506,16 @@ msgstr[0] "" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "" +msgstr[0] "%1$d連接件在物件外" msgid "Some connectors are overlapped" msgstr "存在連接件相互重疊" msgid "Select at least one object to keep after cutting." -msgstr "" +msgstr "切割後保留至少一個物件。" msgid "Cut plane is placed out of object" -msgstr "" +msgstr "切割面在物件外" msgid "Cut plane with groove is invalid" msgstr "" @@ -542,16 +527,16 @@ msgid "Cut by Plane" msgstr "用平面分割" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgstr "切科後產生非流形邊,是否要修復?" msgid "Repairing model object" msgstr "修復模型物件" msgid "Cut by line" -msgstr "" +msgstr "用線切割" msgid "Delete connector" -msgstr "" +msgstr "刪除連接件" msgid "Mesh name" msgstr "Mesh名" @@ -562,7 +547,7 @@ msgstr "細節等級" msgid "Decimate ratio" msgstr "簡化率" -#, fuzzy, boost-format +#, boost-format msgid "" "Processing model '%1%' with more than 1M triangles could be slow. It is " "highly recommended to simplify the model." @@ -618,11 +603,9 @@ msgstr "外觀面偵測" msgid "Perform Recognition" msgstr "執行偵測" -#, fuzzy msgid "Brush size" msgstr "筆刷尺寸" -#, fuzzy msgid "Brush shape" msgstr "筆刷形狀" @@ -634,9 +617,8 @@ msgstr "新增Z縫產生區" msgid "Block seam" msgstr "不產生Z縫區" -#, fuzzy msgid "Seam painting" -msgstr "自訂Z縫" +msgstr "Z縫筆刷" msgid "Remove selection" msgstr "移除繪製" @@ -653,7 +635,7 @@ msgstr "" #. TRN - Input label. Be short as possible #. Select look of letter shape msgid "Font" -msgstr "字體" +msgstr "字型" msgid "Thickness" msgstr "厚度" @@ -684,23 +666,22 @@ msgstr "Shift + 滑鼠上移或下移" msgid "Rotate text" msgstr "旋轉文字" -#, fuzzy msgid "Text shape" msgstr "新增文字" #. TRN - Title in Undo/Redo stack after rotate with text around emboss axe msgid "Text rotate" -msgstr "" +msgstr "文字旋轉" #. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface msgid "Text move" -msgstr "" +msgstr "文字移動" msgid "Set Mirror" msgstr "設定鏡像" msgid "Embossed text" -msgstr "" +msgstr "浮雕文字" msgid "Enter emboss gizmo" msgstr "" @@ -712,16 +693,16 @@ msgid "Embossing actions" msgstr "" msgid "Emboss" -msgstr "" +msgstr "浮雕" msgid "NORMAL" -msgstr "" +msgstr "正常" msgid "SMALL" -msgstr "" +msgstr "小" msgid "ITALIC" -msgstr "" +msgstr "斜體" msgid "SWISS" msgstr "" @@ -741,13 +722,13 @@ msgstr "高級" msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." -msgstr "" +msgstr "文字與字型不相容,請選擇其他的字型" msgid "Embossed text cannot contain only white spaces." -msgstr "" +msgstr "浮雕文字不能僅包含空白字元。" -msgid "Text contains character glyph (represented by '?') unknown by font." -msgstr "" +msgid "Text contains character glyph (represented by '?')unknown by font." +msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" msgid "Text input doesn't show font skew." msgstr "" @@ -772,45 +753,45 @@ msgstr "" #, boost-format msgid "Font \"%1%\" can't be selected." -msgstr "" +msgstr "字型 \"%1%\" 無法選擇。" msgid "Operation" msgstr "" msgid "Join" -msgstr "" +msgstr "合併" msgid "Click to change text into object part." -msgstr "" +msgstr "點擊將文字轉換為物件部分。" msgid "You can't change a type of the last solid part of the object." -msgstr "您無法變更模型最後一個實體部分的類型。" +msgstr "你無法變更模型最後一個實體部分的類型。" msgctxt "EmbossOperation" msgid "Cut" msgstr "切割" msgid "Click to change part type into negative volume." -msgstr "" +msgstr "點擊將零件類型變更為負體積。" msgid "Modifier" msgstr "修改器" msgid "Click to change part type into modifier." -msgstr "" +msgstr "點擊將零件類型變更為修改器" msgid "Change Text Type" -msgstr "" +msgstr "更改文字類型" #, boost-format -msgid "Rename style(%1%) for embossing text" +msgid "Rename style(%1%)for embossing text" msgstr "" msgid "Name can't be empty." -msgstr "" +msgstr "名稱不可空白" msgid "Name has to be unique." -msgstr "" +msgstr "名稱必須是獨特的" msgid "OK" msgstr "確認" @@ -894,27 +875,29 @@ msgid "Style \"%1%\" can't be used and will be removed from a list." msgstr "" msgid "Unset italic" -msgstr "" +msgstr "取消斜體" msgid "Set italic" -msgstr "" +msgstr "斜體" msgid "Unset bold" -msgstr "" +msgstr "取消粗體" msgid "Set bold" -msgstr "" +msgstr "粗體" msgid "Revert text size." -msgstr "" +msgstr "恢復文字大小" msgid "Revert embossed depth." -msgstr "" +msgstr "恢復浮雕深度" msgid "" "Advanced options cannot be changed for the selected font.\n" "Select another font." msgstr "" +"無法更改所選字型的進階選項。\n" +"請選擇其他字型。" msgid "Revert using of model surface." msgstr "" @@ -946,75 +929,77 @@ msgstr "頂部" msgctxt "Alignment" msgid "Middle" -msgstr "" +msgstr "置中" msgctxt "Alignment" msgid "Bottom" msgstr "底部" msgid "Revert alignment." -msgstr "" +msgstr "恢復對齊" #. TRN EmbossGizmo: font units msgid "points" -msgstr "" +msgstr "pt" msgid "Revert gap between characters" -msgstr "" +msgstr "恢復字元間距" msgid "Distance between characters" -msgstr "" +msgstr "字元間距" msgid "Revert gap between lines" -msgstr "" +msgstr "恢復線間距" msgid "Distance between lines" -msgstr "" +msgstr "線間距" msgid "Undo boldness" -msgstr "" +msgstr "恢復粗體" msgid "Tiny / Wide glyphs" msgstr "" msgid "Undo letter's skew" -msgstr "" +msgstr "恢復文字變形" msgid "Italic strength ratio" msgstr "" msgid "Undo translation" -msgstr "" +msgstr "恢復移動" msgid "Distance of the center of the text to the model surface." -msgstr "" +msgstr "文字中心到模型表面的距離" msgid "Undo rotation" -msgstr "" +msgstr "恢復旋轉" msgid "Rotate text Clock-wise." -msgstr "" +msgstr "文字順時針旋轉" msgid "Unlock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "在沿物體表面移動文字時解鎖文字旋轉。" msgid "Lock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "將文字旋轉鎖定,並沿物體表面移動文字。" msgid "Select from True Type Collection." -msgstr "" +msgstr "從 True Type 中選擇。" msgid "Set text to face camera" -msgstr "" +msgstr "將文字面對相機" msgid "Orient the text towards the camera." -msgstr "" +msgstr "將文字朝向相機定向。" #, boost-format msgid "" "Can't load exactly same font(\"%1%\"). Application selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" +"無法載入完全相同的字型(\"%1%\")。應用程式選擇了相似的字型(\"%2%\")。" +"必須指定字型才能啟用文字編輯。" msgid "No symbol" msgstr "" @@ -1023,7 +1008,7 @@ msgid "Loading" msgstr "載入中" msgid "In queue" -msgstr "" +msgstr "在佇列中" #. TRN - Input label. Be short as possible #. Height of one text line - Font Ascent @@ -1034,13 +1019,13 @@ msgstr "高度" #. Copy surface of model on surface of the embossed text #. TRN - Input label. Be short as possible msgid "Use surface" -msgstr "" +msgstr "用面" #. TRN - Input label. Be short as possible #. Option to change projection on curved surface -#. for each character(glyph) in text separately +#. for each character(glyph)in text separately msgid "Per glyph" -msgstr "" +msgstr "每個字形" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right @@ -1049,11 +1034,11 @@ msgstr "對齊" #. TRN - Input label. Be short as possible msgid "Char gap" -msgstr "" +msgstr "字元間距" #. TRN - Input label. Be short as possible msgid "Line gap" -msgstr "" +msgstr "行間距" #. TRN - Input label. Be short as possible msgid "Boldness" @@ -1070,7 +1055,7 @@ msgstr "" #. move text as modifier fully out of not flat surface #. TRN - Input label. Be short as possible msgid "From surface" -msgstr "" +msgstr "從面" #. TRN - Input label. Be short as possible #. Keep vector from bottom to top of text aligned with printer Y axis @@ -1085,11 +1070,11 @@ msgstr "" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "" +msgstr "SVG旋轉" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "" +msgstr "SVG移動" msgid "Enter SVG gizmo" msgstr "" @@ -1101,24 +1086,24 @@ msgid "SVG actions" msgstr "" msgid "SVG" -msgstr "SVG" +msgstr "" #, boost-format msgid "Opacity (%1%)" -msgstr "" +msgstr "不透明度 (%1%)" #, boost-format msgid "Color gradient (%1%)" -msgstr "" +msgstr "顏色漸層 (%1%)" msgid "Undefined fill type" -msgstr "" +msgstr "未定義的填充類型" msgid "Linear gradient" -msgstr "" +msgstr "線性漸層" msgid "Radial gradient" -msgstr "" +msgstr "徑向漸層" msgid "Open filled path" msgstr "" @@ -1133,46 +1118,47 @@ msgid "" "Final shape contains self-intersection or multiple points with same " "coordinate." msgstr "" +"最終形狀包含自相交或多個具有相同座標的點。" #, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "" +msgstr "形狀被標記為隱形 (%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%." +msgid "Fill of shape (%1%)contains unsupported: %2%." msgstr "" #, boost-format -msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgid "Stroke of shape (%1%)is too thin (minimal width is %2% mm)." msgstr "" #, boost-format -msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgid "Stroke of shape (%1%)contains unsupported: %2%." msgstr "" msgid "Face the camera" -msgstr "" +msgstr "面向相機" #. TRN - Preview of filename after clear local filepath. msgid "Unknown filename" -msgstr "" +msgstr "未知的檔案名稱" #, boost-format msgid "SVG file path is \"%1%\"" -msgstr "" +msgstr "SVG 檔案路徑為 \"%1%\"" msgid "Reload SVG file from disk." -msgstr "" +msgstr "從硬碟重新載入 SVG 檔案。" msgid "Change file" -msgstr "" +msgstr "更換檔案" msgid "Change to another .svg file" -msgstr "" +msgstr "更換為另一個 .svg 檔案" msgid "Forget the file path" -msgstr "" +msgstr "忘記檔案路徑" msgid "" "Do NOT save local path to 3MF file.\n" @@ -1188,13 +1174,13 @@ msgid "Bake into model as uneditable part" msgstr "" msgid "Save as" -msgstr "" +msgstr "儲存為" msgid "Save SVG file" -msgstr "" +msgstr "儲存 '.svg' 檔案" msgid "Save as '.svg' file" -msgstr "" +msgstr "儲存為 '.svg' 檔案" msgid "Size in emboss direction." msgstr "" @@ -1205,19 +1191,19 @@ msgid "Scale also changes amount of curve samples (%1%)" msgstr "" msgid "Width of SVG." -msgstr "" +msgstr "SVG寬" msgid "Height of SVG." -msgstr "" +msgstr "SVG高" msgid "Lock/unlock the aspect ratio of the SVG." -msgstr "" +msgstr "鎖定/解鎖 SVG 的長寬比。" msgid "Reset scale" msgstr "重置比例" msgid "Distance of the center of the SVG to the model surface." -msgstr "" +msgstr "SVG 中心到模型表面的距離。" msgid "Reset distance" msgstr "" @@ -1236,63 +1222,63 @@ 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 "" +msgstr "更改 SVG 類型" #. TRN - Input label. Be short as possible msgid "Mirror" msgstr "鏡像" msgid "Choose SVG file for emboss:" -msgstr "" +msgstr "選擇用於浮雕的 SVG 檔案:" #, boost-format msgid "File does NOT exist (%1%)." -msgstr "" +msgstr "檔案不存在(%1%)。" #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "" +msgstr "副檔名必須為 \".svg\" ,但選擇的是 %1%。" #, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "" +msgstr "Nano SVG 解析器無法載入文件 (%1%)。" #, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "" +msgstr "SVG 文件無要浮雕的路徑 (%1%)。" msgid "Vertex" -msgstr "" +msgstr "頂點" msgid "Edge" -msgstr "" +msgstr "邊" msgid "Plane" -msgstr "" +msgstr "平面" msgid "Point on edge" -msgstr "" +msgstr "邊上的點" msgid "Point on circle" -msgstr "" +msgstr "圓上的點" msgid "Point on plane" -msgstr "" +msgstr "平面上的點" msgid "Center of edge" -msgstr "" +msgstr "邊中心" msgid "Center of circle" -msgstr "" +msgstr "圓中心" msgid "ShiftLeft mouse button" -msgstr "" +msgstr "Shift左滑鼠" msgid "Select feature" -msgstr "" +msgstr "選擇特徵" msgid "Select point" -msgstr "" +msgstr "選點" msgid "Delete" msgstr "刪除" @@ -1307,7 +1293,7 @@ msgid "Unselect" msgstr "" msgid "Measure" -msgstr "" +msgstr "測量" msgid "Edit to scale" msgstr "" @@ -1332,16 +1318,16 @@ msgid "Copy to clipboard" msgstr "複製到剪貼簿" msgid "Perpendicular distance" -msgstr "" +msgstr "垂直方向" msgid "Distance" -msgstr "" +msgstr "距離" msgid "Direct distance" msgstr "" msgid "Distance XYZ" -msgstr "" +msgstr "XYZ距離" msgid "Ctrl+" msgstr "Ctrl+" @@ -1356,9 +1342,8 @@ msgstr "未定義" msgid "%1% was replaced with %2%" msgstr "%1% 已被 %2% 替換" -#, fuzzy msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "此設定可能由新版本的 Orca Slicer 產生" +msgstr "此設定可能是新版本的 Orca Slicer 所產生" msgid "Some values have been replaced. Please check them:" msgstr "部分數值已被更換,請檢查:" @@ -1369,50 +1354,46 @@ msgstr "列印參數" msgid "Filament" msgstr "線材" -#, fuzzy msgid "Machine" msgstr "列印設備" -#, fuzzy msgid "Configuration package was loaded, but some values were not recognized." -msgstr "設定檔已被載入,但部分數值未被識別。" +msgstr "設定檔已被載入,但部分數值無法識別。" -#, fuzzy, boost-format +#, boost-format msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." -msgstr "設定檔 “%1%” 已被載入,但部分數值未被識別。" +msgstr "設定檔 \"%1%\" 已被載入,但部分數值無法識別。" -#, fuzzy msgid "" "OrcaSlicer will terminate because of running out of memory.It may be a bug. " "It will be appreciated if you report the issue to our team." msgstr "" -"系統記憶體耗盡,Orca Slicer 即將停止並且結束。這可能是個錯誤,希望您可以報告" -"此問題,我們將非常感激。" +"系統記憶體耗盡,Orca Slicer 即將停止並且結束。這可能是個錯誤,希望你可以回報" +"此問題,我們非常感激。" msgid "Fatal error" msgstr "致命錯誤" -#, fuzzy msgid "" "OrcaSlicer will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" -"遇到語系本地化錯誤,Orca Slicer 即將停止並且結束。希望您可以報告發生此問題的" -"具體狀況,我們將非常感激。" +"遇到語系本地化錯誤,Orca Slicer 即將停止並且結束。希望你可以回報發生此問題的" +"具體狀況,我們非常感激。" msgid "Critical error" msgstr "嚴重錯誤" -#, fuzzy, boost-format +#, boost-format msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "Orca Slicer 遭遇到一個未處理的異常:%1%" +msgstr "Orca Slicer 遭遇到一個未處理的例外:%1%" msgid "Untitled" msgstr "未命名" msgid "Downloading Bambu Network Plug-in" -msgstr "正在下載 Bambu 網路套件" +msgstr "正在下載 Bambu 網路插件" msgid "Login information expired. Please login again." msgstr "登入資訊已過期。請重新登入。" @@ -1420,7 +1401,7 @@ msgstr "登入資訊已過期。請重新登入。" msgid "Incorrect password" msgstr "密碼不正確" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "連接 %s 失敗。[SN:%s, code=%s]" @@ -1435,7 +1416,7 @@ msgstr "" msgid "WebView2 Runtime" msgstr "WebView2 Runtime" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" @@ -1446,15 +1427,13 @@ msgstr "" msgid "Remember my choice" msgstr "記住我的選擇" -#, fuzzy msgid "Loading configuration" msgstr "正在讀取設定檔" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Click to download new version in default browser: %s" -msgstr "在預設瀏覽器中點擊下載最新版本: %s" +msgstr "在預設瀏覽器中開啟頁面下載最新版本: %s" -#, fuzzy msgid "The Orca Slicer needs an upgrade" msgstr " Orca Slicer 需要進行升級" @@ -1470,6 +1449,9 @@ msgid "" "Please note, application settings will be lost, but printer profiles will " "not be affected." msgstr "" +"OrcaSlicer 設定檔可能已損壞,無法解析。\n" +"OrcaSlicer 嘗試重新創建設定檔。\n" +"請注意,應用程式設定將會丟失,但機臺設定檔案不會受到影響。" msgid "Rebuild" msgstr "重新建構" @@ -1481,11 +1463,9 @@ msgstr "載入目前預設" msgid "Loading a mode view" msgstr "載入模式視圖" -#, fuzzy msgid "Choose one file (3mf):" msgstr "選擇一個檔案(3mf)" -#, fuzzy msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgstr "選擇一個或多個檔案(3mf/step/stl/svg/obj/amf/usd*/abc/ply):" @@ -1493,9 +1473,8 @@ msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "選擇一個或多個檔案(3mf/step/stl/svg/obj/amf):" msgid "Choose ZIP file" -msgstr "" +msgstr "選擇 ZIP 檔" -#, fuzzy msgid "Choose one file (gcode/3mf):" msgstr "選擇一個檔案(gcode/3mf):" @@ -1505,7 +1484,7 @@ msgstr "部分預設已被修改。" msgid "" "You can keep the modified presets to the new project, discard or save " "changes as new presets." -msgstr "您可以保留尚未儲存修改的預設應用到新項目中,或者選擇忽略。" +msgstr "你可以保留尚未儲存修改的預設應用到新項目中,或者選擇忽略。" msgid "User logged out" msgstr "使用者登出" @@ -1516,11 +1495,10 @@ msgstr "在執行切片過程中不允許新增或打開專案項目!" msgid "Open Project" msgstr "打開專案項目" -#, fuzzy msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " "version before it can be used normally" -msgstr " Orca Slicer 版本過低,需要更新到最新版本方可正常使用" +msgstr " Orca Slicer 版本過舊,需要更新到最新版本才能正常使用" msgid "Privacy Policy Update" msgstr "隱私協議更新" @@ -1529,9 +1507,10 @@ 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 "" +"雲端儲存的用戶預設數量已超過上限,新的用戶預設僅能在本地使用。" msgid "Sync user presets" -msgstr "" +msgstr "同步用戶預設" msgid "Loading user preset" msgstr "正在載入使用者預設" @@ -1564,6 +1543,7 @@ msgid "" "Could not start URL download. Destination folder is not set. Please choose " "destination folder in Configuration Wizard." msgstr "" +"無法開始 URL 下載。未設置目標資料夾。請在設定精靈中選擇目標資料夾。" msgid "Import File" msgstr "匯入檔案" @@ -1580,7 +1560,6 @@ msgstr "打開" msgid "Rename" msgstr "重新命名" -#, fuzzy msgid "Orca Slicer GUI initialization failed" msgstr " Orca Slicer 圖形界面初始化失敗" @@ -1588,9 +1567,8 @@ msgstr " Orca Slicer 圖形界面初始化失敗" msgid "Fatal error, exception caught: %1%" msgstr "致命錯誤,遭遇到異常:%1%" -#, fuzzy msgid "Quality" -msgstr "列印品質" +msgstr "品質" msgid "Shell" msgstr "外殼" @@ -1604,13 +1582,11 @@ msgstr "支撐" msgid "Flush options" msgstr "換料沖刷選項" -#, fuzzy msgid "Speed" -msgstr "列印速度" +msgstr "速度" -#, fuzzy msgid "Strength" -msgstr "列印強度" +msgstr "結構" msgid "Top Solid Layers" msgstr "頂部實心層" @@ -1642,7 +1618,6 @@ msgstr "擦除選項" msgid "Bed adhesion" msgstr "熱床黏接" -#, fuzzy msgid "Add part" msgstr "新增零件" @@ -1659,22 +1634,22 @@ msgid "Add support enforcer" msgstr "新增支撐產生器" msgid "Add text" -msgstr "" +msgstr "加文字" msgid "Add negative text" -msgstr "" +msgstr "加負文字" msgid "Add text modifier" -msgstr "" +msgstr "加文字修改器" msgid "Add SVG part" -msgstr "" +msgstr "加SVG物件" msgid "Add negative SVG" -msgstr "" +msgstr "加負SVG" msgid "Add SVG modifier" -msgstr "" +msgstr "加SVG修改器" msgid "Select settings" msgstr "選擇設定" @@ -1704,10 +1679,10 @@ msgid "Cone" msgstr "錐體" msgid "Disc" -msgstr "" +msgstr "圓盤" msgid "Torus" -msgstr "" +msgstr "環面" msgid "Orca Cube" msgstr "Orca 立方體" @@ -1722,10 +1697,10 @@ msgid "Voron Cube" msgstr "Voron 立方體" msgid "Stanford Bunny" -msgstr "" +msgstr "斯坦福兔子" msgid "Orca String Hell" -msgstr "" +msgstr "Orca 拉絲測試" msgid "" "This model features text embossment on the top surface. For optimal results, " @@ -1734,9 +1709,13 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" +"這個模型在頂部表面具有文字浮雕效果。為了達到最佳效果,建議將「One Wall Threshold" +"(min_width_top_surface)」設為 0,以便「僅在頂部表面用一層牆壁」能夠最佳運作。\n" +"是 - 自動更改這些設定\n" +"否 - 不為我更改這些設定" msgid "Text" -msgstr "" +msgstr "文字" msgid "Height range Modifier" msgstr "高度範圍修改器" @@ -1756,26 +1735,25 @@ msgid "Set as individual objects" msgstr "設定為獨立物件" msgid "Fill bed with copies" -msgstr "鋪滿列印板" +msgstr "填滿列印底板" -#, fuzzy msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "用選取物件的副本鋪滿列印板的空白區域" +msgstr "複製選取物件來填滿列印底板的空白區域" msgid "Printable" -msgstr "可列印的" +msgstr "要列印的" msgid "Fix model" msgstr "修復模型" msgid "Export as one STL" -msgstr "" +msgstr "匯出為一個STL" msgid "Export as STLs" -msgstr "" +msgstr "匯出為STLs" msgid "Reload from disk" -msgstr "從磁碟重新載入" +msgstr "從硬碟重新載入" msgid "Reload the selected parts from disk" msgstr "從磁碟重新載入選中的零件" @@ -1789,9 +1767,8 @@ msgstr "用新的 STL 替換選中的零件" msgid "Change filament" msgstr "更換線材" -#, fuzzy msgid "Set filament for selected items" -msgstr "為所選項目設定使用的線材" +msgstr "為所選物件設定使用的線材" msgid "Default" msgstr "預設" @@ -1877,16 +1854,16 @@ msgid "Mirror object" msgstr "鏡像物件" msgid "Edit text" -msgstr "" +msgstr "編輯文字" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "編輯文字、字型、尺寸..." msgid "Edit SVG" -msgstr "" +msgstr "編輯SVG" msgid "Change SVG source file, projection, size, ..." -msgstr "" +msgstr "更改SVG來源、投影、尺寸..." msgid "Invalidate cut info" msgstr "解除切割關係" @@ -1895,7 +1872,7 @@ msgid "Add Primitive" msgstr "新增標準模型" msgid "Add Handy models" -msgstr "" +msgstr "新增測試用模型" msgid "Add Models" msgstr "新增模型" @@ -1924,49 +1901,42 @@ msgstr "拆分所選物件" msgid "Auto orientation" msgstr "自動定向" -#, fuzzy msgid "Auto orient the object to improve print quality." -msgstr "自動調整物件方向以提高列印品質。" +msgstr "自動調整物件轉向以提高列印品質。" msgid "Select All" msgstr "全選" -#, fuzzy msgid "select all objects on current plate" -msgstr "全選列印板上所有物件" +msgstr "全選此列印板上所有物件" msgid "Delete All" msgstr "刪除所有" -#, fuzzy msgid "delete all objects on current plate" -msgstr "刪除列印板上所有物件" +msgstr "刪除此列印板上所有物件" msgid "Arrange" msgstr "自動擺放" -#, fuzzy msgid "arrange current plate" -msgstr "在列印板執行自動擺放" +msgstr "自動擺放此列印版" msgid "Reload All" -msgstr "" +msgstr "重新載入所有物件" msgid "reload all from disk" -msgstr "" +msgstr "從硬碟重新載入所有物件" msgid "Auto Rotate" msgstr "自動旋轉方向" -#, fuzzy msgid "auto rotate current plate" -msgstr "在列印板執行自動旋轉方向" +msgstr "自動旋轉此列印板上的物件方向" -#, fuzzy msgid "Delete Plate" msgstr "刪除列印板" -#, fuzzy msgid "Remove the selected plate" msgstr "刪除所選列印板" @@ -2000,7 +1970,6 @@ msgstr "解鎖" msgid "Lock" msgstr "鎖定" -#, fuzzy msgid "Edit Plate Name" msgstr "編輯列印板名" @@ -2028,17 +1997,14 @@ msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" msgstr[0] "%1$d 非流形邊" -#, fuzzy msgid "Right click the icon to fix model object" -msgstr "滑鼠右鍵點擊此圖示可修復模型物件" +msgstr "滑鼠右鍵點擊此圖示修復物件模型" -#, fuzzy msgid "Right button click the icon to drop the object settings" -msgstr "滑鼠右鍵點擊此圖示以放棄物件的設定參數" +msgstr "滑鼠右鍵點擊此圖示以放棄物件的列印設定" -#, fuzzy msgid "Click the icon to reset all settings of the object" -msgstr "滑鼠左鍵點擊此圖示可重設物件的所有設定參數" +msgstr "滑鼠左鍵點擊此圖示可重設物件的所有列印設定" #, fuzzy msgid "Right button click the icon to drop the object printable property" @@ -2078,11 +2044,10 @@ msgstr "新增修改器" msgid "Switch to per-object setting mode to edit modifier settings." msgstr "切換到各個物件設定模式以編輯修改器的設定參數。" -#, fuzzy msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." -msgstr "切換到各個物件設定模式以編輯所選物件的列印參數" +msgstr "切換到物件設定模式編輯所選物件的列印參數" msgid "Delete connector from object which is a part of cut" msgstr "刪除的連接件屬於切割物件的一部分" @@ -2096,7 +2061,7 @@ msgstr "刪除的負體積屬於切割物件的一部分" msgid "" "To save cut correspondence you can delete all connectors from all related " "objects." -msgstr "為保證切割關係,您可以將所有關聯物件的連接件一起刪除。" +msgstr "為保證切割關係,你可以將所有關聯物件的連接件一起刪除。" #, fuzzy msgid "" @@ -2108,7 +2073,7 @@ msgid "" msgstr "" "該行為將破壞切割關係,在此之後將無法保證模型一致性。\n" "\n" -"如果要操作子零件或者負零件,需要先解除切割關係。" +"如果要操作子零件或者負體積,需要先解除切割關係。" msgid "Delete all connectors" msgstr "刪除所有連接件" @@ -2129,7 +2094,7 @@ msgid "Object manipulation" msgstr "物件操作" msgid "Group manipulation" -msgstr "群組操作" +msgstr "裙組操作" msgid "Object Settings to modify" msgstr "要修改的物件設定" @@ -2162,7 +2127,6 @@ msgid "" "If first selected item is an object, the second one should also be object." msgstr "如果第一個選擇的是物件,那麼第二個選擇的也必須是物件。" -#, fuzzy msgid "" "If first selected item is a part, the second one should be part in the same " "object." @@ -2237,7 +2201,6 @@ msgstr "層高" msgid "Wall loops" msgstr "牆層數" -#, fuzzy msgid "Infill density(%)" msgstr "填充密度(%)" @@ -2256,22 +2219,18 @@ msgstr "僅內側" msgid "Outer and inner brim" msgstr "內側和外側" -#, fuzzy msgid "No-brim" -msgstr "無brim(裙邊)" +msgstr "無側裙(brim)" msgid "Outer wall speed" msgstr "外牆速度" -#, fuzzy msgid "Plate" msgstr "列印板" -#, fuzzy msgid "Brim" -msgstr "Brim(裙邊)" +msgstr "側裙(Brim)" -#, fuzzy msgid "Object/Part Setting" msgstr "物件/零件 設定" @@ -2303,7 +2262,7 @@ msgid "Pause" msgstr "暫停" msgid "Template" -msgstr "" +msgstr "範本" msgid "Custom" msgstr "自訂" @@ -2320,9 +2279,8 @@ msgstr "自訂 G-code:" msgid "Custom G-code" msgstr "自訂 G-code" -#, fuzzy msgid "Enter Custom G-code used on current layer:" -msgstr "輸入目前層上使用的自訂 G-code:" +msgstr "輸入當層使用的自訂 G-code:" msgid "Jump to Layer" msgstr "轉換到層" @@ -2369,7 +2327,6 @@ msgstr "刪除自訂 G-code" msgid "Delete Filament Change" msgstr "刪除線材更換" -#, fuzzy msgid "No printer" msgstr "無列印設備" @@ -2392,17 +2349,14 @@ msgstr "無法連接到雲端服務" msgid "Please click on the hyperlink above to view the cloud service status" msgstr "請點擊上方的超連結以查看雲端服務狀態" -#, fuzzy msgid "Failed to connect to the printer" msgstr "無法連接列印設備" -#, fuzzy msgid "Connection to printer failed" msgstr "連接列印設備失敗" -#, fuzzy msgid "Please check the network connection of the printer and Orca." -msgstr "請檢查列印設備和 Orca Slicer 的網路連接" +msgstr "請檢查列印設備與 Orca Slicer 的網路連線" msgid "Connecting..." msgstr "連線中..." @@ -2489,11 +2443,11 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filaments." msgstr "" +"選擇一個 AMS 槽,然後按下「上料」或「退料」按鈕來自動加載或卸載耗材。" msgid "Edit" msgstr "編輯" -#, fuzzy msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." @@ -2504,7 +2458,6 @@ msgstr "" msgid "No arrangeable objects are selected." msgstr "未選擇欲排列的物件象。" -#, fuzzy msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." @@ -2519,10 +2472,9 @@ msgstr "自動擺放" msgid "Arranging canceled." msgstr "已取消自動擺放。" -#, fuzzy msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." -msgstr "已完成自動擺放,但是有未被擺到列印板內的物件,可在減小物件間距後重試。" +msgstr "已完成自動擺放,但是有未被擺到列印板內的物件,可縮小物件間距後再重試。" msgid "Arranging done." msgstr "已完成自動擺放。" @@ -2531,30 +2483,28 @@ msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "自動擺放失敗,處理物件位置時遇到異常。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Arrangement ignored the following objects which can't fit into a single " "bed:\n" "%s" msgstr "" -"自動擺放會忽略以下無法放入單一列印板的物件:\n" +"自動擺放忽略了以下無法放入單一列印板的物件:\n" "%s" -#, fuzzy msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" "所有選中的物件都處於被鎖定的列印板上,\n" -"無法對這些物件做自動定向。" +"無法對這些物件做自動轉向。" -#, fuzzy msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" "該列印板處於鎖定狀態,\n" -"無法對其進行自動定向。" +"無法對其進行自動轉向。" msgid "Orienting..." msgstr "自動旋轉方向..." @@ -2563,10 +2513,10 @@ msgid "Orienting" msgstr "自動旋轉方向..." msgid "Orienting canceled." -msgstr "" +msgstr "自動轉向已取消。" msgid "Filling" -msgstr "" +msgstr "填充中" msgid "Bed filling canceled." msgstr "填充列印板已取消。" @@ -2589,9 +2539,8 @@ msgstr "登入中" msgid "Login failed" msgstr "登入失敗" -#, fuzzy msgid "Please check the printer network connection." -msgstr "請檢查列印設備的網路連接。" +msgstr "請檢查列印設備的網路連線。" msgid "Abnormal print file data. Please slice again." msgstr "列印檔案資料異常,請重新切片" @@ -2619,7 +2568,6 @@ msgstr "無法傳送列印作業,請重試。" msgid "Failed to upload file to ftp. Please try again." msgstr "上傳檔案至 FTP 失敗,請重試。" -#, fuzzy msgid "" "Check the current status of the bambu server by clicking on the link above." msgstr "點擊上方的連結檢查 Bambu 伺服器的即時狀態。" @@ -2644,7 +2592,7 @@ msgid "Sending print job through cloud service" msgstr "正在通過雲端服務傳送列印作業" msgid "Print task sending times out." -msgstr "" +msgstr "連線逾時" msgid "Service Unavailable" msgstr "暫停服務" @@ -2672,13 +2620,12 @@ msgstr "透過區域網路傳送 gcode 檔案" msgid "Sending gcode file to sdcard" msgstr "傳送 gcode 檔案到 SD 記憶卡" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Successfully sent. Close current page in %s s" msgstr "傳送成功。即將關閉目前頁面(%s秒)" -#, fuzzy msgid "An SD card needs to be inserted before sending to printer." -msgstr "傳送到列印設備前需要先插入 SD 記憶卡。" +msgstr "列印設備要先插入SD卡才能接收傳送。" msgid "Importing SLA archive" msgstr "匯入 SLA 存檔" @@ -2687,7 +2634,7 @@ msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 印表機預設。" +"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 列印設備預設。" msgid "Importing canceled." msgstr "匯入已取消。" @@ -2702,10 +2649,10 @@ msgid "" msgstr "匯入的 SLA 存檔不包含任何預設。目前的 SLA 預設被用作備用選項。" msgid "You cannot load SLA project with a multi-part object on the bed" -msgstr "您無法在列印板上載入包含多部分物件的 SLA 項目" +msgstr "你無法在列印板上載入包含多部分物件的 SLA 項目" msgid "Please check your object list before preset changing." -msgstr "請在更改預設之前檢查您的物件清單。" +msgstr "請在更改預設之前檢查你的物件清單。" msgid "Attention!" msgstr "注意!" @@ -2737,15 +2684,14 @@ msgstr "版權" msgid "License" msgstr "憑證" -#, fuzzy msgid "Orca Slicer is licensed under " -msgstr " Orca Slicer 是在" +msgstr " Orca Slicer 授權於" msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero 通用公共許可證,版本 3 下授權的" +msgstr "GNU Affero 通用公共許可證,版本 3" msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" -msgstr "" +msgstr "Orca Slicer 基於 PrusaSlicer 與 BambuStudio" msgid "Libraries" msgstr "庫" @@ -2762,12 +2708,10 @@ msgstr "關於 %s" msgid "Orca Slicer " msgstr "Orca Slicer " -#, fuzzy msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "" -"Orca Slicer 是基於 Bambulab 的 BambuStudio, PrusaSlicer, and SuperSlicer 開發" +"Orca Slicer 是基於 BambuStudio, PrusaSlicer, 與 SuperSlicer 的開發" -#, fuzzy msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "BambuStudio 最初是基於 PrusaResearch 的 PrusaSlicer。" @@ -2831,18 +2775,18 @@ msgid "Setting Virtual slot information while printing is not supported" msgstr "不支援在列印時設定虛擬槽位資訊" msgid "Are you sure you want to clear the filament information?" -msgstr "您確定要清除線材資訊嗎?" +msgstr "你確定要清除線材資訊嗎?" msgid "You need to select the material type and color first." -msgstr "您需要先選擇線材類型和顏色。" +msgstr "你需要先選擇線材類型和顏色。" #, c-format, boost-format msgid "Please input a valid value (K in %.1f~%.1f)" -msgstr "" +msgstr "請輸入有效的數值 (K於 %.1f~%.1f 之間)" #, c-format, boost-format msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" -msgstr "" +msgstr "請輸入有效的數值 (K於 %.1f~%.1f 之間,N於 %.1f~%.1f 之間)" msgid "Other Color" msgstr "其他顏色" @@ -2864,7 +2808,6 @@ msgstr "" msgid "Nozzle Diameter" msgstr "噴嘴直徑" -#, fuzzy msgid "Bed Type" msgstr "列印板類型" @@ -2892,13 +2835,12 @@ msgstr "開始" msgid "Next" msgstr "下一步" -#, fuzzy msgid "" "Calibration completed. Please find the most uniform extrusion line on your " "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"校準完成。如下圖中的範例,請在您的熱床上找到最均勻完整的擠出線,並將其左側的" +"校準完成。如下圖中的範例,請在你的熱床上找到最均勻完整的擠出線,並將其左側的" "數值填入係數 K 欄位。" msgid "Save" @@ -2934,15 +2876,12 @@ msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "僅允許選擇放入同種材質線材的 AMS 槽位" -#, fuzzy msgid "Enable AMS" msgstr "使用 AMS" -#, fuzzy msgid "Print with filaments in the AMS" msgstr "使用 AMS 裡的線材列印" -#, fuzzy msgid "Disable AMS" msgstr "停用 AMS" @@ -2950,7 +2889,7 @@ msgid "Print with the filament mounted on the back of chassis" msgstr "使用機箱背後掛載的線材列印" msgid "Current Cabin humidity" -msgstr "" +msgstr "濕度" msgid "" "Please change the desiccant when it is too wet. The indicator may not " @@ -2958,11 +2897,13 @@ msgid "" "desiccant pack is changed. it take hours to absorb the moisture, low " "temperatures also slow down the process." msgstr "" +"當濕度太高時,請更換乾燥劑。在以下情況濕度指標可能會不準確:" +"開子打開時 或 乾燥劑剛換,乾燥劑需數小時才能有效吸收濕氣" +"低溫也會降低吸收速度" -#, fuzzy msgid "" "Config which AMS slot should be used for a filament used in the print job" -msgstr "設定列印作業中所使用的線材應使用哪個 AMS 插槽" +msgstr "設定列印作業中所使用的線材應使用哪個 AMS 槽" msgid "Filament used in this print job" msgstr "目前列印作業中使用的線材" @@ -2979,15 +2920,12 @@ msgstr "不使用 AMS" msgid "Print using materials mounted on the back of the case" msgstr "使用安裝在機箱背面的線材進行列印" -#, fuzzy msgid "Print with filaments in ams" msgstr "使用 AMS 裡的線材列印" -#, fuzzy msgid "Print with filaments mounted on the back of the chassis" -msgstr "使用掛載在機箱背部的線材列印" +msgstr "使用掛在機箱背部的線材列印" -#, fuzzy msgid "" "When the current material run out, the printer will continue to print in the " "following order." @@ -2996,30 +2934,27 @@ msgstr "當目前線材用完時,列印設備將按照以下順序繼續列印 msgid "Group" msgstr "組" -#, fuzzy msgid "The printer does not currently support auto refill." -msgstr "此列印設備目前不支援自動補給備用線材。" +msgstr "此列印設備目前不支援自動切換備用線材。" -#, fuzzy msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." -msgstr "AMS 備用線材自動補給未啟用,請在 AMS 設定中啟用。" +msgstr "AMS 備用線材自動切換未啟用,請在 AMS 設定中啟用。" -#, fuzzy msgid "" "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)" msgstr "" -"如果 AMS 中有兩個相同的線材,則會啟用 AMS 備用線材自動補給功能。\n" -"(目前支援同品牌、同材質、同顏色的耗材自動供應)" +"如果 AMS 中有兩個相同的線材,則會啟用 AMS 備用線材自動切換功能。\n" +"(目前支援同品牌、同材質、同顏色的線材自動切換)" msgid "DRY" -msgstr "" +msgstr "乾" msgid "WET" -msgstr "" +msgstr "濕" msgid "AMS Settings" msgstr "AMS 設定" @@ -3038,25 +2973,25 @@ msgid "" "Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" +"備註: 若在列印過程中插入新的線材,AMS會等到列印完成才會讀取線材資訊" msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" -"在插入一卷新線材時,AMS 將不會自動讀取線材資訊,預留一個空的線材資訊等待您手" +"在插入一卷新線材時,AMS 將不會自動讀取線材資訊,預留一個空的線材資訊等待你手" "動輸入。" msgid "Power on update" msgstr "開機時偵測" -#, fuzzy msgid "" "The AMS will automatically read the information of inserted filament on " "start-up. It will take about 1 minute.The reading process will roll filament " "spools." msgstr "" -"每次開機時,AMS 將會自動讀取其所插入的線材資訊(讀取過程會轉動線材卷)。需要" -"花時大約1分鐘。" +"每次開機時,AMS 將會自動讀取有插入的線材資訊(讀取過程會轉動線卷)。需要" +"花費大約1分鐘。" msgid "" "The AMS will not automatically read information from inserted filament " @@ -3064,9 +2999,8 @@ msgid "" "last shutdown." msgstr "AMS 不會在啟動時自動讀取線材資訊。它會使用上次關機前記錄的資訊。" -#, fuzzy msgid "Update remaining capacity" -msgstr "更新線材剩餘容量" +msgstr "更新線材剩餘量" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " @@ -3086,12 +3020,13 @@ msgid "" msgstr "AMS 線材耗盡後將自動切換到屬性完全相同的線材" msgid "Air Printing Detection" -msgstr "" +msgstr "偵測到憑空列印" msgid "" "Detects clogging and filament grinding, halting printing immediately to " "conserve time and filament." msgstr "" +"偵測到卡料,已暫停列印來節省時間與線材" msgid "File" msgstr "檔案" @@ -3099,17 +3034,15 @@ msgstr "檔案" msgid "Calibration" msgstr "校準" -#, fuzzy msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." -msgstr "套件下載失敗。請檢查您的防火牆設定和 VPN 軟體,檢查後重試。" +msgstr "插件下載失敗。請檢查你的防火牆設定和 VPN 軟體,檢查後重試。" -#, fuzzy msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." -msgstr "安裝套件失敗。請檢查是否被防毒軟體阻擋或刪除。" +msgstr "插件安裝失敗。請檢查是否被防毒軟體阻擋或刪除。" msgid "click here to see more info" msgstr "點擊這裡查看更多資訊" @@ -3117,11 +3050,10 @@ msgstr "點擊這裡查看更多資訊" msgid "Please home all axes (click " msgstr "請先執行回原點(點擊" -#, fuzzy msgid "" -") to locate the toolhead's position. This prevents device moving beyond the " +")to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." -msgstr ")操作以定位目前工具頭位置,以防止軸移動時超出邊界造成設備損壞" +msgstr ")來定位目前工具頭位置,以防止移動時超出邊界造成設備損壞" msgid "Go Home" msgstr "回原點" @@ -3165,7 +3097,7 @@ msgid "Running post-processing scripts" msgstr "執行後處理腳本" msgid "Successfully executed post-processing script" -msgstr "" +msgstr "完成執行後處理腳本" msgid "Unknown error occurred during exporting G-code." msgstr "匯出 G-code 期間發生未知錯誤。" @@ -3193,7 +3125,7 @@ msgid "" "Renaming of the G-code after copying to the selected destination folder has " "failed. Current path is %1%.tmp. Please try exporting again." msgstr "" -"複製到選取之目標檔案夾的 G-code 重命名失敗。當前路徑為%1%.tmp。請再試看看匯" +"複製到選取之目標檔案夾的 G-code 重命名失敗。目前路徑為%1%.tmp。請再試看看匯" "出。" #, boost-format @@ -3234,36 +3166,36 @@ msgstr "將臨時 G-Code 複製到輸出 G-Code 失敗" #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" -msgstr "計劃上傳到 `%1%`。請參閱視窗-> 列印設備上傳隊列" +msgstr "計劃上傳到 `%1%`。請參閱視窗-> 列印設備上傳佇列" msgid "Device" msgstr "設備" msgid "Task Sending" -msgstr "" +msgstr "傳送中" msgid "Task Sent" -msgstr "" +msgstr "傳送完成" msgid "Edit multiple printers" -msgstr "" +msgstr "編輯多個列印設備" msgid "Select connected printers (0/6)" -msgstr "" +msgstr "選擇已連線機台 (0/6)" #, c-format, boost-format msgid "Select Connected Printers (%d/6)" -msgstr "" +msgstr "選擇已連線機台 (%d/6)" #, c-format, boost-format msgid "The maximum number of printers that can be selected is %d" -msgstr "" +msgstr "最多可選擇 %d 台" msgid "Offline" msgstr "離線" msgid "No task" -msgstr "" +msgstr "無作業" msgid "View" msgstr "視角" @@ -3272,16 +3204,16 @@ msgid "N/A" msgstr "N/A" msgid "Edit Printers" -msgstr "" +msgstr "編輯機台" msgid "Device Name" -msgstr "" +msgstr "機台名稱" msgid "Task Name" -msgstr "" +msgstr "作業名稱" msgid "Device Status" -msgstr "" +msgstr "機台狀態" msgid "Actions" msgstr "" @@ -3289,6 +3221,7 @@ msgstr "" msgid "" "Please select the devices you would like to manage here (up to 6 devices)" msgstr "" +"請選擇要管理的設備(最多6台)" msgid "Add" msgstr "新增" @@ -3300,53 +3233,52 @@ msgid "Printing" msgstr "列印中" msgid "Upgrading" -msgstr "" +msgstr "升級中" msgid "Incompatible" msgstr "不相容的預設" msgid "syncing" -msgstr "" +msgstr "同步中" msgid "Printing Finish" -msgstr "" +msgstr "完成列印" msgid "Printing Failed" -msgstr "" +msgstr "列印失敗" msgid "Printing Pause" -msgstr "" +msgstr "列印暫停" msgid "Prepare" msgstr "準備" -#, fuzzy msgid "Slicing" msgstr "正在切片中" msgid "Pending" -msgstr "" +msgstr "待處理" msgid "Sending" -msgstr "" +msgstr "傳送中" msgid "Sending Finish" -msgstr "" +msgstr "傳送完成" msgid "Sending Cancel" -msgstr "" +msgstr "取消傳送" msgid "Sending Failed" -msgstr "" +msgstr "傳送失敗" msgid "Print Success" -msgstr "" +msgstr "列印成功" msgid "Print Failed" -msgstr "" +msgstr "列印失敗" msgid "Removed" -msgstr "" +msgstr "已移除" msgid "Resume" msgstr "繼續" @@ -3355,53 +3287,52 @@ msgid "Stop" msgstr "停止" msgid "Task Status" -msgstr "" +msgstr "狀態" msgid "Sent Time" -msgstr "" +msgstr "傳送時間" msgid "There are no tasks to be sent!" -msgstr "" +msgstr "無檔案可傳!" msgid "No historical tasks!" -msgstr "" +msgstr "無歷史記錄!" msgid "Loading..." msgstr "正在載入影片……" msgid "No AMS" -msgstr "" +msgstr "無 AMS" msgid "Send to Multi-device" -msgstr "" +msgstr "傳送給多個機台" msgid "Preparing print job" msgstr "正在準備列印作業" -#, fuzzy msgid "Abnormal print file data. Please slice again" msgstr "列印檔案資料異常,請重新切片" msgid "There is no device available to send printing." -msgstr "" +msgstr "沒有可用的機臺可以傳送列印" msgid "The number of printers in use simultaneously cannot be equal to 0." msgstr "" msgid "Use External Spool" -msgstr "" +msgstr "使用外掛線盤" msgid "Use AMS" -msgstr "" +msgstr "使用AMS" msgid "Select Printers" -msgstr "" +msgstr "選擇列印設備" msgid "Ams Status" -msgstr "" +msgstr "AMS狀態" msgid "Printing Options" -msgstr "" +msgstr "列印選項" msgid "Bed Leveling" msgstr "熱床調平" @@ -3413,10 +3344,10 @@ msgid "Flow Dynamic Calibration" msgstr "" msgid "Send Options" -msgstr "" +msgstr "傳送選項" msgid "Send to" -msgstr "" +msgstr "傳送到" msgid "" "printers at the same time.(It depends on how many devices can undergo " @@ -3465,11 +3396,10 @@ msgid "" "rectangle." msgstr "G-code 0,0 坐標相對於矩形框左前角的距離。" -#, fuzzy msgid "" -"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"Diameter of the print bed. It is assumed that origin (0,0)is located in the " "center." -msgstr "熱床直徑。假定原點(0,0) 位於中心。" +msgstr "熱床直徑。假定原點(0,0)位於中心。" msgid "Rectangular" msgstr "矩形" @@ -3511,11 +3441,9 @@ msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "所選檔案包含多個未連接的區域。不支援這種類型。" -#, fuzzy msgid "Choose a file to import bed texture from (PNG/SVG):" -msgstr "選擇(PNG/SVG) 檔案作為熱床紋理:" +msgstr "選擇(PNG/SVG)檔案作為熱床紋理:" -#, fuzzy msgid "Choose an STL file to import bed model from:" msgstr "選擇 STL 檔案來匯入熱床模型:" @@ -3526,14 +3454,16 @@ msgid "" "The recommended minimum temperature is less than 190 degree or the " "recommended maximum temperature is greater than 300 degree.\n" msgstr "" +"推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " "maximum temperature.\n" msgstr "" +"推薦的最小溫度不能高於推薦的最大溫度。\n" msgid "Please check.\n" -msgstr "" +msgstr "請檢查。\n" msgid "" "Nozzle may be blocked when the temperature is out of recommended range.\n" @@ -3557,16 +3487,15 @@ msgstr "" "最大體積速度設定過小\n" "重設為 0.5" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Current chamber temperature is higher than the material's safe temperature," "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" -"目前列印設備內部溫高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高安" +"目前列印設備內部溫度高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高安" "全溫度為:%d" -#, fuzzy msgid "" "Too small layer height.\n" "Reset to 0.2" @@ -3582,13 +3511,12 @@ msgstr "" "熨燙線距過小。\n" "將重設為 0.1。" -#, fuzzy msgid "" "Zero initial layer height is invalid.\n" "\n" "The first layer height will be reset to 0.2." msgstr "" -"首層層高為無效的 0 值。\n" +"0為無效的首層層高值。\n" "將被重設為0.2。" #, fuzzy @@ -3624,6 +3552,7 @@ msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " msgstr "" +"當確保垂直外殼厚度設為「全部」時,交錯額外牆壁效果不佳。" msgid "" "Change these settings automatically? \n" @@ -3631,6 +3560,9 @@ msgid "" "alternate extra wall\n" "No - Don't use alternate extra wall" msgstr "" +"是否自動更改這些設定?\n" +"是 - 將確保垂直外殼厚度設為中等並啟用交錯額外牆壁\n" +"否 - 不使用交錯額外牆壁" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -3639,9 +3571,9 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"擦拭塔不支援和自適應層高或支撐獨立層高。同時開啟\n" +"換料塔不支援和自適應層高或支撐獨立層高。同時開啟\n" "如何選擇?\n" -"是 - 選擇開啟擦拭塔\n" +"是 - 選擇開啟換料塔\n" "否 - 選擇保留自適應層高或支撐獨立層高" msgid "" @@ -3650,9 +3582,9 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"擦拭塔不支援和自適應層高同時開啟。\n" +"換料塔不支援和自適應層高同時開啟。\n" "如何選擇?\n" -"是 - 選擇開啟擦拭塔\n" +"是 - 選擇開啟換料塔\n" "否 - 選擇保留自適應層高" msgid "" @@ -3661,28 +3593,28 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"擦拭塔不支援和支撐獨立層高同時開啟。\n" +"換料塔不支援和支撐獨立層高同時開啟。\n" "如何選擇?\n" -"是 - 選擇開啟擦拭塔\n" +"是 - 選擇開啟換料塔\n" "否 - 選擇保留支撐獨立層高" msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" +"seam_slope_start_height 必須小於 layer_height。\n" +"重設為 0。" -#, fuzzy 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 結構機型將不產生縮時攝影。" -#, fuzzy msgid "" "Change these settings automatically? \n" "Yes - Change these settings and enable spiral mode automatically\n" @@ -3719,7 +3651,6 @@ msgstr "校準擠出補償" msgid "Scanning bed surface" msgstr "掃描熱床" -#, fuzzy msgid "Inspecting first layer" msgstr "檢查首層" @@ -3750,12 +3681,11 @@ msgstr "校準微型雷射雷達" msgid "Calibrating extrusion flow" msgstr "校準擠出流量" -#, fuzzy msgid "Paused due to nozzle temperature malfunction" -msgstr "噴嘴溫度異常暫停" +msgstr "暫停:噴嘴溫度異常" msgid "Paused due to heat bed temperature malfunction" -msgstr "熱床溫度異常暫停" +msgstr "暫停:熱床溫度異常" msgid "Filament unloading" msgstr "退料中" @@ -3772,15 +3702,12 @@ msgstr "電機噪音校準" msgid "Paused due to AMS lost" msgstr "由於 AMS 遺失而暫停" -#, fuzzy msgid "Paused due to low speed of the heat break fan" -msgstr "散熱風扇轉速過低導致暫停" +msgstr "暫停:散熱風扇轉速過低" -#, fuzzy msgid "Paused due to chamber temperature control error" -msgstr "列印設備內部溫度控制錯誤導致暫停" +msgstr "暫停:列印設備內部溫度控制錯誤" -#, fuzzy msgid "Cooling chamber" msgstr "列印設備內部溫度冷卻中" @@ -3797,10 +3724,10 @@ msgid "Cutter error pause" msgstr "" msgid "First layer error pause" -msgstr "" +msgstr "第一層錯誤暫停" msgid "Nozzle clog pause" -msgstr "" +msgstr "噴嘴賭賽暫停" msgid "Unknown" msgstr "未定義" @@ -3826,31 +3753,28 @@ msgstr "驗證失敗。" msgid "Update failed." msgstr "更新失敗。" -#, fuzzy msgid "" "The current chamber temperature or the target chamber temperature exceeds " "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -"TPU) is not allowed to be loaded." +"TPU)is not allowed to be loaded." msgstr "" -"目前設備內部溫度超過 45℃。為避免擠出機阻塞,不允許導入低溫線材(PLA / PETG / " +"目前設備內部溫度超過 45℃。為避免阻塞,不允許進料低溫線材(PLA / PETG / " "TPU)。" -#, fuzzy msgid "" -"Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " +"Low temperature filament(PLA/PETG/TPU)is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" -"為避免擠出機堵塞,設備內部溫度不允許設定在 45℃ 以上時將低溫線材(PLA / " -"PETG / TPU)導入擠出機中。" +"為避免堵塞,使用低溫線材(PLA / PETG / TPU)時,不充許將設備內部溫度" +"設置於45℃以上" -#, fuzzy msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" -"當您設定的設備內部溫度低於 40℃ 時,內部溫度控制將不會啟動。 且目標溫度將自動" +"當你設定的設備內部溫度低於 40℃ 時,內部溫度控制將不會啟動。 且目標溫度將自動" "設定為 0℃。" msgid "Failed to start printing job" @@ -3863,7 +3787,6 @@ msgstr "校準不支援目前選擇的噴嘴直徑" msgid "Current flowrate cali param is invalid" msgstr "目前流量校準參數無效" -#, fuzzy msgid "Selected diameter and machine diameter do not match" msgstr "所選噴嘴直徑與設備不匹配" @@ -3894,46 +3817,46 @@ msgstr "預設" #, boost-format msgid "Edit Custom G-code (%1%)" -msgstr "" +msgstr "編輯自訂 GOCDE(%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" -msgstr "" +msgstr "內建占位符(雙點擊加入GCODE)" msgid "Search gcode placeholders" -msgstr "" +msgstr "收尋GOCDE內的占位符" msgid "Add selected placeholder to G-code" -msgstr "" +msgstr "將占位符加到GCODE" msgid "Select placeholder" -msgstr "" +msgstr "占位符" msgid "[Global] Slicing State" -msgstr "" +msgstr "[全域]切片狀態" msgid "Read Only" -msgstr "" +msgstr "唯讀" msgid "Read Write" -msgstr "" +msgstr "讀寫" msgid "Slicing State" -msgstr "" +msgstr "切片狀態" msgid "Print Statistics" -msgstr "" +msgstr "列印數據" msgid "Objects Info" -msgstr "" +msgstr "物件資訊" msgid "Dimensions" -msgstr "" +msgstr "尺寸" msgid "Temperatures" msgstr "溫度" msgid "Timestamps" -msgstr "" +msgstr "時間戳記" #, boost-format msgid "Specific for %1%" @@ -3949,9 +3872,8 @@ msgid "Filament settings" msgstr "線材設定" msgid "SLA Materials settings" -msgstr "" +msgstr "SLA材料設定" -#, fuzzy msgid "Printer settings" msgstr "列印設備設定" @@ -3971,12 +3893,12 @@ msgstr "參數驗證" #, c-format, boost-format msgid "Value %s is out of range. The valid range is from %d to %d." -msgstr "" +msgstr "數值 %s 超出範圍。有效範圍是從 %d 到 %d。" msgid "Value is out of range." msgstr "值超出範圍。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Is it %s%% or %s %s?\n" "YES for %s%%, \n" @@ -3990,15 +3912,15 @@ msgstr "" msgid "" "Invalid input format. Expected vector of dimensions in the following format: " "\"%1%\"" -msgstr "輸入格式無效。預期向量應使用以下格式:“%1%”" +msgstr "輸入格式無效。預期向量應使用以下格式:\"%1%\"" msgid "Input value is out of range" msgstr "輸入值超出範圍" msgid "Some extension in the input is invalid" -msgstr "" +msgstr "輸入的副檔名無效。" -#, fuzzy, boost-format +#, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無效格式,應該是 \"%1%\" 這種格式" @@ -4027,35 +3949,27 @@ msgstr "層時間" msgid "Layer Time (log)" msgstr "層時間(對數)" -#, fuzzy msgid "Height: " msgstr "層高:" -#, fuzzy msgid "Width: " msgstr "線寬:" -#, fuzzy msgid "Speed: " msgstr "速度:" -#, fuzzy msgid "Flow: " msgstr "擠出流量:" -#, fuzzy msgid "Layer Time: " msgstr "層時間:" -#, fuzzy msgid "Fan: " msgstr "風扇速度:" -#, fuzzy msgid "Temperature: " msgstr "溫度:" -#, fuzzy msgid "Loading G-codes" msgstr "載入 G-code 中" @@ -4065,9 +3979,8 @@ msgstr "正在產生幾何頂點數據" msgid "Generating geometry index data" msgstr "正在產生幾何索引數據" -#, fuzzy msgid "Statistics of All Plates" -msgstr "所有列印板切片資訊" +msgstr "所有列印板數據" msgid "Display" msgstr "顯示" @@ -4077,7 +3990,7 @@ msgid "Flushed" msgstr "廢料" msgid "Tower" -msgstr "" +msgstr "塔" msgid "Total" msgstr "總計" @@ -4112,15 +4025,12 @@ msgstr "百分比" msgid "Used filament" msgstr "使用的線材" -#, fuzzy msgid "Layer Height (mm)" msgstr "層高(mm)" -#, fuzzy msgid "Line Width (mm)" -msgstr "線寬{mm)" +msgstr "線寬 (mm)" -#, fuzzy msgid "Speed (mm/s)" msgstr "速度(mm/s)" @@ -4130,9 +4040,8 @@ msgstr "風扇速度(%)" msgid "Temperature (°C)" msgstr "溫度(℃)" -#, fuzzy msgid "Volumetric flow rate (mm³/s)" -msgstr "體積流量速度(mm³/s)" +msgstr "體積流量(mm³/s)" msgid "Travel" msgstr "空駛" @@ -4173,7 +4082,6 @@ msgstr "顏色更換" msgid "Print" msgstr "列印" -#, fuzzy msgid "Printer" msgstr "列印設備" @@ -4190,10 +4098,10 @@ msgid "Normal mode" msgstr "普通模式" msgid "Total Filament" -msgstr "" +msgstr "總線材量" msgid "Model Filament" -msgstr "" +msgstr "模型線材量" msgid "Prepare time" msgstr "準備時間" @@ -4290,12 +4198,11 @@ msgid "Spacing" msgstr "間距" msgid "0 means auto spacing." -msgstr "" +msgstr "0 表示自動間距。" msgid "Auto rotate for arrangement" msgstr "自動旋轉以最佳化自動擺放效果" -#, fuzzy msgid "Allow multiple materials on same plate" msgstr "允許同一列印板中包含多種材料" @@ -4305,7 +4212,6 @@ msgstr "避開擠出校準區域" msgid "Align to Y axis" msgstr "與 Y 軸對齊" -#, fuzzy msgid "Add plate" msgstr "新增列印板" @@ -4328,7 +4234,6 @@ msgstr "拆分為零件" msgid "Assembly View" msgstr "組裝視角" -#, fuzzy msgid "Select Plate" msgstr "選擇列印板" @@ -4362,7 +4267,7 @@ msgstr "體積:" msgid "Size:" msgstr "尺寸:" -#, fuzzy, boost-format +#, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4370,7 +4275,6 @@ msgstr "" "發現 gcode 路徑在 %d 層,高為 %.2lf mm處的衝突。請將有衝突的物件分離得更遠" "(%s <-> %s)。" -#, fuzzy msgid "An object is layed over the boundary of plate." msgstr "偵測到有物件放在列印板的邊界上。" @@ -4448,10 +4352,10 @@ msgid "Enable" msgstr "開啟" msgid "Hostname or IP" -msgstr "" +msgstr "主機名稱或 IP" msgid "Custom camera source" -msgstr "" +msgstr "自訂相機來源" msgid "Show \"Live Video\" guide page." msgstr "顯示\"直播影片\"引導" @@ -4462,15 +4366,12 @@ msgstr "720p" msgid "1080p" msgstr "1080p" -#, fuzzy msgid "ConnectPrinter(LAN)" msgstr "連接列印設備(區域網路)" -#, fuzzy msgid "Please input the printer access code:" msgstr "請輸入列印設備訪問碼:" -#, fuzzy msgid "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" @@ -4500,7 +4401,7 @@ msgid "Preview" msgstr "預覽" msgid "Multi-device" -msgstr "" +msgstr "多臺設備" msgid "Project" msgstr "專案項目" @@ -4514,34 +4415,27 @@ msgstr "否" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "將會被關閉以建立新模型,是否繼續?" -#, fuzzy msgid "Slice plate" msgstr "切片單一列印板" -#, fuzzy msgid "Print plate" msgstr "列印單一列印板" -#, fuzzy msgid "Slice all" msgstr "切片所有列印板" msgid "Export G-code file" msgstr "匯出 G-code 檔案" -#, fuzzy msgid "Export plate sliced file" msgstr "匯出單一列印板切片檔案" -#, fuzzy msgid "Export all sliced file" msgstr "匯出所有列印板切片檔案" -#, fuzzy msgid "Print all" msgstr "列印所有列印板" -#, fuzzy msgid "Send all" msgstr "傳送所有列印板" @@ -4655,16 +4549,14 @@ msgid "Load a model" msgstr "載入模型" msgid "Import Zip Archive" -msgstr "" +msgstr "匯入壓縮檔" msgid "Load models contained within a zip archive" -msgstr "" +msgstr "載入壓縮檔中的模型" -#, fuzzy msgid "Import Configs" msgstr "匯入設定檔" -#, fuzzy msgid "Load configs" msgstr "載入設定檔" @@ -4672,10 +4564,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" @@ -4683,23 +4575,20 @@ msgstr "匯出通用 3MF" msgid "Export 3mf file without using some 3mf-extensions" msgstr "匯出不含 3mf 擴展的 3mf 檔案" -#, fuzzy msgid "Export current sliced file" msgstr "匯出目前已切片的檔案" -#, fuzzy msgid "Export all plate sliced file" msgstr "匯出所有列印板已切片的檔案" msgid "Export G-code" msgstr "匯出 G-code" -#, fuzzy msgid "Export current plate as G-code" msgstr "匯出目前列印板的 G-code" msgid "Export Preset Bundle" -msgstr "" +msgstr "匯出設定檔組" #, fuzzy msgid "Export current configuration to files" @@ -4742,7 +4631,6 @@ msgstr "刪除目前所選項目" msgid "Delete all" msgstr "全部刪除" -#, fuzzy msgid "Deletes all objects" msgstr "刪除所有物件" @@ -4753,10 +4641,10 @@ msgid "Clone copies of selections" msgstr "複製多份所選項目" msgid "Duplicate Current Plate" -msgstr "" +msgstr "複製列印板" msgid "Duplicate the current plate" -msgstr "" +msgstr "複製目前列印板" msgid "Select all" msgstr "選取所有" @@ -4777,10 +4665,10 @@ msgid "Use Orthogonal View" msgstr "使用正交視角" msgid "Show &G-code Window" -msgstr "" +msgstr "顯示 G-code" msgid "Show g-code window in Preview scene" -msgstr "" +msgstr "在預覽分頁中顯示 G-code 視窗" msgid "Show 3D Navigator" msgstr "" @@ -4789,10 +4677,10 @@ msgid "Show 3D navigator in Prepare and Preview scene" msgstr "" msgid "Reset Window Layout" -msgstr "" +msgstr "重設視窗配置" msgid "Reset to default window layout" -msgstr "" +msgstr "恢復預設視窗配置" msgid "Show &Labels" msgstr "顯示名稱" @@ -4807,10 +4695,10 @@ msgid "Show object overhang highlight in 3D scene" msgstr "在 3D 場景中凸顯懸空" msgid "Show Selected Outline (Experimental)" -msgstr "" +msgstr "顯示選取輪廓(實驗性)" msgid "Show outline around selected object in 3D scene" -msgstr "" +msgstr "在 3D 場景中顯示選定物件的輪廓。" msgid "Preferences" msgstr "偏好設定" @@ -4834,16 +4722,16 @@ msgid "Flow rate test - Pass 2" msgstr "流量測試 - 通過 2" msgid "YOLO (Recommended)" -msgstr "" +msgstr "YOLO (建議)" msgid "Orca YOLO flowrate calibration, 0.01 step" -msgstr "" +msgstr "Orca YOLO 流量校正,0.01 步" msgid "YOLO (perfectionist version)" -msgstr "" +msgstr "YOLO (完美主義者模式)" msgid "Orca YOLO flowrate calibration, 0.005 step" -msgstr "" +msgstr "Orca YOLO 流量校正,0.005 步" msgid "Flow rate" msgstr "流量" @@ -4885,7 +4773,6 @@ msgstr "打開 G-code 檔案" msgid "Re&load from Disk" msgstr "從磁碟重新載入" -#, fuzzy msgid "Reload the plater from disk" msgstr "從磁碟重新載入" @@ -4917,24 +4804,22 @@ msgstr "視角" msgid "&Help" msgstr "幫助" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." msgstr "有一個同名稱的檔案 %s。要覆蓋它嗎?" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." msgstr "有一個同名稱的設定檔 %s。要覆蓋它嗎?" msgid "Overwrite file" msgstr "覆蓋檔案" -#, fuzzy msgid "Yes to All" msgstr "全部覆蓋" -#, fuzzy msgid "No to All" -msgstr "放棄" +msgstr "全部放棄" msgid "Choose a directory" msgstr "選擇目錄" @@ -4961,6 +4846,8 @@ msgid "" "Hint: Make sure you have added the corresponding printer before importing " "the configs." msgstr "" +"\n" +"提示:在匯入設定之前,請確保已添加對應的列印設備。" msgid "Import result" msgstr "匯入結果" @@ -4974,7 +4861,6 @@ msgstr "此項目不可用。" msgid "Filament Settings" msgstr "線材設定" -#, fuzzy msgid "" "Do you want to synchronize your personal data from Bambu Cloud? \n" "It contains the following information:\n" @@ -4982,11 +4868,11 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"想從 Bambu 雲端同步你的個人數據嗎?\n" -"包含如下資訊:\n" -"1. 列印參數預設檔\n" -"2. 線材預設檔\n" -"3. 列印設備預設檔" +"從 Bambu 雲端同步你的個人數據嗎?\n" +"包含以下資訊:\n" +"1. 列印參數設定\n" +"2. 線材設定\n" +"3. 列印設備設定" msgid "Synchronization" msgstr "同步" @@ -4995,45 +4881,48 @@ msgid "The device cannot handle more conversations. Please retry later." msgstr "" msgid "Player is malfunctioning. Please reinstall the system player." -msgstr "" +msgstr "播放器故障。請重新安裝系統播放器。" msgid "The player is not loaded, please click \"play\" button to retry." -msgstr "" +msgstr "播放器未載入,請點擊「播放」按鈕重試。" msgid "Please confirm if the printer is connected." -msgstr "" +msgstr "請確認列印設備是否已連接。" msgid "" "The printer is currently busy downloading. Please try again after it " "finishes." msgstr "" +"列印機目前正忙於下載。請待下載完成後再試一次。" msgid "Printer camera is malfunctioning." -msgstr "" +msgstr "列印設備攝影機故障。" msgid "Problem occurred. Please update the printer firmware and try again." -msgstr "" +msgstr "發生問題。請更新列印設備韌體後再試一次。" msgid "" "LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" +"僅 LAN 模式的LiveView已關閉。請在列印機螢幕上開啟LiveView。" msgid "Please enter the IP of printer to connect." -msgstr "" +msgstr "請輸入列印設備的 IP 以進行連接。" msgid "Initializing..." msgstr "正在初始化……" msgid "Connection Failed. Please check the network and try again" -msgstr "" +msgstr "連線失敗。請檢查網路並重試。" msgid "" "Please check the network and try again, You can restart or update the " "printer if the issue persists." msgstr "" +"請檢查網路並重試。如果問題持續,你可以重新啟動或更新列印設備。" msgid "The printer has been logged out and cannot connect." -msgstr "" +msgstr "列印設備已登出,無法連接。" msgid "Stopped." msgstr "已經停止。" @@ -5044,7 +4933,7 @@ msgstr "區域網路連接失敗(無法啟動直播)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" -msgstr "該功能需要“虛擬攝影機工具包”,是否下載並安裝該工具包?" +msgstr "該功能需要\"虛擬攝影機工具包\",是否下載並安裝該工具包?" #, fuzzy msgid "Downloading Virtual Camera Tools" @@ -5102,14 +4991,12 @@ msgstr "切換到影片檔案清單" msgid "Switch to 3mf model files." msgstr "切換到 3MF 模型檔案。" -#, fuzzy msgid "Delete selected files from printer." msgstr "從列印設備中刪除選中的檔案" msgid "Download" msgstr "下載" -#, fuzzy msgid "Download selected files from printer." msgstr "從列印設備中下載選中的檔案" @@ -5123,7 +5010,7 @@ msgid "Refresh" msgstr "刷新" msgid "Reload file list from printer." -msgstr "" +msgstr "從列印機重新載入檔案清單。" #, fuzzy msgid "No printers." @@ -5137,10 +5024,10 @@ msgid "Loading file list..." msgstr "載入檔案清單..." msgid "No files" -msgstr "" +msgstr "無檔案" msgid "Load failed" -msgstr "" +msgstr "載入失敗" msgid "Initialize failed (Device connection not ready)!" msgstr "初始化失敗(未連接列印設備)" @@ -5149,15 +5036,16 @@ msgid "" "Browsing file in SD card is not supported in current firmware. Please update " "the printer firmware." msgstr "" +"目前韌體不支援瀏覽 SD 卡中的檔案。請更新列印機韌體。" msgid "Initialize failed (Storage unavailable, insert SD card.)!" -msgstr "" +msgstr "初始化失敗(存儲不可用,請插入 SD 卡)。" msgid "LAN Connection Failed (Failed to view sdcard)" -msgstr "" +msgstr "LAN 連線失敗(無法查看 SD 卡)。" msgid "Browsing file in SD card is not supported in LAN Only Mode." -msgstr "" +msgstr "在僅 LAN 模式下不支援瀏覽 SD 卡中的檔案。" #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -5172,7 +5060,7 @@ msgstr[0] "將從列印設備中刪除 %u 個檔案。確定要繼續嗎?" msgid "Delete files" msgstr "刪除檔案" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Do you want to delete the file '%s' from printer?" msgstr "確定要從列印設備中刪除檔案 '%s' 嗎?" @@ -5183,10 +5071,10 @@ msgid "Fetching model information..." msgstr "正在獲取模型資訊..." msgid "Failed to fetch model information from printer." -msgstr "" +msgstr "無法從列印設備獲取模型資訊。" msgid "Failed to parse model information." -msgstr "" +msgstr "解析模型資訊失敗。" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -5225,24 +5113,23 @@ msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." msgstr "" +"重新連接列印機,操作無法立即完成,請稍後再試。" msgid "File does not exist." -msgstr "" +msgstr "檔案不存在。" msgid "File checksum error. Please retry." -msgstr "" +msgstr "檔案核對和錯誤。請重試。" -#, fuzzy msgid "Not supported on the current printer version." msgstr "目前列印設備的版本不支援。" -#, fuzzy msgid "Storage unavailable, insert SD card." -msgstr "儲存不可用,請插入 SD 記憶卡。" +msgstr "無儲存空間,請插入 SD 記憶卡。" #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "錯誤代碼:%d" msgid "Speed:" msgstr "速度:" @@ -5302,13 +5189,13 @@ msgid "" msgstr "已經完成了 MakeWorld 模型的列印,但評論資料同步失敗。" msgid "How do you like this printing file?" -msgstr "您覺得這個列印檔案怎麼樣?" +msgstr "你覺得這個列印檔案怎麼樣?" #, fuzzy msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" -msgstr "(此模型已被評價。您的評價將覆蓋先前的評價。)" +msgstr "(此模型已被評價。你的評價將覆蓋先前的評價。)" msgid "Rate" msgstr "速率" @@ -5323,7 +5210,7 @@ msgid "Camera Setting" msgstr "攝影機設定" msgid "Switch Camera View" -msgstr "" +msgstr "切換相機視角" msgid "Control" msgstr "控制" @@ -5352,7 +5239,6 @@ msgstr "熱床" msgid "Debug Info" msgstr "除錯資訊" -#, fuzzy msgid "No SD Card" msgstr "無 SD 記憶卡" @@ -5371,15 +5257,15 @@ msgstr "下載中..." msgid "Cloud Slicing..." msgstr "雲端切片中..." -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." -msgstr "前面還有 %s 個任務在雲端切片隊列中" +msgstr "雲端切片佇列中,前面還有 %s 個檔案" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Layer: %s" msgstr "%s 層" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Layer: %d/%d" msgstr "%d/%d 層" @@ -5387,6 +5273,7 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"請在上料或退料之前將噴嘴加熱至 170 度以上。" msgid "Still unload" msgstr "繼續退料" @@ -5405,25 +5292,20 @@ msgstr "無法讀取線材資訊:線材已經載入到工具頭,請退出線 msgid "This only takes effect during printing" msgstr "僅在列印過程中生效" -#, fuzzy msgid "Silent" msgstr "靜音模式(50%)" -#, fuzzy msgid "Standard" msgstr "標準模式(100%)" -#, fuzzy msgid "Sport" msgstr "運動模式(125%)" -#, fuzzy msgid "Ludicrous" msgstr "狂暴模式(150%)" -#, fuzzy msgid "Can't start this without SD card." -msgstr "沒有 SD 記憶卡無法開始任務" +msgstr "沒有 SD 記憶卡無法開始" msgid "Rate the Print Profile" msgstr "評價列印設定檔" @@ -5494,11 +5376,10 @@ msgid "" "\n" " error code: " msgstr "" -"由於某些原因,您的評論結果無法上傳。如下:\n" +"由於某些原因,你的評論結果無法上傳。如下:\n" "\n" "錯誤代碼: " -#, fuzzy msgid "error message: " msgstr "錯誤訊息:" @@ -5509,15 +5390,15 @@ msgid "" 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 張圖片。" +msgstr "你最多可以選擇 16 張圖片。" msgid "" "At least one successful print record of this print profile is required \n" @@ -5569,27 +5450,28 @@ msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." msgstr "" +"該 3MF 檔案版本為測試版,並且較目前的 OrcaSlicer 版本更新。" msgid "If you would like to try Orca Slicer Beta, you may click to" -msgstr "" +msgstr "如果你想嘗試 Orca Slicer 測試版,可以點擊以下載。" msgid "Download Beta Version" -msgstr "" +msgstr "下載測試版" msgid "The 3mf file version is newer than the current Orca Slicer version." -msgstr "" +msgstr "該 3MF 檔案版本較目前的 Orca Slicer 版本更新。" msgid "Update your Orca Slicer could enable all functionality in the 3mf file." -msgstr "" +msgstr "更新你的 Orca Slicer 以啟用 3MF 檔案中的所有功能。" msgid "Current Version: " -msgstr "" +msgstr "目前版本" msgid "Latest Version: " -msgstr "" +msgstr "最新版本" msgid "Not for now" -msgstr "" +msgstr "現在不要" #, fuzzy msgid "3D Mouse disconnected." @@ -5611,15 +5493,14 @@ msgstr "整合失敗。" msgid "Undo integration was successful." msgstr "整合取消成功。" -#, fuzzy msgid "New network plug-in available." -msgstr "新的網路套件可用。" +msgstr "網路插件有可用的更新。" msgid "Details" msgstr "詳細" msgid "New printer config available." -msgstr "" +msgstr "有新的列印機設定可用。" msgid "Wiki" msgstr "Wiki" @@ -5678,7 +5559,6 @@ msgstr "錯誤:" msgid "Warning:" msgstr "警告:" -#, fuzzy msgid "Export successfully." msgstr "匯出成功。" @@ -5706,7 +5586,6 @@ msgstr "Gcode 路徑有重疊" msgid "Support painting" msgstr "支撐繪製" -#, fuzzy msgid "Color painting" msgstr "上色" @@ -5725,7 +5604,7 @@ msgid "" msgstr "應用程式無法正常運行,因為 OpenGL 的版本低於 2.0。\n" msgid "Please upgrade your graphics card driver." -msgstr "請升級您的顯示卡驅動。" +msgstr "請升級你的顯示卡驅動。" msgid "Unsupported OpenGL version" msgstr "不支援的 OpenGL 版本" @@ -5772,29 +5651,29 @@ msgid "Allow Prompt Sound" msgstr "允許提示音效" msgid "Filament Tangle Detect" -msgstr "" +msgstr "線材打結偵測" msgid "Nozzle Clumping Detection" -msgstr "" +msgstr "噴嘴堵塞偵測" msgid "Check if the nozzle is clumping by filament or other foreign objects." -msgstr "" +msgstr "檢查噴嘴是否因線材或其他異物而堵塞。" msgid "Nozzle Type" -msgstr "" +msgstr "噴嘴類型" msgid "Stainless Steel" -msgstr "" +msgstr "不鏽鋼" msgid "Hardened Steel" -msgstr "" +msgstr "硬化鋼" #, c-format, boost-format msgid "%.1f" msgstr "" msgid "Global" -msgstr "全局" +msgstr "全域" msgid "Objects" msgstr "物件" @@ -5802,47 +5681,41 @@ msgstr "物件" msgid "Advance" msgstr "高級" -#, fuzzy msgid "Compare presets" -msgstr "比較預設檔" +msgstr "比較設定" msgid "View all object's settings" msgstr "查看所有物件的設定" msgid "Material settings" -msgstr "" +msgstr "材料設定" -#, fuzzy msgid "Remove current plate (if not last one)" msgstr "刪除目前列印板(如果不是最後一個)" -#, fuzzy msgid "Auto orient objects on current plate" -msgstr "自動選轉列印板上物件方向" +msgstr "自動轉向列印板上物件" -#, fuzzy msgid "Arrange objects on current plate" msgstr "自動擺放列印板上物件" -#, fuzzy msgid "Unlock current plate" msgstr "解鎖列印板" -#, fuzzy msgid "Lock current plate" msgstr "鎖定列印板" msgid "Edit current plate name" -msgstr "" +msgstr "編輯列印板名稱" msgid "Move plate to the front" -msgstr "" +msgstr "更改列印板順序至前" #, fuzzy msgid "Customize current plate" msgstr "自訂列印板參數" -#, fuzzy, boost-format +#, boost-format msgid " plate %1%:" msgstr "列印板 %1%:" @@ -5852,15 +5725,12 @@ msgstr "無效名稱,不允許使用以下字元:" msgid "Sliced Info" msgstr "切片資訊" -#, fuzzy msgid "Used Filament (m)" msgstr "線材消耗長度(m)" -#, fuzzy msgid "Used Filament (mm³)" msgstr "線材消耗體積(mm³)" -#, fuzzy msgid "Used Filament (g)" msgstr "線材消耗重量(克)" @@ -5880,7 +5750,6 @@ msgstr "點擊編輯預設檔設定" msgid "Connection" msgstr "連接" -#, fuzzy msgid "Bed type" msgstr "列印板類型" @@ -5896,30 +5765,27 @@ msgstr "刪除最後一個線材" msgid "Synchronize filament list from AMS" msgstr "從 AMS 同步線材清單" -#, fuzzy msgid "Set filaments to use" msgstr "設定可選擇的線材" msgid "Search plate, object and part." -msgstr "" +msgstr "搜尋列印板、物件和零件。" msgid "Pellets" -msgstr "" +msgstr "顆粒" -#, fuzzy msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." -msgstr "沒有發現 AMS 線材。請在“設備”頁面選擇列印設備,將載入 AMS 資訊" +msgstr "沒有發現 AMS 線材。請在\"設備\"頁面選擇列印設備,載入 AMS 資訊" msgid "Sync filaments with AMS" msgstr "同步到 AMS 的線材清單" -#, fuzzy msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"同步到 AMS 的線材清單將刪除所有目前設定的線材預設檔、顏色。確定要繼續嗎?" +"同步 AMS 的線材資訊將會刪除所有目前設定的線材設定與顏色。確定要繼續嗎?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -5935,32 +5801,30 @@ msgstr "重新同步所有" msgid "There are no compatible filaments, and sync is not performed." msgstr "沒有任何相容的線材,同步操作未執行。" -#, fuzzy msgid "" "There are some unknown filaments mapped to generic preset. Please update " "Orca Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"有一些未知型號的線材,映射到通用預設檔。請更新或者重啟 Orca Slicer,以檢查系" -"統預設檔有沒有更新。" +"有一些未知型號的線材套用於通用預設上。請更新或者重啟 Orca Slicer,以檢查系" +"統預設檔有無更新。" -#, fuzzy, boost-format +#, boost-format msgid "Do you want to save changes to \"%1%\"?" -msgstr "是否儲存修改到 \"%1%\"?" +msgstr "是否儲存變更到 \"%1%\"?" #, fuzzy, c-format, boost-format msgid "" -"Successfully unmounted. The device %s(%s) can now be safely removed from the " +"Successfully unmounted. The device %s(%s)can now be safely removed from the " "computer." -msgstr "卸載成功。設備 %s(%s) 現在可能安全地從電腦移除。" +msgstr "卸載成功。設備 %s(%s)現在可能安全地從電腦移除。" -#, fuzzy, c-format, boost-format -msgid "Ejecting of device %s(%s) has failed." -msgstr "退出設備 %s(%s) 失敗。" +#, c-format, boost-format +msgid "Ejecting of device %s(%s)has failed." +msgstr "退出設備 %s(%s)失敗。" -#, fuzzy msgid "Previous unsaved project detected, do you want to restore it?" -msgstr "偵測到有未儲存的專案項目,是否恢復此專案項目?" +msgstr "偵測到有未儲存的專案,是否恢復此專案?" msgid "Restore" msgstr "恢復" @@ -5973,13 +5837,12 @@ msgstr "" "目前熱床溫度比較高。在封閉的列印設備中列印該線材時,噴嘴可能會堵塞。請打開前" "門和/或拆下上部玻璃。" -#, fuzzy msgid "" "The nozzle hardness required by the filament is higher than the default " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化的噴嘴或線材,否則" +"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化噴嘴或線材,否則" "噴嘴可能被磨損或損壞。" msgid "" @@ -6003,16 +5866,16 @@ msgstr "該 3mf 檔案不是來自 Orca Slicer,將只載入幾何數據。" msgid "Load 3mf" msgstr "載入 3mf" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" -msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,發現以下參數值無法識別:" +msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,以下參數值無法識別:" msgid "You'd better upgrade your software.\n" -msgstr "建議升級您的軟體版本。\n" +msgstr "建議升級你的軟體版本。\n" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." @@ -6026,28 +5889,29 @@ 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 檔案在耗材或列印機預設中具有以下修改過的 GCODE:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"請確認這些修改過的 GCODE 是安全的,以防止對機器造成任何損壞!" msgid "Modified G-codes" -msgstr "" +msgstr "已修改的 GCODE" 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 "" +"請確認這些預設中的 GCODE 是安全的,以防止對機器造成任何損壞!" msgid "Customized Preset" msgstr "" -#, fuzzy msgid "Name of components inside step file is not UTF8 format!" msgstr "step 檔案中的零件名稱包含非 UTF8 格式的字元!" @@ -6057,24 +5921,23 @@ msgstr "此名稱可能顯示亂碼字元!" msgid "Remember my choice." msgstr "記住我的選擇。" -#, fuzzy, boost-format +#, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "載入檔案 \"%1%\" 失敗。發現無效設定值。" -#, fuzzy msgid "Objects with zero volume removed" msgstr "體積為零的物件已被移除" msgid "The volume of the object is zero" msgstr "物件的體積為零" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "The object from file %s is too small, and maybe in meters or inches.\n" " Do you want to scale to millimeters?" msgstr "" "文件 %s 中的物件太小,可能以公尺(M)或英吋(Inches)為單位。\n" -"是否要轉換成公厘(mm)?" +"是否要轉換成毫米(mm)?" msgid "Object too small" msgstr "物件尺寸過小" @@ -6124,9 +5987,11 @@ msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"檔案 %s 已存在" +"您確定要替換它嗎?" msgid "Confirm Save As" -msgstr "" +msgstr "確認另存為" msgid "Delete object which is a part of cut object" msgstr "刪除切割物件的一部分" @@ -6136,7 +6001,7 @@ msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed." msgstr "" -"您正嘗試刪除切割物件的一部分,這將破壞切割對應關係,刪除之後,將無法再保證模" +"你正嘗試刪除切割物件的一部分,這將破壞切割對應關係,刪除之後,將無法再保證模" "型的一致性。" msgid "The selected object couldn't be split." @@ -6190,17 +6055,16 @@ msgstr "無效數據" msgid "Slicing Canceled" msgstr "切片已取消" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Slicing Plate %d" msgstr "正在切片列印板 %d" msgid "Please resolve the slicing errors and publish again." msgstr "請解決切片錯誤後再重新發布。" -#, fuzzy msgid "" "Network Plug-in is not detected. Network related features are unavailable." -msgstr "未偵測到網路套件。網路相關功能不可用。" +msgstr "未偵測到網路插件。網路相關功能不可用。" msgid "" "Preview only mode:\n" @@ -6211,11 +6075,10 @@ msgstr "" #, fuzzy msgid "You can keep the modified presets to the new project or discard them" -msgstr "您可以將修改後的預設檔保留到新專案項目中或者忽略這些修改" +msgstr "你可以將修改後的預設檔保留到新專案項目中或者忽略這些修改" -#, fuzzy msgid "Creating a new project" -msgstr "建立新專案項目" +msgstr "建立新專案" msgid "Load project" msgstr "載入專案項目" @@ -6237,17 +6100,17 @@ msgid "prepare 3mf file..." msgstr "正在準備 3mf 檔案..." msgid "Download failed, unknown file format." -msgstr "" +msgstr "下載失敗,未知的檔案格式。" msgid "downloading project ..." msgstr "專案項目下載中..." msgid "Download failed, File size exception." -msgstr "" +msgstr "下載失敗,檔案大小異常。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "專案項目已下載 %d%%" +msgstr "專案已下載 %d%%" msgid "" "Importing to Orca Slicer failed. Please download the file and manually " @@ -6269,16 +6132,16 @@ msgstr "載入 G-code 檔案時遇到錯誤" #. TRN %1% is archive path #, boost-format msgid "Loading of a ZIP archive on path %1% has failed." -msgstr "" +msgstr "載入路徑 %1% 的 ZIP 檔案失敗。" #. TRN: First argument = path to file, second argument = error description #, boost-format msgid "Failed to unzip file to %1%: %2%" -msgstr "" +msgstr "無法將檔案解壓縮到 %1%:%2%" #, boost-format msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." -msgstr "" +msgstr "無法找到解壓縮的檔案 %1%。解壓縮檔案失敗。" #, fuzzy msgid "Drop project file" @@ -6308,9 +6171,8 @@ msgstr "在預覽模式不允許增加模型" msgid "All objects will be removed, continue?" msgstr "即將刪除所有物件,是否繼續?" -#, fuzzy msgid "The current project has unsaved changes, save it before continue?" -msgstr "目前專案項目包含未儲存的修改,是否先儲存?" +msgstr "目前專案包含未儲存的修改,是否先儲存?" msgid "Number of copies:" msgstr "複製數量:" @@ -6334,7 +6196,7 @@ msgstr "FAT 檔案系統不允許使用以下字元:" msgid "Save Sliced file as:" msgstr "切片檔案另存為:" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." @@ -6344,22 +6206,23 @@ msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " "will be kept. You may fix the meshes and try again." msgstr "" +"無法對模型網格執行布林運算。只有正向部分會被保留。你可以修正網格後再試一次。" #, boost-format msgid "Reason: part \"%1%\" is empty." -msgstr "" +msgstr "原因:\"%1%\"無物件" #, boost-format msgid "Reason: part \"%1%\" does not bound a volume." -msgstr "" +msgstr "原因:零件\"%1%\"無體積" #, boost-format msgid "Reason: part \"%1%\" has self intersection." -msgstr "" +msgstr "原因:零件\"%1%\"" #, boost-format msgid "Reason: \"%1%\" and another part have no intersection." -msgstr "" +msgstr "原因:\"%1%\" 與另一個零件沒有交集" #, fuzzy msgid "" @@ -6372,6 +6235,8 @@ msgid "" "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"你確定要將原始 SVG 檔案及其本地路徑儲存到 3MF 檔案中嗎?" +"如果選擇「否」,專案中的所有 SVG 將不再可編輯。" msgid "Private protection" msgstr "" @@ -6394,29 +6259,26 @@ msgstr "" msgid "Send G-code" msgstr "傳送 G-code" -#, fuzzy msgid "Send to printer" msgstr "傳送到列印設備" -#, fuzzy msgid "Custom supports and color painting were removed before repairing." -msgstr "自訂的支撐和上色在模型修復之前將被清除。" +msgstr "自訂的支撐和上色在模型修復之前被清除了。" msgid "Optimize Rotation" -msgstr "" +msgstr "優化旋轉" msgid "Invalid number" msgstr "無效數字" -#, fuzzy msgid "Plate Settings" msgstr "列印板參數設定" -#, fuzzy, boost-format +#, boost-format msgid "Number of currently selected parts: %1%\n" msgstr "目前選擇的零件數量:%1%\n" -#, fuzzy, boost-format +#, boost-format msgid "Number of currently selected objects: %1%\n" msgstr "目前選擇的物件數量:%1%\n" @@ -6432,15 +6294,15 @@ msgstr "物件名字:%1%\n" msgid "Size: %1% x %2% x %3% in\n" msgstr "大小:%1% x %2% x %3% 英寸\n" -#, fuzzy, boost-format +#, boost-format msgid "Size: %1% x %2% x %3% mm\n" -msgstr "大小: %1% x %2% x %3% m\n" +msgstr "大小: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" msgstr "體積: %1% 英寸³\n" -#, fuzzy, boost-format +#, boost-format msgid "Volume: %1% mm³\n" msgstr "體積: %1% mm³\n" @@ -6451,15 +6313,14 @@ msgstr "三角形:%1%\n" msgid "Tips:" msgstr "提示:" -#, fuzzy msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Orca Slicer(windows)or CAD softwares." msgstr "" "\"修復模型\"功能目前僅適用於 Windows 系統。請在 Windows 版本的 Orca slicer " "或 CAD 軟體上修復模型。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Plate% d: %s is not suggested to be used to print filament %s(%s). If you " "still want to do this printing, please set this filament's bed temperature " @@ -6484,7 +6345,7 @@ msgid "Changing application language" msgstr "正在為應用程式切換語言" msgid "Changing the region will log out your account.\n" -msgstr "修改區域會自動登出您的帳號。\n" +msgstr "修改區域會自動登出你的帳號。\n" msgid "Region selection" msgstr "區域選擇" @@ -6513,7 +6374,6 @@ msgstr "" msgid "Current Instance Path: " msgstr "" -#, fuzzy msgid "General Settings" msgstr "一般設定" @@ -6542,12 +6402,14 @@ msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +"這會停止數據傳輸到 Bambu 的雲端服務。" +"使用者如果不使用 Bambu 機台或僅使用區域網路模式,可以安全地啟用此功能。" msgid "Enable network plugin" -msgstr "" +msgstr "啟用網路插件" msgid "Check for stable updates only" -msgstr "" +msgstr "僅檢查穩定版更新" msgid "Metric" msgstr "公制" @@ -6559,7 +6421,7 @@ msgid "Units" msgstr "單位" msgid "Allow only one OrcaSlicer instance" -msgstr "" +msgstr "僅允許一個 OrcaSlicer 程序" msgid "" "On OSX there is always only one instance of app running by default. However " @@ -6567,13 +6429,15 @@ msgid "" "In such case this settings will allow only one instance." msgstr "" "在 OSX 上,預設情況下總是只有一個應用程式實例在運行。但是卻允許從命令視窗執行" -"同一應用程式的多個實例。當您設定了這個設定後將只允許一個實例執行。" +"同一應用程式的多個實例。當你設定了這個設定後將只允許一個實例執行。" msgid "" "If this is enabled, when starting OrcaSlicer and another instance of the " "same OrcaSlicer is already running, that instance will be reactivated " "instead." msgstr "" +"啟用後,嘗試開起 OrcaSlicer 時若有另一個 OrcaSlicer 程序已在運行時," +"已在運行的程序會被重新啟動。" msgid "Home" msgstr "首頁" @@ -6585,16 +6449,19 @@ msgid "Set the page opened on startup." msgstr "設定為啟動頁面。" msgid "Touchpad" -msgstr "" +msgstr "觸控板" msgid "Camera style" -msgstr "" +msgstr "相機模式" msgid "" "Select camera navigation style.\n" "Default: LMB+move for rotation, RMB/MMB+move for panning.\n" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" +"選擇相機導航樣式。" +"預設:左鍵+移動旋轉,右鍵/中鍵+移動平移。" +"觸控板:Alt+移動旋轉,Shift+移動平移。" msgid "Zoom to mouse position" msgstr "放大到滑鼠位置" @@ -6611,10 +6478,10 @@ msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "如果啟用,則使用自由鏡頭。若未啟用,則使用受限鏡頭。" msgid "Reverse mouse zoom" -msgstr "" +msgstr "反轉滑鼠滾輪縮放方向" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "" +msgstr "啟用後,改變滑鼠滾輪縮放方向" msgid "Show splash screen" msgstr "顯示啟動動畫" @@ -6622,7 +6489,6 @@ msgstr "顯示啟動動畫" msgid "Show the splash screen during startup." msgstr "啟動時顯示啟動動畫。" -#, fuzzy msgid "Show \"Tip of the day\" notification after start" msgstr "啟動後顯示\"每日小提示\"通知" @@ -6630,46 +6496,48 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "如果啟用,將在啟動時顯示有用的提示。" msgid "Flushing volumes: Auto-calculate every time the color changed." -msgstr "" +msgstr "廢料體積:換色時自動計算" msgid "If enabled, auto-calculate every time the color changed." -msgstr "" +msgstr "啟用後,換色時自動計算" msgid "" "Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +"廢料體積:換料時自動計算" msgid "If enabled, auto-calculate every time when filament is changed" -msgstr "" +msgstr "啟用後,換料時自動計算" msgid "Remember printer configuration" -msgstr "" +msgstr "記住機臺設定" msgid "" "If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." msgstr "" +"啟用後,Orca會記住且自動切換各機臺線材與列印設定" msgid "Multi-device Management(Take effect after restarting Orca)." -msgstr "" +msgstr "多臺設備管理(需重開Orca)" msgid "" "With this option enabled, you can send a task to multiple devices at the " "same time and manage multiple devices." msgstr "" +"啟用時可以同時傳送到並管理多個機臺" msgid "Auto arrange plate after cloning" -msgstr "" +msgstr "複製後自動排列" msgid "Auto arrange plate after object cloning" -msgstr "" +msgstr " " msgid "Network" msgstr "網路" -#, fuzzy msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "同步使用者預設(列印設備/線材/列印品質參數)" +msgstr "自動同步使用者預設(列印設備/線材/列印品質參數)" msgid "User Sync" msgstr "使用者同步" @@ -6683,31 +6551,24 @@ msgstr "系統同步" msgid "Clear my choice on the unsaved presets." msgstr "清除我對未儲存預設的選擇。" -#, fuzzy msgid "Associate files to OrcaSlicer" msgstr " Orca Slicer 檔案關聯" -#, fuzzy msgid "Associate .3mf files to OrcaSlicer" msgstr "使用 Orca Slicer 打開 .3mf 檔案" -#, fuzzy msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" msgstr "開啟後,將預設使用 Orca Slicer 打開 .3mf 檔案" -#, fuzzy msgid "Associate .stl files to OrcaSlicer" msgstr "使用 Orca Slicer 打開 .stl 檔案" -#, fuzzy msgid "If enabled, sets OrcaSlicer as default application to open .stl files" msgstr "開啟後,將預設使用 Orca Slicer 打開 .stl 檔案" -#, fuzzy msgid "Associate .step/.stp files to OrcaSlicer" msgstr "使用 Orca Slicer 打開 .step/.stp 檔案" -#, fuzzy msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "開啟後,將預設使用 Orca Slicer 打開 .step 檔案" @@ -6727,15 +6588,14 @@ msgid "Clear my choice on the unsaved projects." msgstr "清除我對未儲存的專案項目的選擇。" msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "載入具有GCODE修改的3MF時不警告" msgid "Auto-Backup" msgstr "自動備份" -#, fuzzy msgid "" "Backup your project periodically for restoring from the occasional crash." -msgstr "定期備份專案項目,以便從未預期的錯誤中恢復。" +msgstr "定期備份專案,以便從未預期的錯誤中恢復。" msgid "every" msgstr "所有" @@ -6758,7 +6618,6 @@ msgstr "開發者模式" msgid "Skip AMS blacklist check" msgstr "跳過 AMS 黑名單檢查" -#, fuzzy msgid "Home page and daily tips" msgstr "首頁和每日小提示" @@ -6771,7 +6630,6 @@ msgstr "同步設定" msgid "User sync" msgstr "使用者同步" -#, fuzzy msgid "Preset sync" msgstr "預設檔同步" @@ -6781,15 +6639,12 @@ msgstr "偏好設定同步" msgid "View control settings" msgstr "視角控制設定" -#, fuzzy msgid "Rotate of view" msgstr "旋轉視角" -#, fuzzy msgid "Move of view" msgstr "移動視角" -#, fuzzy msgid "Zoom of view" msgstr "縮放視角" @@ -6854,13 +6709,11 @@ msgstr "除錯模式生效!" msgid "Switch cloud environment, Please login again!" msgstr "切換雲端環境,請重新登入!" -#, fuzzy msgid "System presets" -msgstr "系統預設檔" +msgstr "系統預設" -#, fuzzy msgid "User presets" -msgstr "使用者預設檔" +msgstr "使用者預設" msgid "Incompatible presets" msgstr "不相容的預設" @@ -6874,9 +6727,8 @@ msgstr "點擊設定線材顏色" msgid "Please choose the filament colour" msgstr "請選擇線材顏色" -#, fuzzy msgid "Add/Remove presets" -msgstr "新增/刪除 預設檔" +msgstr "新增/刪除 預設" msgid "Edit preset" msgstr "編輯預設" @@ -6891,10 +6743,10 @@ msgid "Add/Remove materials" msgstr "新增/刪除材料" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "選擇/移除機台(系統預設)" msgid "Create printer" -msgstr "" +msgstr "創建機臺" msgid "The selected preset is null!" msgstr "選擇的預設為空!" @@ -6911,18 +6763,17 @@ msgstr "" msgid "Please input layer value (>= 2)." msgstr "" -#, fuzzy msgid "Plate name" msgstr "列印板名稱" msgid "Same as Global Print Sequence" -msgstr "跟隨全局列印順序" +msgstr "跟隨全域列印順序" msgid "Print sequence" msgstr "列印順序" msgid "Same as Global" -msgstr "" +msgstr "跟隨全域設定" msgid "Disable" msgstr "" @@ -6935,11 +6786,11 @@ msgstr "首層線材列印順序" #, fuzzy msgid "Same as Global Plate Type" -msgstr "跟隨全局列印板設定" +msgstr "跟隨全域列印板設定" #, fuzzy msgid "Same as Global Bed Type" -msgstr "跟隨全局列印板設定" +msgstr "跟隨全域列印板設定" msgid "By Layer" msgstr "逐層" @@ -6956,11 +6807,9 @@ msgstr "登出" msgid "Slice all plate to obtain time and filament estimation" msgstr "正在切片以獲取切片資訊和預估列印時間" -#, fuzzy msgid "Packing project data into 3mf file" msgstr "正在將專案資料打包到 3mf 檔案中" -#, fuzzy msgid "Uploading 3mf" msgstr "正在上傳 3mf" @@ -6976,18 +6825,16 @@ msgstr "發布" msgid "Publish was cancelled" msgstr "發布已取消" -#, fuzzy msgid "Slicing Plate 1" msgstr "正在切片列印板 1" -#, fuzzy msgid "Packing data to 3mf" msgstr "將資料打包至 3mf" msgid "Jump to webpage" msgstr "轉換到網頁" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Save %s as" msgstr "另存 %s 為" @@ -7003,11 +6850,11 @@ msgstr "名稱不可用。" msgid "Overwrite a system profile is not allowed" msgstr "不允許覆蓋系統預設" -#, fuzzy, boost-format +#, boost-format msgid "Preset \"%1%\" already exists." msgstr "預設 \"%1%\" 已存在。" -#, fuzzy, boost-format +#, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." msgstr "預設 \"%1%\" 已存在,並且和目前列印設備不相容。" @@ -7074,7 +6921,6 @@ msgstr "登出成功。" msgid "Busy" msgstr "忙碌" -#, fuzzy msgid "Bambu Cool Plate" msgstr "低溫列印版" @@ -7087,7 +6933,6 @@ msgstr "工程列印熱床" msgid "Bambu Smooth PEI Plate" msgstr "" -#, fuzzy msgid "High temperature Plate" msgstr "高溫列印板" @@ -7109,7 +6954,6 @@ msgstr "傳送完成" msgid "Error code" msgstr "錯誤代碼" -#, fuzzy msgid "No login account, only printers in LAN mode are displayed" msgstr "未登入帳號,僅顯示區域網路模式的列印設備" @@ -7184,43 +7028,40 @@ msgstr "" "已自動建立 \"線材清單=>AMS 槽位\" 的映射關係。 可點擊上方的線材來手動設定其所" "對應的 AMS 槽位" -#, fuzzy msgid "An SD card needs to be inserted before printing." -msgstr "請在進行列印前插入 SD記憶卡" +msgstr "請在進行列印前插入 SD 記憶卡" #, c-format, boost-format msgid "" -"The selected printer (%s) is incompatible with the chosen printer profile in " +"The selected printer (%s)is incompatible with the chosen printer profile in " "the slicer (%s)." msgstr "" +"以選的機臺(%s)與切片軟體內所選的機臺預設(%s)不相容" -#, fuzzy msgid "An SD card needs to be inserted to record timelapse." msgstr "使用縮時攝影功能需要插入 SD 記憶卡" -#, fuzzy msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." -msgstr "需要更新列印設備韌體後,才能將列印作業傳送到列印設備" +msgstr "機台需要更新韌體才能接收列印作業" -#, fuzzy msgid "Cannot send the print job for empty plate" -msgstr "無法為空列印板傳送列印作業" +msgstr "無法傳送空的列印板" #, fuzzy msgid "This printer does not support printing all plates" msgstr "此列印設備類型不支援列印所有列印板" -#, fuzzy msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." -msgstr "當啟用花瓶模式時,龍門結構的設備不會產生縮時攝影影片" +msgstr "當啟用花瓶模式時,門架結構的設備不會產生縮時攝影影片" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"逐件列印模式下不支援縮時錄影" msgid "Errors" msgstr "錯誤" @@ -7228,22 +7069,20 @@ msgstr "錯誤" msgid "Please check the following:" msgstr "請檢查以下內容:" -#, fuzzy msgid "" "The printer type selected when generating G-Code is not consistent with the " "currently selected printer. It is recommended that you use the same printer " "type for slicing." msgstr "" -"產生 G-code 時選擇的列印設備類型與目前選擇的列印設備不一致。建議您使用相同的" +"產生 G-code 時選擇的列印設備類型與目前選擇的列印設備不一致。建議你使用相同的" "列印設備類型進行切片。" -#, fuzzy msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"AMS 映射中存在一些未知的線材。請檢查是否符合預期線材。如果符合,按“確定”以開" +"AMS 設定中存在一些未知的線材。請檢查是否符合所需的線材。如果符合,按\"確定\"以開" "始列印作業。" #, c-format, boost-format @@ -7262,18 +7101,17 @@ msgstr "" #, c-format, boost-format msgid "" -"Printing high temperature material(%s material) with %s may cause nozzle " +"Printing high temperature material(%s material)with %s may cause nozzle " "damage" msgstr "" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "" +msgstr "請排除上述錯誤,否則無法繼續列印" msgid "" "Please click the confirm button if you still want to proceed with printing." -msgstr "如果您仍然想繼續列印,請滑鼠左鍵點擊 確定 按鈕。" +msgstr "如果你仍然想繼續列印,請滑鼠左鍵點擊 確定 按鈕。" -#, fuzzy msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "正在連接列印設備。連接過程中無法取消。" @@ -7281,38 +7119,32 @@ msgstr "正在連接列印設備。連接過程中無法取消。" msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." -msgstr "小心使用!金屬紋理 PEI 板 上的流量校準可能會因表面光線散射而失敗。" +msgstr "小心使用!紋理 PEI 板 上的流量校準可能會因表面光線散射而失敗。" msgid "Automatic flow calibration using Micro Lidar" msgstr "使用微型雷射雷達進行自動流量校準" -#, fuzzy msgid "Modifying the device name" msgstr "修改列印設備名稱" msgid "Bind with Pin Code" -msgstr "" +msgstr "Pin碼綁定" -#, fuzzy msgid "Send to Printer SD card" msgstr "傳送到列印設備的 SD 記憶卡" msgid "Cannot send the print task when the upgrade is in progress" msgstr "設備升級中,無法傳送列印作業" -#, fuzzy msgid "The selected printer is incompatible with the chosen printer presets." msgstr "所選列印設備與選擇的列印設備預設檔不相容。" -#, fuzzy msgid "An SD card needs to be inserted before send to printer SD card." msgstr "傳送到列印設備需要插入 SD 記憶卡" -#, fuzzy msgid "The printer is required to be in the same LAN as Orca Slicer." msgstr "列印設備需要與 Orca Slicer 在同一個區域網路內。" -#, fuzzy msgid "The printer does not support sending to printer SD card." msgstr "該列印設備不支援傳送到 SD 記憶卡。" @@ -7320,7 +7152,7 @@ msgid "Slice ok." msgstr "切片完成." msgid "View all Daily tips" -msgstr "" +msgstr "顯示所有每日提示" msgid "Failed to create socket" msgstr "建立網路端點連線失敗" @@ -7354,27 +7186,27 @@ msgid "" "Please Find the Pin Code in Account page on printer screen,\n" " and type in the Pin Code below." msgstr "" +"請在印表設備螢幕上的帳戶頁面找到 PIN 碼,\n" +"並在下面輸入 PIN 碼。" msgid "Can't find Pin Code?" -msgstr "" +msgstr "找不到Pin?" msgid "Pin Code" -msgstr "" +msgstr "Pin" msgid "Binding..." -msgstr "" +msgstr "綁定..." msgid "Please confirm on the printer screen" -msgstr "" +msgstr "請到機台上按確認" msgid "Log in failed. Please check the Pin Code." -msgstr "" +msgstr "登入失敗。請確認Pin" -#, fuzzy msgid "Log in printer" msgstr "登入列印設備" -#, fuzzy msgid "Would you like to log in this printer with current account?" msgstr "你想使用目前帳號登入這台列印設備嗎?" @@ -7394,19 +7226,19 @@ msgid "" "Use(collectively, the \"Terms\"). If you do not comply with or agree to the " "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" -"感謝您購買 Bambu Lab 設備,使用 Bambu Lab 設備前,請閱讀一下條款,點擊同意使" -"用您的 Bambu Lab 設備即表示您同意遵守隱私政策以及使用條款(統稱為 條款 )。如" -"果您不願遵守或不同意 Bambu Lab 隱私政策,請不要使用 Bambu Lab 設備和服務。" +"感謝你購買 Bambu Lab 設備,使用 Bambu Lab 設備前,請閱讀一下條款,點擊同意使" +"用你的 Bambu Lab 設備即表示你同意遵守隱私政策以及使用條款(統稱為 條款 )。如" +"果你不願遵守或不同意 Bambu Lab 隱私政策,請不要使用 Bambu Lab 設備和服務。" msgid "and" -msgstr "" +msgstr " 與 " msgid "Privacy Policy" msgstr "隱私協議" #, fuzzy msgid "We ask for your help to improve everyone's printer" -msgstr "我們請求您的幫助來改善大家的列印設備" +msgstr "我們請求你的幫助來改善大家的列印設備" msgid "Statement about User Experience Improvement Program" msgstr "關於使用者體驗改善計劃的聲明" @@ -7427,10 +7259,10 @@ msgid "" msgstr "" "在 3D 列印社區,我們從彼此的成功和失敗中學習調整自己的切片參數和設定。%s 遵循" "同樣的原則,透過機器學習的方式從大量使用者列印的成功和失敗中獲取經驗,從而改" -"善列印性能。我們正在透過向 %s 提供真實世界的資料來訓練他們變得更聰明。如果您" -"願意,此服務將訪問您的錯誤日誌和使用日誌中的資訊,其中可能包括隱私政策中描述" +"善列印性能。我們正在透過向 %s 提供真實世界的資料來訓練他們變得更聰明。如果你" +"願意,此服務將訪問你的錯誤日誌和使用日誌中的資訊,其中可能包括隱私政策中描述" "的資料。我們不會收集任何可以直接或間接識別個人的個人資料,包括但不限於姓名、" -"地址、支付資訊或電話號碼。啟用此服務即表示您同意這些條款和有關隱私政策的聲" +"地址、支付資訊或電話號碼。啟用此服務即表示你同意這些條款和有關隱私政策的聲" "明。" msgid "Statement on User Experience Improvement Plan" @@ -7439,18 +7271,15 @@ msgstr "關於使用者體驗改善計劃的聲明" msgid "Log in successful." msgstr "登入成功。" -#, fuzzy msgid "Log out printer" msgstr "登出列印設備" -#, fuzzy msgid "Would you like to log out the printer?" msgstr "你想登出列印設備嗎?" msgid "Please log in first." msgstr "請先登入。" -#, fuzzy msgid "There was a problem connecting to the printer. Please try again." msgstr "連接列印設備時發生錯誤。 重新連接。" @@ -7468,29 +7297,25 @@ msgstr "刪除此預設" msgid "Search in preset" msgstr "在預設中搜索" -#, fuzzy msgid "Click to reset all settings to the last saved preset." msgstr "點擊以將所有設定還原到最後一次儲存的版本。" -#, fuzzy msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"平滑模式的縮時錄影需要擦拭塔,否則列印物件上可能會有瑕疵。確定要關閉擦拭塔" +"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。確定要關閉換料塔" "嗎?" -#, fuzzy msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"平滑模式的縮時錄影需要擦拭塔,否則列印物件上可能會有瑕疵。要打開擦拭塔嗎?" +"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。要打開換料塔嗎?" msgid "Still print by object?" -msgstr "" +msgstr "持續逐件列印?" -#, fuzzy msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" @@ -7498,9 +7323,8 @@ msgid "" msgstr "" "我們增加了一種實驗性的支撐樣式 \"苗條樹\",它的特點是支撐體積較小,但強度較" "弱。\n" -"因此我們推薦以下參數:接觸層數為 0,頂部Z距離為 0,牆層數為 2。" +"因此我們推薦以下參數:界面數為 0,頂部Z距離為 0,牆層數為 2。" -#, fuzzy msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" @@ -7510,7 +7334,6 @@ msgstr "" "是 - 自動調整這些設定\n" "否 - 不用為我調整這些設定" -#, fuzzy msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " "settings: at least 2 interface layers, at least 0.1mm top z distance or " @@ -7519,7 +7342,6 @@ msgstr "" "對於 \"強壯樹 \"和 \"混合樹 \"的支撐樣式,我們推薦以下設定:至少 2 層界面層," "至少 0.1 毫米的頂部z距離或使用專用的支撐線材。" -#, fuzzy msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" @@ -7527,7 +7349,7 @@ msgid "" "independent support layer height" msgstr "" "當使用專用的支撐線材時,我們推薦以下設定:\n" -"0 頂層z距離,0 接觸層間距,同心圖案,並且禁用獨立支撐層高" +"0 頂層z距離,0 界面間距,同心模式,並且禁用獨立支撐層高" msgid "" "Enabling this option will modify the model's shape. If your print requires " @@ -7542,17 +7364,20 @@ msgid "" "Layer height is too small.\n" "It will set to min_layer_height\n" msgstr "" +"層高過薄\n" +"將改為 min_layer_height\n" 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 "忽略" @@ -7578,8 +7403,8 @@ msgid "" "by right-click the empty position of build plate and choose \"Add " "Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" -"在錄製無工具頭縮時錄影影片時,建議增加“縮時錄影擦拭塔”\n" -"右鍵單擊列印板的空白位置,選擇“新增標準模型”->“縮時錄影擦拭塔”。" +"在錄製無工具頭縮時錄影影片時,建議增加\"縮時錄影換料塔\"\n" +"右鍵單擊列印板的空白位置,選擇\"新增標準模型\"->\"縮時錄影換料塔\"。" msgid "Line width" msgstr "線寬" @@ -7594,13 +7419,13 @@ msgid "Wall generator" msgstr "牆產生器" msgid "Walls and surfaces" -msgstr "" +msgstr "牆與表面" msgid "Bridging" -msgstr "" +msgstr "橋接" msgid "Overhangs" -msgstr "" +msgstr "懸空" msgid "Walls" msgstr "牆" @@ -7614,11 +7439,9 @@ msgstr "首層速度" msgid "Other layers speed" msgstr "其他層速度" -#, fuzzy msgid "Overhang speed" msgstr "懸空列印速度" -#, fuzzy msgid "" "This is the speed for various overhang degrees. Overhang degrees are " "expressed as a percentage of line width. 0 speed means no slowing down for " @@ -7630,7 +7453,6 @@ msgstr "" msgid "Bridge" msgstr "橋接" -#, fuzzy msgid "Set speed for external and internal bridges" msgstr "設定外部和內部橋接的速度" @@ -7646,7 +7468,6 @@ msgstr "抖動(XY軸)" msgid "Raft" msgstr "筏層" -#, fuzzy msgid "Support filament" msgstr "支撐線材" @@ -7657,13 +7478,13 @@ msgid "Multimaterial" msgstr "多線材" msgid "Prime tower" -msgstr "擦拭塔" +msgstr "換料塔" msgid "Filament for Features" msgstr "" msgid "Ooze prevention" -msgstr "" +msgstr "防止漏料" msgid "Skirt" msgstr "側裙" @@ -7677,7 +7498,6 @@ msgstr "G-code 輸出" msgid "Post-processing Scripts" msgstr "後處理腳本" -#, fuzzy msgid "Notes" msgstr "備註" @@ -7706,21 +7526,18 @@ msgstr "參數覆蓋" msgid "Retraction" msgstr "回抽" -#, fuzzy msgid "Basic information" msgstr "基本資訊" msgid "Recommended nozzle temperature" msgstr "建議噴嘴溫度" -#, fuzzy msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "該線材的建議噴嘴溫度範圍。0 表示未設定" msgid "Flow ratio and Pressure Advance" -msgstr "" +msgstr "流量比與壓力提前" -#, fuzzy msgid "Print chamber temperature" msgstr "列印設備內部溫度" @@ -7733,39 +7550,33 @@ msgstr "噴嘴" msgid "Nozzle temperature when printing" msgstr "列印時的噴嘴溫度" -#, fuzzy msgid "Cool plate" msgstr "低溫列印板" -#, fuzzy msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "使用低溫列印板時的熱床溫度。0 值表示這個線材不支援低溫列印板" msgid "Textured Cool plate" -msgstr "" +msgstr "紋理低溫列印板" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Textured Cool Plate" msgstr "" -#, fuzzy msgid "Engineering plate" msgstr "工程高溫列印板" -#, fuzzy msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "使用工程高溫列印板時的熱床溫度。0 值表示這個線材不支援工程高溫列印板" -#, fuzzy msgid "Smooth PEI Plate / High Temp Plate" msgstr "光滑面 PEI 列印板/高溫列印板" -#, fuzzy 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/" @@ -7774,16 +7585,14 @@ msgstr "" "使用光滑面 PEI 列印板/高溫列印板時的熱床溫度。0 值表示這個線材不支援光滑面列" "印板/高溫列印板" -#, fuzzy msgid "Textured PEI Plate" -msgstr "金屬紋理 PEI 列印板" +msgstr "紋理 PEI 列印板" -#, fuzzy 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 "" -"使用金屬紋理 PEI 列印板時的熱床溫度。0 值表示這個線材不支援金屬紋理 PEI 列印" +"使用紋理 PEI 列印板時的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印" "板" msgid "Volumetric speed limitation" @@ -7795,34 +7604,30 @@ msgstr "冷卻" msgid "Cooling for specific layer" msgstr "特定層冷卻" -#, fuzzy msgid "Part cooling fan" -msgstr "部件冷卻風扇" +msgstr "物件冷卻風扇" msgid "Min fan speed threshold" msgstr "最小風扇速度臨界值" -#, fuzzy msgid "" "Part cooling fan speed will start to run at min speed when the estimated " "layer time is no longer than the layer time in setting. When layer time is " "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"當預計的層時間不大於設定的層時間時,部件冷卻風扇速度將開始以最小速度運轉。當" +"當預計的層時間小於設定的層時間時,物件冷卻風扇速度將開始以最小速度運轉。當" "層時間小於設定值時,風扇速度將根據該層列印時間在最小和最大風扇速度之間自動調" "整" msgid "Max fan speed threshold" msgstr "最大風扇速度臨界值" -#, fuzzy msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" -msgstr "當預計的層列印時間比設定值要小時,部件冷卻風扇轉速將達到最大值" +msgstr "當預計的層列印時間比設定值要小時,物件冷卻風扇轉速將達到最大值" -#, fuzzy msgid "Auxiliary part cooling fan" msgstr "輔助冷卻風扇" @@ -7835,7 +7640,6 @@ msgstr "列印期間" msgid "Complete print" msgstr "列印完成" -#, fuzzy msgid "Filament start G-code" msgstr "線材起始 G-code" @@ -7878,20 +7682,17 @@ msgid "Extruder Clearance" msgstr "擠出機避讓空間" msgid "Adaptive bed mesh" -msgstr "" +msgstr "自適應床面網格" msgid "Accessory" msgstr "配件" -#, fuzzy msgid "Machine gcode" msgstr "列印設備 G-code" -#, fuzzy msgid "Machine start G-code" msgstr "列印設備起始 G-code" -#, fuzzy msgid "Machine end G-code" msgstr "列印設備結束 G-code" @@ -7934,12 +7735,11 @@ msgstr "加速度限制" msgid "Jerk limitation" msgstr "抖動限制" -#, fuzzy msgid "Single extruder multi-material setup" msgstr "單擠出機多線材設定" msgid "Number of extruders of the printer." -msgstr "" +msgstr "機台擠出機數量" msgid "" "Single Extruder Multi Material is selected, \n" @@ -7990,9 +7790,10 @@ 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." @@ -8013,7 +7814,7 @@ msgid "" "please reset the filament information for that slot." msgstr "" -#, fuzzy, boost-format +#, boost-format msgid "Are you sure to %1% the selected preset?" msgstr "確定要 %1% 所選預設嗎?" @@ -8025,13 +7826,11 @@ msgstr "設定" #, fuzzy msgid "Click to reset current value and attach to the global value." -msgstr "點擊該圖示,恢復到全局的設定數值,並與全局設定同步變化。" +msgstr "點擊該圖示,恢復到全域的設定數值,並與全域設定同步變化。" -#, fuzzy msgid "Click to drop current modify and reset to saved value." -msgstr "點擊該圖示,放棄目前的修改,恢復到上次儲存的數值。" +msgstr "放棄目前的修改,恢復到上次儲存的數值。" -#, fuzzy msgid "Process Settings" msgstr "列印參數設定" @@ -8093,7 +7892,7 @@ msgstr "" "將選擇的選項轉移到新選擇的預設 \n" "\"%1%\"。" -#, fuzzy, boost-format +#, boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" msgstr "預設 \"%1%\" 包含以下未儲存的修改:" @@ -8111,18 +7910,22 @@ msgstr "預設 \"%1%\" 和新的列印品質預設不相容,並且它包含以 #, boost-format msgid "You have changed some settings of preset \"%1%\". " -msgstr "" +msgstr "已更改預設 \"%1%\" 的一些設定。" msgid "" "\n" "You can save or discard the preset values you have modified." msgstr "" +"\n" +"你可以儲存或放棄已修改的預設值。" msgid "" "\n" "You can save or discard the preset values you have modified, or choose to " "transfer the values you have modified to the new preset." msgstr "" +"\n" +"你可以儲存或放棄已修改的預設值,或選擇將修改的數值轉移到新的預設值。" msgid "You have previously modified your settings." msgstr "" @@ -8132,18 +7935,18 @@ msgid "" "You can discard the preset values you have modified, or choose to transfer " "the modified values to the new project" msgstr "" +"\n" +"你可以放棄已修改的預設值,或選擇將修改的數值轉移到新專案中。" msgid "Extruders count" msgstr "擠出機數量" -#, fuzzy msgid "General" msgstr "一般" msgid "Capabilities" msgstr "能力" -#, fuzzy msgid "Show all presets (including incompatible)" msgstr "顯示所有預設(包括不相容的)" @@ -8161,26 +7964,26 @@ msgid "" msgstr "" msgid "Transfer values from left to right" -msgstr "" +msgstr "將數值從左邊轉移到右邊" msgid "" "If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" +"如果啟用,則此視窗可用於將選定的數值從左邊轉移到右邊的預設值。" msgid "Add File" msgstr "新增檔案" -#, fuzzy msgid "Set as cover" msgstr "設定為封面" msgid "Cover" msgstr "封面" -#, fuzzy, boost-format +#, boost-format msgid "The name \"%1%\" already exists." -msgstr "名字 \"%1%\" 已經存在。" +msgstr "\"%1%\" 已經存在。" msgid "Basic Info" msgstr "基本資訊" @@ -8192,7 +7995,6 @@ msgstr "圖片" msgid "Bill of Materials" msgstr "材料清單" -#, fuzzy msgid "Assembly Guide" msgstr "組裝說明" @@ -8209,22 +8011,18 @@ msgstr "%s 更新" msgid "A new version is available" msgstr "發現新版本" -#, fuzzy msgid "Configuration update" msgstr "設定檔更新" -#, fuzzy msgid "A new configuration package available, Do you want to install it?" -msgstr "新的設定檔可用,確定要安裝嗎?" +msgstr "有新的設定檔可用,是否要安裝?" msgid "Description:" msgstr "描述:" -#, fuzzy msgid "Configuration incompatible" msgstr "設定檔不相容" -#, fuzzy msgid "the configuration package is incompatible with current application." msgstr "設定檔和目前的應用程式不相容。" @@ -8242,16 +8040,14 @@ msgstr "退出 %s" #, fuzzy msgid "the Configuration package is incompatible with current APP." -msgstr "設定檔與目前手機應用程式不相容。" +msgstr "設定檔與目前(手機應用程式)?不相容。" msgid "Configuration updates" msgstr "組態檔更新" -#, fuzzy msgid "No updates available." -msgstr "以更新到最新。" +msgstr "已經是最新版本。" -#, fuzzy msgid "The configuration is up to date." msgstr "目前設定檔已經是最新版本。" @@ -8305,11 +8101,9 @@ msgid "" " current extruders exceeds 16." msgstr "" -#, fuzzy msgid "Ramming customization" msgstr "自訂尖端成型" -#, fuzzy msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" "extruder MM printer. Its purpose is to properly shape the end of the " @@ -8321,25 +8115,22 @@ msgid "" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" -"尖端成型是指在單擠出機多線材印表機中換色之前的快速抽插。\n" +"尖端成型是指在單擠出機多線材列印設備中換色之前的快速抽插。\n" "其目的是使退出的線材末端正確成形,這樣就不會妨礙新線材的插入,並可以重新插" "入。\n" "這個階段很重要,不同的線材可能需要不同的擠出速度才能獲得良好的形狀。因此尖端" "成型過程中的擠壓率是需要可調整的。\n" -"這是一個專業的設定,不正確的調整可能會導致堵塞、擠出機齒輪刨料等。" +"這是一個進階的設定,不正確的調整可能會導致堵塞、線材磨損等。" -#, fuzzy msgid "Total ramming time" msgstr "尖端成型總時間" msgid "s" msgstr "秒" -#, fuzzy msgid "Total rammed volume" msgstr "尖端成型總體積" -#, fuzzy msgid "Ramming line width" msgstr "尖端成型線寬" @@ -8361,18 +8152,17 @@ msgid "" "changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -msgid "Flushing volume (mm³) for each filament pair." +msgid "Flushing volume (mm³)for each filament pair." msgstr "在兩個線材間切換所需的廢料體積(mm³)" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" msgstr "建議:廢料體積量應設定在[ %d, %d ]範圍內" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." msgstr "倍數的數值範圍是[%.2f, %.2f]" -#, fuzzy msgid "Multiplier" msgstr "倍數" @@ -8389,7 +8179,7 @@ msgid "From" msgstr "從" msgid "To" -msgstr "" +msgstr "至" msgid "" "Windows Media Player is required for this task! Do you want to enable " @@ -8421,18 +8211,17 @@ msgid "Bambu Network plug-in not detected." msgstr "" msgid "Click here to download it." -msgstr "" +msgstr "下載" msgid "Login" msgstr "登入" #, fuzzy msgid "The configuration package is changed in previous Config Guide" -msgstr "設定檔在之前的設定引導過程中以改變" +msgstr "設定檔在之前的設定引導過程中已改變" -#, fuzzy msgid "Configuration package changed" -msgstr "設定檔以改變" +msgstr "設定檔已改變" msgid "Toolbar" msgstr "工具欄" @@ -8440,9 +8229,8 @@ msgstr "工具欄" msgid "Objects list" msgstr "物件清單" -#, fuzzy msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" -msgstr "從 STL/STEP/3MF/OBJ/AMF 檔案中匯入幾何數據" +msgstr "從 STL/STEP/3MF/OBJ/AMF 檔案中匯入幾何模型" msgid "⌘+Shift+G" msgstr "" @@ -8463,9 +8251,8 @@ msgstr "" msgid "Show keyboard shortcuts list" msgstr "顯示鍵盤快捷鍵清單" -#, fuzzy msgid "Global shortcuts" -msgstr "全局快捷鍵" +msgstr "全域快捷鍵" msgid "Rotate View" msgstr "旋轉視角" @@ -8497,7 +8284,6 @@ msgstr "" msgid "Shift+Tab" msgstr "" -#, fuzzy msgid "Collapse/Expand the sidebar" msgstr "摺疊/展開 側邊欄" @@ -8517,7 +8303,6 @@ msgstr "選擇單一零件" msgid "⌘+Left mouse button" msgstr "⌘+滑鼠左鍵" -#, fuzzy msgid "Select multiple objects" msgstr "選擇多個物件" @@ -8539,39 +8324,33 @@ msgstr "框選多個零件" msgid "Arrow Up" msgstr "上箭頭" -#, fuzzy msgid "Move selection 10 mm in positive Y direction" msgstr "Y 方向移動 10mm" msgid "Arrow Down" msgstr "下箭頭" -#, fuzzy msgid "Move selection 10 mm in negative Y direction" msgstr "Y 方向移動 10mm" msgid "Arrow Left" msgstr "左箭頭" -#, fuzzy msgid "Move selection 10 mm in negative X direction" msgstr "X 方向移動 10mm" msgid "Arrow Right" msgstr "右箭頭" -#, fuzzy msgid "Move selection 10 mm in positive X direction" msgstr "X 方向移動 10mm" msgid "Shift+Any arrow" msgstr "Shift+方向鍵" -#, fuzzy msgid "Movement step set to 1 mm" msgstr "沿 X、Y 軸以 1mm 為單位步進移動" -#, fuzzy msgid "keyboard 1-9: set filament for object/part" msgstr "按鍵 1~9:設定物件/零件的線材" @@ -8635,7 +8414,6 @@ msgstr "在準備/預覽模式之中切換" msgid "Plater" msgstr "準備" -#, fuzzy msgid "Move: press to snap by 1mm" msgstr "移動:以 1mm 為單位步進移動" @@ -8660,7 +8438,6 @@ msgstr "Alt+滑鼠滾輪" msgid "Gizmo" msgstr "" -#, fuzzy msgid "Set extruder number for the objects and parts" msgstr "設定物件、零件使用的擠出機編號" @@ -8694,7 +8471,6 @@ msgstr "水平滑動條 - 向右移動一步" msgid "On/Off one layer mode of the vertical slider" msgstr "開啟/關閉垂直滑動條的單層模式" -#, fuzzy msgid "On/Off g-code window" msgstr "開啟/關閉 G-code 視窗" @@ -8717,60 +8493,58 @@ msgstr "更新說明" msgid "version %s update information :" msgstr "版本 %s 更新資訊" -#, fuzzy msgid "Network plug-in update" -msgstr "網路套件升級" +msgstr "網路插件升級" -#, fuzzy msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." -msgstr "按一下「確定」以在下次啟動 Orca Slicer 時更新網路套件" +msgstr "按下「確定」後,下次啟動 Orca Slicer 時會更新網路插件" -#, fuzzy, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "新的網路套件( %s) 可用,您是否需要安裝它?" +#, c-format, boost-format +msgid "A new Network plug-in(%s)available, Do you want to install it?" +msgstr "新版的網路插件( %s)可用,是否要安裝?" msgid "New version of Orca Slicer" msgstr "新版本的 Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "跳過這個版本" msgid "Done" msgstr "完成" msgid "resume" -msgstr "" +msgstr "繼續" msgid "Resume Printing" -msgstr "" +msgstr "繼續列印" msgid "Resume Printing(defects acceptable)" -msgstr "" +msgstr "繼續列印 (瑕疵可接受)" msgid "Resume Printing(problem solved)" -msgstr "" +msgstr "繼續列印 (問題排除了)" msgid "Stop Printing" -msgstr "" +msgstr "停止列印" msgid "Check Assistant" msgstr "" msgid "Filament Extruded, Continue" -msgstr "" +msgstr "線才擠出,繼續" msgid "Not Extruded Yet, Retry" -msgstr "" +msgstr "尚未擠出,重試" msgid "Finished, Continue" -msgstr "" +msgstr "完成,繼續" msgid "Load Filament" msgstr "進料" msgid "Filament Loaded, Resume" -msgstr "" +msgstr "進料完成,繼續" msgid "View Liveview" msgstr "" @@ -8778,16 +8552,13 @@ msgstr "" msgid "Confirm and Update Nozzle" msgstr "" -#, fuzzy msgid "LAN Connection Failed (Sending print file)" -msgstr "區域網路連接失敗(傳送列印作業)" +msgstr "區域網路連接失敗(傳送列印檔案)" -#, fuzzy msgid "" "Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "第1步,請確認 Orca Slicer 和您的列印設備在同一個區域網路上。" +msgstr "第1步,請確認 Orca Slicer 和你的列印設備在同一個區域網路上。" -#, fuzzy msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." @@ -8800,26 +8571,27 @@ msgstr "" msgid "Access Code" msgstr "訪問碼" -#, fuzzy 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" +"請進入第 3 步進行網路問題排解。" msgid "Model:" msgstr "型號:" @@ -8876,12 +8648,11 @@ msgstr "擴展板" msgid "Saving objects into the 3mf failed." msgstr "將物件儲存到 3mf 失敗。" -#, fuzzy msgid "Only Windows 10 is supported." -msgstr "僅支援 Windows 10 作業系統。" +msgstr "僅支援 Windows 10。" msgid "Failed to initialize the WinRT library." -msgstr "無法初始化 WinRT 函式庫。。" +msgstr "無法初始化 WinRT 函式庫。" msgid "Exporting objects" msgstr "正在匯出物件" @@ -8895,7 +8666,6 @@ msgstr "透過 Windows 服務修復物件" msgid "Repair failed." msgstr "修復失敗。" -#, fuzzy msgid "Loading repaired objects" msgstr "正在載入修復的物件" @@ -8923,7 +8693,7 @@ msgstr "修復已完成" msgid "Repair canceled" msgstr "修復被取消" -#, fuzzy, boost-format +#, boost-format msgid "Copying of file %1% to %2% failed: %3%" msgstr "從 %1% 複製檔案到 %2% 失敗:%3%" @@ -8966,7 +8736,6 @@ msgid "" "collision." msgstr "" -#, fuzzy msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" @@ -8977,9 +8746,9 @@ msgstr "" msgid "Please check the custom G-code or use the default custom G-code." msgstr "請檢查自訂 G-code,或者使用預設的。" -#, fuzzy, boost-format +#, boost-format msgid "Generating G-code: layer %1%" -msgstr "正在產生 G-code:%1% 層" +msgstr "正在產生 G-code:第 %1% 層" msgid "Inner wall" msgstr "內牆" @@ -9025,7 +8794,7 @@ msgstr "計算 %1% 的線寬失敗。無法獲得 \"%2%\" 的值" msgid "" "Invalid spacing supplied to Flow::with_spacing(), check your layer height " "and extrusion width" -msgstr "提供給 Flow::with_spacing() 的間距無效,請檢查層高和擠出寬度" +msgstr "提供給 Flow::with_spacing()的間距無效,請檢查層高和擠出寬度" msgid "undefined error" msgstr "未定義的錯誤" @@ -9120,12 +8889,12 @@ msgstr "驗證失敗" msgid "write callback failed" msgstr "寫入回調失敗" -#, fuzzy, boost-format +#, boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "%1% 離不可列印區域太近,可能會發生碰撞。" -#, fuzzy, boost-format +#, boost-format msgid "%1% is too close to others, and collisions may be caused." msgstr "%1% 離其它物件太近,可能會發生碰撞。" @@ -9140,7 +8909,7 @@ msgid " is too close to exclusion area, there may be collisions when printing." msgstr "離不可列印區域太近,列印時可能會發生碰撞。" msgid "Prime Tower" -msgstr "擦拭塔" +msgstr "換料塔" msgid " is too close to others, and collisions may be caused.\n" msgstr "離其它物件太近,可能會發生碰撞。\n" @@ -9161,7 +8930,7 @@ msgstr "根據目前設定,不會進行任何列印。" msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." -msgstr "平滑模式的縮時錄影不支援在逐件列印模式下使用。" +msgstr "逐件列印模式下不支援使用平滑模式的縮時錄影。" msgid "" "Please select \"By object\" print sequence to print multiple objects in " @@ -9192,9 +8961,8 @@ msgstr "雖然物件 %1% 本身符合列印體積,但最後一層超出了最 msgid "" "You might want to reduce the size of your model or change current print " "settings and retry." -msgstr "您可能想要減小模型的尺寸或更改目前的列印設定並重試。" +msgstr "你可能想要減小模型的尺寸或更改目前的列印設定並重試。" -#, fuzzy msgid "Variable layer height is not supported with Organic supports." msgstr "有機樹支撐不支持可變層高。" @@ -9207,7 +8975,7 @@ 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)。" +msgstr "換料塔目前僅支援相對擠出機定址 (use_relative_e_distances=1)。" msgid "" "Ooze prevention is only supported with the wipe tower when " @@ -9219,37 +8987,34 @@ msgid "" "RepRapFirmware and Repetier G-code flavors." msgstr "" -#, fuzzy msgid "The prime tower is not supported in \"By object\" print." -msgstr "逐件列印模式下無法使用擦拭塔。" +msgstr "逐件列印模式下無法使用換料塔。" -#, fuzzy msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." -msgstr "可變層高開啟時無法使用擦拭塔。它要求所有物件擁有相同的層高。" +msgstr "可變層高開啟時無法使用換料塔。它要求所有物件擁有相同的層高。" msgid "The prime tower requires \"support gap\" to be multiple of layer height" -msgstr "擦拭塔要求”支撐間隙“為層高的整數倍數。" +msgstr "換料塔要求\"支撐間隙\"為層高的整數倍數。" msgid "The prime tower requires that all objects have the same layer heights" -msgstr "擦拭塔要求各個物件擁有同樣的層高。" +msgstr "換料塔要求各個物件擁有同樣的層高。" msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" -msgstr "擦拭塔要求各個物件使用同樣的筏層數量。" +msgstr "換料塔要求各個物件使用同樣的筏層數量。" msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." -msgstr "擦拭塔要求各個物件擁有同樣的層高。" +msgstr "換料塔要求各個物件擁有同樣的層高。" -#, fuzzy msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" -msgstr "各個物件的層高存在差異,無法啟用擦拭塔" +msgstr "各個物件的層高存在差異,無法啟用換料塔" msgid "Too small line width" msgstr "線寬太小" @@ -9259,9 +9024,8 @@ msgstr "線寬太大" msgid "" "The prime tower requires that support has the same layer height with object." -msgstr "擦拭塔要求支撐和物件採用同樣的層高。" +msgstr "換料塔要求支撐和物件採用同樣的層高。" -#, fuzzy msgid "" "Organic support tree tip diameter must not be smaller than support material " "extrusion width." @@ -9277,7 +9041,6 @@ msgid "" "diameter." msgstr "有機樹狀支撐枝直徑不得小於支撐樹梢直徑。" -#, fuzzy msgid "" "Support enforcers are used but support is not enabled. Please enable support." msgstr "使用支撐添加器但沒有打開支撐。請打開支撐。" @@ -9305,7 +9068,7 @@ msgid "" "extruder addressing." msgstr "在 layer_gcode 中發現 \"G92 E0\",它與絕對擠出機尋址不相容。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "列印板 %d:%s 不支援線材 %s" @@ -9345,7 +9108,6 @@ msgid "" "filaments differs significantly." msgstr "" -#, fuzzy msgid "Generating skirt & brim" msgstr "正在產生 skirt 和 brim(裙邊)" @@ -9372,7 +9134,7 @@ msgid "" "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" "XY 平面上的不可列印區域。例如,X1系列設備在換料過程中,會使用左前角區域來切斷" -"線材。這個多邊形區域由以下格式的點表示:“XxY,XxY,…”" +"線材。這個多邊形區域由以下格式的點表示:\"XxY,XxY,…\"" #, fuzzy msgid "Bed custom texture" @@ -9413,15 +9175,14 @@ msgstr "每一層的切片高度。越小的層高意味著更高的精度和更 msgid "Printable height" msgstr "可列印高度" -#, fuzzy msgid "Maximum printable height which is limited by mechanism of printer" -msgstr "最大可列印高度受列印設備硬體限制" +msgstr "受列印設備硬體限制的最大可列印高度" msgid "Preferred orientation" msgstr "" msgid "Automatically orient stls on the Z-axis upon initial import" -msgstr "" +msgstr "匯入STL時自動對齊Z軸" #, fuzzy msgid "Printer preset names" @@ -9451,10 +9212,9 @@ msgstr "" msgid "Device UI" msgstr "設備使用者界面" -#, fuzzy msgid "" "Specify the URL of your device user interface if it's not same as print_host" -msgstr "如果列印設備的使用者界面 URL 不同,請在此指定。" +msgstr "如果列印設備的使用者界面 URL 不同,請輸入在此。" msgid "API Key / Password" msgstr "API Key / 密碼" @@ -9467,7 +9227,6 @@ msgstr "" "Orca slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含用於身份驗證的 API " "金鑰或密碼。" -#, fuzzy msgid "Name of the printer" msgstr "列印設備名稱" @@ -9524,15 +9283,14 @@ msgstr "空駛時繞過外牆以避免在模型外觀表面產生斑點" msgid "Avoid crossing wall - Max detour length" msgstr "避免跨越外牆-最大繞行長度" -#, fuzzy msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " "detour distance is large than this value. Detour length could be specified " -"either as an absolute value or as percentage (for example 50%) of a direct " +"either as an absolute value or as percentage (for example 50%)of a direct " "travel path. Zero to disable" msgstr "" -"避免跨越外牆時的最大繞行距離。如果繞行距離大於該數值,則空駛不繞行。繞行距離" -"可指定為絕對值或直接空駛路徑的百分比(例如 50%)。0 表示禁用" +"避免跨越外牆時的最大繞行距離。如果繞行距離大於該數值,則不繞行。繞行距離" +"可為絕對值或直線路徑的百分比(例如 50%)。0 表示禁用" msgid "mm or %" msgstr "mm 或 %" @@ -9540,7 +9298,6 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它層" -#, fuzzy msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Cool Plate" @@ -9570,7 +9327,7 @@ msgstr "除首層外的熱床溫度。0 值表示這個線材不支援高溫列 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 "除首層外的熱床溫度。0 值表示這個線材不支援金屬紋理 PEI 列印板" +msgstr "除首層外的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" msgid "Initial layer" msgstr "首層" @@ -9605,7 +9362,7 @@ msgstr "首層熱床溫度。0 值表示這個線材不支援高溫列印板" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" -msgstr "首層熱床溫度。0 值表示這個線材不支援金屬紋理 PEI 列印板" +msgstr "首層熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" #, fuzzy msgid "Bed types supported by the printer" @@ -9666,7 +9423,7 @@ msgstr "" "完全由底部殼體層數決定" msgid "Apply gap fill" -msgstr "" +msgstr "間隙填充" msgid "" "Enables gap fill for the selected solid surfaces. The minimum gap length " @@ -9700,12 +9457,11 @@ msgid "Everywhere" msgstr "全部" msgid "Top and bottom surfaces" -msgstr "" +msgstr "頂部與底部" msgid "Nowhere" -msgstr "" +msgstr "無" -#, fuzzy msgid "Force cooling for overhang and bridge" msgstr "懸空/橋接強制冷卻" @@ -9715,7 +9471,6 @@ msgid "" "bridge to get better cooling" msgstr "勾選這個選項將自動最佳化橋接和懸空的風扇轉速以獲得更好的冷卻" -#, fuzzy msgid "Fan speed for overhang" msgstr "懸空風扇速度" @@ -9725,7 +9480,7 @@ 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" @@ -9739,11 +9494,9 @@ msgid "" "all outer wall no matter how much overhang degree" msgstr "" -#, fuzzy msgid "Bridge infill direction" msgstr "橋接填充角度" -#, fuzzy msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " @@ -9764,7 +9517,7 @@ msgid "Bridge flow ratio" msgstr "橋接流量" msgid "" -"Decrease this value slightly(for example 0.9) to reduce the amount of " +"Decrease this value slightly(for example 0.9)to reduce the amount of " "material for bridge, to improve sag. \n" "\n" "The actual bridge flow used is calculated by multiplying this value with the " @@ -9772,12 +9525,12 @@ msgid "" msgstr "" msgid "Internal bridge flow ratio" -msgstr "" +msgstr "內部橋接流量" 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.\n" +"0.9)to improve surface quality over sparse infill.\n" "\n" "The actual internal bridge flow used is calculated by multiplying this value " "with the bridge flow ratio, the filament flow ratio, and if set, the " @@ -9805,7 +9558,6 @@ msgid "" "value with the filament flow ratio, and if set, the object's flow ratio." msgstr "" -#, fuzzy msgid "Precise wall" msgstr "精準外牆尺寸" @@ -9825,7 +9577,7 @@ msgid "" msgstr "頂面只使用單層牆,從而更多的空間能夠使用頂部填充圖案" msgid "One wall threshold" -msgstr "單層牆臨界值" +msgstr "單壁閾值" #, no-c-format, no-boost-format msgid "" @@ -9839,7 +9591,7 @@ msgid "" "artifacts." msgstr "" "如果頂面需要列印,但是它的一部分被其它層覆蓋,那麼當它的寬度小於這個值時,它" -"不會被認為是頂層。這個設定可以用於避免在狹窄頂面上觸發“頂面單層牆”。這個值可" +"不會被認為是頂層。這個設定可以用於避免在狹窄頂面上觸發\"頂面單層牆\"。這個值可" "以是 mm 或線寬的 %。\n" "警告:如果啟用該選項,可能會在下一層上產生一些薄的特徵,比如字母。將此設定設" "為 0 可以消除這些偽影。" @@ -9853,19 +9605,20 @@ msgid "" msgstr "首層只使用單層牆,從而更多的空間能夠使用底部填充圖案" msgid "Extra perimeters on overhangs" -msgstr "懸空上的額外周長" +msgstr "懸挑上的額外周長" msgid "" "Create additional perimeter paths over steep overhangs and areas where " "bridges cannot be anchored. " -msgstr "在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" +msgstr "" +"在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" msgid "Reverse on even" -msgstr "" +msgstr "偶數反向" #, fuzzy msgid "Overhang reversal" -msgstr "懸空反轉" +msgstr "懸空反向" msgid "" "Extrude perimeters that have a part over an overhang in the reverse " @@ -9875,9 +9628,12 @@ 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" @@ -9895,7 +9651,7 @@ msgid "" msgstr "" msgid "Bridge counterbore holes" -msgstr "" +msgstr "橋接沉孔" msgid "" "This option creates bridges for counterbore holes, allowing them to be " @@ -9904,12 +9660,16 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" +"此選項為沉孔創建橋接,使其可以無需支撐地列印。可用模式包括:\n" +"1. 無:不創建橋接。\n" +"2. 部分橋接:只有部分無支撐區域會被橋接。\n" +"3. 犧牲層:創建一層完整的祭層橋接。" msgid "Partially bridged" -msgstr "" +msgstr "部分橋接" msgid "Sacrificial layer" -msgstr "" +msgstr "犧牲層" msgid "Reverse threshold" msgstr "反轉臨界值" @@ -9925,6 +9685,8 @@ msgid "" "When Detect overhang wall is not enabled, this option is ignored and " "reversal happens on every even layers regardless." msgstr "" +"懸挑需要達到的毫米數,才會反向列印。可以是周邊寬度的百分比。\n" +"值為 0 時,將在每個偶數層啟用反向列印。" msgid "Classic mode" msgstr "經典模式" @@ -9932,16 +9694,14 @@ msgstr "經典模式" msgid "Enable this option to use classic mode" msgstr "開啟此選項以使用經典模式" -#, fuzzy msgid "Slow down for overhang" -msgstr "懸空降速" +msgstr "懸空處降速" msgid "Enable this option to slow printing down for different overhang degree" msgstr "打開這個選項將降低不同懸垂程度的走線的列印速度" -#, fuzzy msgid "Slow down for curled perimeters" -msgstr "翹邊降速" +msgstr "翹邊處降速" #, no-c-format, no-boost-format msgid "" @@ -9967,7 +9727,6 @@ msgstr "" msgid "mm/s or %" msgstr "mm/s 或 %" -#, fuzzy msgid "External" msgstr "外部" @@ -9979,11 +9738,14 @@ msgid "" "are supported by less than 13%, whether they are part of a bridge or an " "overhang." msgstr "" +"外部可見橋接擠出速度。\n" +"\n" +"如果禁用了「翹邊處降速」或啟用了「經典懸挑模式」,則它將是支撐不足 13% 的懸挑牆的列印速度," +"無論它們是橋接的一部分還是懸挑。" msgid "mm/s" -msgstr "mm/s" +msgstr "" -#, fuzzy msgid "Internal" msgstr "內部" @@ -9991,18 +9753,16 @@ msgid "" "Speed of internal bridges. If the value is expressed as a percentage, it " "will be calculated based on the bridge_speed. Default value is 150%." msgstr "" +"內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 150%" -#, fuzzy msgid "Brim width" -msgstr "Brim(裙邊) 寬度" +msgstr "Brim(裙邊)寬度" -#, fuzzy msgid "Distance from model to the outermost brim line" -msgstr "從模型到最外圈 brim(裙邊) 走線的距離" +msgstr "從模型到 brim(裙邊)最外圈的距離" -#, fuzzy msgid "Brim type" -msgstr "Brim(裙邊) 類型" +msgstr "Brim(裙邊)類型" #, fuzzy msgid "" @@ -10012,20 +9772,17 @@ msgstr "" "該參數控制在模型的外側和/或內側產生 brim(裙邊)。自動是指自動分析和計算邊框" "的寬度。" -#, fuzzy msgid "Brim-object gap" -msgstr "Brim(裙邊) 與模型的間隙" +msgstr "Brim(裙邊)與模型的間隙" -#, fuzzy msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" -msgstr "在 brim(裙邊)和模型之間設定間隙,能夠讓 brim(裙邊)更容易剝離" +msgstr "在 brim(裙邊)和模型之間設定間隙,能夠讓 brim(裙邊)更容易拆除" msgid "Brim ears" msgstr "圓盤" -#, fuzzy msgid "Only draw brim over the sharp edges of the model." msgstr "僅在模型的鋒利邊緣上產生Brim(裙邊)。" @@ -10053,7 +9810,6 @@ msgstr "" "在偵測尖銳角度之前,幾何形狀將被簡化。此參數表示簡化的最小偏差長度。\n" "設為 0 以停用" -#, fuzzy msgid "Compatible machine" msgstr "相容的設備" @@ -10100,8 +9856,8 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"勾選這個選項,將降低列印速度,使得最終的層列印時間不小於\"最大風扇速度臨界值" -"\"裡的層時間臨界值,從而使得該層獲得更久的冷卻。這能夠改善尖頂和小細節的冷卻" +"勾選這個選項,將降低列印速度,使得最終的層列印時間不小於\"最大風扇速度臨界值\"" +"裡的層時間臨界值,從而使得該層獲得更久的冷卻。這能夠改善尖頂和小細節的冷卻" "效果" msgid "Normal printing" @@ -10115,7 +9871,6 @@ msgstr "除首層之外的預設的列印和空駛的加速度" msgid "mm/s²" msgstr "mm/s²" -#, fuzzy msgid "Default filament profile" msgstr "預設線材設定檔" @@ -10123,7 +9878,6 @@ msgstr "預設線材設定檔" msgid "Default filament profile when switch to this machine profile" msgstr "切換設備自動更換預設線材設定檔" -#, fuzzy msgid "Default process profile" msgstr "預設切片設定檔" @@ -10131,18 +9885,15 @@ msgstr "預設切片設定檔" msgid "Default process profile when switch to this machine profile" msgstr "切換設備自動更換預設切片設定檔" -#, fuzzy msgid "Activate air filtration" msgstr "開啟空氣過濾器/排風扇" -#, fuzzy msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "啟動空氣過濾器/排風扇。 G-code 指令:M106 P3 S(0-255)" msgid "Fan speed" msgstr "風扇速度" -#, fuzzy msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" @@ -10151,21 +9902,19 @@ msgstr "列印過程中排風扇的速度。此速度將覆蓋線材自訂 G-cod msgid "Speed of exhaust fan after printing completes" msgstr "列印完成後排風扇的轉速" -#, fuzzy msgid "No cooling for the first" -msgstr "對前N層關閉部件風扇" +msgstr "前N層關閉零件風扇" #, fuzzy msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"對開始的一些層關閉所有的部件冷卻風扇。通常關閉首層冷卻用來獲得更好的首層黏附" +"對開始的一些層關閉所有的物件冷卻風扇。通常關閉首層冷卻用來獲得更好的首層黏附" msgid "Don't support bridges" msgstr "不支撐橋接" -#, fuzzy 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" @@ -10186,15 +9935,17 @@ msgstr "" msgid "Thick internal bridges" 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 "Filter out small internal bridges (beta)" -msgstr "" +msgstr "篩選掉短的內部橋接(beta)" msgid "" "This option can help reducing pillowing on top surfaces in heavily slanted " @@ -10224,47 +9975,61 @@ msgid "" "overhang. This option is useful for heavily slanted top surface models. " "However, in most cases it creates too many unnecessary bridges." msgstr "" +"此選項有助於減少在大幅傾斜或曲面的模型上頂部表面瑕疵。\n" +"\n" +"預設情況下,小型內部橋接會被篩選掉,內部實心填充會直接印刷在稀疏填充上。這在大多數情況下" +"運作良好,能加速列印並且不會過度影響頂部表面質量。\n" +"\n" +"在大幅傾斜或曲面的模型中,特別是當使用過低的稀疏填充密度時,這可能會導致支撐不夠的實心" +"填充翹曲,進而造成瑕疵。\n" +"\n" +"禁用此選項將在稍微未支撐的內部實心填充區列印內部橋接層。以下選項控制篩選的程度(創建" +"內部橋接的數量)。\n" +"\n" +"篩選 - 啟用此選項。這是預設行為,並且在大多數情況下運作良好。\n" +"\n" +"有限篩選 - 僅在大幅傾斜的表面上創建內部橋接。這對大多數困難模型來說效果良好。\n" +"\n" +"不篩選 - 在每個可能的內部懸挑處創建內部橋接。這個選項對於大幅傾斜的頂部表面模型很有用。" +"然而,在大多數情況下,它會創建過多不必要的橋接。" msgid "Filter" -msgstr "" +msgstr "篩選" msgid "Limited filtering" -msgstr "" +msgstr "局部篩選" msgid "No filtering" -msgstr "" +msgstr "不篩選" msgid "Max bridge length" msgstr "最大橋接長度" -#, fuzzy 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;如果不希望" "支援任何橋接,請將其設定為非常大的值。" -#, fuzzy msgid "End G-code" msgstr "結尾 G-code" -#, fuzzy msgid "End G-code when finish the whole printing" msgstr "所有列印結束時的結尾 G-code" msgid "Between Object Gcode" -msgstr "" +msgstr "物件分隔" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"在物件之間插入 Gcode。此參數僅在逐次列印時生效。" -#, fuzzy msgid "End G-code when finish the printing of this filament" -msgstr "結束使用該耗材列印時的結尾 G-code" +msgstr "使用該線材列印結束時的結尾 G-code" msgid "Ensure vertical shell thickness" msgstr "確保垂直外殼厚度" @@ -10337,11 +10102,10 @@ msgid "" "nozzle diameter." msgstr "外牆的線寬。如果以 % 表示,將以噴嘴直徑為基準來計算" -#, fuzzy 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 "外牆的列印速度。它通常使用比內壁速度慢的速度,以獲得更好的列印品質。" +msgstr "外牆的列印速度。它通常比內壁速度慢,以獲得更好的列印品質。" msgid "Small perimeters" msgstr "微小部位" @@ -10349,7 +10113,7 @@ msgstr "微小部位" msgid "" "This separate setting will affect the speed of perimeters having radius <= " "small_perimeter_threshold (usually holes). If expressed as percentage (for " -"example: 80%) it will be calculated on the outer wall speed setting above. " +"example: 80%)it will be calculated on the outer wall speed setting above. " "Set to zero for auto." msgstr "" "這個單獨的設定將影響半徑 <= small_perimeter_threshold(通常是圓孔)的周長的速" @@ -10364,10 +10128,10 @@ msgid "" msgstr "這設定了微小部位周長的臨界值。 預設臨界值是 0mm" msgid "Walls printing order" -msgstr "" +msgstr "牆列印順序" msgid "" -"Print sequence of the internal (inner) and external (outer) walls. \n" +"Print sequence of the internal (inner)and external (outer)walls. \n" "\n" "Use Inner/Outer for best overhangs. This is because the overhanging walls " "can adhere to a neighbouring perimeter while printing. However, this option " @@ -10392,16 +10156,16 @@ msgid "" msgstr "" 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 " @@ -10415,7 +10179,7 @@ msgid "" msgstr "" msgid "Wall loop direction" -msgstr "" +msgstr "牆方向" msgid "" "The direction which the wall loops are extruded when looking down from the " @@ -10427,12 +10191,18 @@ msgid "" "\n" "This option will be disabled if spiral vase mode is enabled." msgstr "" +"從上方觀看時,牆擠出方向。\n" +"\n" +"預設情況下,所有牆面都是以逆時針方向擠出,除非啟用了「偶數反向」。將此設置為「自動」以外的" +"任何選項,將強制牆面方向,無論是否啟用了「偶數反向」。\n" +"\n" +"如果啟用了花瓶模式,這個選項將被禁用。" msgid "Counter clockwise" -msgstr "" +msgstr "逆時針" msgid "Clockwise" -msgstr "" +msgstr "順時針" msgid "Height to rod" msgstr "到橫杆高度" @@ -10493,7 +10263,7 @@ msgid "Probe point distance" msgstr "" msgid "" -"This option sets the preferred distance between probe points (grid size) for " +"This option sets the preferred distance between probe points (grid size)for " "the X and Y directions, with the default being 50mm for both X and Y." msgstr "" @@ -10504,13 +10274,13 @@ msgid "" "This option determines the additional distance by which the adaptive bed " "mesh area should be expanded in the XY directions." msgstr "" +"此選項決定自適應床面網格區域在 XY 方向上應該擴展的額外距離。" msgid "Extruder Color" msgstr "擠出機顏色" -#, fuzzy msgid "Only used as a visual help on UI" -msgstr "作為使用者介面上的輔助" +msgstr "作為介面上的輔助" msgid "Extruder offset" msgstr "擠出機偏移" @@ -10518,7 +10288,6 @@ msgstr "擠出機偏移" msgid "Flow ratio" msgstr "流量比例" -#, fuzzy msgid "" "The material may have volumetric change after switching between molten state " "and crystalline state. This setting changes all extrusion flow of this " @@ -10527,7 +10296,7 @@ msgid "" "has slight overflow or underflow" msgstr "" "線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" -"量。推薦的範圍為 0.95 到 1.05。發現大平層模型的頂面有輕微的缺料或多料時,或許" +"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許" "可以嘗試微調這個參數。" msgid "" @@ -10540,6 +10309,11 @@ msgid "" "The final object flow ratio is this value multiplied by the filament flow " "ratio." msgstr "" +"線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" +"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許" +"可以嘗試微調這個參數。" +"\n" +"最終物體流量比是此值與線材流量比的乘積。" msgid "Enable pressure advance" msgstr "啟用壓力提前" @@ -10550,16 +10324,16 @@ msgid "" msgstr "啟用壓力提前,一旦啟用會覆蓋自動校準的結果" #, fuzzy -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +msgid "Pressure advance(Klipper)AKA Linear advance factor(Marlin)" msgstr "壓力提前(Klipper)或者線性提前(Marlin)" msgid "Enable adaptive pressure advance (beta)" -msgstr "" +msgstr "啟用進階壓力提前 (beta)" #, no-c-format, no-boost-format msgid "" "With increasing print speeds (and hence increasing volumetric flow through " -"the nozzle) and increasing accelerations, it has been observed that the " +"the nozzle)and increasing accelerations, it has been observed that the " "effective PA value typically decreases. This means that a single PA value is " "not always 100% optimal for all features and a compromise value is usually " "used that does not cause too much bulging on features with lower flow speed " @@ -10579,11 +10353,11 @@ msgid "" msgstr "" msgid "Adaptive pressure advance measurements (beta)" -msgstr "" +msgstr "自適應壓力提前測量(beta)" #, no-c-format, no-boost-format msgid "" -"Add sets of pressure advance (PA) values, the volumetric flow speeds and " +"Add sets of pressure advance (PA)values, the volumetric flow speeds and " "accelerations they were measured at, separated by a comma. One set of values " "per line. For example\n" "0.04,3.96,3000\n" @@ -10613,7 +10387,7 @@ msgid "" msgstr "" msgid "Enable adaptive pressure advance for overhangs (beta)" -msgstr "" +msgstr "啟用懸挑自適應壓力提前(beta)" msgid "" "Enable adaptive PA for overhangs as well as when flow changes within the " @@ -10621,9 +10395,12 @@ msgid "" "set accurately, it will cause uniformity issues on the external surfaces " "before and after overhangs.\n" msgstr "" +"啟用自適應 PA 以應對懸挑以及同一特徵內流量變化。" +"這是一個實驗性選項,因為如果 PA 配置未準確設定,可能會在懸挑前後的外部表面上造成均勻" +"性問題。\n" msgid "Pressure advance for bridges" -msgstr "" +msgstr "橋接壓力提前" msgid "" "Pressure advance value for bridges. Set to 0 to disable. \n" @@ -10633,8 +10410,11 @@ msgid "" "pressure drop in the nozzle when printing in the air and a lower PA helps " "counteract this." msgstr "" +"橋接的壓力提前值。設為 0 可禁用。\n" +"\n" +"在列印橋接時,較低的 PA 值有助於減少橋接結束後出現的輕微欠擠壓現象。" +"這是由於列印空中時噴嘴內部壓力下降,較低的 PA 值有助於抵消這個問題。" -#, fuzzy msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " "it will be computed over the nozzle diameter." @@ -10644,16 +10424,15 @@ msgstr "" msgid "Keep fan always on" msgstr "保持風扇永遠開啟" -#, fuzzy msgid "" "If enable this setting, part cooling fan will never be stopped and will run " "at least at minimum speed to reduce the frequency of starting and stopping" msgstr "" -"如果勾選這個選項,部件冷卻風扇將永遠不會停止,並且會以最小風扇轉速設定值持運" +"如果勾選這個選項,物件冷卻風扇將不會停止,並且會以最小風扇轉速設定值" "運轉以減少風扇的頻繁開關" msgid "Don't slow down outer walls" -msgstr "" +msgstr "列印外牆不減速" msgid "" "If enabled, this setting will ensure external perimeters are not slowed down " @@ -10663,21 +10442,27 @@ msgid "" " 1. To avoid changes in shine when printing glossy filaments \n" "2. To avoid changes in external wall speed which may create slight wall " "artifacts that appear like z banding \n" -"3. To avoid printing at speeds which cause VFAs (fine artifacts) on the " +"3. To avoid printing at speeds which cause VFAs (fine artifacts)on the " "external walls\n" "\n" msgstr "" +"如果啟用,這個設定將確保外圍輪廓不會因為達到最小層時間而減慢速度。" +"這在以下情境中特別有幫助:\n" +"\n" +" 1. 避免在列印光面材料時發生光澤變化\n" +" 2. 避免外牆速度變化,這可能會產生類似Z帶紋的牆面瑕疵\n" +" 3. 避免以會在外牆上造成細微瑕疵(細節瑕疵,VFA)速度列印\n" +"\n" msgid "Layer time" msgstr "層時間" -#, fuzzy msgid "" "Part cooling fan will be enabled for layers of which estimated time is " "shorter than this value. Fan speed is interpolated between the minimum and " "maximum fan speeds according to layer printing time" msgstr "" -"當層預估列印時間小於該數值時,部件冷卻風扇將會被開啟。風扇轉速將根據層列印時" +"當層預估列印時間小於該數值時,物件冷卻風扇將會被開啟。風扇轉速將根據層列印時" "間在最大和最小風扇轉速之間自動調整" msgid "Default color" @@ -10690,7 +10475,7 @@ msgid "Filament notes" msgstr "線材備註" msgid "You can put your notes regarding the filament here." -msgstr "您可以將有關線材的備註存放在這裡。" +msgstr "你可以將有關線材的備註存放在這裡。" msgid "Required nozzle HRC" msgstr "噴嘴硬度要求" @@ -10700,14 +10485,13 @@ msgid "" "of nozzle's HRC." msgstr "列印此線材的所需的最小噴嘴硬度。零值表示不檢查噴嘴硬度。" -#, fuzzy msgid "" "This setting stands for how much volume of filament can be melted and " "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"這個設定表示在 1 秒內能夠融化和擠出的線材體積。列印速度會受到最大體積速度的限" -"制,防止設定過高和不合理的速度。不允許設定為 0。" +"這個設定表示每秒能夠融化和擠出的線材體積。列印速度會受限於到最大體積速度," +"防止設定過高和不合理的速度。不允許設定為 0。" msgid "mm³/s" msgstr "mm³/s" @@ -10754,7 +10538,7 @@ msgid "" "Internally it is converted to filament_diameter. All other volume " "calculations remain the same.\n" "\n" -"filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" +"filament_diameter = sqrt( (4 * pellet_flow_coefficient)/ PI )" msgstr "" msgid "Shrinkage (XY)" @@ -10768,9 +10552,9 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" -"冷卻後耗材會收縮的百分比(如果測量的長度是 94mm 而不是 100mm,則為是收縮率為 " +"冷卻後線材會收縮的百分比(如果測量的長度是 94mm 而不是 100mm,則為是收縮率為 " "94%)\n" -"補償將按比例縮放 xy 軸該補償僅考慮牆壁所使用的耗材\n" +"補償將按比例縮放 xy 軸該補償僅考慮牆壁所使用的線材\n" "請確保物體之間有足夠的間距,因為補償是在邊界檢查之後進行" msgid "Shrinkage (Z)" @@ -10783,14 +10567,12 @@ msgid "" "compensate." msgstr "" -#, fuzzy msgid "Loading speed" msgstr "進料速度" msgid "Speed used for loading the filament on the wipe tower." -msgstr "將線材擠出到擦拭塔上的速度。" +msgstr "將線材擠出到換料塔上的速度。" -#, fuzzy msgid "Loading speed at the start" msgstr "啟動時進料速度" @@ -10805,12 +10587,11 @@ msgstr "退料速度" msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." -msgstr "使用於擦拭塔上退料的速度(不影響尖端成型之後初始部分的速度)。" +msgstr "使用於換料塔上退料的速度(不影響尖端成型之後初始部分的速度)。" msgid "Unloading speed at the start" msgstr "退料初始速度" -#, fuzzy msgid "" "Speed used for unloading the tip of the filament immediately after ramming." msgstr "線材尖端成型後立即退料的速度。" @@ -10856,7 +10637,7 @@ msgid "Cooling moves are gradually accelerating beginning at this speed." msgstr "從這個速度開始冷卻移動逐漸加速。" msgid "Minimal purge on wipe tower" -msgstr "擦拭塔上的最小清理量" +msgstr "換料塔上的最小清理量" msgid "" "After a tool change, the exact position of the newly loaded filament inside " @@ -10865,8 +10646,8 @@ msgid "" "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" @@ -10893,7 +10674,7 @@ msgid "" "the toolchange. This option is only used when the wipe tower is enabled." msgstr "" "多色列印設備執行尖端成型時(即,當列印設備設定中的單擠出機多材料未選取時)。" -"選取時,在換色之前,會迅速擠出少量線材絲到擦拭塔上。此選項僅在啟用擦拭塔時使" +"選取時,在換色之前,會迅速擠出少量線材絲到換料塔上。此選項僅在啟用換料塔時使" "用。" msgid "Multi-tool ramming volume" @@ -10951,15 +10732,14 @@ msgstr "價格" msgid "Filament price. For statistics only" msgstr "線材的價格。只用於統計資訊。" -#, fuzzy msgid "money/kg" msgstr "元/公斤" msgid "Vendor" -msgstr "供應商" +msgstr "廠牌" msgid "Vendor of filament. For show only" -msgstr "列印線材的供應商。僅用於展示。" +msgstr "列印線材的廠牌。僅用於展示。" msgid "(Undefined)" msgstr "(未定義)" @@ -11037,10 +10817,9 @@ msgstr "" msgid "Sparse infill anchor length" msgstr "稀疏填充錨線長度" -#, fuzzy 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 " +"additional perimeter. 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 " @@ -11050,11 +10829,11 @@ msgid "" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" -"用附加周長的一小段將填充線連接到內部周長。如果以百分比(例如:15%)表示,則計" -"算填充拉伸寬度。Orca Slicer 試圖將兩條緊密的填充線連接到一個短的周長段。如果" -"找不到短於“填充”和“錨點”最大值的周長線段,則填充線僅在一側連接到周長線段,並" -"且所取周長線段的長度僅限於此參數,但不超過“錨點長度”最大值。將此參數設定為" -"零,以禁用連接到單個填充線的錨點周長。" +"將內填充線連接到內牆邊緣,並使用一小段額外的邊緣。如果以百分比表示(例如:15%)," +"則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充線連接到一段短邊緣。" +"如果找不到小於 infill_anchor_max 的邊緣段,則內填充線將只連接到一側的邊緣段," +"且所選的邊緣段長度會限制在此參數範圍內,但不超過\"錨點長度\"最大值。若將此參數設為零," +"則會禁用連接到單一內填充線的錨固邊緣。" #, fuzzy msgid "0 (no open anchors)" @@ -11066,10 +10845,9 @@ msgstr "1000(無限制)" msgid "Maximum length of the infill anchor" msgstr "填充錨線的最大長度" -#, fuzzy 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 " +"additional perimeter. 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 " @@ -11079,26 +10857,24 @@ msgid "" "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%)表示,則計" -"算填充拉伸寬度。Orca Slicer 試圖將兩條緊密的填充線連接到一個短的周長段。如果" -"找不到比此參數短的周長線段,則填充線僅在一側連接到周長線段,並且所採用的周長" -"線段的長度僅限於 infl_anchor,但不超過此參數。將此參數設定為零以禁用錨點。" +"將內填充線連接到內牆邊緣,並使用一小段額外的邊緣。如果以百分比表示(例如:15%)," +"則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充線連接到一段短邊緣。" +"如果找不到小於此參數的邊緣段,則內填充線將只連接到一側的邊緣段,且所選的邊緣段長度會限制於" +"infill_anchor,但不會超過此參數。\n" +"如果設為0,則會使用舊的內填充連接算法,這應該會產生與設為 1000 和 0 相同的結果。" msgid "0 (Simple connect)" msgstr "0(簡單連接)" -#, fuzzy msgid "Acceleration of outer walls" msgstr "外牆的加速度。它通常使用比內壁速度慢的加速度,以獲得更好的列印品質" -#, fuzzy msgid "Acceleration of inner walls" -msgstr "內圈牆加速度,使用較低值可以改善列印品質。" +msgstr "內牆加速度,使用較低值可以改善列印品質。" msgid "Acceleration of travel moves" msgstr "空駛加速度" -#, fuzzy msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -11107,7 +10883,6 @@ msgstr "頂面填充的加速度。使用較低值可能會改善頂面列印品 msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "外牆加速度。使用較小的值可以提高列印品質。" -#, fuzzy 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." @@ -11221,29 +10996,25 @@ msgid "" "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 "" -"風扇速度將從“禁用第一層”的零線性上升到“全風扇速度層”的最大。如果低於“禁用風扇" -"第一層”,則“全風扇速度第一層”將被忽略,在這種情況下,風扇將在“禁用風扇第一" -"層”+1層以最大允許速度運行。" +"風扇速度將從\"禁用第一層\"的零線性上升到\"全風扇速度層\"的最大。如果低於\"禁用風扇第一層\"" +",則\"全風扇速度第一層\"將被忽略,在這種情況下,風扇將在\"禁用風扇第一層\"+1層以最大允許" +"速度運行。" msgid "layer" -msgstr "" +msgstr "層" -#, fuzzy msgid "Support interface fan speed" -msgstr "支撐接觸面風扇速度" +msgstr "支撐界面風扇速度" -#, fuzzy msgid "" "This fan speed is enforced during all support interfaces, to be able to " "weaken their bonding with a high fan speed.\n" "Set to -1 to disable this override.\n" "Can only be overridden by disable_fan_first_layers." msgstr "" -"所有支撐接觸層列印期間強制執行速度,透過高轉速風扇速度減少支撐與物件的融" -"合。\n" +"所有支撐界面列印期間強制風扇速度,高速可以減少支撐與物件的融合。\n" "設定為 -1 以停用。" -#, fuzzy msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -11323,14 +11094,12 @@ msgstr "" msgid "Add line number" msgstr "標註行號" -#, fuzzy -msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" +msgid "Enable this to add line number(Nx)at the beginning of each G-Code line" msgstr "打開這個設定,G-code 的每一行的開頭會增加Nx標註行號。" msgid "Scan first layer" msgstr "首層檢查" -#, fuzzy msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" @@ -11367,7 +11136,6 @@ msgstr "噴嘴硬度。零值表示在切片時不檢查噴嘴硬度。" msgid "HRC" msgstr "洛氏硬度" -#, fuzzy msgid "Printer structure" msgstr "列印設備結構" @@ -11392,12 +11160,11 @@ msgstr "最佳物件位置" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "針對列印版的形狀,範圍 [0,1] 內的最佳自動擺放位置 。" -#, fuzzy msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " "command: M106 P2 S(0-255)." msgstr "" -"如果設備有輔助部件冷卻風扇,請啟用此選項。 G-code 指令:M106 P2 S(0-255)。" +"如果設備有輔助物件冷卻風扇,請啟用此選項。 G-code 指令:M106 P2 S(0-255)。" msgid "" "Start the fan this number of seconds earlier than its target start time (you " @@ -11413,18 +11180,16 @@ msgstr "" "將風扇啟動指令往前移動指定時間以補償風扇的啟動時間。目前支援 G1 G0 指令\n" "設為 0 以禁用此選項" -#, fuzzy msgid "Only overhangs" msgstr "僅懸空" #, fuzzy msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "僅對懸空有效" +msgstr "僅參考懸空的冷卻延遲" msgid "Fan kick-start time" msgstr "風扇" -#, fuzzy msgid "" "Emit a max fan speed command for this amount of seconds before reducing to " "target speed to kick-start the cooling fan.\n" @@ -11432,26 +11197,22 @@ msgid "" "fan started spinning from a stop, or to get the fan up to speed faster.\n" "Set to 0 to deactivate." msgstr "" -"在降低到目標速度以啟動冷卻風扇之前,持續發出最大風扇速度命令。\n" -"這對於低 PWM/功率可能不足以使風扇從停止狀態開始旋轉或使風扇加速得更快的風扇很" -"有用。\n" +"先用最快風扇速度運轉冷卻風扇N秒後再降低到目標速度。\n" +"這對於低 PWM/功率不足以讓風扇從停止狀態啟動,或使風扇加速更快的情況非常有用。\n" "設定為 0 以停用。" msgid "Time cost" msgstr "時間成本" -#, fuzzy msgid "The printer cost per hour" -msgstr "列印設備每小時成本" +msgstr "列印設備每小時的成本" msgid "money/h" msgstr "元/小時" -#, fuzzy msgid "Support control chamber temperature" msgstr "支援控制列印設備內部溫度" -#, fuzzy msgid "" "This option is enabled if machine support controlling chamber temperature\n" "G-code command: M141 S(0-255)" @@ -11462,7 +11223,6 @@ msgstr "" msgid "Support air filtration" msgstr "支援空氣過濾" -#, fuzzy msgid "" "Enable this if printer support air filtration\n" "G-code command: M106 P3 S(0-255)" @@ -11473,7 +11233,6 @@ msgstr "" msgid "G-code flavor" msgstr "G-code 風格" -#, fuzzy msgid "What kind of gcode the printer is compatible with" msgstr "列印設備相容的 G-code 樣式" @@ -11495,7 +11254,6 @@ msgstr "" msgid "Label objects" msgstr "標註物件" -#, fuzzy msgid "" "Enable this to add comments into the G-Code labeling print moves with what " "object they belong to, which is useful for the Octoprint CancelObject " @@ -11520,7 +11278,7 @@ msgid "" "descriptive text. If you print from SD card, the additional weight of the " "file could make your firmware slow down." msgstr "" -"啟用此選項可取得帶註釋的 G-code,其中每一行均由描述性文字進行解釋。 如果您從 " +"啟用此選項可取得帶註釋的 G-code,其中每一行均由描述性文字進行解釋。 如果你從 " "SD 卡列印,檔案的額外容量可能會導致韌體速度變慢。" msgid "Infill combination" @@ -11539,12 +11297,12 @@ msgid "" "Maximum layer height for the combined sparse infill. \n" "\n" "Set it to 0 or 100% to use the nozzle diameter (for maximum reduction in " -"print time) or a value of ~80% to maximize sparse infill strength.\n" +"print time)or a value of ~80% to maximize sparse infill strength.\n" "\n" "The number of layers over which infill is combined is derived by dividing " "this value with the layer height and rounded down to the nearest decimal.\n" "\n" -"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values " +"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle)or % values " "(eg 80%). This value must not be larger than the nozzle diameter." msgstr "" @@ -11657,13 +11415,11 @@ msgstr "" msgid "Ironing Type" msgstr "熨燙類型" -#, fuzzy 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 "" -"熨燙指的是使用小流量在表面的同高度列印,進而是的平面更加光滑。這個功能用於設" -"定哪些層進行熨燙。" +"熨燙是指使用小流量在表面相同高度再次列印,以使平面更加光滑。此設定控制哪些層進行熨燙。" msgid "No ironing" msgstr "不熨燙" @@ -11717,7 +11473,6 @@ msgstr "在每次換層抬升Z高度之後插入這段 G-code。" msgid "Supports silent mode" msgstr "支援靜音模式" -#, fuzzy msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" @@ -11726,7 +11481,6 @@ msgstr "設備是否支援使用低加速度列印的靜音模式。" msgid "Emit limits to G-code" msgstr "" -#, fuzzy msgid "Machine limits" msgstr "設備限制" @@ -11738,7 +11492,7 @@ msgstr "" msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" -msgstr "該 G-code 用於暫停列印。您可以在 gcode 預覽中插入暫停 G-code" +msgstr "該 G-code 用於暫停列印。你可以在 gcode 預覽中插入暫停 G-code" msgid "This G-code will be used as a custom code" msgstr "該 G-code 是訂製化指令" @@ -11834,28 +11588,24 @@ msgstr "E軸最大抖動" msgid "Minimum speed for extruding" msgstr "最小擠出速度" -#, fuzzy msgid "Minimum speed for extruding (M205 S)" msgstr "最小擠出速度(M205 S)" msgid "Minimum travel speed" msgstr "最小空駛速度" -#, fuzzy msgid "Minimum travel speed (M205 T)" msgstr "最小空駛速度(M205 T)" msgid "Maximum acceleration for extruding" msgstr "擠出最大加速度" -#, fuzzy msgid "Maximum acceleration for extruding (M204 P)" msgstr "擠出時的最大加速度(M204 P)" msgid "Maximum acceleration for retracting" msgstr "回抽最大加速度" -#, fuzzy msgid "Maximum acceleration for retracting (M204 R)" msgstr "回抽最大加速度(M204 R)" @@ -11869,7 +11619,7 @@ msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed limitation of part cooling fan" msgstr "" -"啟用自動冷卻時,可能會提高部件冷卻風扇的轉速。這是部件冷卻風扇的最大速度限制" +"啟用自動冷卻時,可能會提高物件冷卻風扇的轉速。這是物件冷卻風扇的最大速度限制" msgid "Max" msgstr "最大" @@ -11882,11 +11632,10 @@ msgstr "擠出頭最大可列印的層高。用於限制開啟自適應層高時 msgid "Extrusion rate smoothing" msgstr "平滑擠出率" -#, fuzzy msgid "" "This parameter smooths out sudden extrusion rate changes that happen when " -"the printer transitions from printing a high flow (high speed/larger width) " -"extrusion to a lower flow (lower speed/smaller width) extrusion and vice " +"the printer transitions from printing a high flow (high speed/larger width)" +"extrusion to a lower flow (lower speed/smaller width)extrusion and vice " "versa.\n" "\n" "It defines the maximum rate by which the extruded volumetric flow in mm3/sec " @@ -11896,7 +11645,7 @@ msgid "" "A value of 0 disables the feature. \n" "\n" "For a high speed, high flow direct drive printer (like the Bambu lab or " -"Voron) this value is usually not needed. However it can provide some " +"Voron)this value is usually not needed. However it can provide some " "marginal benefit in certain cases where feature speeds vary greatly. For " "example, when there are aggressive slowdowns due to overhangs. In these " "cases a high value of around 300-350mm3/s2 is recommended as this allows for " @@ -11911,21 +11660,21 @@ msgid "" "\n" "Note: this parameter disables arc fitting." msgstr "" -"此參數是列印設備從列印高流量(高速/較大寬度)擠出轉換到較低流量(較低速度/較" -"小寬度)擠出時,用於突然變化擠出速率的平滑,反之亦然。\n" -"它定義了擠出體積流量(以 mm3/秒為單位)隨時間變化的最大速率。數值越高意味著允" -"許更高的擠出速率變化,從而實現更快的速度轉換。\n" +"此參數是列印設備從列印高流量(高速/較大寬度)擠出轉換到較低流量(較低速度/" +"較小寬度)擠出時,用於平滑突然變擠出速率,反之亦然。\n" +"它定義了擠出體積流量(mm3/秒)隨時間變化的最大速率。數值越高意味著允許" +"更高的擠出速率變化,從而實現更快的速度轉換。\n" "\n" "值為 0 會停用該功能。\n" "\n" -"對於高速、高流量的機型(如 Bambu lab 或 Voron),通常不需要此值。但是,在某些" -"功能速度差異很大的情況下,它可以提供一些邊際效益。 例如,當懸空而出現嚴重的減" -"速時。 在這些情況下,建議使用大約 300-350 mm3/s2,因為這樣剛好允許足夠的平" +"對於高速、高流量的機型(如 Bambu lab 或 Voron),通常不需要此設置。但是,在某些" +"速度差異很大的情況下,它可以提供一些邊際效益。 例如,當出現因懸空而導致的劇烈減" +"速時。在這些情況下,建議使用大約 300-350 mm3/s2,因為這樣剛好允許足夠的平" "滑,以幫助壓力提前實現更平滑的流量過渡。\n" "\n" -"對於速度較慢且沒有壓力提前的機種,該值應設定的非常低。對於近程擠出機來說\n" -"10-15 mm3/s2 是一個相對好的起點,而對於遠程擠出機來說是 5-10 mm3/s2。\n" -"此功能在 Prusa 切片機中稱為壓力均衡器。\n" +"對於速度較慢且沒有壓力提前的機種,應將此值設置為較低。對於近程擠出機來說\n" +"10-15 mm3/s2 是一個好的起點,而對於遠程擠出機來說是 5-10 mm3/s2。\n" +"此功能在 Prusa 切片軟體中稱為壓力均衡器。\n" "\n" "注意:此參數會停用圓弧擬合。" @@ -11947,9 +11696,8 @@ msgid "" msgstr "" msgid "Minimum speed for part cooling fan" -msgstr "部件冷卻風扇的最小轉速" +msgstr "物件冷卻風扇的最小轉速" -#, fuzzy msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " "during printing except the first several layers which is defined by no " @@ -11987,16 +11735,15 @@ msgstr "設定備註" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." -msgstr "您可以在這裡放置您的個人備註。 該文字將會加入 G 代碼標題註釋中。" +msgstr "你可以在這裡放置你的個人備註。 該文字將會加入 G 代碼標題註釋中。" msgid "Host Type" msgstr "主機類型" -#, fuzzy msgid "" "Orca Slicer can upload G-code files to a printer host. This field must " "contain the kind of the host." -msgstr "切片軟體可以將 G-code 檔案上傳到列印設備。此欄位必須包含設備類型。" +msgstr "Orca Slicer可以將 G-code 檔案上傳到列印設備。此欄位必須包含設備類型。" msgid "Nozzle volume" msgstr "噴嘴內腔體積" @@ -12057,7 +11804,6 @@ msgstr "從切割區域到垃圾桶的起始和結束點。" msgid "Reduce infill retraction" msgstr "減小填充回抽" -#, fuzzy 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 " @@ -12077,17 +11823,14 @@ msgstr "檔案名稱格式" msgid "User can self-define the project file name when export" msgstr "使用者可以自訂匯出項目檔案的名稱。" -#, fuzzy msgid "Make overhangs printable" -msgstr "懸空可列印" +msgstr "修改懸空成可列印" -#, fuzzy msgid "Modify the geometry to print overhangs without support material." msgstr "修改幾何形狀使得懸空部分無需支撐材料或者橋接列印。" -#, fuzzy msgid "Make overhangs printable - Maximum angle" -msgstr "懸空可列印的最大角度" +msgstr "懸空可列印修改的最大角度" msgid "" "Maximum angle of overhangs to allow after making more steep overhangs " @@ -12136,7 +11879,7 @@ msgid "Number of walls of every layer" msgstr "每一層的外牆" msgid "Alternate extra wall" -msgstr "" +msgstr "交錯額外牆壁" msgid "" "This setting adds an extra wall to every other layer. This way the infill " @@ -12156,7 +11899,7 @@ msgid "" "argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" -"如果您想透過自訂腳本處理輸出的 G-code,只需在此處列出它們的絕對路徑即可。 用" +"如果你想透過自訂腳本處理輸出的 G-code,只需在此處列出它們的絕對路徑即可。 用" "分號分隔多個腳本。 腳本將傳遞 G-code 檔案的絕對路徑作為第一個參數,並且它們可" "以透過讀取環境變數來讀取 Orca Slicer 設定。" @@ -12248,12 +11991,11 @@ msgstr "" msgid "Retraction Length" msgstr "回抽長度" -#, fuzzy 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 "Long retraction when cut(experimental)" @@ -12567,15 +12309,14 @@ msgstr "" msgid "Wipe speed" msgstr "擦拭速度" -#, fuzzy msgid "" "The wipe speed is determined by the speed setting specified in this " "configuration.If the value is expressed as a percentage (e.g. 80%), it will " "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"擦拭速度是根據此配置中指定的速度設定確定的。如果該值以百分比形式表示(例如 " -"80%),則將根據上方的移動速度設定進行計算。該參數的預設值為 80%。" +"擦拭速度是根據此配置中指定的速度設定。如果該值以百分比形式表示(例如 " +"80%),則將根據空駛速度設定進行計算。該參數的預設值為 80%。" msgid "Skirt distance" msgstr "Skirt距離" @@ -12685,7 +12426,6 @@ msgstr "內部實心填充的線寬。如果以%表示,它將以噴嘴直徑 msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "內部實心填充的速度,不是頂面和底面。" -#, fuzzy msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " "model into a single walled print with solid bottom layers. The final " @@ -12723,7 +12463,7 @@ msgstr "" "如果啟用平滑模式或者傳統模式,將在每次列印時產生縮時錄影影片。列印完每層後," "將用內建相機拍攝快照。列印完成後,所有這些快照會組合成一個延時影片。如果啟用" "平滑模式,列印完每層後,工具頭將移動到吐料槽,然後拍攝快照。由於平滑模式在拍" -"攝快照的過程中熔融的線材可能會從噴嘴中洩漏,因此需要使用擦拭塔進行噴嘴擦拭。" +"攝快照的過程中熔融的線材可能會從噴嘴中洩漏,因此需要使用換料塔進行噴嘴擦拭。" msgid "Traditional" msgstr "傳統模式" @@ -12776,17 +12516,19 @@ msgstr "手動更換線材" msgid "" "Enable this option to omit the custom Change filament G-code only at the " -"beginning of the print. The tool change command (e.g., T0) will be skipped " +"beginning of the print. The tool change command (e.g., T0)will be skipped " "throughout the entire print. This is useful for manual multi-material " "printing, where we use M600/PAUSE to trigger the manual filament change " "action." msgstr "" +"啟用此選項以僅在列印開始時省略自訂更換線材 G-code。工具更換命令(例如 T0)將在整個" +"列印過程中跳過。這對於手動多線材列印很有用,我們使用 M600/PAUSE 來觸發手動線材更換動作。" msgid "Purge in prime tower" -msgstr "沖刷進擦拭塔" +msgstr "沖刷進換料塔" msgid "Purge remaining filament into prime tower" -msgstr "沖刷剩餘的線材進入擦拭塔" +msgstr "沖刷剩餘的線材進入換料塔" msgid "Enable filament ramming" msgstr "啟用線材尖端成型" @@ -12800,8 +12542,8 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" -"如果啟用,將不會在沒有換色的層列印擦拭塔。存在換色的層時,擠出機將降低高度打" -"印擦拭塔。使用者應該確保不會與列印物件發生衝突。" +"如果啟用,將不會在沒有換色的層列印換料塔。存在換色的層時,擠出機將降低高度打" +"印換料塔。使用者應該確保不會與列印物件發生衝突。" msgid "Prime all printing extruders" msgstr "所有擠出機畫線" @@ -12840,18 +12582,17 @@ msgstr "奇偶" msgid "Close holes" msgstr "閉孔" -#, fuzzy msgid "Z offset" -msgstr "Z 軸偏移(Z offset)" +msgstr "Z 偏移(Z offset)" msgid "" -"This value will be added (or subtracted) from all the Z coordinates in the " +"This value will be added (or subtracted)from all the Z coordinates in the " "output G-code. It is used to compensate for bad Z endstop position: for " "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" "該設定值將從輸出 G-code 中的所有 Z 座標增加(或 減少)。 它用於 Z 軸限位器位" -"置的補償:例如,您的 Z 軸限位器實際上使噴嘴距離列印板高了 0.3 mm,請將其設定" +"置的補償:例如,你的 Z 軸限位器實際上使噴嘴距離列印板高了 0.3 mm,請將其設定" "為 -0.3。" msgid "Enable support" @@ -12861,26 +12602,22 @@ msgid "Enable support generation." msgstr "開啟支撐產生。" msgid "" -"normal(auto) and tree(auto) is used to generate support automatically. If " -"normal(manual) or tree(manual) is selected, only support enforcers are " +"normal(auto)and tree(auto)is used to generate support automatically. If " +"normal(manual)or tree(manual)is selected, only support enforcers are " "generated" msgstr "" "普通(自動)和樹狀(自動)用於自動產生支撐體。如果選擇普通(手動)或樹狀(手" "動),僅會在支撐強制面上產生支撐。" -#, fuzzy msgid "normal(auto)" msgstr "普通(自動)" -#, fuzzy msgid "tree(auto)" msgstr "樹狀(自動)" -#, fuzzy msgid "normal(manual)" msgstr "普通(手動)" -#, fuzzy msgid "tree(manual)" msgstr "樹狀(手動)" @@ -12893,9 +12630,8 @@ msgstr "模型和支撐之間 XY 分離距離" msgid "Pattern angle" msgstr "模式角度" -#, fuzzy msgid "Use this setting to rotate the support pattern on the horizontal plane." -msgstr "設定支撐圖案在水平面的旋轉角度。" +msgstr "設定支撐圖形在水平面的旋轉角度。" msgid "On build plate only" msgstr "僅在列印板產生" @@ -12932,18 +12668,18 @@ msgstr "支撐產生於模型表面時,支撐面底部和模型之間的z間 msgid "Support/raft base" msgstr "支撐/筏層主體" -#, fuzzy msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "列印支撐主體和筏層的線材。\"預設\"代表不指定特定的線材,並使用目前線材" msgid "Avoid interface filament for base" -msgstr "" +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 " @@ -12960,11 +12696,10 @@ msgstr "使用圈形走線覆蓋頂部接觸面。預設關閉。" msgid "Support/raft interface" msgstr "支撐/筏層界面" -#, fuzzy msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" -msgstr "列印支撐接觸面的線材。\"預設\"代表不指定特定的線材,並使用目前線材" +msgstr "列印支撐界面的線材。\"預設\"代表不指定特定的線材,並使用目前線材" msgid "Top interface layers" msgstr "頂部接觸面層數" @@ -12976,7 +12711,7 @@ msgid "Bottom interface layers" msgstr "底部接觸面層數" msgid "Number of bottom interface layers" -msgstr "" +msgstr "底層介面層數" msgid "Same as top" msgstr "與頂部相同" @@ -13031,7 +12766,7 @@ msgstr "支撐線距" msgid "Normal Support expansion" msgstr "普通支撐延伸" -msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgid "Expand (+)or shrink (-)the horizontal span of normal support" msgstr "在水平方向對普通支撐進行延伸(+)或收縮(-)" msgid "Speed of support" @@ -13052,7 +12787,7 @@ msgstr "" "混合風格將在大平面懸空下建立與正常支撐類似的結構。" msgid "Default (Grid/Organic" -msgstr "" +msgstr "預設 (格狀/有機" msgid "Snug" msgstr "緊貼" @@ -13072,19 +12807,17 @@ msgstr "混合樹" msgid "Independent support layer height" msgstr "支撐獨立層高" -#, fuzzy msgid "" "Support layer uses layer height independent with object layer. This is to " "support customizing z-gap and save print time.This option will be invalid " "when the prime tower is enabled." msgstr "" -"支撐層使用與物件層獨立的層高。這是為了支援自訂 Z間隙(z-gap)並且節省列印時" -"間。當擦拭塔被啟用時,這個選項將無效。" +"支撐層使用與物件層獨立的層高。這是為了支援自訂Z間隙(z-gap)並且節省列印時" +"間。當換料塔被啟用時,這個選項將無效。" msgid "Threshold angle" msgstr "臨界值角度" -#, fuzzy msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." @@ -13093,33 +12826,29 @@ msgstr "將會為懸空角度低於臨界值的模型表面產生支撐。" msgid "Tree support branch angle" msgstr "樹狀支撐分支角度" -#, fuzzy msgid "" "This setting determines the maximum overhang angle that t he branches of " "tree support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" -"此設定確定了允許樹狀支撐的最大懸垂角度。如果角度增加,可以更水平地列印分支," +"此設定決定樹狀支撐的最大分支角度。如果角度增加,可以更水平地列印分支," "使它們可以到達更遠的地方。" -#, fuzzy msgid "Preferred Branch Angle" msgstr "偏好樹狀分支角度" #. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" -#, fuzzy msgid "" "The preferred angle of the branches, when they do not have to avoid the " "model. Use a lower angle to make them more vertical and more stable. Use a " "higher angle for branches to merge faster." msgstr "" -"樹狀分支的偏好角度,當它們不必避開模型時。 使用較低的角度使它們更垂直且更穩" +"當樹狀分支不必避開模型時的偏好角度。 使用較低的角度使它們更垂直且更穩" "定。 使用更高的角度使分支合併得更快。" msgid "Tree support branch distance" msgstr "樹狀支撐分支距離" -#, fuzzy msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "此設定確定了樹狀支撐的相鄰節點之間的距離。" @@ -13170,7 +12899,6 @@ msgstr "有機樹狀支撐的分支末端直徑。" msgid "Tree support branch diameter" msgstr "樹狀支撐分支直徑" -#, fuzzy msgid "This setting determines the initial diameter of support nodes." msgstr "此設定確定了樹狀支撐節點的初始直徑。" @@ -13188,9 +12916,8 @@ msgstr "" "樹狀分支直徑隨著向底部逐漸變粗的角度。 0 角度將導致分支在其長度上具有均勻的厚" "度。 一點角度可以增加有機樹支撐的穩定性。" -#, fuzzy msgid "Branch Diameter with double walls" -msgstr "分支直徑雙層牆" +msgstr "分支雙層牆直徑" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -13202,15 +12929,14 @@ 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 "樹狀支撐產生填充" -#, fuzzy msgid "" "This setting specifies whether to add infill inside large hollows of tree " "support" @@ -13231,6 +12957,11 @@ msgid "" "either via macros or natively and is usually used when an active chamber " "heater is installed." msgstr "" +"此選項啟用機箱溫度控制。此選項會在 \"machine_start_gcode\" 之前啟用 M191 命令," +"設定機箱溫度並等待達到設定溫度。此外,它會在列印結束時發出 M141 命令來關閉機箱加熱器" +"(如果存在)\n。" +"\n" +"此選項依賴於韌體支援 M191 和 M141 命令(通過巨集或原生),通常用於主動機箱加熱器。" msgid "Chamber temperature" msgstr "機箱溫度" @@ -13243,17 +12974,27 @@ msgid "" "ASA. \n" "\n" "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option " -"should be disabled (set to 0) as the chamber temperature should be low to " +"should be disabled (set to 0)as the chamber temperature should be low to " "avoid extruder clogging caused by material softening at the heat break.\n" "\n" "If enabled, this parameter also sets a gcode variable named " "chamber_temperature, which can be used to pass the desired chamber " "temperature to your print start macro, or a heat soak macro like this: " -"PRINT_START (other variables) CHAMBER_TEMP=[chamber_temperature]. This may " +"PRINT_START (other variables)CHAMBER_TEMP=[chamber_temperature]. This may " "be useful if your printer does not support M141/M191 commands, or if you " "desire to handle heat soaking in the print start macro if no active chamber " "heater is installed." msgstr "" +"對於 ABS、ASA、PC 和 PA 等高溫材料,較高的機箱溫度有助於抑制或減少翹曲,並可能提高層間" +"結合強度。然而,同時,較高的機箱溫度會降低列印 ABS 和 ASA 時的空氣過濾效率。\n" +"\n" +"對於 PLA、PETG、TPU、PVA 和其他低溫材料,不應使用此選項(設置為 0),因為機箱溫度應較低," +"以避免由於材料在喉管軟化而導致擠出機堵塞。\n" +"\n" +"如果啟用,此參數還設置了一個名為 chamber_temperature 的 gcode 變數,可將所需的機箱溫度" +"傳遞給列印巨集,例如:PRINT_START(其他變數)CHAMBER_TEMP=[chamber_temperature]。" +"如果你的印表設備不支持 M141/M191 命令,或者你希望在沒有安裝主動機箱加熱器的情況下在列印" +"開始巨集中處理熱浸處理,這可能很有用。" msgid "Nozzle temperature for layers after the initial one" msgstr "除首層外的其它層的噴嘴溫度" @@ -13301,7 +13042,6 @@ msgstr "頂部殼體層數" msgid "Top shell thickness" msgstr "頂部殼體厚度" -#, fuzzy msgid "" "The number of top solid layers is increased when slicing if the thickness " "calculated by top shell layers is thinner than this value. This can avoid " @@ -13340,13 +13080,18 @@ 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 "" +"描述當回抽時噴嘴沿最後一條路徑移動的時間。\n" +"\n" +"根據擦拭操作持續時間、擠出機/線材回抽設定的速度和時間長度,可能需要回抽來抽回剩餘的線材。" +"\n" +"若在下面的擦拭設定之前設定回抽量,將會在擦拭之前執行多餘的回抽,否則將在之後執行。" msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " "stabilize the chamber pressure inside the nozzle, in order to avoid " "appearance defects when printing objects." msgstr "" -"擦拭塔可以用來清理噴嘴上的殘留料和讓噴嘴內部的腔壓達到穩定狀態,以避免列印物" +"換料塔可以用來清理噴嘴上的殘留料和讓噴嘴內部的壓力達到穩定狀態,以避免列印物" "體時出現外觀瑕疵。" msgid "Purging volumes" @@ -13364,16 +13109,16 @@ msgid "Prime volume" msgstr "清理量" msgid "The volume of material to prime extruder on tower." -msgstr "擦拭塔上的清理量" +msgstr "換料塔上的清理量" msgid "Width of prime tower" -msgstr "擦拭塔寬度" +msgstr "換料塔寬度" msgid "Wipe tower rotation angle" -msgstr "擦拭塔旋轉角度" +msgstr "換料塔旋轉角度" msgid "Wipe tower rotation angle with respect to x-axis." -msgstr "擦拭塔相對於 x 軸的旋轉角度。" +msgstr "換料塔相對於 x 軸的旋轉角度。" msgid "Stabilization cone apex angle" msgstr "穩定錐形頂角" @@ -13381,10 +13126,10 @@ msgstr "穩定錐形頂角" msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." -msgstr "圓錐體頂點處的角度,用於穩定擦拭塔。 更大的角度意味著更寬的底座。" +msgstr "圓錐體頂點處的角度,用於穩定換料塔。 更大的角度意味著更寬的底座。" msgid "Maximum wipe tower print speed" -msgstr "" +msgstr "換料塔最快列印速度" msgid "" "The maximum print speed when purging in the wipe tower and printing the wipe " @@ -13407,15 +13152,25 @@ msgid "" "For the wipe tower external perimeters the internal perimeter speed is used " "regardless of this setting." msgstr "" +"在換料塔中和換料塔稀疏層時的最快列印速度。在列印時,如果稀疏填充速度或從線材最大體積速度計算出" +"的速度較低,則將使用較低的速度。\n" +"\n" +"在列印稀疏層時,如果內部周界速度或從線材最大體積速度計算出的速度較低,則將使用較低的速度。\n" +"\n" +"提高此速度可能會影響塔的穩定性,並增加噴嘴與換料塔上斑點的碰撞力。\n" +"\n" +"在將此參數提高於預設值 90mm/sec 以上之前,請確保你的印表設備能夠可靠地在更高的速度下橋接," +"並且工具更換時的溢出能良好的被控制。\n" +"\n" +"對於換料塔外部周邊,無論此設定如何,都使用內部周邊速度。" msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." msgstr "" -"列印擦拭塔周長時使用的擠出機。設置為 0 將使用唯一的擠出機(盡量使用不可溶的材" +"列印換料塔周長時使用的擠出機。設置為 0 將使用唯一的擠出機(盡量使用不可溶的材" "料)。" -#, fuzzy msgid "Purging volumes - load/unload volumes" msgstr "清理量 - 進料/退料 量" @@ -13424,10 +13179,9 @@ msgid "" "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -"可保存所需的體積,用於更改每個擦拭塔上工具所使用的 from/to 體積 。這些值用於" +"可保存所需的體積,用於更改每個換料塔上工具所使用的 from/to 體積 。這些值用於" "簡化完全沖刷體積的建立。" -#, fuzzy msgid "" "Purging after filament change will be done inside objects' infills. This may " "lower the amount of waste and decrease the print time. If the walls are " @@ -13436,25 +13190,23 @@ msgid "" msgstr "" "多色列印換色後的廢料會被用來列印物件的填充。這樣可以減少線材浪費和縮短列印時" "間,但是如果物件的內外牆是採用透明線材列印的,則可以從模型外觀上看到內部的混" -"色廢料。該功能只有在啟用擦拭塔的時候才生效。" +"色廢料。該功能只有在啟用換料塔的時候才生效。" -#, fuzzy msgid "" "Purging after filament change will be done inside objects' support. This may " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" "多色列印換色後的廢料會被用來列印物件的支撐。這樣可以減少線材浪費和縮短列印時" -"間。該功能只有在啟用擦拭塔的時候才生效。" +"間。該功能只有在啟用換料塔的時候才生效。" -#, fuzzy msgid "" "This object will be used to purge the nozzle after a filament change to save " "filament and decrease the print time. Colours of the objects will be mixed " "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" "多色列印換色後的廢料會被用來列印這個物件。這樣可以減少線材浪費和縮短列印時" -"間,但是這個物件的外觀會是混色的。該功能只有在啟用擦拭塔的時候才生效。" +"間,但是這個物件的外觀會是混色的。該功能只有在啟用換料塔的時候才生效。" msgid "Maximal bridging distance" msgstr "最大橋接距離" @@ -13463,28 +13215,31 @@ msgid "Maximal distance between supports on sparse infill sections." msgstr "稀疏填充截面上的支撐之間的最大距離。" msgid "Wipe tower purge lines spacing" -msgstr "擦拭塔線距" +msgstr "換料塔線距" msgid "Spacing of purge lines on the wipe tower." -msgstr "擦拭塔上的線距。" +msgstr "換料塔上的線距。" msgid "Extra flow for purging" -msgstr "" +msgstr "額外換料流量" msgid "" "Extra flow used for the purging lines on the wipe tower. This makes the " "purging lines thicker or narrower than they normally would be. The spacing " "is adjusted automatically." msgstr "" +"用於換料塔上的換料的額外流量。這會使列印線比正常情況更粗或更細。間距會自動調整。" msgid "Idle temperature" -msgstr "" +msgstr "閒置溫度" msgid "" "Nozzle temperature when the tool is currently not used in multi-tool setups." "This is only used when 'Ooze prevention' is active in Print Settings. Set to " "0 to disable." msgstr "" +"當工具頭在多工具頭設置中未使用時的噴嘴溫度。" +"僅在「列印設定」中啟用「溢出預防」時有效。設置 0 為禁用。" msgid "X-Y hole compensation" msgstr "X-Y 孔洞尺寸補償" @@ -13514,7 +13269,7 @@ msgstr "將圓孔轉換為多邊形孔" msgid "" "Search for almost-circular holes that span more than one layer and convert " -"the geometry to polyholes. Use the nozzle size and the (biggest) diameter to " +"the geometry to polyholes. Use the nozzle size and the (biggest)diameter to " "compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" @@ -13544,9 +13299,8 @@ msgstr "扭曲多邊形孔" msgid "Rotate the polyhole every layer." msgstr "依層旋轉多邊形孔" -#, fuzzy msgid "G-code thumbnails" -msgstr "G-code 縮圖尺寸" +msgstr "G-code 縮圖" msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " @@ -13571,6 +13325,8 @@ msgid "" "Wipe tower is only compatible with relative mode. It is recommended on most " "printers. Default is checked" msgstr "" +"建議在使用「標籤物件」選項時使用相對擠出。某些擠出機取消此選項(絕對擠出模式)" +"時工作效果更好。換料塔僅與相對模式兼容。建議在大部分印表設備上使用。預設為啟用。" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -13651,7 +13407,7 @@ msgstr "" "征將被加寬到牆最小寬度。參數值表示為相對噴嘴直徑的百分比" msgid "Minimum wall length" -msgstr "" +msgstr "最短牆長" msgid "" "Adjust this value to prevent short, unclosed walls from being printed, which " @@ -13663,6 +13419,11 @@ msgid "" "top-surface. 'One wall threshold' is only visible if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" +"調整此值可防止列印短的、未閉合的牆面,這些可能會增加列印時間。較高的值會移除更多、更長的牆面。\n" +"\n" +"注意:底部和頂部表面不受此值影響,以防止模型外部出現視覺間隙。調整下面的「高級設定」中的" +"「單壁閾值」來調整對什麼被視為頂表面的敏感度。「單壁閾值」僅在此設定設置為大於預設值 0.5" +"或啟用單壁頂部表面時可見。" msgid "First layer minimum wall width" msgstr "首層牆最小線寬" @@ -13679,7 +13440,7 @@ msgstr "牆最小線寬" msgid "" "Width of the wall that will replace thin features (according to the Minimum " -"feature size) of the model. If the Minimum wall width is thinner than the " +"feature size)of the model. If the Minimum wall width is thinner than the " "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" @@ -13697,13 +13458,11 @@ msgstr "" "此選項用於自動識別內部狹窄的實心填充。開啟後,將對狹窄實心區域使用同心填充加" "快列印速度。否則使用預設的直線填充。" -#, fuzzy msgid "invalid value " msgstr "無效值" -#, fuzzy msgid "Invalid value when spiral vase mode is enabled: " -msgstr "花瓶模式時無效值:" +msgstr "值於花瓶模式無效:" msgid "too large line width " msgstr "線寬過大" @@ -13720,7 +13479,6 @@ msgstr "匯出最小尺寸的 3mf。" msgid "No check" msgstr "不檢查" -#, fuzzy msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "不要執行任何有效性檢查,如 G-code 路徑衝突檢查。" @@ -13746,11 +13504,9 @@ msgstr "繞 Y 旋轉" msgid "Rotation angle around the Y axis in degrees." msgstr "繞 Y 軸的旋轉角度(以度為單位)" -#, fuzzy msgid "Data directory" -msgstr "檔案路徑" +msgstr "檔案目錄" -#, fuzzy msgid "" "Load and store settings at the given directory. This is useful for " "maintaining different profiles or including configurations from a network " @@ -13776,65 +13532,72 @@ msgid "" "custom G-code travels somewhere else, it should write to this variable so " "OrcaSlicer knows where it travels from when it gets control back." msgstr "" +"自訂 G-code 區塊開頭的擠出機位置。如果自訂 G-code 移動到了其他位置,應該寫入此變數," +"以便 OrcaSlicer 知道它從哪裡移動到當它重新獲得控制權時。" msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "OrcaSlicer de-retracts correctly when it gets control back." msgstr "" +"自訂 G-code 區塊開頭的回抽狀態。如果自訂 G-code 移動了擠出機軸,應該寫入此變數," +"以便 OrcaSlicer 在重新獲得控制權時正確返回抽。" msgid "Extra de-retraction" -msgstr "" +msgstr "額外返回抽" msgid "Currently planned extra extruder priming after de-retraction." msgstr "" msgid "Absolute E position" -msgstr "" +msgstr "絕對擠出值" msgid "" "Current position of the extruder axis. Only used with absolute extruder " "addressing." -msgstr "" +msgstr "擠出機軸的目前位置。僅用於絕對擠出值。" msgid "Current extruder" -msgstr "" +msgstr "目前使用的擠出機" msgid "Zero-based index of currently used extruder." -msgstr "" +msgstr "目前使用的擠出機的索引,從 0 開始。" msgid "Current object index" -msgstr "" +msgstr "目前列印物件的索引" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." msgstr "" +"特定於序列列印。目前列印物件的索引,從 0 開始。" msgid "Has wipe tower" -msgstr "" +msgstr "有換料塔" msgid "Whether or not wipe tower is being generated in the print." -msgstr "" +msgstr "是否有產生換料塔" msgid "Initial extruder" -msgstr "" +msgstr "初始擠出機" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" +"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_tool 相同。" msgid "Initial tool" -msgstr "" +msgstr "初始工具頭" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" +"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_extruder 相同。" msgid "Is extruder used?" -msgstr "" +msgstr "擠出機是否被使用?" msgid "" "Vector of booleans stating whether a given extruder is used in the print." @@ -13847,50 +13610,51 @@ msgid "Are the extra multi-material priming regions used in this print?" msgstr "" msgid "Volume per extruder" -msgstr "" +msgstr "各擠出機線材體積" msgid "Total filament volume extruded per extruder during the entire print." -msgstr "" +msgstr "各擠出機擠出總線材體積" msgid "Total toolchanges" -msgstr "" +msgstr "總工具頭變更次數" msgid "Number of toolchanges during the print." -msgstr "" +msgstr "列印期間工具頭變更次數" msgid "Total volume" -msgstr "" +msgstr "總體積" msgid "Total volume of filament used during the entire print." -msgstr "" +msgstr "列印總線材體積" msgid "Weight per extruder" -msgstr "" +msgstr "各擠出機擠出總重" msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." msgstr "" +"各擠出機擠出總重,依據線材密度計算" msgid "Total weight" -msgstr "" +msgstr "總重" msgid "" "Total weight of the print. Calculated from filament_density value in " "Filament Settings." -msgstr "" +msgstr "列印總重,依據線材密度計算" msgid "Total layer count" -msgstr "" +msgstr "總層數" msgid "Number of layers in the entire print." -msgstr "" +msgstr "列印總層數" msgid "Number of objects" -msgstr "" +msgstr "物件數量" msgid "Total number of objects in the print." -msgstr "" +msgstr "列印總物件數量" msgid "Number of instances" msgstr "" @@ -13899,7 +13663,7 @@ msgid "Total number of object instances in the print, summed over all objects." msgstr "" msgid "Scale per object" -msgstr "" +msgstr "各物件縮放" msgid "" "Contains a string with the information about what scaling was applied to the " @@ -13907,105 +13671,112 @@ msgid "" "index 0).\n" "Example: 'x:100% y:50% z:100'." msgstr "" +"包含一個字串,描述了每個物件縮放的資訊。第一個物件索引為 0。" +"例如:'x:100% y:50% z:100'" msgid "Input filename without extension" -msgstr "" +msgstr "輸入檔名(不含副檔名)" msgid "Source filename of the first object, without extension." -msgstr "" +msgstr "第一個物件的原始檔名(不含副檔名)" msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." msgstr "" +"這個向量包含兩個元素:點的 x 和 y 座標,單位為毫米。" msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." msgstr "" +"這個向量包含兩個元素:邊界的 x 和 y 尺寸,單位為mm。" msgid "First layer convex hull" -msgstr "" +msgstr "第一層凸包" msgid "" "Vector of points of the first layer convex hull. Each element has the " "following format:'[x, y]' (x and y are floating-point numbers in mm)." msgstr "" +"第一層凸包的點向量。每個元素格式為:'[x, y]'(x 和 y 是以mm為單位的實數)。" msgid "Bottom-left corner of first layer bounding box" -msgstr "" +msgstr "第一層邊界左下角" msgid "Top-right corner of first layer bounding box" -msgstr "" +msgstr "第一層邊界右上角" msgid "Size of the first layer bounding box" -msgstr "" +msgstr "第一層邊界大小" msgid "Bottom-left corner of print bed bounding box" -msgstr "" +msgstr "列印平台邊界左下角" msgid "Top-right corner of print bed bounding box" -msgstr "" +msgstr "列印平台邊界右上角" msgid "Size of the print bed bounding box" -msgstr "" +msgstr "列印平台邊界大小" msgid "Timestamp" -msgstr "" +msgstr "時間戳記" msgid "String containing current time in yyyyMMdd-hhmmss format." -msgstr "" +msgstr "yyyyMMdd-hhmmss 格式的目前時間字串" msgid "Day" -msgstr "" +msgstr "天" msgid "Hour" -msgstr "" +msgstr "小時" msgid "Minute" -msgstr "" +msgstr "分" msgid "Print preset name" -msgstr "" +msgstr "列印預設名稱" msgid "Name of the print preset used for slicing." -msgstr "" +msgstr "切片使用的列印預設名稱" msgid "Filament preset name" -msgstr "" +msgstr "線材預設名稱" msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" +"切片使用的各個擠出機的線材預設名稱。此變數是一個向量,包含每個擠出機相對應的名稱。" msgid "Printer preset name" -msgstr "" +msgstr "列印設備預設名稱" msgid "Name of the printer preset used for slicing." -msgstr "" +msgstr "用於切片的列印設備預設名稱" msgid "Physical printer name" -msgstr "" +msgstr "列印設備名稱" msgid "Name of the physical printer used for slicing." -msgstr "" +msgstr "用於切片的印表設備名稱。" msgid "Number of extruders" -msgstr "" +msgstr "總擠出機數" msgid "" "Total number of extruders, regardless of whether they are used in the " "current print." msgstr "" +"總擠出機數,無論是否用於列印。" msgid "Layer number" -msgstr "" +msgstr "層數" msgid "Index of the current layer. One-based (i.e. first layer is number 1)." -msgstr "" +msgstr "當層數 (第一層為一)" msgid "Layer z" -msgstr "" +msgstr "層z高" msgid "" "Height of the current layer above the print bed, measured to the top of the " @@ -14024,7 +13795,6 @@ msgstr "" msgid "The current extruder ID. The same as current_extruder." msgstr "" -#, fuzzy msgid "Error in zip archive" msgstr "zip 檔案中存在錯誤" @@ -14055,11 +13825,11 @@ msgstr "浮空懸臂" msgid "large overhangs" msgstr "大面積懸空" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." -msgstr "似乎物件 %s 有 %s。請重新調整物件的方向或啟用支撐。" +msgstr "物件 %s 似乎有 %s。請重新調整物件的方向或啟用支撐。" msgid "Optimizing toolpath" msgstr "正在最佳化走線" @@ -14067,14 +13837,12 @@ msgstr "正在最佳化走線" msgid "Slicing mesh" msgstr "正在切片網格" -#, fuzzy msgid "" -"No layers were detected. You might want to repair your STL file(s) or check " +"No layers were detected. You might want to repair your STL file(s)or check " "their size or thickness and retry.\n" msgstr "" -"沒有偵測到層。您可能需要修復 STL 檔案,或檢查模型尺寸、厚度等,之後再重試。\n" +"沒有切到層次。你可能需要修復 STL 檔案,或檢查模型尺寸、厚度等,之後再重試。\n" -#, fuzzy msgid "" "An object's XY size compensation will not be used because it is also color-" "painted.\n" @@ -14083,9 +13851,9 @@ msgstr "" "物件的 XY 尺寸補償不會生效,因為在此物件上做過上色操作。\n" "XY 尺寸補償不能與上色功能一起使用。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "支撐:正在產生 %d 層的走線路徑" +msgstr "支撐:正在產生 %d 層的路徑" msgid "Support: detect overhangs" msgstr "支撐:正在偵測懸空面" @@ -14102,21 +13870,20 @@ msgstr "支撐:正在產生多邊形" msgid "Support: generate toolpath" msgstr "支撐:正在產生走線路徑" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Support: generate polygons at layer %d" msgstr "支撐:正在產生 %d 層的多邊形" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Support: fix holes at layer %d" msgstr "支撐:正在修補 %d 層的空洞" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Support: propagate branches at layer %d" msgstr "支撐:正在生長 %d 層的樹枝" -#, fuzzy msgid "" -"Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." +"Unknown file format. Input file must have .stl, .obj, .amf(.xml)extension." msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .stl、.obj 或 .amf(.xml)。" msgid "Loading of a model file failed." @@ -14125,32 +13892,27 @@ msgstr "載入模型檔案失敗。" msgid "The supplied file couldn't be read because it's empty" msgstr "無法讀取提供的檔案,因為該檔案為空。" -#, fuzzy msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .3mf 或 .zip .amf。" msgid "Canceled" msgstr "已取消" -#, fuzzy msgid "load_obj: failed to parse" -msgstr "載入物件:無法分析" +msgstr "載入物件:解析失敗" msgid "load mtl in obj: failed to parse" -msgstr "" +msgstr "載入物件材質:解析失敗" -#, fuzzy msgid "The file contains polygons with more than 4 vertices." -msgstr "該檔案包含頂點超過 4 個的多邊形。" +msgstr "該檔案包含超過 4 個頂點的多邊形。" -#, fuzzy msgid "The file contains polygons with less than 2 vertices." -msgstr "該檔案包含頂點少於 2 個的多邊形。" +msgstr "該檔案包含少於 2 個頂點的多邊形。" msgid "The file contains invalid vertex index." msgstr "檔案包含無效的頂點索引。" -#, fuzzy msgid "This OBJ file couldn't be read because it's empty." msgstr "無法讀取此 OBJ 檔案,因為它是空的。" @@ -14172,9 +13934,8 @@ msgstr "結果可由人眼讀取。" msgid "Auto-Calibration" msgstr "自動校準" -#, fuzzy msgid "We would use Lidar to read the calibration result" -msgstr "將使用微型雷射雷達來讀取校準結果。" +msgstr "將使用雷射雷達來讀取校準結果。" msgid "Prev" msgstr "上一個" @@ -14193,9 +13954,8 @@ msgstr "如何使用校準結果?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" -msgstr "您可以在線材編輯中更改流量動態校準因子。" +msgstr "你可以在線材編輯中更改流量動態校準因子。" -#, fuzzy msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." @@ -14221,7 +13981,7 @@ msgstr "流量比例" msgid "Max Volumetric Speed" msgstr "最大體積速度" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Please input valid values:\n" "Start value: >= %.1f\n" @@ -14231,8 +13991,8 @@ msgid "" msgstr "" "請輸入有效值:\n" "起始值:>= %.1f\n" -"最終值:<= %.1f\n" -"結束值:> 起始值\n" +"終止值:<= %.1f\n" +"終止值:> 起始值\n" "步距:>= %.3f)" msgid "The name cannot be empty." @@ -14240,39 +14000,32 @@ msgstr "名稱不能為空。" #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "找不到所選的預設:%s。" -#, fuzzy msgid "The name cannot be the same as the system preset name." msgstr "名稱不能與系統預設值名稱相同。" -#, fuzzy msgid "The name is the same as another existing preset name" msgstr "該名稱與另一個現有預設值名稱相同。" -#, fuzzy msgid "create new preset failed." -msgstr "新增預設值失敗" +msgstr "新增預設失敗" -#, fuzzy msgid "" "Are you sure to cancel the current calibration and return to the home page?" -msgstr "您確定要取消目前的校準並返回首頁嗎?" +msgstr "你確定要取消目前的校準並返回首頁嗎?" -#, fuzzy msgid "No Printer Connected!" msgstr "沒有連接列印設備!" -#, fuzzy msgid "Printer is not connected yet." msgstr "列印設備尚未連接。" msgid "Please select filament to calibrate." msgstr "請選擇要校準的線材。" -#, fuzzy msgid "The input value size must be 3." -msgstr "輸入值大小必須為 3。" +msgstr "輸入值必須為 3。" msgid "" "This machine type can only hold 16 history results per nozzle. You can " @@ -14281,15 +14034,16 @@ msgid "" "historical results. \n" "Do you still want to continue the calibration?" msgstr "" +"此機型每個噴嘴只能儲存 16 筆歷史記錄。你可以刪除現有的歷史記錄,然後開始校準。" +"或者你可以繼續校準,但無法建立新的校準歷史記錄。\n" +"是否仍要繼續校準?" -#, fuzzy msgid "Connecting to printer..." msgstr "正在連接列印設備..." msgid "The failed test result has been dropped." msgstr "測試失敗的結果已被刪除。" -#, fuzzy msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "動態流量校準的結果已儲存至列印設備。" @@ -14299,12 +14053,15 @@ msgid "" "Only one of the results with the same name is saved. Are you sure you want " "to override the historical result?" msgstr "" +"已經有一個同名的歷史校準結果:%s。" +"僅保存同名結果中的其中一個。確定要覆寫歷史結果嗎?" #, c-format, boost-format msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." msgstr "" +"此機型每個噴嘴只能儲存 %d 筆歷史記錄。此結果將不會被保存。" msgid "Internal Error" msgstr "內部錯誤" @@ -14312,7 +14069,6 @@ msgstr "內部錯誤" msgid "Please select at least one filament for calibration" msgstr "請至少選擇一種線材進行校準。" -#, fuzzy msgid "Flow rate calibration result has been saved to preset" msgstr "流量比例校準結果已儲存到預設值" @@ -14322,7 +14078,6 @@ msgstr "最大體積速度校準結果已儲存到預設值" msgid "When do you need Flow Dynamics Calibration" msgstr "在什麼情況下需要進行動態流量校準" -#, fuzzy msgid "" "We now have added the auto-calibration for different filaments, which is " "fully automated and the result will be saved into the printer for future " @@ -14334,10 +14089,10 @@ msgid "" "filament setting." msgstr "" "我們現在已經為不同的列印線材新增了自動校準功能,該功能是完全自動化的,並且結" -"果將儲存在列印設備中以供將來使用。您只需要在以下有限情況下進行校準:\n" -"1. 如果您引入了不同品牌/型號的新列印線材,或者列印線材受潮;\n" +"果將儲存在列印設備中以供將來使用。你只需要在以下有限情況下進行校準:\n" +"1. 如果你引入了不同品牌/型號的新列印線材,或者列印線材受潮;\n" "2. 如果噴嘴磨損或更換了新的噴嘴;\n" -"3. 如果您在列印線材設定中更改了最大體積速度或列印溫度。" +"3. 如果你在列印線材設定中更改了最大體積速度或列印溫度。" msgid "About this calibration" msgstr "關於此校準" @@ -14361,6 +14116,17 @@ msgid "" "cause the result not exactly the same in each calibration. We are still " "investigating the root cause to do improvements with new updates." msgstr "" +"請參考我們的 Wiki 頁面,了解「流體動力校準」的詳細資訊。\n" +"\n" +"通常不需要進行校準。當你啟動單色/單材質列印,並在列印開始選單中勾選「流體動力校準」選項時," +"列印設備將按照舊方式,在列印前校準耗材。當你啟動多色/多材質列印時,列印設備將在每次耗材切換時使用" +"預設的補償參數,這在大部分情況下都能得到良好的結果。\n" +"\n" +"請注意,有些情況可能會導致校準結果不可靠,例如列印板上的黏著力不足。你可以通過清洗印板板或" +"塗抹膠水來改善黏著力。有關此主題的更多資訊,請參考我們的 Wiki。\n" +"\n" +"在我們的測試中,校準結果存在約 10% 的誤差,這可能導致每次校準的結果不完全相同。" +"我們仍在調查根本原因,並將在新的更新中進行改進。" msgid "When to use Flow Rate Calibration" msgstr "何時使用流量率校準" @@ -14383,7 +14149,6 @@ msgstr "" "3. 表面品質差:列印的表面看起來粗糙或不均勻。\n" "4. 結構穩固性差:列印物件容易斷裂,或者沒有應有的穩固性。" -#, fuzzy msgid "" "In addition, Flow Rate Calibration is crucial for foaming materials like LW-" "PLA used in RC planes. These materials expand greatly when heated, and " @@ -14392,7 +14157,6 @@ msgstr "" "此外,對於像用於遙控飛機的輕質發泡 PLA(LW-PLA)這樣的發泡線材,流量率校準非" "常重要。這些線材在加熱時會大幅膨脹,而校準提供了有用的流量率參考。" -#, fuzzy msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " "volumes. The default setting works well in Bambu Lab printers and official " @@ -14403,10 +14167,9 @@ msgid "" msgstr "" "流量率校準測量預期擠出體積與實際擠出體積之間的比率。預設設定在 Bambu Lab 列印" "設備和官方線材上表現良好,因為它們已經進行了預先校準和微調。對於普通的線材," -"通常情況下,您不需要執行流量率校準,除非在完成其他校準後仍然看到上述列出的缺" +"通常情況下,你不需要執行流量率校準,除非在完成其他校準後仍然看到上述列出的缺" "陷。如需更多詳細資訊,請查閱 wiki 文章。" -#, fuzzy msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " "directly measuring the calibration patterns. However, please be advised that " @@ -14425,7 +14188,7 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" -"自動流量率校準採用 Bambu Lab 的微型雷射雷達技術,直接測量校準圖案。然而,請注" +"自動流量率校準採用 Bambu Lab 的雷射雷達技術,直接測量校準圖案。然而,請注" "意,這種方法的功效和準確性可能會因特定類型的線材而受影響。特別是透明或半透" "明、帶有閃光顆粒或具有高反射表面的線材可能不適合這種校準,並可能產生不理想的" "結果。\n" @@ -14438,7 +14201,7 @@ msgstr "" "程。" msgid "When you need Max Volumetric Speed Calibration" -msgstr "當您需要最大體積速度校準時" +msgstr "當你需要最大體積速度校準時" msgid "Over-extrusion or under extrusion" msgstr "過度擠壓或擠壓不足" @@ -14450,26 +14213,24 @@ msgid "material with significant thermal shrinkage/expansion, such as..." msgstr "具有顯著熱收縮/膨脹的材料,例如..." msgid "materials with inaccurate filament diameter" -msgstr "耗材直徑不準確的線材" +msgstr "線材直徑不準確的線材" msgid "We found the best Flow Dynamics Calibration Factor" msgstr "我們找到了最佳的流量動態校準因子。" -#, fuzzy msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." -msgstr "部分校準失敗! 您可以清潔列印板並重試。 失敗的測試結果將不會儲存。" +msgstr "部分校準失敗! 你可以清潔列印板並重試。 失敗的測試結果將不會儲存。" msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" -msgstr "*我們建議您在名稱中加入品牌、材料、類型,甚至濕度水平。" +msgstr "*我們建議你在名稱中加入品牌、材料、類型,甚至濕度水平。" msgid "Failed" msgstr "失敗" -#, fuzzy msgid "Please enter the name you want to save to printer." msgstr "請輸入要儲存到列印設備的名稱。" @@ -14480,29 +14241,28 @@ msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to override the other results?" msgstr "" +"同名的結果只能儲存一個,是否要覆蓋其他結果?" msgid "Please find the best line on your plate" -msgstr "請在您的列印板上找到最佳線條" +msgstr "請在你的列印板上找到最佳線條" msgid "Please find the corner with perfect degree of extrusion" -msgstr "" +msgstr "請找到最完美的列印角度" msgid "Input Value" msgstr "輸入值" -#, fuzzy msgid "Save to Filament Preset" -msgstr "儲存到材料預設值" +msgstr "儲存到材料預設" -#, fuzzy msgid "Preset" -msgstr "預設值" +msgstr "預設" msgid "Record Factor" msgstr "記錄係數" msgid "We found the best flow ratio for you" -msgstr "我們為您找到了最佳流量比" +msgstr "我們為你找到了最佳流量比" msgid "Flow Ratio" msgstr "流量比" @@ -14510,9 +14270,8 @@ msgstr "流量比" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "請輸入一個有效值(0.0<流量比<2.0)" -#, fuzzy msgid "Please enter the name of the preset you want to save." -msgstr "請輸入要儲存的預設值的名稱。" +msgstr "請輸入要儲存的預設名稱。" msgid "Calibration1" msgstr "校準 1" @@ -14555,7 +14314,6 @@ msgstr "基於流量比的精細校準" msgid "Title" msgstr "標題" -#, fuzzy msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." @@ -14598,20 +14356,18 @@ msgstr "%s 與 %s 不相容" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." msgstr "不支援 TPU 進行流量動態自動校準。" -#, fuzzy msgid "Connecting to printer" msgstr "正在連接列印設備" msgid "From k Value" -msgstr "" +msgstr "從 k 值" msgid "To k Value" -msgstr "" +msgstr "至 k 值" msgid "Step value" -msgstr "" +msgstr "步進值" -#, fuzzy msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "噴嘴直徑已從列印設備設定中同步" @@ -14641,19 +14397,19 @@ msgstr "操作" #, c-format, boost-format msgid "This machine type can only hold %d history results per nozzle." -msgstr "" +msgstr "此設備型號每個噴嘴僅能儲存 %d 筆歷史結果。" msgid "Edit Flow Dynamics Calibration" msgstr "編輯動態流量校準" msgid "New Flow Dynamic Calibration" -msgstr "" +msgstr "重新校準動態流量" msgid "Ok" msgstr "" msgid "The filament must be selected." -msgstr "" +msgstr "必須選擇線材。" msgid "Network lookup" msgstr "搜尋網路" @@ -14677,13 +14433,15 @@ msgid "Finished" msgstr "完成" msgid "Multiple resolved IP addresses" -msgstr "" +msgstr "多個解析的 IP 位址" #, boost-format msgid "" "There are several IP addresses resolving to hostname %1%.\n" "Please select one that should be used." msgstr "" +"有多個 IP 位址解析到主機名稱 %1%。\n" +"請選擇一個要使用的 IP 位址。" msgid "PA Calibration" msgstr "PA校準" @@ -14756,17 +14514,15 @@ msgstr "" msgid "Filament type" msgstr "線材類型" -#, fuzzy msgid "Start temp: " msgstr "起始溫度: " msgid "End temp: " -msgstr "結束溫度" +msgstr "終止溫度" msgid "Temp step: " msgstr "溫度步距" -#, fuzzy msgid "" "Please input valid values:\n" "Start temp: <= 350\n" @@ -14775,8 +14531,8 @@ msgid "" msgstr "" "請輸入有效值:\n" "起始溫度:<= 350\n" -"結束溫度:>= 170\n" -"開始溫度 > 結束溫度 + 5)" +"終止溫度:>= 170\n" +"開始溫度 > 終止溫度 + 5)" msgid "Max volumetric speed test" msgstr "最大體積速度測試" @@ -14790,7 +14546,6 @@ msgstr "結束流量" msgid "step: " msgstr "步距" -#, fuzzy msgid "" "Please input valid values:\n" "start > 0 \n" @@ -14831,31 +14586,30 @@ msgstr "結束回抽長度" msgid "mm/mm" msgstr "" -#, fuzzy msgid "Send G-Code to printer host" msgstr "傳送 G-code 到列印設備" msgid "Upload to Printer Host with the following filename:" msgstr "使用下列檔案名上傳到列印設備:" -msgid "Use forward slashes ( / ) as a directory separator if needed." +msgid "Use forward slashes ( / )as a directory separator if needed." msgstr "如有需要,請使用正斜槓( / )作為目錄分隔符號。" msgid "Upload to storage" msgstr "上傳到儲存單位" msgid "Switch to Device tab after upload." -msgstr "" +msgstr "上傳後切換到設備分頁。" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "上傳的檔名不以 \"%s\" 結尾。確定要繼續嗎?" +msgstr "上傳的檔名不是 \"%s\" 結尾。確定要繼續嗎?" msgid "Upload" msgstr "上傳" msgid "Print host upload queue" -msgstr "列印主機上傳隊列" +msgstr "列印主機上傳佇列" msgid "ID" msgstr "ID" @@ -14880,7 +14634,7 @@ msgid "Show error message" msgstr "顯示錯誤資訊" msgid "Enqueued" -msgstr "已加入隊列" +msgstr "已加入佇列" msgid "Uploading" msgstr "正在上傳" @@ -14888,15 +14642,12 @@ msgstr "正在上傳" msgid "Cancelling" msgstr "取消中" -#, fuzzy msgid "Error uploading to print host" msgstr "上傳到列印設備時發生錯誤" -#, fuzzy msgid "Unable to perform boolean operation on selected parts" msgstr "無法對所選零件執行布林運算" -#, fuzzy msgid "Mesh Boolean" msgstr "布林運算" @@ -14934,119 +14685,122 @@ 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 "OrcaSlicer Version:" -msgstr "" +msgstr "OrcaSlicer 版本:" msgid "System Version:" -msgstr "" +msgstr "系統版本:" msgid "DNS Server:" -msgstr "" +msgstr "DNS 伺服器:" msgid "Test OrcaSlicer(GitHub)" -msgstr "" +msgstr "測試 OrcaSlicer(GitHub)" msgid "Test OrcaSlicer(GitHub):" -msgstr "" +msgstr "測試 OrcaSlicer(GitHub):" msgid "Test Bing.com" -msgstr "" +msgstr "測試 Bing.com:" msgid "Test bing.com:" -msgstr "" +msgstr "測試 bing.com:" 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 "例如:基本、霧面、絲光、大理石" 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 "" +"「Bambu」或「Generic」不能作為自訂線材的廠牌名稱。" msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "線材類型尚未選擇,請重新選擇類型。" msgid "Filament serial is not entered, please enter serial." -msgstr "" +msgstr "線材序號尚未輸入,請輸入序號。" msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." 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 "" +"尚未選擇列印設備或預設,請至少選擇一個。" #, c-format, boost-format msgid "" @@ -15054,108 +14808,114 @@ msgid "" "If you continue creating, the preset created will be displayed with its full " "name. Do you want to continue?" msgstr "" +"所建立的線材名稱 %s 已經存在。\n" +"如果繼續建立,預設將顯示完整的名稱。是否要繼續?" 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 printers, 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 "" +msgstr "依據目前列印設備建立" msgid "Import Preset" -msgstr "" +msgstr "匯入預設" msgid "Create Type" -msgstr "" +msgstr "建立類型" msgid "The model is not found, please reselect vendor." -msgstr "" +msgstr "找不到該型號,請重新選擇廠牌。" msgid "Select Model" -msgstr "" +msgstr "選擇型號" msgid "Select Printer" -msgstr "" +msgstr "Select Model" 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 "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 found, please reselect." -msgstr "" +msgstr "找不到噴嘴直徑,請重新選擇。" msgid "The printer preset is not found, please 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 "" @@ -15164,14 +14924,16 @@ msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"尚未選擇要基於哪個列印設備預設設定來創建,請選擇列印設備的廠牌和型號。" 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 entered, please enter it." -msgstr "" +msgstr "未輸入自訂列印設備或型號,請輸入。" msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -15182,60 +14944,68 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"創建的列印設備預設設定已經有相同名稱的預設設定。是否要覆蓋它?\n" +"\t是:覆蓋相同名稱的列印設備預設設定,並重新創建名稱相同的線材和處理預設設定," +"名稱不同的線材和處理預設設定將被保留。\n " +"\t取消:不創建預設設定,返回創建界面。" 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 entered the custom vendor and " "model." msgstr "" +"你尚未選擇廠牌和型號,或未輸入自訂的廠牌和型號。" msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"自訂列印設備廠牌或型號中可能包含轉義字符。請刪除後重新輸入。" msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." 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 "" +"尚未選擇要更換噴嘴的列印設備,請選擇。" 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" @@ -15243,6 +15013,8 @@ msgid "" "volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"如果需要,請前往線材設定編輯你的預設設定。\n " +"請注意,噴嘴溫度、熱床溫度和最大體積速度對列印品質有重大影響,請小心設置。" msgid "" "\n" @@ -15252,42 +15024,46 @@ msgid "" "page. \n" "Click \"Sync user presets\" to enable the synchronization function." msgstr "" +"\n" +"\n" +"Orca 偵測到你的使用者預設設定同步功能未啟用,這可能會導致設備頁面上的線材設定無法成功。" +"請點擊「同步使用者預設設定」以啟用同步功能。" msgid "Printer Setting" -msgstr "" +msgstr "列印設備設定" msgid "Printer config bundle(.orca_printer)" -msgstr "" +msgstr "列印機配置包 (.orca_printer)" msgid "Filament bundle(.orca_filament)" -msgstr "" +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 "" @@ -15296,132 +15072,147 @@ 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" "Can be shared with others." msgstr "" +"列印設備及所有屬於該列印設備的線材和處理預設設定。 \n" +"可以與他人分享。" msgid "" "User's filament preset set. \n" "Can be shared with others." msgstr "" +"使用者的線材預設設定。 \n" +"可以與他人分享。" msgid "" "Only display printer names with changes to printer, filament, and process " "presets." 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 "" +"只有具有使用者線材預設設定的線材名稱會顯示,\n" +"你選擇的每個線材名稱中的所有使用者線材預設設定將以 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 "" +"只有具有變更過處理預設設定的列印設備名稱會顯示,\n" +"你選擇的每個列印設備名稱中的所有使用者處理預設設定將以 zip 檔案格式匯出。" msgid "Please select at least one printer or filament." -msgstr "" +msgstr "請至少選擇一個列印設備或線材。" msgid "Please select a type you want to export" -msgstr "" +msgstr "請選擇你要匯出的類型" msgid "Failed to create temporary folder, please try Export Configs again." -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 "" +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] "" 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 "[Delete Required]" msgstr "" msgid "Edit Preset" -msgstr "" +msgstr "編輯預設設定" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "如需更多資訊,請查看 Wiki。" msgid "Collapse" msgstr "摺疊" msgid "Daily Tips" -msgstr "" +msgstr "每日提示" #, 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 "" +"預設的噴嘴直徑與記錄的噴嘴直徑不一致。你最近有更換噴嘴嗎?" #, c-format, boost-format msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "" +msgstr "*使用 %s 材料和 %s 列印可能會導致噴嘴損壞。" #, fuzzy msgid "Need select printer" @@ -15440,42 +15231,40 @@ msgid "Physical Printer" msgstr "實體列印設備" msgid "Print Host upload" -msgstr "打印主機上傳" +msgstr "列印主機上傳" msgid "Could not get a valid Printer Host reference" -msgstr "無法獲得有效的打印機主機參考資料" +msgstr "無法獲得有效的列印設備主機參考資料" msgid "Success!" msgstr "成功!" msgid "Are you sure to log out?" -msgstr "" +msgstr "確定要登出嗎?" #, fuzzy msgid "Refresh Printers" msgstr "重新整理列印設備" msgid "View print host webui in Device tab" -msgstr "" +msgstr "在設備選項卡中查看列印主機的 Web UI" msgid "Replace the BambuLab's device tab with print host webui" -msgstr "" +msgstr "將 BambuLab 的設備選項卡替換為列印主機的 Web UI" -#, fuzzy msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" -"HTTPS CA 憑證檔案是可選的。 僅當您使用具有自帶簽名憑證的 HTTPS 時才需要它。" +"HTTPS CA 憑證檔案是可選的。 僅當你使用具有自行簽證的 HTTPS 時才需要它。" -#, fuzzy msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgstr "憑證檔(*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgid "Open CA certificate file" msgstr "開啟 CA憑證檔" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." @@ -15484,17 +15273,17 @@ msgstr "在此系統上,%s 使用系統憑證儲存庫或鑰匙圈中的 HTTPS msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." -msgstr "若要使用自訂 CA 憑證檔,請將您的 CA 憑證檔匯入到憑證儲存庫/鑰匙圈中。" +msgstr "若要使用自訂 CA 憑證檔,請將你的 CA 憑證檔匯入到憑證儲存庫/鑰匙圈中。" msgid "Login/Test" -msgstr "" +msgstr "登入/測試" msgid "Connection to printers connected via the print host failed." -msgstr "經由打印主機連接的打印機連接失敗。" +msgstr "經由列印主機連接的列印設備連接失敗。" #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "打印主機類型不符:%s" +msgstr "列印主機類型不符:%s" msgid "Connection to AstroBox works correctly." msgstr "與 AstroBox 的連接工作正常。" @@ -15532,13 +15321,14 @@ msgstr "無法連接到 FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." -msgstr "注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" +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 "與 OctoPrint 的連接工作正常。" @@ -15562,28 +15352,28 @@ msgid "Could not connect to PrusaLink" msgstr "無法連接到 PrusaLink" msgid "Storages found" -msgstr "" +msgstr "找到存儲空間" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1% : 唯讀" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1%:沒有可用空間" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." -msgstr "" +msgstr "上傳失敗。未找到適當的存儲位置在 %1%。" msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "成功連接到 Prusa Connect。" msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "無法連接到 Prusa Connect。" msgid "Connection to Repetier works correctly." msgstr "與 Repetier 的連接工作正常。" @@ -15600,7 +15390,7 @@ msgid "" "Message body: \"%2%\"" msgstr "" "HTTP 狀態:%1%\n" -"訊息內容:“%2%”" +"訊息內容:\"%2%\"" #, boost-format msgid "" @@ -15609,8 +15399,8 @@ msgid "" "Error: \"%2%\"" msgstr "" "主機溝通解析失敗。\n" -"訊息內容:“%1%”\n" -"錯誤碼:“%2%”" +"訊息內容:\"%1%\"\n" +"錯誤碼:\"%2%\"" #, boost-format msgid "" @@ -15618,38 +15408,47 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" -"主機打印機例舉失敗。\n" -"訊息內容:“%1%”\n" -"錯誤碼:“%2%”" +"主機列印設備例舉失敗。\n" +"訊息內容:\"%1%\"\n" +"錯誤碼:\"%2%\"" msgid "" "It has a small layer height, and results in almost negligible layer lines " "and high printing quality. It is suitable for most general printing cases." msgstr "" +"它具有較小的層高,產生幾乎可以忽略不計的層線並具有較高的列印品質。" +"適用於大多數一般的列印情況。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " "and acceleration, and the sparse infill pattern is Gyroid. So, it results in " "much higher printing quality, but a much longer printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較低的速度和加速度," +"且稀疏填充圖案為 Gyroid。因此,列印品質大幅提高,但列印時間大幅延長。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a slightly " "bigger layer height, and results in almost negligible layer lines, and " "slightly shorter printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有略大的層高," +"產生幾乎可以忽略不計的層線,並略微縮短列印時間。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " "height, and results in slightly visible layer lines, but shorter printing " "time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生略微可見的層線,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " "height, and results in almost invisible layer lines and higher printing " "quality, but shorter printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生幾乎不可見的層線並提高列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15657,12 +15456,16 @@ msgid "" "Gyroid. So, it results in almost invisible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度," +"且稀疏填充圖案為 Gyroid。因此,產生幾乎不可見的層線並大幅提高列印品質,但列印時間會大大延長。" msgid "" "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " "height, and results in minimal layer lines and higher printing quality, but " "shorter printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生最小的層線並提高列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15670,35 +15473,46 @@ msgid "" "Gyroid. So, it results in minimal layer lines and much higher printing " "quality, but much longer printing time." msgstr "" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度," +"且稀疏填充圖案為 Gyroid。因此,產生最小的層線並大幅提高列印品質,但列印時間會大大延長。" msgid "" "It has a general layer height, and results in general layer lines and " "printing quality. It is suitable for most general printing cases." msgstr "" +"它具有一般的層高,產生一般的層線和列印品質。適用於大多數一般的列印情況。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " "and a higher sparse infill density. So, it results in higher strength of the " "prints, but more filament consumption and longer printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。" +"因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but slightly shorter printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高," +"產生更明顯的層線並降低列印品質,但列印時間略微縮短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高," +"產生更明顯的層線並降低列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生較不明顯的層線並提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15706,12 +15520,16 @@ msgid "" "Gyroid. So, it results in less apparent layer lines and much higher printing " "quality, but much longer printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度," +"且稀疏填充圖案為 Gyroid。因此,產生較不明顯的層線,並且列印品質大幅提高,但列印時間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and higher printing " "quality, but longer printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生幾乎可以忽略不計的層線,並提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15719,64 +15537,84 @@ msgid "" "Gyroid. So, it results in almost negligible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度," +"且稀疏填充圖案為 Gyroid。因此,產生幾乎可以忽略不計的層線," +"並且列印品質大幅提高,但列印時間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and longer printing " "time." msgstr "" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層線,但列印時間較長。" msgid "" "It has a big layer height, and results in apparent layer lines and ordinary " "printing quality and printing time." msgstr "" +"它具有較大的層高,產生明顯的層線,並且列印品質和列印時間屬於普通水平。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " "and a higher sparse infill density. So, it results in higher strength of the " "prints, but more filament consumption and longer printing time." msgstr "" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。" +"因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time in some printing cases." msgstr "" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高," +"產生較為明顯的層線並降低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " "height, and results in much more apparent layer lines and much lower " "printing quality, but shorter printing time in some printing cases." msgstr "" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高," +"產生更明顯的層線並顯著降低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and slight higher printing " "quality, but longer printing time." msgstr "" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生較不明顯的層線並略微提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高," +"產生較不明顯的層線並提高列印品質,但列印時間較長。" msgid "" "It has a very big layer height, and results in very apparent layer lines, " "low printing quality and general printing time." msgstr "" +"它具有非常大的層高,產生明顯的層線、較低的列印品質和一般的列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " "height, and results in very apparent layer lines and much lower printing " "quality, but shorter printing time in some printing cases." msgstr "" +"與0.8mm噴嘴的預設配置相比,該配置具有較大的層高,產生非常明顯的層線並顯著降低列印品質," +"但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " "layer height, and results in extremely apparent layer lines and much lower " "printing quality, but much shorter printing time in some printing cases." msgstr "" +"與0.8mm噴嘴的預設配置相比,該配置具有更大的層高,產生極為明顯的層線並顯著降低列印品質," +"但在某些情況下會大幅縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a slightly " @@ -15784,51 +15622,55 @@ msgid "" "lines and slightly higher printing quality, but longer printing time in some " "printing cases." msgstr "" +"與0.8mm噴嘴的預設配置相比,該配置具有略小的層高,產生略少但仍明顯的層線," +"並略微提高列印品質,但在某些情況下會延長列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " "height, and results in less but still apparent layer lines and slightly " "higher printing quality, but longer printing time in some printing cases." msgstr "" +"與0.8mm噴嘴的預設配置相比,該配置具有較小的層高,從而產生較少但仍明顯的層線," +"並略微提高列印品質,但在某些情況下會延長列印時間。" msgid "Connected to Obico successfully!" -msgstr "" +msgstr "成功連接到 Obico!" msgid "Could not connect to Obico" -msgstr "" +msgstr "無法連接到 Obico" msgid "Connected to SimplyPrint successfully!" -msgstr "" +msgstr "成功連接到 SimplyPrint!" msgid "Could not connect to SimplyPrint" -msgstr "" +msgstr "無法連接到 SimplyPrint" msgid "Internal error" -msgstr "" +msgstr "內部錯誤" msgid "Unknown error" -msgstr "" +msgstr "未知錯誤" msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" +msgstr "SimplyPrint 帳戶未連結。請前往連接選項進行設置。" msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "成功連接到 Flashforge" msgid "Could not connect to Flashforge" -msgstr "" +msgstr "無法連接到 Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "提供的狀態不正確。" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "授權此應用程式時,請提供所需的權限。" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "嘗試登入時發生了意外錯誤,請再試一次。" msgid "User cancelled." -msgstr "" +msgstr "使用者取消" #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -15836,20 +15678,26 @@ msgid "" "Did you know that turning on precise wall can improve precision and layer " "consistency?" msgstr "" +"精確牆壁\n" +"你知道啟用精確牆壁可以提高精度和層次一致性嗎?" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" "Sandwich mode\n" -"Did you know that you can use sandwich mode (inner-outer-inner) to improve " +"Did you know that you can use sandwich mode (inner-outer-inner)to improve " "precision and layer consistency if your model doesn't have very steep " "overhangs?" msgstr "" +"三明治模式\n" +"如果模型沒有非常陡峭的懸垂部分,可以使用三明治模式(內-外-內)來提高精度和層次一致性" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" "Chamber temperature\n" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" +"機箱溫度\n" +"你知道 OrcaSlicer 支援機箱內溫度控制嗎?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -15857,24 +15705,32 @@ msgid "" "Did you know that calibrating your printer can do wonders? Check out our " "beloved calibration solution in OrcaSlicer." msgstr "" +"校準\n" +"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方案。" #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" "Auxiliary fan\n" "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" msgstr "" +"輔助風扇\n" +"你知道 OrcaSlicer 支援輔助零件冷卻風扇嗎?" #: resources/data/hints.ini: [hint:Air filtration] msgid "" "Air filtration/Exhaust Fan\n" "Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" msgstr "" +"空氣過濾/排風扇\n" +"你知道 OrcaSlicer 支援空氣過濾/排風扇嗎?" #: 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 視窗\n" +"你可以按 C 鍵開啟/關閉 G-code 視窗。" #: resources/data/hints.ini: [hint:Switch workspaces] msgid "" @@ -15882,6 +15738,8 @@ msgid "" "You can switch between Prepare and Preview workspaces by " "pressing the Tab key." msgstr "" +"切換工作區\n" +"你可以按 Tab 鍵在 準備預覽 工作區之間切換。" #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" @@ -15889,6 +15747,8 @@ msgid "" "Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " "3D scene operations." msgstr "" +"如何使用鍵盤快捷鍵\n" +"你知道 Orca Slicer 提供了廣泛的鍵盤快捷鍵和 3D 場景操作嗎?" #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" @@ -15896,6 +15756,8 @@ msgid "" "Did you know that Reverse on odd feature can significantly improve " "the surface quality of your overhangs?" msgstr "" +"奇數反向\n" +"你知道 奇數反向 功能可以顯著改善懸垂部分的表面品質嗎?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -15904,7 +15766,7 @@ msgid "" "cutting tool?" msgstr "" "切割工具\n" -"您知道嗎?您可以使用切割工具以任何角度和位置切割模型。" +"你知道嗎?你可以使用切割工具以任何角度和位置切割模型。" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -15912,6 +15774,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" +"你知道可以修復損壞的 3D 模型,以避免在 Windows 系統上出現大量切片問題嗎?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -15919,29 +15783,26 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "縮時錄影\n" -"您知道嗎?您可以每次列印時產生一段縮時錄影。" +"你知道嗎?你可以每次列印時產生一段縮時錄影。" #: resources/data/hints.ini: [hint:Auto-Arrange] -#, fuzzy msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" "自動擺放\n" -"您知道嗎?您可以自動擺放專案項目中的所有物件。" +"你知道嗎?你可以自動擺放專案項目中的所有物件。" #: resources/data/hints.ini: [hint:Auto-Orient] -#, fuzzy msgid "" "Auto-Orient\n" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" "自動定向\n" -"您知道嗎,您只需單擊滑鼠,即可將物件旋轉到適合的列印方向。" +"你知道嗎,你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。" #: resources/data/hints.ini: [hint:Lay on Face] -#, fuzzy msgid "" "Lay on Face\n" "Did you know that you can quickly orient a model so that one of its faces " @@ -15949,18 +15810,17 @@ msgid "" "F key." msgstr "" "指定列印物件底部\n" -"您知道嗎,您可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面” 功能或" +"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能或" "按F鍵。" #: resources/data/hints.ini: [hint:Object List] -#, fuzzy msgid "" "Object List\n" "Did you know that you can view all objects/parts in a list and change " "settings for each object/part?" msgstr "" "物件清單\n" -"您知道物件清單嗎?您可以在其中的查看所有物件/零件,並更改每個物件/零件的設" +"你知道物件清單嗎?你可以在其中的查看所有物件/零件,並更改每個物件/零件的設" "定。" #: resources/data/hints.ini: [hint:Search Functionality] @@ -15969,6 +15829,8 @@ msgid "" "Did you know that you use the Search tool to quickly find a specific Orca " "Slicer setting?" msgstr "" +"搜尋功能\n" +"你知道可以使用搜尋工具快速找到特定的設定嗎?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -15976,26 +15838,26 @@ 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 "" +"簡化模型\n" +"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化模型。" #: resources/data/hints.ini: [hint:Slicing Parameter Table] -#, fuzzy msgid "" "Slicing Parameter Table\n" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" "參數表格\n" -"您知道嗎?您可以參數表格上的所有物件/零件,並更改每個物件/零件的設定。" +"你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零件的設定。" #: resources/data/hints.ini: [hint:Split to Objects/Parts] -#, fuzzy msgid "" "Split to Objects/Parts\n" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" "分割成物件/零件\n" -"您知道嗎,您可以把一個大物件分割成多個小物件/零件以便著色或列印。" +"你知道嗎,你可以把一個大物件分割成多個小物件/零件以便著色或列印。" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -16004,9 +15866,11 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Orca Slicer." msgstr "" +"減去零件\n" +"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?" +"這樣,你可以在 Orca Slicer 中輕鬆創建可調整大小的孔洞。" #: resources/data/hints.ini: [hint:STEP] -#, fuzzy msgid "" "STEP\n" "Did you know that you can improve your print quality by slicing a STEP file " @@ -16015,7 +15879,7 @@ msgid "" "lower resolution STL. Give it a try!" msgstr "" "STEP檔案\n" -"您知道嗎,通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n" +"你知道嗎,通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n" " Orca Slicer 支援切片 STEP 檔案,提供比低解析度 STL 更平滑的結果。試試看!" #: resources/data/hints.ini: [hint:Z seam location] @@ -16026,7 +15890,7 @@ msgid "" "the overall look of your model. Check it out!" msgstr "" "Z接縫位置\n" -"您知道嗎,您可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的" +"你知道嗎,你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的" "位置。這樣可以改善模型的整體外觀。試試看!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] @@ -16037,11 +15901,10 @@ msgid "" "printed model by doing some fine-tuning." msgstr "" "流量微調\n" -"你知道嗎,您可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進" +"你知道嗎,你可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進" "行一些微調來提高列印模型的整體光潔度。" #: resources/data/hints.ini: [hint:Split your prints into plates] -#, fuzzy msgid "" "Split your prints into plates\n" "Did you know that you can split a model that has a lot of parts into " @@ -16049,7 +15912,7 @@ msgid "" "track of all the parts." msgstr "" "分類列印\n" -"您知道嗎,您可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來," +"你知道嗎,你可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來," "這將簡化對所有零件的管理。" #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer @@ -16060,7 +15923,7 @@ msgid "" "Layer Height option? Check it out!" msgstr "" "自適應層高度加速列印\n" -"您知道嗎,您可以使用“自適應層高度”選項可以更快地列印模型。試試看!" +"你知道嗎,你可以使用\"自適應層高度\"選項可以更快地列印模型。試試看!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -16070,7 +15933,7 @@ msgid "" "model that actually need it." msgstr "" "自訂支撐\n" -"您知道嗎,您可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需" +"你知道嗎,你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需" "要的模型截面上變得容易。" #: resources/data/hints.ini: [hint:Different types of supports] @@ -16081,7 +15944,7 @@ msgid "" "print speed. Check them out!" msgstr "" "支撐類型\n" -"您知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節耗材" +"你知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節線材" "並提高列印速度。試試看!" #: resources/data/hints.ini: [hint:Printing Silk Filament] @@ -16092,7 +15955,7 @@ msgid "" "the best results." msgstr "" "列印絲綢線材\n" -"你知道嗎,絲綢耗材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較" +"你知道嗎,絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較" "高的溫度和較低的速度。" #: resources/data/hints.ini: [hint:Brim for better adhesion] @@ -16102,21 +15965,19 @@ msgid "" "the printing surface, it's recommended to use a brim?" msgstr "" "使用 Brim(裙邊)\n" -"您知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 brim(裙邊)以提高列印成" +"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 brim(裙邊)以提高列印成" "功率。" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] -#, fuzzy msgid "" "Set parameters for multiple objects\n" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" "為多個物件設定參數\n" -"您知道嗎,可以同時為所有選取的物件設定切片參數。" +"你知道嗎,你可以同時為所有選取的物件設定切片參數。" #: resources/data/hints.ini: [hint:Stack objects] -#, fuzzy msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" @@ -16125,7 +15986,6 @@ msgstr "" "你知道嗎?你可以把多個物件組合為一個整體。" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] -#, fuzzy msgid "" "Flush into support/objects/infill\n" "Did you know that you can save the wasted filament by flushing them into " @@ -16151,6 +16011,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 "" @@ -16159,14 +16022,14 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"避免翹曲\n" +"你知道當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率嗎?" -#, fuzzy #~ msgid "Cool Plate" #~ msgstr "低溫列印板" -#, fuzzy #~ msgid "Reverse on odd" -#~ msgstr "反轉奇數層懸空方向" +#~ msgstr "反轉奇數層方向" #, no-c-format, no-boost-format #~ msgid "" @@ -16177,7 +16040,6 @@ msgstr "" #~ "判定懸空反轉需要的值(mm),可以是線寬的百分比。\n" #~ " 0 值則會在每個奇數層上啟用反向。" -#, fuzzy #~ msgid "" #~ "While printing by Object, the extruder may collide skirt.\n" #~ "Thus, reset the skirt layer to 1 to avoid that." @@ -16211,11 +16073,11 @@ msgstr "" #~ msgstr "有限" #~ msgid "Shrinkage" -#~ msgstr "耗材收縮率" +#~ msgstr "線材收縮率" #, fuzzy #~ msgid "" -#~ "Decrease this value slightly(for example 0.9) to reduce the amount of " +#~ "Decrease this value slightly(for example 0.9)to reduce the amount of " #~ "material for bridge, to improve sag" #~ msgstr "稍微減小這個數值(比如 0.9)可以減小橋接的線材量,來改善下垂。" @@ -16252,7 +16114,7 @@ msgstr "" #~ msgstr "切換線材時,退料所需時間。只用於統計資訊。" #~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to load a " +#~ "Time for the printer firmware (or the Multi Material Unit 2.0)to load a " #~ "new filament during a tool change (when executing the T code). This time " #~ "is added to the total print time by the G-code time estimator." #~ msgstr "" @@ -16261,7 +16123,7 @@ msgstr "" #~ "上去。" #~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to unload " +#~ "Time for the printer firmware (or the Multi Material Unit 2.0)to unload " #~ "a filament during a tool change (when executing the T code). This time is " #~ "added to the total print time by the G-code time estimator." #~ msgstr "" @@ -16272,7 +16134,6 @@ msgstr "" #~ msgid "Filter out gaps smaller than the threshold specified" #~ msgstr "忽略小於指定數值的間隙" -#, fuzzy #~ msgid "" #~ "Enable this option for chamber temperature control. An M191 command will " #~ "be added before \"machine_start_gcode\"\n" @@ -16283,13 +16144,11 @@ msgstr "" #~ "G碼指令:M141/M191 S(0-255)" #~ msgid "Wipe tower extruder" -#~ msgstr "擦拭塔擠出機" +#~ msgstr "換料塔擠出機" -#, fuzzy #~ msgid "Printer local connection failed, please try again." #~ msgstr "列印設備區域網路連接失敗,請重試。" -#, fuzzy #~ msgid "" #~ "Please find the details of Flow Dynamics Calibration from our wiki.\n" #~ "\n" @@ -16304,7 +16163,7 @@ msgstr "" #~ "Please note there are a few cases that will make the calibration result " #~ "not reliable: using a texture plate to do the calibration; the build " #~ "plate does not have good adhesion (please wash the build plate or apply " -#~ "gluestick!) ...You can find more from our wiki.\n" +#~ "gluestick!)...You can find more from our wiki.\n" #~ "\n" #~ "The calibration results have about 10 percent jitter in our test, which " #~ "may cause the result not exactly the same in each calibration. We are " @@ -16312,13 +16171,13 @@ msgstr "" #~ msgstr "" #~ "請從我們的wiki中找到流量動態校準的詳細資訊。\n" #~ "\n" -#~ "通常情況下,校準是不必要的。當您開始單色/單線材列印,並在列印開始選單中勾" -#~ "選了“流量動態校準”選項時,列印設備將按照舊的方式,在列印前校準絲料;當您開" +#~ "通常情況下,校準是不必要的。當你開始單色/單線材列印,並在列印開始選單中勾" +#~ "選了\"流量動態校準\"選項時,列印設備將按照舊的方式,在列印前校準絲料;當你開" #~ "始多色/多線材列印時,列印設備將在每次換絲料時使用預設的補償參數,這在大多" #~ "數情況下會產生良好的效果。\n" #~ "\n" #~ "請注意,有幾種情況會導致校準結果不可靠:使用紋理板進行校準;建模平台黏附效" -#~ "果不好(請清洗建模平台或塗抹膠棒)... 您可以在我們的wiki中找到更多資訊。\n" +#~ "果不好(請清洗建模平台或塗抹膠棒)... 你可以在我們的wiki中找到更多資訊。\n" #~ "\n" #~ "在我們的測試中,校準結果有約 10% 的波動,這可能導致每次校準的結果略有不" #~ "同。我們仍在調查根本原因,並通過新的更新進行改進。" @@ -16328,7 +16187,7 @@ msgstr "" #~ "you want to overrides the other results?" #~ msgstr "相同名稱的結果只會儲存一個。確定要覆蓋其他結果嗎?" -#, fuzzy, c-format, boost-format +#, c-format, boost-format #~ msgid "" #~ "There is already a historical calibration result with the same name: %s. " #~ "Only one of the results with the same name is saved. Are you sure you " @@ -16337,14 +16196,12 @@ msgstr "" #~ "已經存在一個具有相同名稱的校準結果:%s。相同名稱的結果只會儲存一個。確定要" #~ "覆蓋嗎?" -#, fuzzy #~ msgid "Please find the cornor with perfect degree of extrusion" -#~ msgstr "請在您的列印板上找到最接近完美的直角" +#~ msgstr "請在你的列印板上找到最接近完美的直角" #~ msgid "V" #~ msgstr "版本:" -#, fuzzy #~ msgid "" #~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " #~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " @@ -16354,7 +16211,6 @@ msgstr "" #~ "Prusa Research 的 PrusaSlicer。PrusaSlicer 源自於 Alessandro Ranellucci " #~ "的 Slic3r 和 RepRap 社群" -#, fuzzy #~ msgid "Export &Configs" #~ msgstr "匯出設定檔" @@ -16396,24 +16252,20 @@ msgstr "" #~ msgid "Cabin humidity" #~ msgstr "AMS 內部濕度" -#, fuzzy #~ msgid "" #~ "Green means that AMS humidity is normal, orange represent humidity is " #~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" #~ msgstr "" -#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" -#~ "好。)" +#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越好。)" #~ msgid "Desiccant status" #~ msgstr "乾燥劑狀態" -#, fuzzy #~ msgid "" #~ "A desiccant status lower than two bars indicates that desiccant may be " #~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ msgstr "" -#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" -#~ "好)。" +#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越好。)" #~ msgid "" #~ "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -16428,8 +16280,7 @@ msgstr "" #~ "Note: if new filament is inserted during printing, the AMS will not " #~ "automatically read any information until printing is completed." #~ msgstr "" -#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材" -#~ "信息。" +#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材信息。" #, boost-format #~ msgid "Succeed to export G-code to %1%" @@ -16441,19 +16292,16 @@ msgstr "" #~ msgid "Initialize failed (No Camera Device)!" #~ msgstr "初始化失敗(沒有攝影機)" -#, fuzzy #~ msgid "" #~ "Printer is busy downloading, Please wait for the downloading to finish." #~ msgstr "列印設備正忙於下載,請等待下載完成。" -#, fuzzy #~ msgid "Initialize failed (Not supported on the current printer version)!" #~ msgstr "初始化失敗(目前列印設備的版本不支援)!" #~ msgid "Initialize failed (Not accessible in LAN-only mode)!" #~ msgstr "初始化失敗(在區域網路模式中不可存取)!" -#, fuzzy #~ msgid "Initialize failed (Missing LAN ip of printer)!" #~ msgstr "初始化失敗(未找到列印設備的區域網路地址)!" @@ -16473,7 +16321,6 @@ msgstr "" #~ msgid "Load failed [%d]" #~ msgstr "載入失敗 [%d]" -#, fuzzy #~ msgid "Failed to fetching model information from printer." #~ msgstr "無法從列印設備獲取模型資訊。" @@ -16483,26 +16330,24 @@ msgstr "" #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" -#~ "Would you like to keep these changed settings (new value) after switching " +#~ "Would you like to keep these changed settings (new value)after switching " #~ "preset?" -#~ msgstr "您已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" +#~ msgstr "你已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" #~ msgid "" #~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings (new value) after switching " +#~ "Would you like to keep these changed settings (new value)after switching " #~ "preset?" -#~ msgstr "您已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" +#~ msgstr "你已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" #~ msgstr "在斜面表面附近增加實心填充,以保證垂直外殼厚度(頂部+底部實心層)" -#, fuzzy #~ msgid "Configuration package updated to " #~ msgstr "設定檔已更新到" -#, fuzzy #~ msgid "" #~ "Improve shell precision by adjusting outer wall spacing. This also " #~ "improves layer consistency." @@ -16513,13 +16358,11 @@ msgstr "" #~ "layer cooling is enabled, when printing overhangs and when feature speeds " #~ "are not specified explicitly." #~ msgstr "" -#~ "線材最小列印速度。當啟用減速以實現更好的層冷卻、列印懸空以及未明確指定特徵" -#~ "速度時" +#~ "線材最小列印速度。當啟用減速以實現更好的層冷卻、列印懸空以及未明確指定特徵速度時" #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "無稀疏層(实验性功能)" -#, fuzzy #~ msgid "The Config can not be loaded." #~ msgstr "設定檔無法載入。" @@ -16604,10 +16447,9 @@ msgstr "" #~ "model. Read more in the documentation." #~ msgstr "" #~ "簡化模型\n" -#~ "您知道嗎,您可以使用“簡化模型”功能減少模型的三角形數。在模型上單擊滑鼠右" -#~ "鍵,然後選擇“簡化模型”。" +#~ "你知道嗎,你可以使用\"簡化模型\"功能減少模型的三角形數。在模型上單擊滑鼠右" +#~ "鍵,然後選擇\"簡化模型\"。" -#, fuzzy #~ msgid "" #~ "Subtract a Part\n" #~ "Did you know that you can subtract one mesh from another using the " @@ -16615,7 +16457,7 @@ msgstr "" #~ "resizable holes directly in Orca Slicer. Read more in the documentation." #~ msgstr "" #~ "減去部分幾何體\n" -#~ "您知道嗎,您可以使用負零件從另一個幾何體中減去另一個幾何體。例如,可以直接" +#~ "你知道嗎,你可以使用負零件從另一個幾何體中減去另一個幾何體。例如,可以直接" #~ "在 Orca Slicer 中建立可輕鬆調整大小的孔。" #~ msgid "Filling bed " @@ -16637,17 +16479,15 @@ msgstr "" #~ msgid "Please heat the nozzle to above 170 degree before loading filament." #~ msgstr "請在進料前把噴嘴升溫到 170℃" -#, fuzzy #~ msgid "Show g-code window" #~ msgstr "顯示 G-code 視窗" -#, fuzzy #~ msgid "If enabled, g-code window will be displayed." #~ msgstr "如果啟用,將顯示 G-Code 視窗。" -#, fuzzy, c-format +#, c-format #~ msgid "Density of internal sparse infill, 100% means solid throughout" -#~ msgstr "內部稀疏填充密度,100%% 表示整體實心" +#~ msgstr "內部填充密度,100% 表示整體實心" #~ msgid "Tree support wall loops" #~ msgstr "樹狀支撐外牆層數" @@ -16671,15 +16511,12 @@ msgstr "" #~ msgid "Check cloud service status" #~ msgstr "檢查雲端服務狀態" -#, fuzzy #~ msgid "Please input a valid value (K in 0~0.5)" #~ msgstr "請輸入有效的數值(K 值的範圍為 0~0.5)" -#, fuzzy #~ msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" #~ msgstr "請輸入有效的數值(K 值的範圍為 0~0.5, N 值的範圍為 0.6~2.0)" -#, fuzzy #~ msgid "Export all objects as STL" #~ msgstr "匯出所有物件為 STL" @@ -16689,11 +16526,9 @@ msgstr "" #~ msgid "Incompatible 3mf" #~ msgstr "不相容的 3mf" -#, fuzzy #~ msgid "Add/Remove printers" #~ msgstr "新增/刪除列印設備" -#, fuzzy #~ msgid "" #~ "When print by object, machines with I3 structure will not generate " #~ "timelapse videos." @@ -16703,7 +16538,6 @@ msgstr "" #~ msgid "%s is not supported by AMS." #~ msgstr "AMS 不支援 %s 。" -#, fuzzy #~ msgid "Don't remind me of this version again" #~ msgstr "不要再提醒我這個版本" @@ -16739,35 +16573,27 @@ msgstr "" #~ msgid "inner-outer-inner/infill" #~ msgstr "內牆/外牆/內牆/填充" -#, fuzzy #~ msgid "Export 3MF" #~ msgstr "匯出 3MF" -#, fuzzy #~ msgid "Export project as 3MF." -#~ msgstr "匯出項目為 3MF。" +#~ msgstr "匯出專案為 3MF。" -#, fuzzy #~ msgid "Export slicing data" #~ msgstr "匯出切片資料" -#, fuzzy #~ msgid "Export slicing data to a folder." #~ msgstr "匯出切片資料到資料夾" -#, fuzzy #~ msgid "Load slicing data" #~ msgstr "匯入切片資料" -#, fuzzy #~ msgid "Load cached slicing data from directory" -#~ msgstr "從目錄匯入快取的切片資料" +#~ msgstr "從目錄匯入切片資料的快取" -#, fuzzy #~ msgid "Export STL" #~ msgstr "匯出 STL 檔案" -#, fuzzy #~ msgid "Export the objects as multiple STL." #~ msgstr "將物件匯出為多個 STL 檔案" @@ -16780,23 +16606,18 @@ msgstr "" #~ msgid "Show command help." #~ msgstr "顯示命令行幫助。" -#, fuzzy #~ msgid "Update the configs values of 3mf to latest." #~ msgstr "將 3mf 的設定值更新為最新值。" -#, fuzzy #~ msgid "Load default filaments" #~ msgstr "載入預設列印線材" -#, fuzzy #~ msgid "Load first filament as default for those not loaded" -#~ msgstr "載入第一個列印線材為預設線材" +#~ msgstr "載入第一個列印線材為預設代替未能載入的線材" -#, fuzzy #~ msgid "max triangle count per plate for slicing." #~ msgstr "切片時每個列印板的最大三角形數。" -#, fuzzy #~ msgid "max slicing time per plate in seconds." #~ msgstr "每個列印板的最大切片時間(秒)。" @@ -16812,11 +16633,9 @@ msgstr "" #~ msgid "Output the model's information." #~ msgstr "輸出模型的資訊。" -#, fuzzy #~ msgid "Export Settings" #~ msgstr "匯出設定" -#, fuzzy #~ msgid "Export settings to a file." #~ msgstr "匯出設定檔到檔案。" @@ -16853,19 +16672,15 @@ msgstr "" #~ msgid "Scale the model by a float factor" #~ msgstr "根據因子縮放模型" -#, fuzzy #~ msgid "Load General Settings" #~ msgstr "載入一般設定" -#, fuzzy #~ msgid "Load process/machine settings from the specified file" #~ msgstr "從指定檔案載入列印參數/設備設定" -#, fuzzy #~ msgid "Load Filament Settings" #~ msgstr "載入線材設定" -#, fuzzy #~ msgid "Load filament settings from the specified file list" #~ msgstr "從指定檔案清單載入線材設定" @@ -16894,7 +16709,6 @@ msgstr "" #~ msgid "Debug level" #~ msgstr "除錯等級" -#, fuzzy #~ msgid "" #~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" #~ "trace\n" @@ -16902,11 +16716,10 @@ msgstr "" #~ "設定除錯日誌等級。0:fatal, 1:error, 2:warning, 3:info, 4:debug, " #~ "5:trace\n" -#, fuzzy, boost-format +#, boost-format #~ msgid "The selected preset: %1% is not found." #~ msgstr "未找到選定的預設值:%1%。" -#, fuzzy #~ msgid "" #~ "3D Scene Operations\n" #~ "Did you know how to control view and object/part selection with mouse and " @@ -16915,24 +16728,22 @@ msgstr "" #~ "3D 場景操作\n" #~ "如何在 3D 場景中使用滑鼠和觸碰面板進行視角控制和物件/零件選擇" -#, fuzzy #~ msgid "" #~ "Fix Model\n" #~ "Did you know that you can fix a corrupted 3D model to avoid a lot of " #~ "slicing problems?" #~ msgstr "" #~ "修復模型\n" -#~ "您知道嗎?您可以修復一個損壞的 3D 模型以避免諸多切片問題。" +#~ "你知道嗎?你可以修復一個損壞的 3D 模型以避免諸多切片問題。" -#, fuzzy #~ msgid "" #~ "When need to print with the printer door opened\n" #~ "Opening the printer door can reduce the probability of extruder/hotend " #~ "clogging when printing lower temperature filament with a higher enclosure " #~ "temperature. More info about this in the Wiki." #~ msgstr "" -#~ "當需要打開印表機門進行列印時\n" -#~ "當列印較低溫度的耗材時,打開印表機門可以減少擠出機或熱端堵塞的可能性。 有" +#~ "當需要打開列印設備門進行列印時\n" +#~ "當列印較低溫度的線材時,打開列印設備門可以減少擠出機或熱端堵塞的可能性。 有" #~ "關此內容的更多信息,請參見 Wiki。" #~ msgid "Embedded" @@ -16948,9 +16759,8 @@ msgstr "" #~ msgid "Online Models" #~ msgstr "線上模型" -#, fuzzy #~ msgid "Show online staff-picked models on the home page" -#~ msgstr "在首頁上顯示工作人員推薦的線上模型" +#~ msgstr "在首頁上顯示推薦的模型" #, c-format #~ msgid "" @@ -16982,7 +16792,7 @@ msgstr "" #~ "The bed temperature exceeds filament's vitrification temperature. Please " #~ "open the front door of printer before printing to avoid nozzle clog." #~ msgstr "" -#~ "熱床溫度超過了線材的軟化溫度。請在列印前打開3D列印機前門以防堵頭。" +#~ "熱床溫度超過了線材的軟化溫度。請在列印前打開3D列印設備前門以防堵頭。" #~ msgid "Temperature of vitrificaiton" #~ msgstr "軟化溫度" @@ -16993,14 +16803,14 @@ msgstr "" #~ msgstr "材料在這個溫度開始變軟。因此熱床溫度不能超過這個溫度。" #~ msgid "Enable this option if machine has auxiliary part cooling fan" -#~ msgstr "如果機器有輔助部件冷卻風扇,勾選該選項" +#~ msgstr "如果機器有輔助物件冷卻風扇,勾選該選項" #~ msgid "" #~ "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " #~ "during printing except the first several layers which is defined by no " #~ "cooling layers" #~ msgstr "" -#~ "輔助部件冷卻風扇的轉速。輔助部件冷卻風扇將一直運行在該速度,除了設置的無需" +#~ "輔助物件冷卻風扇的轉速。輔助物件冷卻風扇將一直運行在該速度,除了設置的無需" #~ "冷卻的前若干層" #~ msgid "" @@ -17040,7 +16850,7 @@ msgstr "" #~ "circulation or reduce the temperature of the hot bed" #~ msgstr "" #~ "熱床溫度超過了線材的軟化溫度,線材軟化可能造成噴頭堵塞。\n" -#~ "請保持3D列印機在列印過程中敞開,保證空氣流通或降低熱床溫度" +#~ "請保持3D列印設備在列印過程中敞開,保證空氣流通或降低熱床溫度" #~ msgid "Total Time Estimation" #~ msgstr "總時間預估" @@ -17052,7 +16862,7 @@ msgstr "" #~ msgstr "立即打分" #~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "請為您喜歡的 Bambu 商城模型打分。" +#~ msgstr "請為你喜歡的 Bambu 商城模型打分。" #~ msgid "Score" #~ msgstr "打分" @@ -17061,7 +16871,7 @@ msgstr "" #~ msgstr "高溫列印熱床" #~ msgid "Can't connect to the printer" -#~ msgstr "無法連接3D列印機" +#~ msgstr "無法連接列印設備" #~ msgid "Recommended temperature range" #~ msgstr "建議溫度範圍" From 604ded5ff060b062d78e164d517e25ea477944ee Mon Sep 17 00:00:00 2001 From: Eryone <40707672+Eryone@users.noreply.github.com> Date: Sun, 5 Jan 2025 13:36:20 +0800 Subject: [PATCH 029/100] Add profiles for new printer Eryone Thinker X400 (#7365) * add printer Eryone Thinker X400 add printer Eryone Thinker X400 * Update fdm_process_common.json replace zig-zag * Update Thinker X400_cover.png --- resources/profiles/Eryone.json | 82 ++++++ .../profiles/Eryone/Thinker X400_cover.png | Bin 0 -> 36514 bytes resources/profiles/Eryone/Thinker_texture.png | Bin 0 -> 19520 bytes resources/profiles/Eryone/X400_bed.stl | Bin 0 -> 969984 bytes .../Eryone/filament/Eryone Generic ABS.json | 54 ++++ .../Eryone/filament/Eryone Generic ASA.json | 54 ++++ .../Eryone/filament/Eryone Generic PETG.json | 49 ++++ .../Eryone/filament/Eryone Generic PLA.json | 31 +++ .../filament/Eryone Generic Silk PLA.json | 34 +++ .../Eryone/filament/Eryone Generic TPU.json | 43 +++ .../Eryone/filament/Eryone Standard PLA.json | 250 ++++++++++++++++++ .../Eryone/filament/fdm_filament_common.json | 132 +++++++++ .../Eryone/filament/fdm_filament_pla.json | 91 +++++++ .../machine/Thinker X400 0.4 nozzle.json | 211 +++++++++++++++ .../profiles/Eryone/machine/Thinker X400.json | 12 + .../Eryone/machine/fdm_machine_common.json | 174 ++++++++++++ .../0.12mm Standard @Thinker X400.json | 27 ++ .../0.16mm Standard @Thinker X400.json | 27 ++ .../0.20mm Standard @Thinker X400.json | 242 +++++++++++++++++ .../0.24mm Standard @Thinker X400.json | 24 ++ .../Eryone/process/fdm_process_common.json | 118 +++++++++ 21 files changed, 1655 insertions(+) create mode 100644 resources/profiles/Eryone.json create mode 100644 resources/profiles/Eryone/Thinker X400_cover.png create mode 100644 resources/profiles/Eryone/Thinker_texture.png create mode 100644 resources/profiles/Eryone/X400_bed.stl create mode 100644 resources/profiles/Eryone/filament/Eryone Generic ABS.json create mode 100644 resources/profiles/Eryone/filament/Eryone Generic ASA.json create mode 100644 resources/profiles/Eryone/filament/Eryone Generic PETG.json create mode 100644 resources/profiles/Eryone/filament/Eryone Generic PLA.json create mode 100644 resources/profiles/Eryone/filament/Eryone Generic Silk PLA.json create mode 100644 resources/profiles/Eryone/filament/Eryone Generic TPU.json create mode 100644 resources/profiles/Eryone/filament/Eryone Standard PLA.json create mode 100644 resources/profiles/Eryone/filament/fdm_filament_common.json create mode 100644 resources/profiles/Eryone/filament/fdm_filament_pla.json create mode 100644 resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json create mode 100644 resources/profiles/Eryone/machine/Thinker X400.json create mode 100644 resources/profiles/Eryone/machine/fdm_machine_common.json create mode 100644 resources/profiles/Eryone/process/0.12mm Standard @Thinker X400.json create mode 100644 resources/profiles/Eryone/process/0.16mm Standard @Thinker X400.json create mode 100644 resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json create mode 100644 resources/profiles/Eryone/process/0.24mm Standard @Thinker X400.json create mode 100644 resources/profiles/Eryone/process/fdm_process_common.json diff --git a/resources/profiles/Eryone.json b/resources/profiles/Eryone.json new file mode 100644 index 0000000000..7bbaf375d8 --- /dev/null +++ b/resources/profiles/Eryone.json @@ -0,0 +1,82 @@ +{ + "name": "Thinker X400", + "version": "01.09.00.02", + "force_update": "0", + "description": "Eryone configurations", + "machine_model_list": [ + { + "name": "Thinker X400", + "sub_path": "machine/Thinker X400.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.20mm Standard @Thinker X400", + "sub_path": "process/0.20mm Standard @Thinker X400.json" + }, + { + "name": "0.12mm Standard @Thinker X400", + "sub_path": "process/0.12mm Standard @Thinker X400.json" + }, + { + "name": "0.16mm Standard @Thinker X400", + "sub_path": "process/0.16mm Standard @Thinker X400.json" + }, + { + "name": "0.24mm Standard @Thinker X400", + "sub_path": "process/0.24mm Standard @Thinker X400.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "Eryone Standard PLA", + "sub_path": "filament/Eryone Standard PLA.json" + }, + { + "name": "Eryone Generic PLA", + "sub_path": "filament/Eryone Generic PLA.json" + }, + { + "name": "Eryone Generic ABS", + "sub_path": "filament/Eryone Generic ABS.json" + }, + { + "name": "Eryone Generic PETG", + "sub_path": "filament/Eryone Generic PETG.json" + }, + { + "name": "Eryone Generic ASA", + "sub_path": "filament/Eryone Generic ASA.json" + }, + { + "name": "Eryone Generic Silk PLA", + "sub_path": "filament/Eryone Generic Silk PLA.json" + }, + { + "name": "Eryone Generic TPU", + "sub_path": "filament/Eryone Generic TPU.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "Thinker X400 0.4 nozzle", + "sub_path": "machine/Thinker X400 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/Eryone/Thinker X400_cover.png b/resources/profiles/Eryone/Thinker X400_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2985e6db13db339bf6f5e4d26eb7ad0f07fee0 GIT binary patch literal 36514 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/Eryone/filament/Eryone Generic ABS.json b/resources/profiles/Eryone/filament/Eryone Generic ABS.json new file mode 100644 index 0000000000..91f0c59d72 --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic ABS.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "EFL91", + "setting_id": "EFSA01", + "name": "Eryone Generic ABS", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "30" + ], + "filament_settings_id": [ + "Eryone Generic ABS" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Eryone" + ], + "hot_plate_temp": [ + "115" + ], + "hot_plate_temp_initial_layer": [ + "115" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "slow_down_layer_time": [ + "12" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Generic ASA.json b/resources/profiles/Eryone/filament/Eryone Generic ASA.json new file mode 100644 index 0000000000..9fffd9ed92 --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic ASA.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "EFL92", + "setting_id": "EFSA02", + "name": "Eryone Generic ASA", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_settings_id": [ + "Eryone Generic ASA" + ], + "filament_type": [ + "ASA" + ], + "filament_vendor": [ + "Eryone" + ], + "hot_plate_temp": [ + "115" + ], + "hot_plate_temp_initial_layer": [ + "115" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "slow_down_layer_time": [ + "12" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Generic PETG.json b/resources/profiles/Eryone/filament/Eryone Generic PETG.json new file mode 100644 index 0000000000..c9fc9060be --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic PETG.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "filament_id": "EFL93", + "setting_id": "EFSA03", + "name": "Eryone Generic PETG", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "fan_min_speed": [ + "90" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "filament_vendor": [ + "Eryone" + ], + "filament_settings_id": [ + "Eryone Generic PETG" + ], + "filament_type": [ + "PETG" + ], + + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "225" + ], + "slow_down_layer_time": [ + "8" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Generic PLA.json b/resources/profiles/Eryone/filament/Eryone Generic PLA.json new file mode 100644 index 0000000000..8b9d23b072 --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic PLA.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "EFL90", + "setting_id": "EFSA00", + "name": "Eryone Generic PLA", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "fan_min_speed": [ + "90" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_settings_id": [ + "Eryone Generic PLA" + ], + "from": "User", + "hot_plate_temp": [ + "65" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Generic Silk PLA.json b/resources/profiles/Eryone/filament/Eryone Generic Silk PLA.json new file mode 100644 index 0000000000..6fce0687c6 --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic Silk PLA.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "EFL941", + "setting_id": "EFSA041", + "name": "Eryone Generic Silk PLA", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "fan_min_speed": [ + "90" + ], + "filament_settings_id": [ + "Eryone Generic Silk PLA" + ], + "from": "User", + "hot_plate_temp": [ + "65" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Generic TPU.json b/resources/profiles/Eryone/filament/Eryone Generic TPU.json new file mode 100644 index 0000000000..1cabba5b69 --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Generic TPU.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "filament_id": "EFL95", + "setting_id": "EFSA05", + "name": "Eryone Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "Eryone Standard PLA", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "fan_min_speed": [ + "90" + ], + "filament_max_volumetric_speed": [ + "4.2" + ], + "filament_retraction_length": [ + "1.6" + ], + "filament_settings_id": [ + "Eryone Generic TPU" + ], + "filament_type": [ + "TPU" + ], + "from": "User", + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "slow_down_layer_time": [ + "8" + ] +} diff --git a/resources/profiles/Eryone/filament/Eryone Standard PLA.json b/resources/profiles/Eryone/filament/Eryone Standard PLA.json new file mode 100644 index 0000000000..66299ef95a --- /dev/null +++ b/resources/profiles/Eryone/filament/Eryone Standard PLA.json @@ -0,0 +1,250 @@ +{ + "type": "filament", + + "name": "Eryone Standard PLA", + "from": "system", + "instantiation": "false", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_load_time": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Eryone Standard PLA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unload_time": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Eryone" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "180" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Eryone/filament/fdm_filament_common.json b/resources/profiles/Eryone/filament/fdm_filament_common.json new file mode 100644 index 0000000000..4851217fe1 --- /dev/null +++ b/resources/profiles/Eryone/filament/fdm_filament_common.json @@ -0,0 +1,132 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Eryone/filament/fdm_filament_pla.json b/resources/profiles/Eryone/filament/fdm_filament_pla.json new file mode 100644 index 0000000000..324fe07e49 --- /dev/null +++ b/resources/profiles/Eryone/filament/fdm_filament_pla.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json b/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json new file mode 100644 index 0000000000..f2f7ce92f7 --- /dev/null +++ b/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json @@ -0,0 +1,211 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Thinker X400 0.4 nozzle", + "from": "system", + "instantiation": "true", + "printer_model": "Thinker X400", + "default_print_profile": "0.20mm Standard @Thinker X400", + "default_filament_profile":"Eryone Generic PLA;Eryone Generic ABS;Eryone Generic ASA;Eryone Generic PETG;Eryone Generic Silk PLA;Eryone Generic TPU", + "auxiliary_fan": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "best_object_pos": "0.5,0.5", + "change_filament_gcode": "", + "cooling_tube_length": "5", + "cooling_tube_retraction": "91.5", + "deretraction_speed": [ + "30" + ], + "enable_filament_ramming": "1", + "extra_loading_move": "-2", + "extruder_clearance_height_to_lid": "135", + "extruder_clearance_height_to_rod": "40", + "extruder_clearance_radius": "85", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "machine_end_gcode": "PRINT_END", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "10000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "5000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "12000", + "20000" + ], + "machine_max_acceleration_x": [ + "10000", + "20000" + ], + "machine_max_acceleration_y": [ + "10000", + "20000" + ], + "machine_max_acceleration_z": [ + "300", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "0.3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "8", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "M117 Heating\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nPRINT_START \nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\n\nM104 S0\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM117 Heating\nM190 S[bed_temperature_initial_layer_single]\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n;QUAD_GANTRY_LEVEL\nCLEAN_N S=[first_layer_temperature] X=240 Y=-3 A=0\nM117 Quad Level\n_QUAD_GANTRY_LEVEL horizontal_move_z=10 retry_tolerance=1 LIFT_SPEED=5\nG28 Z\nM117 Quad Level\n_QUAD_GANTRY_LEVEL horizontal_move_z=5 retry_tolerance=0.05 LIFT_SPEED=5\nHOME_Z X=132.5 Y=197.5\nM117 Bed Mesh Level\nBED_MESH_CALIBRATE\nM117 Heating\nG1 Y0.0 Z0.3 F1500 ; move print head up\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nM117 .\nG92 E0.0\n; intro line\nG1 X175.0 E12 F1000\nG1 Y0.6\nG1 X5.0 E10 F1000\nG92 E0.0\n; intro line\nG1 Y1.0 Z0.2 F1000\nG1 X200.0 E15.0 F1000\nG92 E0.0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ], + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "92", + "print_host": "192.168.2.8", + "print_host_webui": "", + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "printable_height": "400", + "printer_notes": "", + "printer_settings_id": "Thinker X400 0.4 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.8" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "template_custom_gcode": "", + "thumbnails": [ + "250x250" + ], + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.3" + ], + "z_hop_types": [ + "Auto Lift" + ] +} diff --git a/resources/profiles/Eryone/machine/Thinker X400.json b/resources/profiles/Eryone/machine/Thinker X400.json new file mode 100644 index 0000000000..42dd7724c5 --- /dev/null +++ b/resources/profiles/Eryone/machine/Thinker X400.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Thinker X400", + "model_id": "Thinker-X400", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Eryone", + "bed_model": "X400_bed.stl", + "bed_texture": "Thinker_texture.png", + "hotend_model": "", + "default_materials": "Eryone Generic PLA;Eryone Generic ABS;Eryone Generic ASA;Eryone Generic PETG;Eryone Generic Silk PLA;Eryone Generic TPU" +} diff --git a/resources/profiles/Eryone/machine/fdm_machine_common.json b/resources/profiles/Eryone/machine/fdm_machine_common.json new file mode 100644 index 0000000000..3540ba61fe --- /dev/null +++ b/resources/profiles/Eryone/machine/fdm_machine_common.json @@ -0,0 +1,174 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "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 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": [ + "#018001" + ], + "extruder_offset": [ + "0x0" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "5000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "10000", + "20000" + ], + "machine_max_acceleration_y": [ + "10000", + "20000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "machine_max_speed_e": [ + "50", + "25" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "8", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n\nG28 ; home all\nQUAD_GANTRY_LEVEL\n\nG28\n\nBED_MESH_CALIBRATE\n\nG1 Y1.0 Z0.3 F1500 ; move print head up\n\nG92 E0.0\n; intro line\nG1 X205.0 E10 F1000\nG1 Y1.6\nG1 X5.0 E15 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X200.0 E20.0 F1000\nG92 E0.0\n", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ], + "printer_notes": "", + "printer_settings_id": "Thinker X400 0.4 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.7" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "template_custom_gcode": "", + "thumbnails": [ + "400x400" + ], + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "version": "1.6.0.0", + "wipe": [ + "1" + ], + "wipe_distance": [ + "0.3" + ], + "z_hop": [ + "0" + ], + "z_hop_types": [ + "Spiral Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Eryone/process/0.12mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.12mm Standard @Thinker X400.json new file mode 100644 index 0000000000..c3fc98d56e --- /dev/null +++ b/resources/profiles/Eryone/process/0.12mm Standard @Thinker X400.json @@ -0,0 +1,27 @@ +{ + "brim_object_gap": "0", + "default_acceleration": "8000", + "elefant_foot_compensation": "0.12", + "from": "User", + "gap_infill_speed": "300", + "inherits": "0.20mm Standard @Thinker X400", + "inner_wall_acceleration": "8000", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "300", + "is_custom_defined": "0", + "layer_height": "0.12", + "name": "0.12mm Standard @Thinker X400", + "only_one_wall_top": "1", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "print_settings_id": "0.12mm Standard @Thinker X400", + "raft_first_layer_expansion": "10", + "sparse_infill_density": "15%", + "sparse_infill_speed": "300", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "version": "1.9.0.2", + "wall_generator": "classic" +} diff --git a/resources/profiles/Eryone/process/0.16mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.16mm Standard @Thinker X400.json new file mode 100644 index 0000000000..f224b3388c --- /dev/null +++ b/resources/profiles/Eryone/process/0.16mm Standard @Thinker X400.json @@ -0,0 +1,27 @@ +{ + "brim_object_gap": "0", + "default_acceleration": "8000", + "elefant_foot_compensation": "0.12", + "from": "User", + "gap_infill_speed": "300", + "inherits": "0.20mm Standard @Thinker X400", + "inner_wall_acceleration": "8000", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "300", + "is_custom_defined": "0", + "layer_height": "0.16", + "name": "0.16mm Standard @Thinker X400", + "only_one_wall_top": "1", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "print_settings_id": "0.16mm Standard @Thinker X400", + "raft_first_layer_expansion": "10", + "sparse_infill_density": "15%", + "sparse_infill_speed": "300", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "version": "1.9.0.2", + "wall_generator": "classic" +} diff --git a/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json new file mode 100644 index 0000000000..8a9364b225 --- /dev/null +++ b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json @@ -0,0 +1,242 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Thinker X400", + "from": "", + "instantiation": "true", + "inherits": "fdm_process_common", + "compatible_printers": [ + "Thinker X400 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "0.95", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "default_acceleration": "8000", + "default_jerk": "0", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.12", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "1", + "enable_overhang_speed": "1", + "enable_prime_tower": "0", + "enable_support": "0", + "enforce_support_layers": "0", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + + "fuzzy_skin": "none", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_thickness": "0.3", + "gap_infill_speed": "250", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "25%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "8000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "250", + "interface_shells": "0", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "100%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "250", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.2", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_threshold": "50%", + "overhang_speed_classic": "0", + "post_process": [], + "precise_outer_wall": "0", + "prime_tower_brim_width": "3", + "prime_tower_width": "60", + "prime_volume": "45", + "print_flow_ratio": "1", + "print_sequence": "by layer", + "print_settings_id": "0.20mm Standard @Thinker X400", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "10", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "seam_gap": "10%", + "seam_position": "aligned", + "single_extruder_multi_material_priming": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "0", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "250", + "spiral_mode": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_pattern": "rectilinear", + "support_interface_spacing": "0.5", + "support_interface_speed": "60", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "80", + "support_style": "default", + "support_threshold_angle": "30", + "support_top_z_distance": "0.2", + "support_type": "normal(auto)", + "thick_bridges": "0", + "timelapse_type": "0", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonic", + "top_surface_speed": "200", + "travel_acceleration": "5000", + "travel_jerk": "12", + "travel_speed": "350", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "5", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "3", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "2", + "version": "1.9.0.2", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_loops": "2", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "0", + "wipe_tower_extra_spacing": "100%", + "wipe_tower_extruder": "0", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Eryone/process/0.24mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.24mm Standard @Thinker X400.json new file mode 100644 index 0000000000..95e96660fb --- /dev/null +++ b/resources/profiles/Eryone/process/0.24mm Standard @Thinker X400.json @@ -0,0 +1,24 @@ +{ + "brim_object_gap": "0", + "default_acceleration": "8000", + "elefant_foot_compensation": "0.12", + "from": "User", + "gap_infill_speed": "220", + "inherits": "0.20mm Standard @Thinker X400", + "inner_wall_acceleration": "8000", + "inner_wall_speed": "220", + "internal_solid_infill_speed": "220", + "is_custom_defined": "0", + "layer_height": "0.24", + "name": "0.24mm Standard @Thinker X400", + "only_one_wall_top": "1", + "outer_wall_speed": "200", + "print_settings_id": "0.24mm Standard @Thinker X400", + "raft_first_layer_expansion": "10", + "sparse_infill_density": "15%", + "sparse_infill_speed": "220", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "version": "1.9.0.2", + "wall_generator": "classic" +} diff --git a/resources/profiles/Eryone/process/fdm_process_common.json b/resources/profiles/Eryone/process/fdm_process_common.json new file mode 100644 index 0000000000..478fff7b36 --- /dev/null +++ b/resources/profiles/Eryone/process/fdm_process_common.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.5", + "bridge_speed": "50", + "bridge_acceleration": "500", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "2500", + "travel_acceleration": "2500", + "inner_wall_acceleration": "500", + "outer_wall_acceleration": "500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "cubic", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.48", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{printer_model}.gcode", + "detect_overhang_wall": "1", + "enable_overhang_speed": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.36", + "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": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "125", + "support_threshold_angle": "40", + "support_object_xy_distance": "2.5", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.7", + "top_solid_infill_flow_ratio": "1", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "bridge_flow": "0.95", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "50", + "initial_layer_travel_speed": "100%", + "outer_wall_speed": "125", + "inner_wall_speed": "250", + "sparse_infill_speed": "250", + "internal_solid_infill_speed": "200", + "top_surface_speed": "150", + "gap_infill_speed": "150", + "travel_speed": "300", + "travel_speed_z": "0", + "enable_arc_fitting": "0", + "ensure_vertical_shell_thickness": "1", + "precise_outer_wall": "1", + "independent_support_layer_height": "1", + "default_jerk": "15", + "infill_jerk": "15", + "initial_layer_jerk": "12", + "inner_wall_jerk": "15", + "outer_wall_jerk": "10", + "top_surface_jerk": "12", + "travel_jerk": "20" +} \ No newline at end of file From 67cc143916bb6cad861cd959287f17e88bbe83ee Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:05:04 +0000 Subject: [PATCH 030/100] Optimisation: ERS - Reduce redundant gcode commands from extrusion rate smoothing (#7398) * Optimisation: Reduce volume of output gcode commands for pressure equalizer * Update thresholds * Update PrintConfig.cpp * Merge branch 'main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'SoftFever:main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'SoftFever:main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'SoftFever:main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'SoftFever:main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'SoftFever:main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing * Merge branch 'main' into Optimisation-Reduce-reduntant-gcode-commands-produced-by-Estrusion-Rate-Smoothing --- src/libslic3r/GCode/PressureEqualizer.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index 806ef768e7..d5ddc50d91 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -482,11 +482,25 @@ void PressureEqualizer::output_gcode_line(const size_t line_idx) if (*comment != ';') comment = nullptr; - // Emit the line with lowered extrusion rates. + // get the gcode line length float l = line.dist_xyz(); - if (auto nSegments = size_t(ceil(l / m_max_segment_length)); nSegments == 1) { // Just update this segment. + // number of segments this line can be broken down to + auto nSegments = size_t(ceil(l / m_max_segment_length)); + + // Orca: + // Calculate the absolute difference in volumetric extrusion rate between the start and end point of the line. + // Quantize it to 1mm3/min (0.016mm3/sec). + int delta_volumetric_rate = std::round(fabs(line.volumetric_extrusion_rate_end - line.volumetric_extrusion_rate_start)); + + // Emit the line with lowered extrusion rates. + // Orca: + // First, check if the change in volumetric extrusion rate is trivial (less than 10mm3/min -> 0.16mm3/sec (5mm/sec speed for a 0.25 mm nozzle). + // Or if the line size is equal in length with the smallest segment. + // If so, then emit the line as a single extrusion, i.e. dont split into segments. + if ( nSegments == 1 || delta_volumetric_rate < 10) { push_line_to_output(line_idx, line.feedrate() * line.volumetric_correction_avg(), comment); - } else { + } else // The line needs to be split the line into segments and apply extrusion rate smoothing + { bool accelerating = line.volumetric_extrusion_rate_start < line.volumetric_extrusion_rate_end; // Update the initial and final feed rate values. line.pos_start[4] = line.volumetric_extrusion_rate_start * line.pos_end[4] / line.volumetric_extrusion_rate; @@ -769,7 +783,8 @@ void PressureEqualizer::push_line_to_output(const size_t line_idx, float new_fee // Orca: sanity check, 1 mm/s is the minimum feedrate. if (new_feedrate < 60) new_feedrate = 60; - new_feedrate = std::round(new_feedrate); + // Quantize speed changes to a minimum of 1mm/sec, to reduce gcode volume for trivial speed changes. + new_feedrate = std::round(new_feedrate / 60.0) * 60.0; const GCodeLine &line = m_gcode_lines[line_idx]; if (line_idx > 0 && output_buffer_length > 0) { const std::string prev_line_str = std::string(output_buffer.begin() + int(this->output_buffer_prev_length), From bb009eaa99a7736d3c05d145a062347df93fb76b Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:19:00 +0000 Subject: [PATCH 031/100] Enhancement: ERS - Option to limit ERS to external perimeters and overhangs only (#7399) * Option to limit ERS to external perimeters and overhangs only * Label name * Label update * Merge branch 'main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'SoftFever:main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'SoftFever:main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'SoftFever:main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'SoftFever:main' into Limit-ERS-to-external-perimeters-and-overhangs * Merge branch 'main' into Limit-ERS-to-external-perimeters-and-overhangs --- src/libslic3r/GCode/PressureEqualizer.cpp | 10 ++++++++-- src/libslic3r/GCode/PressureEqualizer.hpp | 3 +++ src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 1 + src/libslic3r/PrintConfig.cpp | 7 +++++++ src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/ConfigManipulation.cpp | 1 + src/slic3r/GUI/Tab.cpp | 1 + 8 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index d5ddc50d91..ee101e3605 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -62,6 +62,7 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_ m_max_volumetric_extrusion_rate_slope_positive = float(config.max_volumetric_extrusion_rate_slope.value) * 60.f * 60.f; m_max_volumetric_extrusion_rate_slope_negative = float(config.max_volumetric_extrusion_rate_slope.value) * 60.f * 60.f; m_max_segment_length = float(config.max_volumetric_extrusion_rate_slope_segment_length.value); + m_extrusion_rate_smoothing_external_perimeter_only = bool(config.extrusion_rate_smoothing_external_perimeter_only.value); } for (ExtrusionRateSlope &extrusion_rate_slope : m_max_volumetric_extrusion_rate_slopes) { @@ -629,7 +630,9 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const rate_end = rate_succ; // don't alter the flow rate for these extrusion types - if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning) { + // Orca: Limit ERS to external perimeters and overhangs if option selected by user + if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning || + (m_extrusion_rate_smoothing_external_perimeter_only && line.extrusion_role != ExtrusionRole::erOverhangPerimeter && line.extrusion_role != ExtrusionRole::erExternalPerimeter)) { rate_end = line.volumetric_extrusion_rate_end; } else if (line.volumetric_extrusion_rate_end > rate_end) { line.volumetric_extrusion_rate_end = rate_end; @@ -684,10 +687,13 @@ void PressureEqualizer::adjust_volumetric_rate(const size_t fist_line_idx, const float rate_start = feedrate_per_extrusion_role[iRole]; // don't alter the flow rate for these extrusion types - if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning) { + // Orca: Limit ERS to external perimeters and overhangs if option selected by user + if (!line.adjustable_flow || line.extrusion_role == ExtrusionRole::erBridgeInfill || line.extrusion_role == ExtrusionRole::erIroning || + (m_extrusion_rate_smoothing_external_perimeter_only && line.extrusion_role != ExtrusionRole::erOverhangPerimeter && line.extrusion_role != ExtrusionRole::erExternalPerimeter)) { rate_start = line.volumetric_extrusion_rate_start; } else if (iRole == size_t(line.extrusion_role) && rate_prec < rate_start) rate_start = rate_prec; + if (line.volumetric_extrusion_rate_start > rate_start) { line.volumetric_extrusion_rate_start = rate_start; line.max_volumetric_extrusion_rate_slope_positive = rate_slope; diff --git a/src/libslic3r/GCode/PressureEqualizer.hpp b/src/libslic3r/GCode/PressureEqualizer.hpp index 3563cdabc6..4b3159e502 100644 --- a/src/libslic3r/GCode/PressureEqualizer.hpp +++ b/src/libslic3r/GCode/PressureEqualizer.hpp @@ -83,6 +83,9 @@ private: // Maximum segment length to split a long segment if the initial and the final flow rate differ. // Smaller value means a smoother transition between two different flow rates. float m_max_segment_length; + + // Apply ERS only on external perimeters and overhangs + bool m_extrusion_rate_smoothing_external_perimeter_only; // Indicate if extrude set speed block was opened using the tag ";_EXTRUDE_SET_SPEED" // or not (not opened, or it was closed using the tag ";_EXTRUDE_END"). diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 4eb5c5e949..d6596b2fb9 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -770,7 +770,7 @@ static std::vector s_Preset_print_options { "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "max_travel_detour_distance", "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", - "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length", + "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only", "inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed", "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed", "bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index e825498bf6..31f225cfa2 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -144,6 +144,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "slow_down_min_speed", "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length", + "extrusion_rate_smoothing_external_perimeter_only", "reduce_infill_retraction", "filename_format", "retraction_minimum_travel", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2877fa7169..f7e88a0318 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3355,6 +3355,13 @@ void PrintConfigDef::init_fff_params() def->max = 5; def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(3)); + + def = this->add("extrusion_rate_smoothing_external_perimeter_only", coBool); + def->label = L("Apply only on external features"); + def->tooltip = L("Applies extrusion rate smoothing only on external perimeters and overhangs. This can help reduce artefacts due to sharp speed transitions on externally visible " + "overhangs without impacting the print speed of features that will not be visible to the user."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); def = this->add("fan_min_speed", coFloats); def->label = L("Fan speed"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index ee522dab0d..a9bcfe76d0 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1092,6 +1092,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope)) ((ConfigOptionInt, max_volumetric_extrusion_rate_slope_segment_length)) + ((ConfigOptionBool, extrusion_rate_smoothing_external_perimeter_only)) ((ConfigOptionPercents, retract_before_wipe)) ((ConfigOptionFloats, retraction_length)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 704fdf0dac..2c1269f12a 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -497,6 +497,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co int have_volumetric_extrusion_rate_slope_segment_length = config->option("max_volumetric_extrusion_rate_slope_segment_length")->value; toggle_field("enable_arc_fitting", !have_volumetric_extrusion_rate_slope); toggle_line("max_volumetric_extrusion_rate_slope_segment_length", have_volumetric_extrusion_rate_slope); + toggle_line("extrusion_rate_smoothing_external_perimeter_only", have_volumetric_extrusion_rate_slope); if(have_volumetric_extrusion_rate_slope) config->set_key_value("enable_arc_fitting", new ConfigOptionBool(false)); if(have_volumetric_extrusion_rate_slope_segment_length==0) { DynamicPrintConfig new_conf = *config; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index e3a981287a..b86e2b75e1 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2215,6 +2215,7 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Advanced"), L"param_advanced", 15); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope", "extrusion-rate-smoothing"); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_segment_length", "extrusion-rate-smoothing"); + optgroup->append_single_option_line("extrusion_rate_smoothing_external_perimeter_only", "extrusion-rate-smoothing"); page = add_options_page(L("Support"), "custom-gcode_support"); // ORCA: icon only visible on placeholders optgroup = page->new_optgroup(L("Support"), L"param_support"); From e62d6a3b68619d2aecc8b4513263e33257491f60 Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:23:11 +0000 Subject: [PATCH 032/100] Enhancement: ERS - segment length - convert to float (#7400) Enhancement: ERS segment length - convert to float To allow splitting of line segments down to 0.5mm for improved external surface finish. Co-authored-by: SoftFever --- src/libslic3r/PrintConfig.cpp | 10 ++++++---- src/libslic3r/PrintConfig.hpp | 3 ++- src/slic3r/GUI/ConfigManipulation.cpp | 6 +++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f7e88a0318..e922af9c5d 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3345,16 +3345,17 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("max_volumetric_extrusion_rate_slope_segment_length", coInt); + def = this->add("max_volumetric_extrusion_rate_slope_segment_length", coFloat); def->label = L("Smoothing segment length"); def->tooltip = L("A lower value results in smoother extrusion rate transitions. However, this results in a significantly larger gcode file " "and more instructions for the printer to process. \n\n" "Default value of 3 works well for most cases. If your printer is stuttering, increase this value to reduce the number of adjustments made\n\n" - "Allowed values: 1-5"); - def->min = 1; + "Allowed values: 0.5-5"); + def->min = 0.5; def->max = 5; + def->sidetext = L("mm"); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionInt(3)); + def->set_default_value(new ConfigOptionFloat(3.0)); def = this->add("extrusion_rate_smoothing_external_perimeter_only", coBool); def->label = L("Apply only on external features"); @@ -3363,6 +3364,7 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("fan_min_speed", coFloats); def->label = L("Fan speed"); def->tooltip = L("Minimum speed for part cooling fan"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index a9bcfe76d0..e406e4f3c2 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1091,8 +1091,9 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionString, time_lapse_gcode)) ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope)) - ((ConfigOptionInt, max_volumetric_extrusion_rate_slope_segment_length)) + ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_segment_length)) ((ConfigOptionBool, extrusion_rate_smoothing_external_perimeter_only)) + ((ConfigOptionPercents, retract_before_wipe)) ((ConfigOptionFloats, retraction_length)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 2c1269f12a..600cb30c0f 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -494,14 +494,14 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co auto gcflavor = preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor")->value; bool have_volumetric_extrusion_rate_slope = config->option("max_volumetric_extrusion_rate_slope")->value > 0; - int have_volumetric_extrusion_rate_slope_segment_length = config->option("max_volumetric_extrusion_rate_slope_segment_length")->value; + float have_volumetric_extrusion_rate_slope_segment_length = config->option("max_volumetric_extrusion_rate_slope_segment_length")->value; toggle_field("enable_arc_fitting", !have_volumetric_extrusion_rate_slope); toggle_line("max_volumetric_extrusion_rate_slope_segment_length", have_volumetric_extrusion_rate_slope); toggle_line("extrusion_rate_smoothing_external_perimeter_only", have_volumetric_extrusion_rate_slope); if(have_volumetric_extrusion_rate_slope) config->set_key_value("enable_arc_fitting", new ConfigOptionBool(false)); - if(have_volumetric_extrusion_rate_slope_segment_length==0) { + if(have_volumetric_extrusion_rate_slope_segment_length < 0.5) { DynamicPrintConfig new_conf = *config; - new_conf.set_key_value("max_volumetric_extrusion_rate_slope_segment_length", new ConfigOptionInt(1)); + new_conf.set_key_value("max_volumetric_extrusion_rate_slope_segment_length", new ConfigOptionFloat(1)); apply(config, &new_conf); } From 333ed4c34d98d8dd856310e29e0ffd83c5bb5ebb Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Mon, 6 Jan 2025 09:07:58 +0800 Subject: [PATCH 033/100] Fix flatpack build --- src/libslic3r/Geometry/VoronoiUtilsCgal.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp index 7797a5a29f..28a648851d 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp @@ -1,3 +1,5 @@ +// Needed since the CGAL headers are not self-contained. +#include #include #include #include From b32f2b22379f29b990495d0c62d08dc812f091fc Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 6 Jan 2025 20:50:54 +0800 Subject: [PATCH 034/100] Fix profiles with missing compatible printers Hide filaments with missing compatible printers by default --- .../Elegoo/filament/Elegoo Generic ASA.json | 29 ++++++++++++++++++- .../filament/Elegoo Generic PETG PRO.json | 27 +++++++++++++++++ .../filament/Elegoo Generic PLA Matte.json | 29 ++++++++++++++++++- .../Ratrig/filament/RatRig BigNozzle ABS.json | 27 +++++++++++++++++ .../Ratrig/filament/RatRig BigNozzle ASA.json | 27 +++++++++++++++++ .../filament/RatRig BigNozzle PCTG.json | 27 +++++++++++++++++ .../filament/RatRig BigNozzle PETG.json | 27 +++++++++++++++++ .../Ratrig/filament/RatRig BigNozzle PLA.json | 27 +++++++++++++++++ .../Ratrig/filament/RatRig Generic PCTG.json | 27 +++++++++++++++++ resources/web/guide/22/22.js | 3 +- 10 files changed, 247 insertions(+), 3 deletions(-) diff --git a/resources/profiles/Elegoo/filament/Elegoo Generic ASA.json b/resources/profiles/Elegoo/filament/Elegoo Generic ASA.json index c45a4095df..8f2fce2250 100644 --- a/resources/profiles/Elegoo/filament/Elegoo Generic ASA.json +++ b/resources/profiles/Elegoo/filament/Elegoo Generic ASA.json @@ -14,5 +14,32 @@ ], "filament_max_volumetric_speed": [ "12" - ] + ], + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle", + "Elegoo Neptune X 0.4 nozzle", + "Elegoo Neptune 2 0.4 nozzle", + "Elegoo Neptune 2S 0.4 nozzle", + "Elegoo Neptune 2D 0.4 nozzle", + "Elegoo Neptune 3 0.4 nozzle", + "Elegoo Neptune 3 Pro 0.4 nozzle", + "Elegoo Neptune 3 Plus 0.4 nozzle", + "Elegoo Neptune 3 Max 0.4 nozzle", + "Elegoo Neptune 4 (0.2 nozzle)", + "Elegoo Neptune 4 (0.4 nozzle)", + "Elegoo Neptune 4 (0.6 nozzle)", + "Elegoo Neptune 4 (0.8 nozzle)", + "Elegoo Neptune 4 Max (0.2 nozzle)", + "Elegoo Neptune 4 Max (0.4 nozzle)", + "Elegoo Neptune 4 Max (0.6 nozzle)", + "Elegoo Neptune 4 Max (0.8 nozzle)", + "Elegoo Neptune 4 Plus (0.2 nozzle)", + "Elegoo Neptune 4 Plus (0.4 nozzle)", + "Elegoo Neptune 4 Plus (0.6 nozzle)", + "Elegoo Neptune 4 Plus (0.8 nozzle)", + "Elegoo Neptune 4 Pro (0.2 nozzle)", + "Elegoo Neptune 4 Pro (0.4 nozzle)", + "Elegoo Neptune 4 Pro (0.6 nozzle)", + "Elegoo Neptune 4 Pro (0.8 nozzle)" + ] } diff --git a/resources/profiles/Elegoo/filament/Elegoo Generic PETG PRO.json b/resources/profiles/Elegoo/filament/Elegoo Generic PETG PRO.json index 444d6524b1..24cacc0506 100644 --- a/resources/profiles/Elegoo/filament/Elegoo Generic PETG PRO.json +++ b/resources/profiles/Elegoo/filament/Elegoo Generic PETG PRO.json @@ -77,5 +77,32 @@ ], "filament_end_gcode": [ "; filament end gcode \n" + ], + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle", + "Elegoo Neptune X 0.4 nozzle", + "Elegoo Neptune 2 0.4 nozzle", + "Elegoo Neptune 2S 0.4 nozzle", + "Elegoo Neptune 2D 0.4 nozzle", + "Elegoo Neptune 3 0.4 nozzle", + "Elegoo Neptune 3 Pro 0.4 nozzle", + "Elegoo Neptune 3 Plus 0.4 nozzle", + "Elegoo Neptune 3 Max 0.4 nozzle", + "Elegoo Neptune 4 (0.2 nozzle)", + "Elegoo Neptune 4 (0.4 nozzle)", + "Elegoo Neptune 4 (0.6 nozzle)", + "Elegoo Neptune 4 (0.8 nozzle)", + "Elegoo Neptune 4 Max (0.2 nozzle)", + "Elegoo Neptune 4 Max (0.4 nozzle)", + "Elegoo Neptune 4 Max (0.6 nozzle)", + "Elegoo Neptune 4 Max (0.8 nozzle)", + "Elegoo Neptune 4 Plus (0.2 nozzle)", + "Elegoo Neptune 4 Plus (0.4 nozzle)", + "Elegoo Neptune 4 Plus (0.6 nozzle)", + "Elegoo Neptune 4 Plus (0.8 nozzle)", + "Elegoo Neptune 4 Pro (0.2 nozzle)", + "Elegoo Neptune 4 Pro (0.4 nozzle)", + "Elegoo Neptune 4 Pro (0.6 nozzle)", + "Elegoo Neptune 4 Pro (0.8 nozzle)" ] } diff --git a/resources/profiles/Elegoo/filament/Elegoo Generic PLA Matte.json b/resources/profiles/Elegoo/filament/Elegoo Generic PLA Matte.json index bad35c3b98..688a0304d9 100644 --- a/resources/profiles/Elegoo/filament/Elegoo Generic PLA Matte.json +++ b/resources/profiles/Elegoo/filament/Elegoo Generic PLA Matte.json @@ -17,5 +17,32 @@ ], "filament_start_gcode": [ "; filament start gcode\n" - ] + ], + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle", + "Elegoo Neptune X 0.4 nozzle", + "Elegoo Neptune 2 0.4 nozzle", + "Elegoo Neptune 2S 0.4 nozzle", + "Elegoo Neptune 2D 0.4 nozzle", + "Elegoo Neptune 3 0.4 nozzle", + "Elegoo Neptune 3 Pro 0.4 nozzle", + "Elegoo Neptune 3 Plus 0.4 nozzle", + "Elegoo Neptune 3 Max 0.4 nozzle", + "Elegoo Neptune 4 (0.2 nozzle)", + "Elegoo Neptune 4 (0.4 nozzle)", + "Elegoo Neptune 4 (0.6 nozzle)", + "Elegoo Neptune 4 (0.8 nozzle)", + "Elegoo Neptune 4 Max (0.2 nozzle)", + "Elegoo Neptune 4 Max (0.4 nozzle)", + "Elegoo Neptune 4 Max (0.6 nozzle)", + "Elegoo Neptune 4 Max (0.8 nozzle)", + "Elegoo Neptune 4 Plus (0.2 nozzle)", + "Elegoo Neptune 4 Plus (0.4 nozzle)", + "Elegoo Neptune 4 Plus (0.6 nozzle)", + "Elegoo Neptune 4 Plus (0.8 nozzle)", + "Elegoo Neptune 4 Pro (0.2 nozzle)", + "Elegoo Neptune 4 Pro (0.4 nozzle)", + "Elegoo Neptune 4 Pro (0.6 nozzle)", + "Elegoo Neptune 4 Pro (0.8 nozzle)" + ] } diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json index eb6226db69..318eb4a1f3 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json @@ -50,5 +50,32 @@ ], "overhang_fan_speed": [ "30" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json index 31827e04c2..87c1ead4d4 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json @@ -50,5 +50,32 @@ ], "overhang_fan_speed": [ "28" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json index 480aa22396..48728018c8 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json @@ -65,5 +65,32 @@ ], "temperature_vitrification": [ "90" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json index da00880373..6c42d5533d 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json @@ -59,5 +59,32 @@ ], "nozzle_temperature_range_low": [ "230" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json index f3121fe45d..5f426a270a 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json @@ -35,5 +35,32 @@ ], "nozzle_temperature_range_low": [ "210" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json index 9f28df73ab..bf85ee98d3 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json @@ -62,5 +62,32 @@ ], "temperature_vitrification": [ "90" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js index 41f014c918..cdb00f26c8 100644 --- a/resources/web/guide/22/22.js +++ b/resources/web/guide/22/22.js @@ -138,7 +138,8 @@ function SortUI() //let bCheck=$("#MachineList input:first").prop("checked"); if( fModel=='') { - bFind=true; + // Orca: hide + bFind=false; } else { From 99a0facfb3a5c9b4e661e536825c08393053cb53 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 6 Jan 2025 20:56:07 +0800 Subject: [PATCH 035/100] Check missing `compatible_printers` error --- src/libslic3r/Preset.cpp | 1 + src/libslic3r/PresetBundle.cpp | 20 ++++++++++++++++++++ src/libslic3r/PresetBundle.hpp | 7 +------ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index d6596b2fb9..1ed6d07ad8 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1174,6 +1174,7 @@ void PresetCollection::load_presets( << "Error in a preset file: The preset \"" << preset.file << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; } + preset.loaded = true; //BBS: add some workaround for previous incorrect settings if ((!preset.setting_id.empty())&&(preset.setting_id == preset.base_id)) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index ae18f5f810..039930c387 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4190,4 +4190,24 @@ void PresetBundle::set_default_suppressed(bool default_suppressed) printers.set_default_suppressed(default_suppressed); } +bool PresetBundle::has_errors() const +{ + if (m_errors != 0 || printers.m_errors != 0 || filaments.m_errors != 0 || prints.m_errors != 0) + return true; + + bool has_errors = false; + // Orca: check if all filament presets have compatible_printers setting + for (auto& preset : filaments) { + if (!preset.is_system) + continue; + auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); + if (compatible_printers == nullptr || compatible_printers->values.empty()) { + has_errors = true; + BOOST_LOG_TRIVIAL(error) << "Filament preset \"" << preset.file << "\" is missing compatible_printers setting"; + } + } + + return has_errors; +} + } // namespace Slic3r diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 2937937920..da952dde27 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -274,12 +274,7 @@ public: } // Orca: for validation only - bool has_errors() const - { - if (m_errors != 0 || printers.m_errors != 0 || filaments.m_errors != 0 || prints.m_errors != 0) - return true; - return false; - } + bool has_errors() const; private: //std::pair load_system_presets(ForwardCompatibilitySubstitutionRule compatibility_rule); From 5b1bc5c0efd2a99c6e4212870ffe1f2139dc9fd3 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 6 Jan 2025 23:53:33 +0800 Subject: [PATCH 036/100] free mac space --- .github/workflows/build_orca.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 56548dc46a..75af2364cf 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -87,6 +87,14 @@ jobs: mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}} tree ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}} + - name: Free disk space + if: inputs.os == 'macos-14' + run: | + df -hI /dev/disk3s1s1 + sudo find /Applications -maxdepth 1 -type d -name "Xcode_*.app" ! -name "Xcode_15.4.app" -exec rm -rf {} + + sudo rm -rf ~/Library/Developer/CoreSimulator/Caches/* + df -hI /dev/disk3s1s1 + - name: Build slicer mac if: inputs.os == 'macos-14' working-directory: ${{ github.workspace }} From adba9a0280805f21325657f5ddea6ace2262a83e Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 7 Jan 2025 07:49:43 +0800 Subject: [PATCH 037/100] Update build_orca.yml --- .github/workflows/build_orca.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 75af2364cf..b31fdbcd70 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -81,11 +81,10 @@ jobs: - name: Install tools mac if: inputs.os == 'macos-14' run: | - brew install tree ninja libtool + brew install ninja libtool 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: Free disk space if: inputs.os == 'macos-14' From 9b68c695d73861eccfea18c6fcd9165b980008da Mon Sep 17 00:00:00 2001 From: whoseyoung <78847564+whoseyoung@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:46:02 +0800 Subject: [PATCH 038/100] Updated some configurations for the Geeetech M1 machine (#7481) Updated some configurations for the M1 machine Fixed an issue where incorrect parameters on the M1 machine caused slicing to fail. --- .../filament/Generic PETG @Geeetech.json | 62 +++++++++---------- .../filament/Generic PLA @Geeetech.json | 54 ++++++++-------- .../Generic PLA @Geeetech_FastSpeed.json | 16 ++--- .../filament/Generic PLA-CF @Geeetech.json | 62 +++++++++---------- .../filament/Generic PVA @Geeetech.json | 54 ++++++++-------- .../filament/Generic TPU @Geeetech.json | 62 +++++++++---------- .../machine/Geeetech M1 0.2 nozzle.json | 24 +++---- .../machine/Geeetech M1 0.4 nozzle.json | 24 +++---- .../machine/Geeetech M1 0.6 nozzle.json | 24 +++---- .../machine/Geeetech M1 0.8 nozzle.json | 24 +++---- .../Geeetech/machine/fdm_geeetech_common.json | 4 +- .../Geeetech/machine/fdm_machine_common.json | 3 +- .../0.08mm Extra Fine @Geeetech M1.json | 29 +++++---- ....08mm Optimal @Geeetech M1 0.2 nozzle.json | 29 +++++---- .../process/0.10mm Fine @Geeetech M1.json | 29 +++++---- ...10mm Standard @Geeetech M1 0.2 nozzle.json | 29 +++++---- .../0.12mm Draft @Geeetech M1 0.2 nozzle.json | 29 +++++---- ...m Extra Draft @Geeetech M1 0.2 nozzle.json | 29 +++++---- .../process/0.16mm Optimal @Geeetech M1.json | 29 +++++---- .../process/0.20mm Standard @Geeetech M1.json | 31 ++++++---- ....24mm Optimal @Geeetech M1 0.6 nozzle.json | 29 +++++---- .../process/0.25mm Draft @Geeetech M1.json | 31 ++++++---- ...30mm Standard @Geeetech M1 0.6 nozzle.json | 29 +++++---- .../0.36mm Draft @Geeetech M1 0.6 nozzle.json | 29 +++++---- ....36mm Optimal @Geeetech M1 0.8 nozzle.json | 29 +++++---- .../0.44mm Draft @Geeetech M1 0.8 nozzle.json | 29 +++++---- .../process/fdm_process_Geeetech_HS_0.20.json | 2 +- .../process/fdm_process_Geeetech_HS_0.25.json | 4 +- 28 files changed, 464 insertions(+), 365 deletions(-) diff --git a/resources/profiles/Geeetech/filament/Generic PETG @Geeetech.json b/resources/profiles/Geeetech/filament/Generic PETG @Geeetech.json index c5adbe3d50..b003156d2c 100644 --- a/resources/profiles/Geeetech/filament/Generic PETG @Geeetech.json +++ b/resources/profiles/Geeetech/filament/Generic PETG @Geeetech.json @@ -48,9 +48,9 @@ "Geeetech A10 Pro 0.6 nozzle", "Geeetech A10 Pro 0.8 nozzle", "Geeetech A20 0.2 nozzle", - "Geeetech A20 0.4 nozzle", - "Geeetech A20 0.6 nozzle", - "Geeetech A20 0.8 nozzle", + "Geeetech A20 0.4 nozzle", + "Geeetech A20 0.6 nozzle", + "Geeetech A20 0.8 nozzle", "Geeetech A30 Pro 0.2 nozzle", "Geeetech A30 Pro 0.4 nozzle", "Geeetech A30 Pro 0.6 nozzle", @@ -58,33 +58,33 @@ "Geeetech A10 M 0.4 nozzle", "Geeetech A20 M 0.4 nozzle", "Geeetech A30 M 0.4 nozzle", - "Geeetech A10 T 0.4 nozzle", - "Geeetech A20 T 0.4 nozzle", - "Geeetech A30 T 0.4 nozzle", - "Geeetech Mizar 0.2 nozzle", - "Geeetech Mizar 0.4 nozzle", - "Geeetech Mizar 0.6 nozzle", - "Geeetech Mizar 0.8 nozzle", - "Geeetech Mizar S 0.2 nozzle", - "Geeetech Mizar S 0.4 nozzle", - "Geeetech Mizar S 0.6 nozzle", - "Geeetech Mizar S 0.8 nozzle", - "Geeetech Mizar Pro 0.2 nozzle", - "Geeetech Mizar Pro 0.4 nozzle", - "Geeetech Mizar Pro 0.6 nozzle", - "Geeetech Mizar Pro 0.8 nozzle", - "Geeetech Mizar Max 0.2 nozzle", - "Geeetech Mizar Max 0.4 nozzle", - "Geeetech Mizar Max 0.6 nozzle", - "Geeetech Mizar Max 0.8 nozzle", - "Geeetech Mizar M 0.4 nozzle", - "Geeetech Thunder 0.2 nozzle", - "Geeetech Thunder 0.4 nozzle", - "Geeetech Thunder 0.6 nozzle", - "Geeetech Thunder 0.8 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech A10 T 0.4 nozzle", + "Geeetech A20 T 0.4 nozzle", + "Geeetech A30 T 0.4 nozzle", + "Geeetech Mizar 0.2 nozzle", + "Geeetech Mizar 0.4 nozzle", + "Geeetech Mizar 0.6 nozzle", + "Geeetech Mizar 0.8 nozzle", + "Geeetech Mizar S 0.2 nozzle", + "Geeetech Mizar S 0.4 nozzle", + "Geeetech Mizar S 0.6 nozzle", + "Geeetech Mizar S 0.8 nozzle", + "Geeetech Mizar Pro 0.2 nozzle", + "Geeetech Mizar Pro 0.4 nozzle", + "Geeetech Mizar Pro 0.6 nozzle", + "Geeetech Mizar Pro 0.8 nozzle", + "Geeetech Mizar Max 0.2 nozzle", + "Geeetech Mizar Max 0.4 nozzle", + "Geeetech Mizar Max 0.6 nozzle", + "Geeetech Mizar Max 0.8 nozzle", + "Geeetech Mizar M 0.4 nozzle", + "Geeetech Thunder 0.2 nozzle", + "Geeetech Thunder 0.4 nozzle", + "Geeetech Thunder 0.6 nozzle", + "Geeetech Thunder 0.8 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/filament/Generic PLA @Geeetech.json b/resources/profiles/Geeetech/filament/Generic PLA @Geeetech.json index 1c74088c4e..3606f07d2a 100644 --- a/resources/profiles/Geeetech/filament/Generic PLA @Geeetech.json +++ b/resources/profiles/Geeetech/filament/Generic PLA @Geeetech.json @@ -17,9 +17,9 @@ "Geeetech A10 Pro 0.6 nozzle", "Geeetech A10 Pro 0.8 nozzle", "Geeetech A20 0.2 nozzle", - "Geeetech A20 0.4 nozzle", - "Geeetech A20 0.6 nozzle", - "Geeetech A20 0.8 nozzle", + "Geeetech A20 0.4 nozzle", + "Geeetech A20 0.6 nozzle", + "Geeetech A20 0.8 nozzle", "Geeetech A30 Pro 0.2 nozzle", "Geeetech A30 Pro 0.4 nozzle", "Geeetech A30 Pro 0.6 nozzle", @@ -27,29 +27,29 @@ "Geeetech A10 M 0.4 nozzle", "Geeetech A20 M 0.4 nozzle", "Geeetech A30 M 0.4 nozzle", - "Geeetech A10 T 0.4 nozzle", - "Geeetech A20 T 0.4 nozzle", - "Geeetech A30 T 0.4 nozzle", - "Geeetech Mizar 0.2 nozzle", - "Geeetech Mizar 0.4 nozzle", - "Geeetech Mizar 0.6 nozzle", - "Geeetech Mizar 0.8 nozzle", - "Geeetech Mizar S 0.2 nozzle", - "Geeetech Mizar S 0.4 nozzle", - "Geeetech Mizar S 0.6 nozzle", - "Geeetech Mizar S 0.8 nozzle", - "Geeetech Mizar Pro 0.2 nozzle", - "Geeetech Mizar Pro 0.4 nozzle", - "Geeetech Mizar Pro 0.6 nozzle", - "Geeetech Mizar Pro 0.8 nozzle", - "Geeetech Mizar Max 0.2 nozzle", - "Geeetech Mizar Max 0.4 nozzle", - "Geeetech Mizar Max 0.6 nozzle", - "Geeetech Mizar Max 0.8 nozzle", - "Geeetech Mizar M 0.4 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech A10 T 0.4 nozzle", + "Geeetech A20 T 0.4 nozzle", + "Geeetech A30 T 0.4 nozzle", + "Geeetech Mizar 0.2 nozzle", + "Geeetech Mizar 0.4 nozzle", + "Geeetech Mizar 0.6 nozzle", + "Geeetech Mizar 0.8 nozzle", + "Geeetech Mizar S 0.2 nozzle", + "Geeetech Mizar S 0.4 nozzle", + "Geeetech Mizar S 0.6 nozzle", + "Geeetech Mizar S 0.8 nozzle", + "Geeetech Mizar Pro 0.2 nozzle", + "Geeetech Mizar Pro 0.4 nozzle", + "Geeetech Mizar Pro 0.6 nozzle", + "Geeetech Mizar Pro 0.8 nozzle", + "Geeetech Mizar Max 0.2 nozzle", + "Geeetech Mizar Max 0.4 nozzle", + "Geeetech Mizar Max 0.6 nozzle", + "Geeetech Mizar Max 0.8 nozzle", + "Geeetech Mizar M 0.4 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/filament/Generic PLA @Geeetech_FastSpeed.json b/resources/profiles/Geeetech/filament/Generic PLA @Geeetech_FastSpeed.json index 7d1d2e86e1..c1d3566c4e 100644 --- a/resources/profiles/Geeetech/filament/Generic PLA @Geeetech_FastSpeed.json +++ b/resources/profiles/Geeetech/filament/Generic PLA @Geeetech_FastSpeed.json @@ -19,13 +19,13 @@ "hot_plate_temp_initial_layer": ["65"], "textured_plate_temp_initial_layer": ["65"], "compatible_printers": [ - "Geeetech Thunder 0.2 nozzle", - "Geeetech Thunder 0.4 nozzle", - "Geeetech Thunder 0.6 nozzle", - "Geeetech Thunder 0.8 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech Thunder 0.2 nozzle", + "Geeetech Thunder 0.4 nozzle", + "Geeetech Thunder 0.6 nozzle", + "Geeetech Thunder 0.8 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/filament/Generic PLA-CF @Geeetech.json b/resources/profiles/Geeetech/filament/Generic PLA-CF @Geeetech.json index 6489909a08..3c07747800 100644 --- a/resources/profiles/Geeetech/filament/Generic PLA-CF @Geeetech.json +++ b/resources/profiles/Geeetech/filament/Generic PLA-CF @Geeetech.json @@ -24,9 +24,9 @@ "Geeetech A10 Pro 0.6 nozzle", "Geeetech A10 Pro 0.8 nozzle", "Geeetech A20 0.2 nozzle", - "Geeetech A20 0.4 nozzle", - "Geeetech A20 0.6 nozzle", - "Geeetech A20 0.8 nozzle", + "Geeetech A20 0.4 nozzle", + "Geeetech A20 0.6 nozzle", + "Geeetech A20 0.8 nozzle", "Geeetech A30 Pro 0.2 nozzle", "Geeetech A30 Pro 0.4 nozzle", "Geeetech A30 Pro 0.6 nozzle", @@ -34,33 +34,33 @@ "Geeetech A10 M 0.4 nozzle", "Geeetech A20 M 0.4 nozzle", "Geeetech A30 M 0.4 nozzle", - "Geeetech A10 T 0.4 nozzle", - "Geeetech A20 T 0.4 nozzle", - "Geeetech A30 T 0.4 nozzle", - "Geeetech Mizar 0.2 nozzle", - "Geeetech Mizar 0.4 nozzle", - "Geeetech Mizar 0.6 nozzle", - "Geeetech Mizar 0.8 nozzle", - "Geeetech Mizar S 0.2 nozzle", - "Geeetech Mizar S 0.4 nozzle", - "Geeetech Mizar S 0.6 nozzle", - "Geeetech Mizar S 0.8 nozzle", - "Geeetech Mizar Pro 0.2 nozzle", - "Geeetech Mizar Pro 0.4 nozzle", - "Geeetech Mizar Pro 0.6 nozzle", - "Geeetech Mizar Pro 0.8 nozzle", - "Geeetech Mizar Max 0.2 nozzle", - "Geeetech Mizar Max 0.4 nozzle", - "Geeetech Mizar Max 0.6 nozzle", - "Geeetech Mizar Max 0.8 nozzle", - "Geeetech Mizar M 0.4 nozzle", - "Geeetech Thunder 0.2 nozzle", - "Geeetech Thunder 0.4 nozzle", - "Geeetech Thunder 0.6 nozzle", - "Geeetech Thunder 0.8 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech A10 T 0.4 nozzle", + "Geeetech A20 T 0.4 nozzle", + "Geeetech A30 T 0.4 nozzle", + "Geeetech Mizar 0.2 nozzle", + "Geeetech Mizar 0.4 nozzle", + "Geeetech Mizar 0.6 nozzle", + "Geeetech Mizar 0.8 nozzle", + "Geeetech Mizar S 0.2 nozzle", + "Geeetech Mizar S 0.4 nozzle", + "Geeetech Mizar S 0.6 nozzle", + "Geeetech Mizar S 0.8 nozzle", + "Geeetech Mizar Pro 0.2 nozzle", + "Geeetech Mizar Pro 0.4 nozzle", + "Geeetech Mizar Pro 0.6 nozzle", + "Geeetech Mizar Pro 0.8 nozzle", + "Geeetech Mizar Max 0.2 nozzle", + "Geeetech Mizar Max 0.4 nozzle", + "Geeetech Mizar Max 0.6 nozzle", + "Geeetech Mizar Max 0.8 nozzle", + "Geeetech Mizar M 0.4 nozzle", + "Geeetech Thunder 0.2 nozzle", + "Geeetech Thunder 0.4 nozzle", + "Geeetech Thunder 0.6 nozzle", + "Geeetech Thunder 0.8 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/filament/Generic PVA @Geeetech.json b/resources/profiles/Geeetech/filament/Generic PVA @Geeetech.json index 45342caf6b..165abbe22d 100644 --- a/resources/profiles/Geeetech/filament/Generic PVA @Geeetech.json +++ b/resources/profiles/Geeetech/filament/Generic PVA @Geeetech.json @@ -24,9 +24,9 @@ "Geeetech A10 Pro 0.6 nozzle", "Geeetech A10 Pro 0.8 nozzle", "Geeetech A20 0.2 nozzle", - "Geeetech A20 0.4 nozzle", - "Geeetech A20 0.6 nozzle", - "Geeetech A20 0.8 nozzle", + "Geeetech A20 0.4 nozzle", + "Geeetech A20 0.6 nozzle", + "Geeetech A20 0.8 nozzle", "Geeetech A30 Pro 0.2 nozzle", "Geeetech A30 Pro 0.4 nozzle", "Geeetech A30 Pro 0.6 nozzle", @@ -34,29 +34,29 @@ "Geeetech A10 M 0.4 nozzle", "Geeetech A20 M 0.4 nozzle", "Geeetech A30 M 0.4 nozzle", - "Geeetech A10 T 0.4 nozzle", - "Geeetech A20 T 0.4 nozzle", - "Geeetech A30 T 0.4 nozzle", - "Geeetech Mizar 0.2 nozzle", - "Geeetech Mizar 0.4 nozzle", - "Geeetech Mizar 0.6 nozzle", - "Geeetech Mizar 0.8 nozzle", - "Geeetech Mizar S 0.2 nozzle", - "Geeetech Mizar S 0.4 nozzle", - "Geeetech Mizar S 0.6 nozzle", - "Geeetech Mizar S 0.8 nozzle", - "Geeetech Mizar Pro 0.2 nozzle", - "Geeetech Mizar Pro 0.4 nozzle", - "Geeetech Mizar Pro 0.6 nozzle", - "Geeetech Mizar Pro 0.8 nozzle", - "Geeetech Mizar Max 0.2 nozzle", - "Geeetech Mizar Max 0.4 nozzle", - "Geeetech Mizar Max 0.6 nozzle", - "Geeetech Mizar Max 0.8 nozzle", - "Geeetech Mizar M 0.4 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech A10 T 0.4 nozzle", + "Geeetech A20 T 0.4 nozzle", + "Geeetech A30 T 0.4 nozzle", + "Geeetech Mizar 0.2 nozzle", + "Geeetech Mizar 0.4 nozzle", + "Geeetech Mizar 0.6 nozzle", + "Geeetech Mizar 0.8 nozzle", + "Geeetech Mizar S 0.2 nozzle", + "Geeetech Mizar S 0.4 nozzle", + "Geeetech Mizar S 0.6 nozzle", + "Geeetech Mizar S 0.8 nozzle", + "Geeetech Mizar Pro 0.2 nozzle", + "Geeetech Mizar Pro 0.4 nozzle", + "Geeetech Mizar Pro 0.6 nozzle", + "Geeetech Mizar Pro 0.8 nozzle", + "Geeetech Mizar Max 0.2 nozzle", + "Geeetech Mizar Max 0.4 nozzle", + "Geeetech Mizar Max 0.6 nozzle", + "Geeetech Mizar Max 0.8 nozzle", + "Geeetech Mizar M 0.4 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/filament/Generic TPU @Geeetech.json b/resources/profiles/Geeetech/filament/Generic TPU @Geeetech.json index 06af7a9339..31f225a4df 100644 --- a/resources/profiles/Geeetech/filament/Generic TPU @Geeetech.json +++ b/resources/profiles/Geeetech/filament/Generic TPU @Geeetech.json @@ -15,9 +15,9 @@ "Geeetech A10 Pro 0.6 nozzle", "Geeetech A10 Pro 0.8 nozzle", "Geeetech A20 0.2 nozzle", - "Geeetech A20 0.4 nozzle", - "Geeetech A20 0.6 nozzle", - "Geeetech A20 0.8 nozzle", + "Geeetech A20 0.4 nozzle", + "Geeetech A20 0.6 nozzle", + "Geeetech A20 0.8 nozzle", "Geeetech A30 Pro 0.2 nozzle", "Geeetech A30 Pro 0.4 nozzle", "Geeetech A30 Pro 0.6 nozzle", @@ -25,33 +25,33 @@ "Geeetech A10 M 0.4 nozzle", "Geeetech A20 M 0.4 nozzle", "Geeetech A30 M 0.4 nozzle", - "Geeetech A10 T 0.4 nozzle", - "Geeetech A20 T 0.4 nozzle", - "Geeetech A30 T 0.4 nozzle", - "Geeetech Mizar 0.2 nozzle", - "Geeetech Mizar 0.4 nozzle", - "Geeetech Mizar 0.6 nozzle", - "Geeetech Mizar 0.8 nozzle", - "Geeetech Mizar S 0.2 nozzle", - "Geeetech Mizar S 0.4 nozzle", - "Geeetech Mizar S 0.6 nozzle", - "Geeetech Mizar S 0.8 nozzle", - "Geeetech Mizar Pro 0.2 nozzle", - "Geeetech Mizar Pro 0.4 nozzle", - "Geeetech Mizar Pro 0.6 nozzle", - "Geeetech Mizar Pro 0.8 nozzle", - "Geeetech Mizar Max 0.2 nozzle", - "Geeetech Mizar Max 0.4 nozzle", - "Geeetech Mizar Max 0.6 nozzle", - "Geeetech Mizar Max 0.8 nozzle", - "Geeetech Mizar M 0.4 nozzle", - "Geeetech Thunder 0.2 nozzle", - "Geeetech Thunder 0.4 nozzle", - "Geeetech Thunder 0.6 nozzle", - "Geeetech Thunder 0.8 nozzle", - "Geeetech M1 0.2 nozzle", - "Geeetech M1 0.4 nozzle", - "Geeetech M1 0.6 nozzle", - "Geeetech M1 0.8 nozzle" + "Geeetech A10 T 0.4 nozzle", + "Geeetech A20 T 0.4 nozzle", + "Geeetech A30 T 0.4 nozzle", + "Geeetech Mizar 0.2 nozzle", + "Geeetech Mizar 0.4 nozzle", + "Geeetech Mizar 0.6 nozzle", + "Geeetech Mizar 0.8 nozzle", + "Geeetech Mizar S 0.2 nozzle", + "Geeetech Mizar S 0.4 nozzle", + "Geeetech Mizar S 0.6 nozzle", + "Geeetech Mizar S 0.8 nozzle", + "Geeetech Mizar Pro 0.2 nozzle", + "Geeetech Mizar Pro 0.4 nozzle", + "Geeetech Mizar Pro 0.6 nozzle", + "Geeetech Mizar Pro 0.8 nozzle", + "Geeetech Mizar Max 0.2 nozzle", + "Geeetech Mizar Max 0.4 nozzle", + "Geeetech Mizar Max 0.6 nozzle", + "Geeetech Mizar Max 0.8 nozzle", + "Geeetech Mizar M 0.4 nozzle", + "Geeetech Thunder 0.2 nozzle", + "Geeetech Thunder 0.4 nozzle", + "Geeetech Thunder 0.6 nozzle", + "Geeetech Thunder 0.8 nozzle", + "Geeetech M1 0.2 nozzle", + "Geeetech M1 0.4 nozzle", + "Geeetech M1 0.6 nozzle", + "Geeetech M1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Geeetech/machine/Geeetech M1 0.2 nozzle.json b/resources/profiles/Geeetech/machine/Geeetech M1 0.2 nozzle.json index d3355efe9a..3e5bb81c6e 100644 --- a/resources/profiles/Geeetech/machine/Geeetech M1 0.2 nozzle.json +++ b/resources/profiles/Geeetech/machine/Geeetech M1 0.2 nozzle.json @@ -15,19 +15,19 @@ "0.2" ], "extruder_type": [ - "Direct" - ], + "Direct Drive" + ], "machine_max_acceleration_e": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_extruding": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_retracting": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_travel": [ "3000", @@ -76,7 +76,7 @@ "machine_max_jerk_z": [ "3", "3" - ], + ], "max_layer_height": [ "0.14" ], @@ -91,7 +91,7 @@ ], "deretraction_speed": [ "40" - ], + ], "printable_area": [ "0x0", "105x0", @@ -102,8 +102,8 @@ "retract_lift_below":[ "95" ], - "machine_start_gcode": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "machine_start_gcode": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors\nM221 S100;Slicer Flow recovery 100%\nM220 S100 ;Set Feedrate recovery 100%\nM204 P3000.00 R3000.00 T3000.00", "nozzle_type": "brass", "auxiliary_fan": "0" } \ No newline at end of file diff --git a/resources/profiles/Geeetech/machine/Geeetech M1 0.4 nozzle.json b/resources/profiles/Geeetech/machine/Geeetech M1 0.4 nozzle.json index a3925678ba..04d69908c7 100644 --- a/resources/profiles/Geeetech/machine/Geeetech M1 0.4 nozzle.json +++ b/resources/profiles/Geeetech/machine/Geeetech M1 0.4 nozzle.json @@ -15,19 +15,19 @@ "0.4" ], "extruder_type": [ - "Direct" - ], + "Direct Drive" + ], "machine_max_acceleration_e": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_extruding": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_retracting": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_travel": [ "3000", @@ -76,7 +76,7 @@ "machine_max_jerk_z": [ "3", "3" - ], + ], "max_layer_height": [ "0.14" ], @@ -91,7 +91,7 @@ ], "deretraction_speed": [ "40" - ], + ], "max_layer_height": [ "0.3" ], @@ -108,8 +108,8 @@ "retract_lift_below":[ "95" ], - "machine_start_gcode": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "machine_start_gcode": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors\nM221 S100;Slicer Flow recovery 100%\nM220 S100 ;Set Feedrate recovery 100%\nM204 P3000.00 R3000.00 T3000.00", "nozzle_type": "brass", "auxiliary_fan": "0" } \ No newline at end of file diff --git a/resources/profiles/Geeetech/machine/Geeetech M1 0.6 nozzle.json b/resources/profiles/Geeetech/machine/Geeetech M1 0.6 nozzle.json index de834f01ae..b87332df04 100644 --- a/resources/profiles/Geeetech/machine/Geeetech M1 0.6 nozzle.json +++ b/resources/profiles/Geeetech/machine/Geeetech M1 0.6 nozzle.json @@ -15,19 +15,19 @@ "0.6" ], "extruder_type": [ - "Direct" - ], + "Direct Drive" + ], "machine_max_acceleration_e": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_extruding": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_retracting": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_travel": [ "3000", @@ -76,7 +76,7 @@ "machine_max_jerk_z": [ "3", "3" - ], + ], "max_layer_height": [ "0.14" ], @@ -91,7 +91,7 @@ ], "deretraction_speed": [ "40" - ], + ], "max_layer_height": [ "0.42" ], @@ -108,8 +108,8 @@ "retract_lift_below":[ "95" ], - "machine_start_gcode": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "machine_start_gcode": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors\nM221 S100;Slicer Flow recovery 100%\nM220 S100 ;Set Feedrate recovery 100%\nM204 P3000.00 R3000.00 T3000.00", "nozzle_type": "brass", "auxiliary_fan": "0" } \ No newline at end of file diff --git a/resources/profiles/Geeetech/machine/Geeetech M1 0.8 nozzle.json b/resources/profiles/Geeetech/machine/Geeetech M1 0.8 nozzle.json index 0505e1055d..8b4b0c9490 100644 --- a/resources/profiles/Geeetech/machine/Geeetech M1 0.8 nozzle.json +++ b/resources/profiles/Geeetech/machine/Geeetech M1 0.8 nozzle.json @@ -15,19 +15,19 @@ "0.8" ], "extruder_type": [ - "Direct" - ], + "Direct Drive" + ], "machine_max_acceleration_e": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_extruding": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_retracting": [ - "2000", - "2000" + "3000", + "3000" ], "machine_max_acceleration_travel": [ "3000", @@ -76,7 +76,7 @@ "machine_max_jerk_z": [ "3", "3" - ], + ], "max_layer_height": [ "0.14" ], @@ -91,7 +91,7 @@ ], "deretraction_speed": [ "40" - ], + ], "max_layer_height": [ "0.56" ], @@ -108,8 +108,8 @@ "retract_lift_below":[ "95" ], - "machine_start_gcode": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "machine_start_gcode": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S[first_layer_temperature] ; Set Hotend Temperature\nM140 S[first_layer_bed_temperature] ; set Bed Temperature\nM190 S[first_layer_bed_temperature] ; Wait for Bed Temperature\nM109 S[first_layer_temperature] ; wait for Hotend Temperature\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors\nM221 S100;Slicer Flow recovery 100%\nM220 S100 ;Set Feedrate recovery 100%\nM204 P3000.00 R3000.00 T3000.00", "nozzle_type": "brass", "auxiliary_fan": "0" } \ No newline at end of file diff --git a/resources/profiles/Geeetech/machine/fdm_geeetech_common.json b/resources/profiles/Geeetech/machine/fdm_geeetech_common.json index 840813efb5..7f21963b54 100644 --- a/resources/profiles/Geeetech/machine/fdm_geeetech_common.json +++ b/resources/profiles/Geeetech/machine/fdm_geeetech_common.json @@ -80,7 +80,8 @@ "0.08" ], "printable_height": "250", - "extruder_clearance_radius": "47", + "extruder_clearance_max_radius": "47", + "extruder_clearance_dist_to_rod": "24", "extruder_clearance_height_to_rod": "34", "extruder_clearance_height_to_lid": "34", "printer_settings_id": "", @@ -137,5 +138,4 @@ "support_multi_bed_types": "1", "auxiliary_fan": "0", "z_hop_types": "Normal Lift" - } diff --git a/resources/profiles/Geeetech/machine/fdm_machine_common.json b/resources/profiles/Geeetech/machine/fdm_machine_common.json index 85543a5500..fb4fff3f14 100644 --- a/resources/profiles/Geeetech/machine/fdm_machine_common.json +++ b/resources/profiles/Geeetech/machine/fdm_machine_common.json @@ -70,7 +70,8 @@ "0.08" ], "printable_height": "250", - "extruder_clearance_radius": "65", + "extruder_clearance_max_radius": "65", + "extruder_clearance_dist_to_rod": "33", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", "nozzle_diameter": [ diff --git a/resources/profiles/Geeetech/process/0.08mm Extra Fine @Geeetech M1.json b/resources/profiles/Geeetech/process/0.08mm Extra Fine @Geeetech M1.json index ae615d2440..dec4d5444f 100644 --- a/resources/profiles/Geeetech/process/0.08mm Extra Fine @Geeetech M1.json +++ b/resources/profiles/Geeetech/process/0.08mm Extra Fine @Geeetech M1.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_038", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "80", - "inner_wall_speed": "100", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "80", + "inner_wall_speed": "100", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.4 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.08mm Optimal @Geeetech M1 0.2 nozzle.json b/resources/profiles/Geeetech/process/0.08mm Optimal @Geeetech M1 0.2 nozzle.json index 594fc8012d..a4c5432767 100644 --- a/resources/profiles/Geeetech/process/0.08mm Optimal @Geeetech M1 0.2 nozzle.json +++ b/resources/profiles/Geeetech/process/0.08mm Optimal @Geeetech M1 0.2 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_039", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "150", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.2 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.10mm Fine @Geeetech M1.json b/resources/profiles/Geeetech/process/0.10mm Fine @Geeetech M1.json index 1efa2662eb..a2936435f6 100644 --- a/resources/profiles/Geeetech/process/0.10mm Fine @Geeetech M1.json +++ b/resources/profiles/Geeetech/process/0.10mm Fine @Geeetech M1.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_040", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "60", - "inner_wall_speed": "100", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "60", + "inner_wall_speed": "100", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.4 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.10mm Standard @Geeetech M1 0.2 nozzle.json b/resources/profiles/Geeetech/process/0.10mm Standard @Geeetech M1 0.2 nozzle.json index c4bad28264..1f4f85d03d 100644 --- a/resources/profiles/Geeetech/process/0.10mm Standard @Geeetech M1 0.2 nozzle.json +++ b/resources/profiles/Geeetech/process/0.10mm Standard @Geeetech M1 0.2 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_041", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "120", - "sparse_infill_speed": "150", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "120", + "sparse_infill_speed": "150", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.2 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.12mm Draft @Geeetech M1 0.2 nozzle.json b/resources/profiles/Geeetech/process/0.12mm Draft @Geeetech M1 0.2 nozzle.json index 4b937acd8b..3429a023bf 100644 --- a/resources/profiles/Geeetech/process/0.12mm Draft @Geeetech M1 0.2 nozzle.json +++ b/resources/profiles/Geeetech/process/0.12mm Draft @Geeetech M1 0.2 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_042", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "80", - "inner_wall_speed": "120", - "sparse_infill_speed": "150", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "80", + "inner_wall_speed": "120", + "sparse_infill_speed": "150", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.2 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.14mm Extra Draft @Geeetech M1 0.2 nozzle.json b/resources/profiles/Geeetech/process/0.14mm Extra Draft @Geeetech M1 0.2 nozzle.json index 780a01e420..90b467804b 100644 --- a/resources/profiles/Geeetech/process/0.14mm Extra Draft @Geeetech M1 0.2 nozzle.json +++ b/resources/profiles/Geeetech/process/0.14mm Extra Draft @Geeetech M1 0.2 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_043", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "80", - "inner_wall_speed": "120", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "80", + "inner_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.2 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.16mm Optimal @Geeetech M1.json b/resources/profiles/Geeetech/process/0.16mm Optimal @Geeetech M1.json index 492fcd23d9..b830948602 100644 --- a/resources/profiles/Geeetech/process/0.16mm Optimal @Geeetech M1.json +++ b/resources/profiles/Geeetech/process/0.16mm Optimal @Geeetech M1.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_044", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "60", - "inner_wall_speed": "100", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "60", + "inner_wall_speed": "100", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.4 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.20mm Standard @Geeetech M1.json b/resources/profiles/Geeetech/process/0.20mm Standard @Geeetech M1.json index b89706c692..c2527b022a 100644 --- a/resources/profiles/Geeetech/process/0.20mm Standard @Geeetech M1.json +++ b/resources/profiles/Geeetech/process/0.20mm Standard @Geeetech M1.json @@ -12,22 +12,29 @@ "inner_wall_line_width": "0.40", "internal_solid_infill_line_width": "0.40", "support_line_width": "0.38", - "top_surface_line_width": "0.40", - "initial_layer_speed": "30", + "top_surface_line_width": "0.40", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "50", - "inner_wall_speed": "80", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "50", + "inner_wall_speed": "80", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.4 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.24mm Optimal @Geeetech M1 0.6 nozzle.json b/resources/profiles/Geeetech/process/0.24mm Optimal @Geeetech M1 0.6 nozzle.json index 8d76f75832..59e1e6f9db 100644 --- a/resources/profiles/Geeetech/process/0.24mm Optimal @Geeetech M1 0.6 nozzle.json +++ b/resources/profiles/Geeetech/process/0.24mm Optimal @Geeetech M1 0.6 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_045", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "50", - "inner_wall_speed": "80", - "sparse_infill_speed": "100", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "50", + "inner_wall_speed": "80", + "sparse_infill_speed": "100", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.6 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.25mm Draft @Geeetech M1.json b/resources/profiles/Geeetech/process/0.25mm Draft @Geeetech M1.json index 46dd14e7ec..1abfa86a35 100644 --- a/resources/profiles/Geeetech/process/0.25mm Draft @Geeetech M1.json +++ b/resources/profiles/Geeetech/process/0.25mm Draft @Geeetech M1.json @@ -12,22 +12,29 @@ "inner_wall_line_width": "0.40", "internal_solid_infill_line_width": "0.40", "support_line_width": "0.38", - "top_surface_line_width": "0.40", - "initial_layer_speed": "30", + "top_surface_line_width": "0.40", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "50", - "inner_wall_speed": "80", - "sparse_infill_speed": "100", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "50", + "inner_wall_speed": "80", + "sparse_infill_speed": "100", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.4 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.30mm Standard @Geeetech M1 0.6 nozzle.json b/resources/profiles/Geeetech/process/0.30mm Standard @Geeetech M1 0.6 nozzle.json index 4ca4de9516..4c0b0cf9e5 100644 --- a/resources/profiles/Geeetech/process/0.30mm Standard @Geeetech M1 0.6 nozzle.json +++ b/resources/profiles/Geeetech/process/0.30mm Standard @Geeetech M1 0.6 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_048", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "150", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.6 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.36mm Draft @Geeetech M1 0.6 nozzle.json b/resources/profiles/Geeetech/process/0.36mm Draft @Geeetech M1 0.6 nozzle.json index efe67bed36..2ec0a1f6eb 100644 --- a/resources/profiles/Geeetech/process/0.36mm Draft @Geeetech M1 0.6 nozzle.json +++ b/resources/profiles/Geeetech/process/0.36mm Draft @Geeetech M1 0.6 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_049", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "150", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.6 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.36mm Optimal @Geeetech M1 0.8 nozzle.json b/resources/profiles/Geeetech/process/0.36mm Optimal @Geeetech M1 0.8 nozzle.json index fed334ec70..d56a499e0d 100644 --- a/resources/profiles/Geeetech/process/0.36mm Optimal @Geeetech M1 0.8 nozzle.json +++ b/resources/profiles/Geeetech/process/0.36mm Optimal @Geeetech M1 0.8 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_050", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "150", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.8 nozzle" ] diff --git a/resources/profiles/Geeetech/process/0.44mm Draft @Geeetech M1 0.8 nozzle.json b/resources/profiles/Geeetech/process/0.44mm Draft @Geeetech M1 0.8 nozzle.json index 9221f9f41f..90f03d0c2a 100644 --- a/resources/profiles/Geeetech/process/0.44mm Draft @Geeetech M1 0.8 nozzle.json +++ b/resources/profiles/Geeetech/process/0.44mm Draft @Geeetech M1 0.8 nozzle.json @@ -5,21 +5,28 @@ "from": "system", "setting_id": "GP_Geeetech_051", "instantiation": "true", - "initial_layer_speed": "30", + "initial_layer_speed": "30", "initial_layer_infill_speed": "50", - "outer_wall_speed": "100", - "inner_wall_speed": "150", - "sparse_infill_speed": "120", - "internal_solid_infill_speed":"100", - "top_surface_speed": "50", - "gap_infill_speed": "80", - "travel_speed": "200", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "sparse_infill_speed": "120", + "internal_solid_infill_speed":"100", + "top_surface_speed": "50", + "gap_infill_speed": "80", + "travel_speed": "200", "default_acceleration": "2000", - "outer_wall_acceleration": "1500", - "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "3000", "initial_layer_acceleration": "500", - "top_surface_acceleration": "2000", + "top_surface_acceleration": "2000", "travel_acceleration": "3000", + "default_jerk": "10", + "initial_layer_jerk": "10", + "outer_wall_jerk": "10", + "infill_jerk": "10", + "travel_jerk": "10", + "inner_wall_jerk": "10", + "top_surface_jerk": "10", "compatible_printers": [ "Geeetech M1 0.8 nozzle" ] diff --git a/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.20.json b/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.20.json index eac0c76c8e..a5d79fd99c 100644 --- a/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.20.json +++ b/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.20.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "layer_height": "0.20", - "wall_loops": "2", + "wall_loops": "2", "bottom_shell_layers": "5", "elefant_foot_compensation": "0.15", "top_shell_layers": "5", diff --git a/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.25.json b/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.25.json index 36f90fca54..a576c234af 100644 --- a/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.25.json +++ b/resources/profiles/Geeetech/process/fdm_process_Geeetech_HS_0.25.json @@ -5,8 +5,8 @@ "from": "system", "instantiation": "false", "layer_height": "0.25", - "wall_loops": "2", - "initial_layer_print_height": "0.3", + "wall_loops": "2", + "initial_layer_print_height": "0.3", "elefant_foot_compensation": "0.15", "top_surface_line_width": "0.45", "top_shell_thickness": "1.0", From a96aad1fda09945eb3e93c3f68ca534d3840a7da Mon Sep 17 00:00:00 2001 From: Bhall338 <23674868+brandonfhall@users.noreply.github.com> Date: Tue, 7 Jan 2025 09:53:14 -0500 Subject: [PATCH 039/100] 7607 k2plus filament change gcode (#7713) * added change g-code * adjusted change_filament_gcode for all k2 profiles * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * removed extra space on new line characters. to exeactly match creality print * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * disabled filamanet ramming and cleared Single Extruder Paramaters * Merge branch '7607-k2plus-filament-change-gcode' of https://github.com/brandonfhall/OrcaSlicer into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode * Merge branch 'main' into 7607-k2plus-filament-change-gcode --- .../Creality/machine/Creality K2 Plus 0.2 nozzle.json | 6 ++++++ .../Creality/machine/Creality K2 Plus 0.4 nozzle.json | 6 ++++++ .../Creality/machine/Creality K2 Plus 0.6 nozzle.json | 6 ++++++ .../Creality/machine/Creality K2 Plus 0.8 nozzle.json | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json index b88686c8c2..dccdf656fa 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json @@ -108,6 +108,11 @@ "deretraction_speed": [ "40" ], + "enable_filament_ramming": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "parking_pos_retraction": "0", + "extra_loading_move": "0", "extruder_clearance_height_to_lid": "118", "extruder_clearance_height_to_rod": "24", "extruder_clearance_radius": "64", @@ -125,6 +130,7 @@ "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", + "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", "thumbnails_format":"PNG", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json index 68417eebeb..0b86c46be8 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json @@ -108,6 +108,11 @@ "deretraction_speed": [ "40" ], + "enable_filament_ramming": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "parking_pos_retraction": "0", + "extra_loading_move": "0", "extruder_clearance_height_to_lid": "118", "extruder_clearance_height_to_rod": "24", "extruder_clearance_radius": "64", @@ -125,6 +130,7 @@ "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", + "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", "thumbnails_format":"PNG", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json index 2ad329e24e..ab0c9db164 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json @@ -108,6 +108,11 @@ "deretraction_speed": [ "40" ], + "enable_filament_ramming": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "parking_pos_retraction": "0", + "extra_loading_move": "0", "extruder_clearance_height_to_lid": "118", "extruder_clearance_height_to_rod": "24", "extruder_clearance_radius": "64", @@ -125,6 +130,7 @@ "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", + "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", "thumbnails_format": "PNG", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json index 2461c90711..72b061807a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json @@ -108,6 +108,11 @@ "deretraction_speed": [ "40" ], + "enable_filament_ramming": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "parking_pos_retraction": "0", + "extra_loading_move": "0", "extruder_clearance_height_to_lid": "118", "extruder_clearance_height_to_rod": "24", "extruder_clearance_radius": "64", @@ -125,6 +130,7 @@ "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", + "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", "thumbnails_format":"PNG", "thumbnails": [ From b73d3866b51130ff1cc04232a93e6461181b8dee Mon Sep 17 00:00:00 2001 From: Trent Bartlem Date: Wed, 8 Jan 2025 00:58:29 +1000 Subject: [PATCH 040/100] add dependabot (#7752) * Create dependabot.yml * Update dependabot.yml --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..4dc6a16243 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +updates: + # Only care about major updates to github actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + ignore: # Only suggest major updates for built-in actions + - dependency-name: "github/*" + update-types: ["version-update:semver-patch", "version-update:semver-minor"] + - dependency-name: "actions/*" + update-types: ["version-update:semver-patch", "version-update:semver-minor"] + # Docker dependencies + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "monthly" + # no support for c/cpp From 8da0d1bd869a1d111ff1c35ad961f274a660e002 Mon Sep 17 00:00:00 2001 From: pwnept <34002935+pwnept@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:09:24 +0700 Subject: [PATCH 041/100] Fix printer gcode setting bed temp to nozzle temp Raise3D Pro3 (#7756) * Fix start gcode setting bed temp to nozzle temp for Raise3D Pro3 Plus left nozzle Edited Raise3D Pro3 Plus 0.4 nozzle (Left).json Replaced S{nozzle_temperature_initial_layer[0]} with S[bed_temperature_initial_layer_single] for M140 and M190 * Fix start gcode setting bed temp to nozzle temp for Raise3D Pro3 left nozzle Edited Raise3D Pro3 0.4 nozzle (Left).json Replaced S{nozzle_temperature_initial_layer[0]} with S[bed_temperature_initial_layer_single] for M140 and M190 * Update Raise3D Pro3 Plus 0.4 nozzle (Left).json --------- Co-authored-by: SoftFever --- .../Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json | 4 ++-- .../Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json index a2d1765812..b112eea0d5 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json @@ -143,10 +143,10 @@ "default_filament_profile": [ "Raise3D Generic PLA" ], - "machine_start_gcode": ";Bounding Box: {digits(first_layer_print_min[0],0,2)} {if(first_layer_print_max[0]>300)}{300}{else}{digits(first_layer_print_max[0],0,2)}{endif} {digits(first_layer_print_min[1],0,2)} {if(first_layer_print_max[1]>300)}{300}{else}{digits(first_layer_print_max[1],0,2)}{endif}\n\nM104 T0 S{nozzle_temperature_initial_layer[0] - 20} ; raise left extruder temp\nM140 S{nozzle_temperature_initial_layer[0]} ; raise bed temp\nM190 S{nozzle_temperature_initial_layer[0]} ; wait for bed temp\nM109 T0 S{nozzle_temperature_initial_layer[0] - 20} ; wait for left extruder temp\nM104 T0 S[nozzle_temperature_initial_layer] ; set left extruder temp\nM109 T0 S[nozzle_temperature_initial_layer] ; wait for left extruder temp\nT0\nG21\nG90\nM82\nM107\nM106 P2 S0\nG1 Z0.3 F500\nG92 E0\nG1 Z0.3 F400\nG1 X100 Y{random(2,8)} F1000\nG1 X170 Y{random(2,8)} E15 F200\nG1 Z5 E15 F200\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 Y30 F2000 ; move away from purge line\nG1 X{(first_layer_print_max[0] + first_layer_print_min[0])/2} Y{(first_layer_print_max[1] + first_layer_print_min[1])/2} Z{initial_layer_print_height} ; move to center of print\nM117 Printing...\nM1001", + "machine_start_gcode": ";Bounding Box: {digits(first_layer_print_min[0],0,2)} {if(first_layer_print_max[0]>300)}{300}{else}{digits(first_layer_print_max[0],0,2)}{endif} {digits(first_layer_print_min[1],0,2)} {if(first_layer_print_max[1]>300)}{300}{else}{digits(first_layer_print_max[1],0,2)}{endif}\n\nM104 T0 S{nozzle_temperature_initial_layer[0] - 20} ; raise left extruder temp\nM140 S[bed_temperature_initial_layer_single] ; raise bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 T0 S{nozzle_temperature_initial_layer[0] - 20} ; wait for left extruder temp\nM104 T0 S[nozzle_temperature_initial_layer] ; set left extruder temp\nM109 T0 S[nozzle_temperature_initial_layer] ; wait for left extruder temp\nT0\nG21\nG90\nM82\nM107\nM106 P2 S0\nG1 Z0.3 F500\nG92 E0\nG1 Z0.3 F400\nG1 X100 Y{random(2,8)} F1000\nG1 X170 Y{random(2,8)} E15 F200\nG1 Z5 E15 F200\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 Y30 F2000 ; move away from purge line\nG1 X{(first_layer_print_max[0] + first_layer_print_min[0])/2} Y{(first_layer_print_max[1] + first_layer_print_min[1])/2} Z{initial_layer_print_height} ; move to center of print\nM117 Printing...\nM1001", "machine_end_gcode": "M1002\nM221 T0 S100\nM104 S0\nM140 S0\nM107\nM106 P2 S0\nG91\nG1 E-1 F300\nG1 Z+0.5 E-5 X-20 Y-20 F9000.00\nG28 X0 Y0\nM84\nG90\n", "toolchange_gcode": "; layer [layer_num] tool change", "before_layer_change_gcode": "; before layer [layer_num] change\nG92 E0\n{if layer_z <= initial_layer_print_height + layer_height * 2}\nM109 T0 S{nozzle_temperature_initial_layer[0]}\nM140 S[bed_temperature_initial_layer_single]\n{else}\nM109 T0 S{nozzle_temperature[0]}\nM140 S{bed_temperature[0]}\n{endif}\n{if (filament_type[0] ==\"PLA\" or filament_type[0] ==\"PETG\")}\n{if layer_z >= initial_layer_print_height + layer_height * 2}\nM106 P2 S150\n{elsif layer_z >= initial_layer_print_height + layer_height * 1}\nM106 P2 S100\n{else}\nM106 P2 S0\n{endif}\n{endif}", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json index de1b5a6412..bdc1583d90 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json @@ -143,10 +143,10 @@ "default_filament_profile": [ "Raise3D Generic PLA" ], - "machine_start_gcode": ";Bounding Box: {digits(first_layer_print_min[0],0,2)} {if(first_layer_print_max[0]>300)}{300}{else}{digits(first_layer_print_max[0],0,2)}{endif} {digits(first_layer_print_min[1],0,2)} {if(first_layer_print_max[1]>300)}{300}{else}{digits(first_layer_print_max[1],0,2)}{endif}\n\nM104 T0 S{nozzle_temperature_initial_layer[0] - 20} ; raise left extruder temp\nM140 S{nozzle_temperature_initial_layer[0]} ; raise bed temp\nM190 S{nozzle_temperature_initial_layer[0]} ; wait for bed temp\nM109 T0 S{nozzle_temperature_initial_layer[0] - 20} ; wait for left extruder temp\nM104 T0 S[nozzle_temperature_initial_layer] ; set left extruder temp\nM109 T0 S[nozzle_temperature_initial_layer] ; wait for left extruder temp\nT0\nG21\nG90\nM82\nM107\nM106 P2 S0\nG1 Z0.3 F500\nG92 E0\nG1 Z0.3 F400\nG1 X100 Y{random(2,8)} F1000\nG1 X170 Y{random(2,8)} E15 F200\nG1 Z5 E15 F200\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 Y30 F2000 ; move away from purge line\nG1 X{(first_layer_print_max[0] + first_layer_print_min[0])/2} Y{(first_layer_print_max[1] + first_layer_print_min[1])/2} Z{initial_layer_print_height} ; move to center of print\nM117 Printing...\nM1001", + "machine_start_gcode": ";Bounding Box: {digits(first_layer_print_min[0],0,2)} {if(first_layer_print_max[0]>300)}{300}{else}{digits(first_layer_print_max[0],0,2)}{endif} {digits(first_layer_print_min[1],0,2)} {if(first_layer_print_max[1]>300)}{300}{else}{digits(first_layer_print_max[1],0,2)}{endif}\n\nM104 T0 S{nozzle_temperature_initial_layer[0] - 20} ; raise left extruder temp\nM140 S[bed_temperature_initial_layer_single] ; raise bed temp\nM190 S{bed_temperature_initial_layer_single} ; wait for bed temp\nM109 T0 S{nozzle_temperature_initial_layer[0] - 20} ; wait for left extruder temp\nM104 T0 S[nozzle_temperature_initial_layer] ; set left extruder temp\nM109 T0 S[nozzle_temperature_initial_layer] ; wait for left extruder temp\nT0\nG21\nG90\nM82\nM107\nM106 P2 S0\nG1 Z0.3 F500\nG92 E0\nG1 Z0.3 F400\nG1 X100 Y{random(2,8)} F1000\nG1 X170 Y{random(2,8)} E15 F200\nG1 Z5 E15 F200\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 Y30 F2000 ; move away from purge line\nG1 X{(first_layer_print_max[0] + first_layer_print_min[0])/2} Y{(first_layer_print_max[1] + first_layer_print_min[1])/2} Z{initial_layer_print_height} ; move to center of print\nM117 Printing...\nM1001", "machine_end_gcode": "M1002\nM221 T0 S100\nM104 S0\nM140 S0\nM107\nM106 P2 S0\nG91\nG1 E-1 F300\nG1 Z+0.5 E-5 X-20 Y-20 F9000.00\nG28 X0 Y0\nM84\nG90\n", "toolchange_gcode": "; layer [layer_num] tool change", "before_layer_change_gcode": "; before layer [layer_num] change\n{if layer_z <= initial_layer_print_height + layer_height * 2}\nM109 T0 S{nozzle_temperature_initial_layer[0]}\nM140 S[bed_temperature_initial_layer_single]\n{else}\nM109 T0 S{nozzle_temperature[0]}\nM140 S{bed_temperature[0]}\n{endif}\n{if (filament_type[0] ==\"PLA\" or filament_type[0] ==\"PETG\")}\n{if layer_z >= initial_layer_print_height + layer_height * 2}\nM106 P2 S150\n{elsif layer_z >= initial_layer_print_height + layer_height * 1}\nM106 P2 S100\n{else}\nM106 P2 S0\n{endif}\n{endif}", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0" -} \ No newline at end of file +} From 18547fa6a1316c83c071df534d0b78121b9b9d9b Mon Sep 17 00:00:00 2001 From: Carlos Francisco Caruncho Serrano Date: Tue, 7 Jan 2025 16:09:37 +0100 Subject: [PATCH 042/100] Small Spanish String Fixes (#7845) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * some changes * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Some fixes * More fixes * More fixes and improves * More fixes * Merge remote-tracking branch 'upstream/main' * Merge remote-tracking branch 'upstream/main' * Update OrcaSlicer_es.po * Merge branch 'main' of https://github.com/tadeu2/OrcaSlicer * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Merge remote-tracking branch 'upstream/main' into spanish_translation * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into spanish_translation * Merge remote-tracking branch 'upstream/main' into spanish_translation * Traducción español Beta 2.1.0 * Update text.js * Update OrcaSlicer_es.po Cambiado punto por coma * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Merge remote-tracking branch 'upstream/main' * Minor fix PR * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into spanish_translation * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Update Spanish Language * Updated strings * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Fixed Spanish Strings in English Fixed a lot of string whose are translations were english to english. * Some spanish strings improved * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Update Spanish Strings in RC * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into spanish_translation * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into Spanish_Translation * Update OrcaSlicer_es.po * Merge branch 'Spanish_Translation' * Update OrcaSlicer_es.po * Some fixes * More fixes and improves * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po Cambiado punto por coma --- localization/i18n/es/OrcaSlicer_es.po | 110 +++++++++++++++----------- 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 1538f94cd4..faac511fc7 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -5962,7 +5962,7 @@ msgid "Edit current plate name" msgstr "Editar el nombre de la bandeja actual" msgid "Move plate to the front" -msgstr "" +msgstr "Mover bandeja al frente" msgid "Customize current plate" msgstr "Personalizar bandeja actual" @@ -6343,7 +6343,7 @@ msgid "Slicing Plate %d" msgstr "Laminando bandeja %d" msgid "Please resolve the slicing errors and publish again." -msgstr "Por favor, resuelva los errores de corte y publique de nuevo." +msgstr "Por favor, resuelva los errores de laminado y publique de nuevo." msgid "" "Network Plug-in is not detected. Network related features are unavailable." @@ -7957,12 +7957,15 @@ msgstr "" "Bandeja Fría" msgid "Textured Cool plate" -msgstr "" +msgstr "Bandeja Fría Texturizada" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Textured Cool Plate" msgstr "" +"Temperatura de la cama cuando la placa fría está instalada. El valor 0 " +"significa que el filamento no se puede imprimir en la placa de refrigeración " +"texturizada" msgid "Engineering plate" msgstr "Bandeja de Ingeniería" @@ -9458,7 +9461,7 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" -"La altura de capa variable no es compatible con los soportes orgánicos." +"La altura de capa adaptativa no es compatible con los soportes orgánicos." msgid "" "Different nozzle diameters and different filament diameters may not work " @@ -9529,7 +9532,7 @@ msgid "" "layer height" msgstr "" "La torre de purga sólo se admite si todos los objetos tienen la misma altura " -"de capa variable" +"de capa adaptativa" msgid "Too small line width" msgstr "Ancho de línea demasiado pequeño" @@ -9721,8 +9724,8 @@ msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"Altura de corte para cada capa. Una altura de capa más pequeña significa más " -"precisión y más tiempo de impresión" +"Altura de laminado para cada capa. Una altura de capa más pequeña significa " +"más precisión y más tiempo de impresión" msgid "Printable height" msgstr "Altura imprimible" @@ -9873,6 +9876,9 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured Cool Plate" msgstr "" +"Temperatura de la cama para las capas excepto la inicial. El valor 0 " +"significa que el filamento no es compatible para imprimir en la placa fría " +"texturizada" msgid "" "Bed temperature for layers except the initial one. Value 0 means the " @@ -9914,6 +9920,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured Cool Plate" msgstr "" +"Temperatura de la capa inicial. El valor 0 significa que el filamento no es " +"compatible para imprimir en la placa fría texturizada" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -9942,16 +9950,16 @@ msgid "Bed types supported by the printer" msgstr "Tipos de cama que admite la impresora" msgid "Smooth Cool Plate" -msgstr "" +msgstr "Bandeja Fría Lisa" msgid "Engineering Plate" msgstr "Bandeja de Ingeniería" msgid "Smooth High Temp Plate" -msgstr "" +msgstr "Bandeja Lisa de Alta Temperatura" msgid "Textured Cool Plate" -msgstr "" +msgstr "Bandeja Fría Texturizada" msgid "First layer print sequence" msgstr "Secuencia de impresión de primera capa" @@ -10356,6 +10364,11 @@ msgid "" "When Detect overhang wall is not enabled, this option is ignored and " "reversal happens on every even layers regardless." msgstr "" +"Número de mm que debe tener el voladizo para que la inversión se considere " +"útil. Puede ser % of el ancho del perímetro.\n" +"El valor 0 permite la inversión en cada capa par.\n" +"Cuando Detectar voladizo de pared no está activado, esta opción se ignora y " +"la inversión se produce en todas las capas pares." msgid "Classic mode" msgstr "Modo clásico" @@ -13146,12 +13159,15 @@ msgid "Force a retraction when changes layer" msgstr "Forzar una retracción al cambiar de capa" msgid "Retract on top layer" -msgstr "" +msgstr "Retracción en la capa superior" msgid "" "Force a retraction on top layer. Disabling could prevent clog on very slow " "patterns with small movements, like Hilbert curve" msgstr "" +"Forzar una retracción en la capa superior. Desactivarlo podría evitar " +"atascos en patrones muy lentos con movimientos pequeños, como la curva de " +"Hilbert" msgid "Retraction Length" msgstr "Longitud de retracción" @@ -13667,9 +13683,9 @@ msgstr "" "significa que esta característica está desactivada.\n" "\n" "El uso de un valor distinto de cero es útil si la impresora está configurada " -"para imprimir sin una línea principal. El número final de bucles no se tiene " -"en cuenta al organizar o validar la distancia de los objetos. En este caso, " -"aumente el número de bucles." +"para imprimir sin una línea principal. \n" +"El número final de bucles no se tiene en cuenta al organizar o validar la " +"distancia de los objetos. En este caso, aumente el número de bucles." msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " @@ -13713,7 +13729,7 @@ msgid "" msgstr "" "El modo espiral suaviza los movimientos z del contorno exterior. Convierte " "un modelo sólido en una impresión de un solo perímetro con capas inferiores " -"sólidas. El modelo final generado no tiene costuras." +"sólidas. El modelo final generado no tiene costuras" msgid "Smooth Spiral" msgstr "Espiral Suave" @@ -14756,7 +14772,7 @@ msgstr "" "\"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. Se recomienda en la mayoría de las " -"impresoras. Por defecto está activada." +"impresoras. Por defecto está activada" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -14820,7 +14836,7 @@ msgstr "" "forma de cuña con un ángulo mayor que este ajuste no tendrá transiciones y " "no se imprimirán perímetros en el centro para rellenar el espacio restante. " "La reducción de este ajuste reduce el número y la longitud de estos " -"perímetros centrales, pero puede dejar huecos o sobreextruir." +"perímetros centrales, pero puede dejar huecos o sobreextruir" msgid "Wall distribution count" msgstr "Recuento de la distribución del perímetro" @@ -14846,7 +14862,7 @@ msgstr "" "sean más finas que este valor no se imprimirán, mientras que las " "características más gruesas que el Tamaño mínimo de la característica se " "ensancharán hasta el Ancho mínimo de perímetro. Se expresa en porcentaje " -"sobre el diámetro de la boquilla." +"sobre el diámetro de la boquilla" msgid "Minimum wall length" msgstr "Longitud mínima de perímetro" @@ -16142,10 +16158,10 @@ msgstr "" "final > inicio + paso)" msgid "Start retraction length: " -msgstr "Longitud de retracción inicial:" +msgstr "Longitud de retracción inicial: " msgid "End retraction length: " -msgstr "Longitud de retracción final:" +msgstr "Longitud de retracción final: " msgid "mm/mm" msgstr "mm/mm" @@ -17366,7 +17382,7 @@ msgid "" "consistency?" msgstr "" "Perímetro preciso. \n" -"¿Sabía que activar el perímetro precisa puede mejorar la precisión y la " +"¿Sabías que activar el perímetro precisa puede mejorar la precisión y la " "uniformidad de las capas?" #: resources/data/hints.ini: [hint:Sandwich mode] @@ -17387,7 +17403,7 @@ msgid "" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" "Temperatura de la cámara \n" -"¿Sabía que OrcaSlicer tiene la función de control de temperatura de cámara?" +"¿Sabías que OrcaSlicer tiene la función de control de temperatura de cámara?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -17405,7 +17421,7 @@ msgid "" "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 " +"¿Sabías que OrcaSlicer admite un ventilador auxiliar de refrigeración de " "piezas?" #: resources/data/hints.ini: [hint:Air filtration] @@ -17422,7 +17438,7 @@ msgid "" "You can turn on/off the G-code window by pressing the C key." msgstr "" "Ventana de G-Code \n" -"Puede activar/desactivar la ventana de G-Code pulsando la tecla C." +"Puedes activar/desactivar la ventana de G-Code pulsando la tecla C." #: resources/data/hints.ini: [hint:Switch workspaces] msgid "" @@ -17442,7 +17458,7 @@ msgid "" 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." +"operaciones de escenas 3D?." #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" @@ -17451,8 +17467,8 @@ msgid "" "the surface quality of your overhangs?" msgstr "" "Invertir en impar \n" -"Sabía que la función Invertir en impar puede mejorar " -"significativamente la calidad de la superficie de sus voladizos?" +"¿Sabías que la función Invertir en impar puede mejorar " +"significativamente la calidad de la superficie de los voladizos?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -17472,7 +17488,7 @@ msgid "" msgstr "" "Arreglar modelo \n" "¿Sabías que puedes arreglar un modelo 3D dañado para evitar muchos problemas " -"de corte en el sistema Windows?" +"de laminado en el sistema Windows?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -17550,7 +17566,7 @@ msgid "" "settings for each object/part?" msgstr "" "Tabla de parámetros de laminado\n" -"¿Sabía que puede ver todos los objetos/partes de una tabla y cambiar los " +"¿Sabías que puedes ver todos los objetos/partes de una tabla y cambiar los " "parámetros de cada objeto/parte?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] @@ -17584,10 +17600,10 @@ msgid "" "lower resolution STL. Give it a try!" msgstr "" "STEP\n" -"¿Sabías que puedes mejorar la calidad de impresión cortando un archivo STEP " +"¿Sabías que puedes mejorar la calidad de impresión laminando un archivo STEP " "en lugar de un STL?\n" -"Orca Slicer soporta el corte de archivos STEP, proporcionando resultados más " -"suaves que un STL de menor resolución. ¡Pruébalo!" +"Orca Slicer soporta el laminado de archivos STEP, proporcionando resultados " +"más suaves que un STL de menor resolución. ¡Pruébalo!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -17620,7 +17636,7 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" -"Divide tus impresiones en planchas\n" +"Divide tus impresiones en bandejas\n" "¿Sabías que puedes dividir un modelo con muchas piezas en bandejas " "individuales listas para imprimir? Esto simplificará el proceso de " "seguimiento de todas las piezas." @@ -17632,9 +17648,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Acelere su impresión con la altura de capa adaptativa\n" +"Acelere su impresión con la Altura Adaptable de Capa\n" "¿Sabías que puedes imprimir un modelo aún más rápido utilizando la opción " -"Altura de capa adaptable? ¡Compruébalo!" +"Altura Adaptable de Capa? ¡Compruébalo!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -17644,9 +17660,9 @@ msgid "" "model that actually need it." msgstr "" "Pintura de soportes\n" -"¿Sabías que puedes pintar la ubicación de los soportes? Esta función " -"facilita la colocación del material de soporte sólo en las secciones del " -"modelo que realmente lo necesitan." +"¿Sabías que puedes pintar los soportes en cualquier ubicación? Esta función " +"facilita la colocación de soportes sólo en las secciones donde realmente sea " +"necesario." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -17658,7 +17674,7 @@ msgstr "" "Diferentes tipos de soportes\n" "¿Sabías que puedes elegir entre varios tipos de soportes? Los soportes en " "forma de árbol son ideales para modelos orgánicos, ahorran filamento y " -"mejoran la velocidad de impresión. ¡Compruébalos!" +"mejoran la velocidad de impresión. ¡Compruébalo!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -17668,7 +17684,7 @@ msgid "" "the best results." msgstr "" "Impresión de filamento de seda\n" -"¿Sabías que el filamento de seda necesita una consideración especial para " +"¿Sabías que el filamento de seda necesita una configuración especial para " "imprimirlo con éxito? Se recomienda siempre una temperatura más alta y una " "velocidad más baja para obtener los mejores resultados." @@ -17678,8 +17694,8 @@ 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 "" -"Borde de adherencia para una mejor adherencia\n" -"¿Sabía que cuando los modelos de impresión tienen una pequeña interfaz de " +"Borde de adherencia\n" +"¿Sabías que cuando los modelos de impresión tienen una pequeña interfaz de " "contacto con la superficie de impresión, se recomienda utilizar un borde de " "adherencia?" @@ -17690,7 +17706,7 @@ msgid "" "one time?" msgstr "" "Establecer parámetros para varios objetos\n" -"¿Sabías que puedes establecer parámetros de corte para todos los objetos " +"¿Sabías que puedes establecer parámetros de laminado para todos los objetos " "seleccionados a la vez?" #: resources/data/hints.ini: [hint:Stack objects] @@ -17698,8 +17714,8 @@ msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Apilar objetos\n" -"¿Sabías que puedes apilar objetos como un todo?" +"Agrupar objetos\n" +"¿Sabías que puedes agrupar objetos como un todo?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -17730,8 +17746,8 @@ msgid "" "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 " +"¿Sabías que la apertura de la puerta de la impresora puede reducir la " +"probabilidad de obstrucción del extrusor / cabezal al imprimir filamento de " "baja temperatura con una temperatura más alta de la cubierta. Más " "información sobre esto en la Wiki." From f7ee8642e948b51020426845761054453d618aca Mon Sep 17 00:00:00 2001 From: kiniad <126398817+kiniad@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:14:24 +0100 Subject: [PATCH 043/100] Complete profile sets for Ratrig V-Core 4 - IDEX (#7855) * Update 0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json it's HYBRID not HYBIRD * Update 0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json it's HYBRID not HYBIRD * Update 0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json it's HYBRID not HYBIRD * Add files via upload Adding process files for the 0.8 nozzle * Add files via upload machine profiles for 0.8 nozzle * Update Ratrig.json Added support for 0.8.nozle * Add files via upload Added filament profile for the more and more popular PCTG * Update Ratrig.json Add filament PCTG * Update Ratrig.json Filament setting for big (>0.4) nozzles * Add files via upload Filament setting for big (>0.4) nozzles * Filament setting for big (>0.4) nozzles Filament setting for big (>0.4) nozzles * Optimized layer and extrusion values Optimized layer and extrusion values * New set of profiles for RatRig V-Core 4 - 400 IDEX New developed set of profiles for RatRig V-Core 4 - 400 IDEX with virtual copy and mirror printers (with appropriate smaller build plates and idex commands) * New set of profiles for RatRig V-Core 4 - 400 IDEX New developed set of profiles for RatRig V-Core 4 - 400 IDEX with virtual copy and mirror printers (with appropriate smaller build plates and idex commands) * New set of profiles for RatRig V-Core 4 - 400 IDEX New developed set of profiles for RatRig V-Core 4 - 400 IDEX with virtual copy and mirror printers (with appropriate smaller build plates and idex commands) * Profiles V-Core4 IDEX 300 + 500 Added profiles for Ratrig V-Core4 IDEX bedsize 300 and 500 * Profiles V-Core4 IDEX 300 + 500 Added profiles for Ratrig V-Core4 IDEX bedsize 300 and 500 * Complete profile sets for V-Core 4 - IDEX Now the profile sets for V-Core 4 IDEX - size 300+400+500, all with copy and mirror mode, are completed. (profiles are tested in real prints for V-Core 4 IDEX 400 including copy and mirror, 300+500 only calculated) * Complete profile sets for V-Core 4 - IDEX Now the profile sets for V-Core 4 IDEX - size 300+400+500, all with copy and mirror mode, are completed. (profiles are tested in real prints for V-Core 4 IDEX 400 including copy and mirror, 300+500 only calculated) * Updated Filament for large nozzles (>=0.6) Added missing TPU for big nozzles --------- Co-authored-by: SoftFever --- resources/profiles/Ratrig.json | 1049 ++++++++++------- ...tRig V-Core 4 IDEX 300 COPY MODE_cover.png | Bin 0 -> 36499 bytes ...ig V-Core 4 IDEX 300 MIRROR MODE_cover.png | Bin 0 -> 36499 bytes .../Ratrig/RatRig V-Core 4 IDEX 300_cover.png | Bin 0 -> 36499 bytes ...tRig V-Core 4 IDEX 400 COPY MODE_cover.png | Bin 0 -> 36499 bytes ...ig V-Core 4 IDEX 400 MIRROR MODE_cover.png | Bin 0 -> 36499 bytes .../Ratrig/RatRig V-Core 4 IDEX 400_cover.png | Bin 0 -> 36499 bytes ...tRig V-Core 4 IDEX 500 COPY MODE_cover.png | Bin 0 -> 36499 bytes ...ig V-Core 4 IDEX 500 MIRROR MODE_cover.png | Bin 0 -> 36499 bytes .../Ratrig/RatRig V-Core 4 IDEX 500_cover.png | Bin 0 -> 36499 bytes .../Ratrig/filament/RatRig BigNozzle ABS.json | 2 +- .../Ratrig/filament/RatRig BigNozzle ASA.json | 2 +- .../filament/RatRig BigNozzle PCTG.json | 2 +- .../filament/RatRig BigNozzle PETG.json | 2 +- .../Ratrig/filament/RatRig BigNozzle PLA.json | 2 +- .../Ratrig/filament/RatRig BigNozzle TPU.json | 33 + .../Ratrig/filament/RatRig Generic PCTG.json | 4 +- .../machine/RatRig V-Cast 0.4 nozzle.json | 38 +- .../machine/RatRig V-Cast 0.6 nozzle.json | 40 +- .../Ratrig/machine/RatRig V-Cast.json | 24 +- .../RatRig V-Core 3 200 0.4 nozzle.json | 38 +- .../Ratrig/machine/RatRig V-Core 3 200.json | 24 +- .../RatRig V-Core 3 300 0.4 nozzle.json | 38 +- .../Ratrig/machine/RatRig V-Core 3 300.json | 24 +- .../RatRig V-Core 3 400 0.4 nozzle.json | 38 +- .../Ratrig/machine/RatRig V-Core 3 400.json | 24 +- .../RatRig V-Core 3 500 0.4 nozzle.json | 38 +- .../Ratrig/machine/RatRig V-Core 3 500.json | 24 +- .../RatRig V-Core 4 300 0.4 nozzle.json | 114 +- .../RatRig V-Core 4 300 0.5 nozzle.json | 114 +- .../RatRig V-Core 4 300 0.6 nozzle.json | 114 +- .../RatRig V-Core 4 300 0.8 nozzle.json | 57 + .../Ratrig/machine/RatRig V-Core 4 300.json | 24 +- .../RatRig V-Core 4 400 0.4 nozzle.json | 114 +- .../RatRig V-Core 4 400 0.5 nozzle.json | 114 +- .../RatRig V-Core 4 400 0.6 nozzle.json | 114 +- .../RatRig V-Core 4 400 0.8 nozzle.json | 57 + .../Ratrig/machine/RatRig V-Core 4 400.json | 24 +- .../RatRig V-Core 4 500 0.4 nozzle.json | 114 +- .../RatRig V-Core 4 500 0.5 nozzle.json | 114 +- .../RatRig V-Core 4 500 0.6 nozzle.json | 114 +- .../RatRig V-Core 4 500 0.8 nozzle.json | 57 + .../Ratrig/machine/RatRig V-Core 4 500.json | 24 +- ...RatRig V-Core 4 HYBRID 300 0.4 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 300 0.5 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 300 0.6 nozzle.json | 116 +- .../machine/RatRig V-Core 4 HYBRID 300.json | 24 +- ...RatRig V-Core 4 HYBRID 400 0.4 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 400 0.5 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 400 0.6 nozzle.json | 116 +- .../machine/RatRig V-Core 4 HYBRID 400.json | 24 +- ...RatRig V-Core 4 HYBRID 500 0.4 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 500 0.5 nozzle.json | 116 +- ...RatRig V-Core 4 HYBRID 500 0.6 nozzle.json | 116 +- .../machine/RatRig V-Core 4 HYBRID 500.json | 24 +- .../RatRig V-Core 4 IDEX 300 0.4 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 300 0.5 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 300 0.6 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 300 0.8 nozzle.json | 65 + ...-Core 4 IDEX 300 COPY MODE 0.4 nozzle.json | 65 + ...-Core 4 IDEX 300 COPY MODE 0.5 nozzle.json | 65 + ...-Core 4 IDEX 300 COPY MODE 0.6 nozzle.json | 65 + ...-Core 4 IDEX 300 COPY MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 300 COPY MODE.json | 12 + ...ore 4 IDEX 300 MIRROR MODE 0.4 nozzle.json | 65 + ...ore 4 IDEX 300 MIRROR MODE 0.5 nozzle.json | 65 + ...ore 4 IDEX 300 MIRROR MODE 0.6 nozzle.json | 65 + ...ore 4 IDEX 300 MIRROR MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 300 MIRROR MODE.json | 12 + .../machine/RatRig V-Core 4 IDEX 300.json | 12 + .../RatRig V-Core 4 IDEX 400 0.4 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 400 0.5 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 400 0.6 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 400 0.8 nozzle.json | 65 + ...-Core 4 IDEX 400 COPY MODE 0.4 nozzle.json | 65 + ...-Core 4 IDEX 400 COPY MODE 0.5 nozzle.json | 65 + ...-Core 4 IDEX 400 COPY MODE 0.6 nozzle.json | 65 + ...-Core 4 IDEX 400 COPY MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 400 COPY MODE.json | 12 + ...ore 4 IDEX 400 MIRROR MODE 0.4 nozzle.json | 65 + ...ore 4 IDEX 400 MIRROR MODE 0.5 nozzle.json | 65 + ...ore 4 IDEX 400 MIRROR MODE 0.6 nozzle.json | 65 + ...ore 4 IDEX 400 MIRROR MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 400 MIRROR MODE.json | 12 + .../machine/RatRig V-Core 4 IDEX 400.json | 12 + .../RatRig V-Core 4 IDEX 500 0.4 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 500 0.5 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 500 0.6 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 500 0.8 nozzle.json | 65 + ...-Core 4 IDEX 500 COPY MODE 0.4 nozzle.json | 65 + ...-Core 4 IDEX 500 COPY MODE 0.5 nozzle.json | 65 + ...-Core 4 IDEX 500 COPY MODE 0.6 nozzle.json | 65 + ...-Core 4 IDEX 500 COPY MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 500 COPY MODE.json | 12 + ...ore 4 IDEX 500 MIRROR MODE 0.4 nozzle.json | 65 + ...ore 4 IDEX 500 MIRROR MODE 0.5 nozzle.json | 65 + ...ore 4 IDEX 500 MIRROR MODE 0.6 nozzle.json | 65 + ...ore 4 IDEX 500 MIRROR MODE 0.8 nozzle.json | 65 + .../RatRig V-Core 4 IDEX 500 MIRROR MODE.json | 12 + .../machine/RatRig V-Core 4 IDEX 500.json | 12 + .../machine/RatRig V-Minion 0.4 nozzle.json | 38 +- .../Ratrig/machine/RatRig V-Minion.json | 24 +- .../Ratrig/machine/fdm_klipper_common.json | 121 +- .../Ratrig/machine/fdm_machine_common.json | 234 ++-- .../process/0.08mm Extra Fine @RatRig.json | 40 +- .../Ratrig/process/0.12mm Fine @RatRig.json | 40 +- .../process/0.15mm Optimal @RatRig.json | 40 +- .../0.20mm Bambu Support W @RatRig.json | 58 +- .../0.20mm Quality @RatRig V-Core 4 0.4.json | 124 +- .../0.20mm Quality @RatRig V-Core 4 0.5.json | 124 +- ...m Quality @RatRig V-Core 4 HYBRID 0.4.json | 124 +- ...m Quality @RatRig V-Core 4 HYBRID 0.5.json | 124 +- ...m Quality @RatRig V-Core 4 HYBRID 0.6.json | 62 + ...0mm Quality @RatRig V-Core 4 IDEX 0.4.json | 48 + ...0mm Quality @RatRig V-Core 4 IDEX 0.5.json | 68 ++ ...0mm Quality @RatRig V-Core 4 IDEX 0.6.json | 47 + .../process/0.20mm Standard @RatRig.json | 40 +- .../Ratrig/process/0.24mm Draft @RatRig.json | 42 +- ...mm Quality Speed @RatRig V-Core 4 0.4.json | 124 +- ...mm Quality Speed @RatRig V-Core 4 0.5.json | 124 +- ...mm Quality Speed @RatRig V-Core 4 0.6.json | 124 +- ...ity Speed @RatRig V-Core 4 HYBRID 0.4.json | 124 +- ...ality Speed @RatRig V-Core 4 IDEX 0.4.json | 48 + ...ality Speed @RatRig V-Core 4 IDEX 0.5.json | 68 ++ ...ality Speed @RatRig V-Core 4 IDEX 0.6.json | 68 ++ .../0.25mm Speed @RatRig V-Core 4 0.4.json | 120 +- .../0.25mm Speed @RatRig V-Core 4 0.5.json | 120 +- ...5mm Speed @RatRig V-Core 4 HYBRID 0.4.json | 120 +- ....25mm Speed @RatRig V-Core 4 IDEX 0.4.json | 67 ++ ....25mm Speed @RatRig V-Core 4 IDEX 0.5.json | 66 ++ ....25mm Speed @RatRig V-Core 4 IDEX 0.6.json | 66 ++ ....25mm Speed @RatRig V-Core 4 IDEX 0.8.json | 66 ++ .../process/0.28mm Extra Draft @RatRig.json | 42 +- .../0.30mm Big @RatRig V-Core 4 0.6.json | 134 +-- ....30mm Big @RatRig V-Core 4 HYBRID 0.6.json | 134 +-- .../0.30mm Big @RatRig V-Core 4 IDEX 0.6.json | 73 ++ .../0.30mm Big @RatRig V-Core 4 IDEX 0.8.json | 73 ++ ...m Extra Big @RatRig V-Core 4 IDEX 0.8.json | 73 ++ .../Ratrig/process/fdm_process_common.json | 140 +-- .../process/fdm_process_ratrig_common.json | 230 ++-- .../fdm_process_ratrig_common_idex.json | 122 ++ .../process/fdm_process_ratrig_idex.json | 122 ++ .../Ratrig/ratrig-vcore-bed-400-copy-mode.stl | Bin 0 -> 299584 bytes .../ratrig-vcore-bed-400-mirror-mode.stl | Bin 0 -> 202284 bytes 144 files changed, 7093 insertions(+), 3032 deletions(-) create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 300 COPY MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 300 MIRROR MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 300_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 400 COPY MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 400 MIRROR MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 400_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 500 COPY MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 500 MIRROR MODE_cover.png create mode 100644 resources/profiles/Ratrig/RatRig V-Core 4 IDEX 500_cover.png create mode 100644 resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.4 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.5 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.6 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.8 nozzle.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json create mode 100644 resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json create mode 100644 resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.6.json create mode 100644 resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 IDEX 0.4.json create mode 100644 resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 IDEX 0.5.json create mode 100644 resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 IDEX 0.6.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.4.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.5.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.6.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 IDEX 0.4.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 IDEX 0.5.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 IDEX 0.6.json create mode 100644 resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 IDEX 0.8.json create mode 100644 resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 IDEX 0.6.json create mode 100644 resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 IDEX 0.8.json create mode 100644 resources/profiles/Ratrig/process/0.35mm Extra Big @RatRig V-Core 4 IDEX 0.8.json create mode 100644 resources/profiles/Ratrig/process/fdm_process_ratrig_common_idex.json create mode 100644 resources/profiles/Ratrig/process/fdm_process_ratrig_idex.json create mode 100644 resources/profiles/Ratrig/ratrig-vcore-bed-400-copy-mode.stl create mode 100644 resources/profiles/Ratrig/ratrig-vcore-bed-400-mirror-mode.stl diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index e983dbebe3..526c138845 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,398 +1,651 @@ -{ - "name": "RatRig", - "version": "02.02.00.04", - "force_update": "0", - "description": "RatRig configurations", - "machine_model_list": [ - { - "name": "RatRig V-Core 3 200", - "sub_path": "machine/RatRig V-Core 3 200.json" - }, - { - "name": "RatRig V-Core 3 300", - "sub_path": "machine/RatRig V-Core 3 300.json" - }, - { - "name": "RatRig V-Core 3 400", - "sub_path": "machine/RatRig V-Core 3 400.json" - }, - { - "name": "RatRig V-Core 3 500", - "sub_path": "machine/RatRig V-Core 3 500.json" - }, - { - "name": "RatRig V-Minion", - "sub_path": "machine/RatRig V-Minion.json" - }, - { - "name": "RatRig V-Cast", - "sub_path": "machine/RatRig V-Cast.json" - }, - { - "name": "RatRig V-Core 4 300", - "sub_path": "machine/RatRig V-Core 4 300.json" - }, - { - "name": "RatRig V-Core 4 400", - "sub_path": "machine/RatRig V-Core 4 400.json" - }, - { - "name": "RatRig V-Core 4 500", - "sub_path": "machine/RatRig V-Core 4 500.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 300", - "sub_path": "machine/RatRig V-Core 4 HYBRID 300.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 400", - "sub_path": "machine/RatRig V-Core 4 HYBRID 400.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 500", - "sub_path": "machine/RatRig V-Core 4 HYBRID 500.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_RatRig_common", - "sub_path": "process/fdm_process_ratrig_common.json" - }, - { - "name": "0.08mm Extra Fine @RatRig", - "sub_path": "process/0.08mm Extra Fine @RatRig.json" - }, - { - "name": "0.12mm Fine @RatRig", - "sub_path": "process/0.12mm Fine @RatRig.json" - }, - { - "name": "0.15mm Optimal @RatRig", - "sub_path": "process/0.15mm Optimal @RatRig.json" - }, - { - "name": "0.20mm Standard @RatRig", - "sub_path": "process/0.20mm Standard @RatRig.json" - }, - { - "name": "0.24mm Draft @RatRig", - "sub_path": "process/0.24mm Draft @RatRig.json" - }, - { - "name": "0.28mm Extra Draft @RatRig", - "sub_path": "process/0.28mm Extra Draft @RatRig.json" - }, - { - "name": "0.30mm Big @RatRig V-Core 4 0.6", - "sub_path": "process/0.30mm Big @RatRig V-Core 4 0.6.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 0.4", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.4.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 0.5", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.5.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 0.6", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.6.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 0.4", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 0.5", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json" - }, - { - "name": "0.35mm Extra Big @RatRig V-Core 4 HYBRID 0.8", - "sub_path": "process/0.35mm Extra Big @RatRig V-Core 4 HYBRID 0.8.json" - }, - { - "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.8", - "sub_path": "process/0.30mm Big @RatRig V-Core 4 HYBRID 0.8.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.8", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.8.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 0.6", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json" - }, - { - "name": "0.20mm Quality @RatRig V-Core 4 0.4", - "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.4.json" - }, - { - "name": "0.20mm Quality @RatRig V-Core 4 0.5", - "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.5.json" - }, - { - "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.6", - "sub_path": "process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.4", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.5", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json" - }, - { - "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.6", - "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json" - }, - { - "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6", - "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json" - }, - { - "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.4", - "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json" - }, - { - "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.5", - "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json" - } - ], - "filament_list": [ - { - "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_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "RatRig Generic PLA", - "sub_path": "filament/RatRig Generic PLA.json" - }, - { - "name": "RatRig Generic PLA-CF", - "sub_path": "filament/RatRig Generic PLA-CF.json" - }, - { - "name": "RatRig Generic PCTG", - "sub_path": "filament/RatRig Generic PCTG.json" - }, - { - "name": "RatRig Generic PETG", - "sub_path": "filament/RatRig Generic PETG.json" - }, - { - "name": "RatRig Generic ABS", - "sub_path": "filament/RatRig Generic ABS.json" - }, - { - "name": "RatRig Generic TPU", - "sub_path": "filament/RatRig Generic TPU.json" - }, - { - "name": "RatRig Generic ASA", - "sub_path": "filament/RatRig Generic ASA.json" - }, - { - "name": "RatRig Generic PC", - "sub_path": "filament/RatRig Generic PC.json" - }, - { - "name": "RatRig Generic PVA", - "sub_path": "filament/RatRig Generic PVA.json" - }, - { - "name": "RatRig Generic PA", - "sub_path": "filament/RatRig Generic PA.json" - }, - { - "name": "RatRig Generic PA-CF", - "sub_path": "filament/RatRig Generic PA-CF.json" - }, - { - "name": "RatRig PunkFil ABS", - "sub_path": "filament/RatRig PunkFil ABS.json" - }, - { - "name": "RatRig PunkFil PETG CF", - "sub_path": "filament/RatRig PunkFil PETG CF.json" - }, - { - "name": "RatRig PunkFil PETG", - "sub_path": "filament/RatRig PunkFil PETG.json" - }, - { - "name": "RatRig BigNozzle ABS", - "sub_path": "filament/RatRig BigNozzle ABS.json" - }, - { - "name": "RatRig BigNozzle ASA", - "sub_path": "filament/RatRig BigNozzle ASA.json" - }, - { - "name": "RatRig BigNozzle PLA", - "sub_path": "filament/RatRig BigNozzle PLA.json" - }, - { - "name": "RatRig BigNozzle PETG", - "sub_path": "filament/RatRig BigNozzle PETG.json" - }, - { - "name": "RatRig BigNozzle PCTG", - "sub_path": "filament/RatRig BigNozzle PCTG.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_klipper_common", - "sub_path": "machine/fdm_klipper_common.json" - }, - { - "name": "RatRig V-Core 3 200 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 3 200 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 3 300 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 3 300 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 3 400 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 3 400 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 3 500 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 3 500 0.4 nozzle.json" - }, - { - "name": "RatRig V-Minion 0.4 nozzle", - "sub_path": "machine/RatRig V-Minion 0.4 nozzle.json" - }, - { - "name": "RatRig V-Cast 0.4 nozzle", - "sub_path": "machine/RatRig V-Cast 0.4 nozzle.json" - }, - { - "name": "RatRig V-Cast 0.6 nozzle", - "sub_path": "machine/RatRig V-Cast 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 300 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 300 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 300 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 300 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 300 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 300 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 400 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 400 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 400 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 400 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 400 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 400 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 500 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 500 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 500 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 500 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 500 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 500 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json" - }, - { - "name": "RatRig V-Core 4 HYBRID 500 0.6 nozzle", - "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json" - } - ] -} +{ + "name": "RatRig", + "version": "02.03.00.01", + "force_update": "0", + "description": "RatRig configurations", + "machine_model_list": [ + { + "name": "RatRig V-Core 3 200", + "sub_path": "machine/RatRig V-Core 3 200.json" + }, + { + "name": "RatRig V-Core 3 300", + "sub_path": "machine/RatRig V-Core 3 300.json" + }, + { + "name": "RatRig V-Core 3 400", + "sub_path": "machine/RatRig V-Core 3 400.json" + }, + { + "name": "RatRig V-Core 3 500", + "sub_path": "machine/RatRig V-Core 3 500.json" + }, + { + "name": "RatRig V-Minion", + "sub_path": "machine/RatRig V-Minion.json" + }, + { + "name": "RatRig V-Cast", + "sub_path": "machine/RatRig V-Cast.json" + }, + { + "name": "RatRig V-Core 4 300", + "sub_path": "machine/RatRig V-Core 4 300.json" + }, + { + "name": "RatRig V-Core 4 400", + "sub_path": "machine/RatRig V-Core 4 400.json" + }, + { + "name": "RatRig V-Core 4 500", + "sub_path": "machine/RatRig V-Core 4 500.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300", + "sub_path": "machine/RatRig V-Core 4 IDEX 300.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 COPY MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 COPY MODE.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 MIRROR MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400", + "sub_path": "machine/RatRig V-Core 4 IDEX 400.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 COPY MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 COPY MODE.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 MIRROR MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500", + "sub_path": "machine/RatRig V-Core 4 IDEX 500.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 COPY MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 COPY MODE.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 MIRROR MODE", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_RatRig_common", + "sub_path": "process/fdm_process_ratrig_common.json" + }, + { + "name": "fdm_process_RatRig_idex", + "sub_path": "process/fdm_process_ratrig_idex.json" + }, + { + "name": "0.08mm Extra Fine @RatRig", + "sub_path": "process/0.08mm Extra Fine @RatRig.json" + }, + { + "name": "0.12mm Fine @RatRig", + "sub_path": "process/0.12mm Fine @RatRig.json" + }, + { + "name": "0.15mm Optimal @RatRig", + "sub_path": "process/0.15mm Optimal @RatRig.json" + }, + { + "name": "0.20mm Standard @RatRig", + "sub_path": "process/0.20mm Standard @RatRig.json" + }, + { + "name": "0.24mm Draft @RatRig", + "sub_path": "process/0.24mm Draft @RatRig.json" + }, + { + "name": "0.28mm Extra Draft @RatRig", + "sub_path": "process/0.28mm Extra Draft @RatRig.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 0.6", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.4", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.5", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.6", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.4", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.5", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.6", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 0.4", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 0.5", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.35mm Extra Big @RatRig V-Core 4 HYBRID 0.8", + "sub_path": "process/0.35mm Extra Big @RatRig V-Core 4 HYBRID 0.8.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.8", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 HYBRID 0.8.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.8", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.8.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.4", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.4.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 IDEX 0.4", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 IDEX 0.4.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 IDEX 0.4", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 IDEX 0.4.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.5", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.5.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 IDEX 0.5", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 IDEX 0.5.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 IDEX 0.5", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 IDEX 0.5.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 IDEX 0.6", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 IDEX 0.6.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 IDEX 0.6", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 IDEX 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.6", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 IDEX 0.6.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 IDEX 0.6", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 IDEX 0.6.json" + }, + { + "name": "0.35mm Extra Big @RatRig V-Core 4 IDEX 0.8", + "sub_path": "process/0.35mm Extra Big @RatRig V-Core 4 IDEX 0.8.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 IDEX 0.8", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 IDEX 0.8.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 IDEX 0.8", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 IDEX 0.8.json" + } + + ], + "filament_list": [ + { + "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_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "RatRig Generic PLA", + "sub_path": "filament/RatRig Generic PLA.json" + }, + { + "name": "RatRig Generic PLA-CF", + "sub_path": "filament/RatRig Generic PLA-CF.json" + }, + { + "name": "RatRig Generic PCTG", + "sub_path": "filament/RatRig Generic PCTG.json" + }, + { + "name": "RatRig Generic PETG", + "sub_path": "filament/RatRig Generic PETG.json" + }, + { + "name": "RatRig Generic ABS", + "sub_path": "filament/RatRig Generic ABS.json" + }, + { + "name": "RatRig Generic TPU", + "sub_path": "filament/RatRig Generic TPU.json" + }, + { + "name": "RatRig Generic ASA", + "sub_path": "filament/RatRig Generic ASA.json" + }, + { + "name": "RatRig Generic PC", + "sub_path": "filament/RatRig Generic PC.json" + }, + { + "name": "RatRig Generic PVA", + "sub_path": "filament/RatRig Generic PVA.json" + }, + { + "name": "RatRig Generic PA", + "sub_path": "filament/RatRig Generic PA.json" + }, + { + "name": "RatRig Generic PA-CF", + "sub_path": "filament/RatRig Generic PA-CF.json" + }, + { + "name": "RatRig PunkFil ABS", + "sub_path": "filament/RatRig PunkFil ABS.json" + }, + { + "name": "RatRig PunkFil PETG CF", + "sub_path": "filament/RatRig PunkFil PETG CF.json" + }, + { + "name": "RatRig PunkFil PETG", + "sub_path": "filament/RatRig PunkFil PETG.json" + }, + { + "name": "RatRig BigNozzle ABS", + "sub_path": "filament/RatRig BigNozzle ABS.json" + }, + { + "name": "RatRig BigNozzle ASA", + "sub_path": "filament/RatRig BigNozzle ASA.json" + }, + { + "name": "RatRig BigNozzle PLA", + "sub_path": "filament/RatRig BigNozzle PLA.json" + }, + { + "name": "RatRig BigNozzle PETG", + "sub_path": "filament/RatRig BigNozzle PETG.json" + }, + { + "name": "RatRig BigNozzle PCTG", + "sub_path": "filament/RatRig BigNozzle PCTG.json" + }, + { + "name": "RatRig BigNozzle TPU", + "sub_path": "filament/RatRig BigNozzle TPU.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_klipper_common", + "sub_path": "machine/fdm_klipper_common.json" + }, + { + "name": "RatRig V-Core 3 200 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 3 200 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 3 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 3 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 3 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 3 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 3 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 3 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Minion 0.4 nozzle", + "sub_path": "machine/RatRig V-Minion 0.4 nozzle.json" + }, + { + "name": "RatRig V-Cast 0.4 nozzle", + "sub_path": "machine/RatRig V-Cast 0.4 nozzle.json" + }, + { + "name": "RatRig V-Cast 0.6 nozzle", + "sub_path": "machine/RatRig V-Cast 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 COPY MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 COPY MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 COPY MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 COPY MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 COPY MODE 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 MIRROR MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 MIRROR MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 MIRROR MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 300 MIRROR MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 300 MIRROR MODE 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 COPY MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 COPY MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 COPY MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 COPY MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 COPY MODE 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 MIRROR MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 MIRROR MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 MIRROR MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 400 MIRROR MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 400 MIRROR MODE 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 COPY MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 MIRROR MODE 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 COPY MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 MIRROR MODE 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 COPY MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 MIRROR MODE 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 COPY MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 COPY MODE 0.8 nozzle.json" + }, + { + "name": "RatRig V-Core 4 IDEX 500 MIRROR MODE 0.8 nozzle", + "sub_path": "machine/RatRig V-Core 4 IDEX 500 MIRROR MODE 0.8 nozzle.json" + } + ] +} diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 IDEX 300 COPY MODE_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 IDEX 300 COPY MODE_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bf8b01f75f34a34b2df56c304fb7bd43fe02d9 GIT binary patch literal 36499 zcmdQ~g;!Kvv>&<#qy+(KK^$NNq>+|xhDKVtQ#z!Plo3HdKtQ^?OThW0L%K^^Qt}<& zTJMi|iymg(nS1X!d;e-jtEXDtMR2EoM!zdc$p+5msNvz3-s zSCE!waB*{fW9wiAfv_h9B#FuQNYM6~XvuP>5_u7O4yb4DWelNFu%eNN&*U<1(M%eeu})5R#*BRXjt6 zq5YF*EV?lbRS^?VLDk8Q9>u`&Tubc@Wz7+-$;Hv}8P|`R*5O+r?9|XfNVYt!MY9=+ zGx4yKf$&zqD*Txe{;|;USILJgf$PnCe`vOnd(elWG&857u4#HO&#L*pQipH7yuBo{ zlk6q~O{Ff2tED=-r2%Sp-KLU;gD#nyRHS-Rq)(#~HRP}mdQoG=N#;x{*RBulqt?`t zl%D8f#nBRclMG+K?7Cm}Zg}JB`$Gl)d&uI$xjQPHE3Xipp8Adi#}-fY%j}S6Wos2L zLYmaZXy`cIFyGaO#O}sFIYj#?(s`7^MV-w2*A~Bz=_v5k(g𝔒yI{IYU4C!Uqz_ zW`lM#BBGFJQmYET)|QTzhM?iv>ua=1cef5Z@0)sXTd>WQH4ix!V1(cP8yJXscz4qjbk`*Qg^|!!Ui#5kVg%pU|7X9hCn%?h zpJLGpd$618PjNzg-@JKq^qt0;_Ih@@-K+N4=FSuKu;a3iv$@>Fo+^U){i{As!+P3Z zRTlj-j&t?;K_BpMH#3}_YGJ!t#l`HYuzhUU5qSGz>1wJWE@Jj( z_d|HT>?SJcY$GgR^H^99f~qE#9gUM=;vTHNdEn^i*x|od)z1+WWxsY$EPnNA*ng8u z{O&lRqwl1ZPh30!^^rTwO5d_ZpFO6!u&m7SaAIQOiy4&y((1XG*n6dqTxP>rVu@BW zSpl@?rs+?_K3)sVZ@Ju4))5c6 z9vn7?`@dSW*00}uzV3fueQo_ zw9?@ESeSKxR&glg`FrAJ*4D_(XtV@F@TX6<=bx-q=NWOk=>h@*#4(PR>EBBkB0aCy z*T1qTkXFyY+E4SjS9VSAg^B2dF*V4mg6{8}H&6b0Mwszg^HBS*(JXadUJAC~Y;fl_ zH8uTSX-xf3?QL6s5lJ5M{uSj-14?_1EaSasmp>yNUN2-nHt@%nniCA2n~+Z zqbWmYGdDL<0s;b4eWU@!pNfmR*{y>$9WA{Ix8~vfy5E7^6{K$~il#1FQ+^z7cs~ft zp1gY9Hi&{lHH-MhcA#TBeBf#*=99+st*Wr8Wz8dhzUev@c+kFpB;_fuqPb&h?N~Zi@cI2qDoBI3HuDDP&84-aMu!oLm|Q zm0g#3R`eQw6QEqQ_cl=~TS{cX+nv6UAjb6Y@{%H#T|arNtfn?T*cxzsP889VU}!j( zx852q#d!2@3tZ>92&rbjebEzFkqcJ>bu>ZN_Ho{6@{z=N^ z58d`q&7yZcqC}`_b*_&&wvXCAx(NRF0kwg{svyPpNVdr+BA5L?L+3WudkuCE7E*os zg#P21;Xumt0y8^b{7=f*$t+#fFgq-8$pfgOWpWD;XMQdR_tRQF9VdUW0(#3J5@E8= z%bN(D!{<&P^RoQ3)cy`w{=r6`kxvBBmCzk}3Mr4vu#<1C`K|1 z<3|)@#!n_%BI#tAw1Q}ngT~vQpbPIM+TRBU>9_a!QVDT!MvnSZ_ku58oQ*teKf;nv z#vJE!J)6|c)8@!&YQjsB$DMI_3`3dQ+7=arHZmXkO6Dx}R6Jyvswq7S?VMb!DBKRr zp4NPM;psE1@!(8vzqvK#CtatnG17=DQYt6dtqGKpkf|vhJ!H5xNBG~rZ~J{Qj(u)U zPEOqE>1kMx`wYuvX z$?e64O6F4)v0`$yReU4Nz%7zQm&)22ou7{bw@tH1#+YOd0hK^ZMitm5=yIg0Ws7(p z3`#H@=_a#e?(gmS4<~aUDyR$c^Hb8&(D?OMm*zpTcvVikRK_pOt8n8js;p3yX$5$o z?r@|g4sVgf_K`p%(BRt#2d{K>bty>I4;d@okmwrzo-U3GB#Xqftn)ve4AofuKJjN) z_vFI5&@>9#LMi+;$n5g z3-Bu9NX2|rE-tP+2OFF1@8(qlHzf@td3kvXkZiQ0LdcXM5=&)Vz37($v&a#F>FyL~ zT6+2`j#Me(Oz=H7skXp&`R(IlpLqcijp0b6SXsl8?(&WMvoCGFUHWai60-5Km8k{nDfFfd}C)KSx!QHW^V`SXk)k>Gf{@ z%orUTlY0Ip!mQFvT0D0&Z(zf1VC#gP93L|e8{#lijg^_1+5TXH=ELMkP#eCkTFBzl z?#lFxYJ+YIPA*kW*3$e&ONSdB!U~^+<9Lb?`nJFzrld}A+~bW>NCfU>`BYa>_g}p z%VrC_O;u#Q*_IQR5~TgE7IdX0`e%T-@odWQlT=P+%39;$L;UbqP{nV2*~zaC3RE)i zI|RZX)6;LE&D*7Kn!us%u~z!D)L^SZ5eV1iPPBJDW?%`f3?wl(uEsno{_v%+5U0zO zxa03n=gP*$sKv$CqPM5xjaR=*o_h4V&KK+0)qOZM;0-=pU%BUhCdIj-|5N2iHOm*j zW!Bj@XV4&}(>`bLd3ph3k~{+yG`FsfqN43Q-6D}^dwW}g?@`}Srbv;RivM9(mn3GG z$B%&jf?+M3G1&actkn;$pm_Y+sIa#ad3}V;Mo(2s0|g1u1?w_+O_h zZSo*XdU`rBE~dON9as*c!#(ggRh98Ot$fYDC*y@`K_cY%w;%8B?xJ5Xzbc`F3kiLy zgzfSot!|$NKjyK2p(5R6gbe|;Icuv64&_tnu}BcZmep|SqtIPm^gH}_0ZWXCcznQ3 zmf?F8j-43t zDB~J72py@@J2FVgL5kEiHtKEsu7VN7uMrbP?mXw^sDJGrtV`{WpaGdtC0bF7atE71kXD^1QX0q&dTjKNiaztI z6R^#uS~RyuM@L^n?&Gay`e7)=L`eq9893C1cB@1Wz!uQFs`N@@f>s{$Wo_jYb9fjR zF0lskzO_w%MKK!?s6k#r-m|MUC52`ea1iKHl0UY~YJ2l4wQH84hhnKA(9f#kp?&FQ z4H*UxiH#&XrG<(+s*=vX!EsBiBW1!vp=yh*_jc>irBYk7;vu=AjRaS}it&tgub@pd|p%P^FwEao`*xWIzcL@P|7AC%%pRC(2LLT@ptE+^!AAjE!u&VhK6fMIf zU&sp@5oiR&m}t%AW;QmsFaq`%&9ftpR7DD9X|C_Li5MXg6odVN0}jUM??1Mv$KtN* znDa>9=((*w!jg1p;&?~X-N{F|<*ePr(_6^4#Wu-v;OAoK#{F=n-GnT7N0heR?vs~p zVq?c{LotcTlvq*QRQ4Cu^?OU@0V?9+XTv9_zJmcVp^))vQv*uDt$>T?2dVGP^ebT) z5msiuQG5og5zRt7>%O--zSln35oW^EchIKv_=bgi)C^9xx24dVVnni+W^aSx1j4|lYJlyfx%(v!mZ();mw2{8;pR<#% zlg8Q<4Tl?QVFabTO%A%j%EVJ^c4;pvX6`O5o=g>Pd5IL_DQ%rH0q-@_dxc&Mrdbi5J ztCn)=;JvM#hQ>nQe*jEY!=w?XyiM|NQ|?Z^QQ`HrZ0XV&6WCbq2$0^i*xrq@`1PO94UI+p6L-t(@E zl(JrL(^-oPjM|5{T_~OQz@awjL<-4f>8K5R(P6ENL|QqRK)-8L|C(Un&E-EDkk?u) zHT?5uCf7$4sM9gI>M~(lLge^Z--_c+)nDanO6F@8tv<~th&F$|cKPKQ=VyBQ9HjGp zcvLIgxJ*j3;!h)iRGSSB-g)bTMMuwDBaA;Tt$}W3ma#1=!M5pqm8U1i_Q#TTPxI-a zn{6hCV#%Fj0r!DqEw6K=+b}gaeTIj_F@m-2ihc)p6Dxg>({t1yA9QtgT4&)r`S5QnpSs88OWyWaQFU;G4!mmQ*FFOu z=0g^-c1ovygMn9p7J3AS6&JL>S+jprr}?Ig4&#<0M_jYrot)w+cg`;^q!EZp7=g+- z11>s#I67%`@8AnpA-5(YJ6l`Z_Po3{M+b+AcvCtYF>-vy>|xzh$;n)nscyOHdMLpQx*HFVY|Q5$*+nEvx-HJIx)8Dofc-_=u^VR(fcdm z9x2#Cp$w+u1uEqmpIy=Ag3Y2T^y&C!+Ot)29*@IEmzEMt)xV$b&w)m&@V4#%?GwO* zC&S_ojHkN@&^saf`}>WzQ*$F@W2+*GfiXP%{I96Z>u!v7-SE_2{$+XWvyAq8c#7L!f2Rr>~z}GDL<5vJ}K0iCV9rD{AVVw6_d+#YUcHq8o^0xJKObOt6bi!p! z$ZWJ*u;Q^9Ils z#+cQZUL`fP2SeH7;@3G30=CD<)I_WJ>lgO+_6$Xbm&`?0v1JsbnvA3vh`;^#t)SU? z#(?YJ*FCcTrEkQuGvr!==Cfdt$B+~|`KzFN?0NqaPS8KVj{Kw?VekMTmiMoYQ6_g| zL@czIuZS>5W@e(x3>(UAqgmTt);ll7>%nyTm`bd6R*wZEA|hOd#V$&VZAvno%O;uY z%EPI`*|PmfABde2r)Om7a_+G{@9yoz`}9eYojfe{;p&@7j~EiI>ZsYcv#MB?O1!NG=ygu_Tj2`d!({ z6+OP&rpGAehlbF^UjEv0_t_9a!|%}f-+$1ntE=Cekb$KQx2Bka&d%2= zVO=9J{P>vZSi!sHEsp^Wg+n{5p?dI~4~l>T0ex!rn$Um!`D5{WMwcTtbWDxvWBXXN zVfU!MRk#X4vy;R)pD?4!I3SkfvhG)npMB)~ZL+o!IATI=_;n0eo$nsgvKJ@bG$q|44Fa_IsD>}eE3;1g@q{H31g?Mtn6|b=P;z8Xkg1T zo%+w}Pf)SRW!Yn-m`$aO5eN$Ijw}2>GqlP*?`%IMT78jWY#~HUWub=bt#{>LK)g0jx zEKP!rpHF(#u)Do)9I19Ef>rbvwisyquGo%P7B4j>Mk)s)NeooY?L+*~VDl>ZrsHZ@ z%C2ADl;B^TfQyTZg#7WH{PJ?H-@GkN1HHpWPO_%z4%#tAmwWdHQig_P-`O4>p$=sk zUg>Fbu-af_NRpG_haYX{B``fs82@4J{bZobD3_gyGIlgSbNvi~=tFUL#PJrYSp)_? zc6YBy%g+ACrLb{u02k1bHH_;sfA*n4=U#C2`dBof<)E1Whlp0MuHUFF(6i3>@U7o} zZGY!tZ66stWk)>kQVfTwmze?-M}e5+3(0w)q7leV#O;ktDX6 z6#IL#K9~aJ6$Dp;ZThbo>j%xkEnhyMOpQ9|q1aCuBwo|@BUI#*eq%>RJ1MYje4UukRy33ZD%%A(xmbk(a$2Zl5^V z6v~M=Xn%=9dPX!{+z8j3YHMptgP$+l)rcHhqzMa)G#?%Hi{oh|5=Uc_5LMaO6Rwcm zzv}e94@4_ECB?>WKKgtAE$m|`oEpO=REp=Xe97}aG%ys?qxa?>9;cVjDq783Ey5{f zkF|@m(T54t5rm@sEx9@^nq7QQoI-4;drN$QHgSAo?zO=~&eh*EA@4IV|EJD4ntFM8fyf0ZMjStqfI zqM)XROiN1(K{z!%M%19Av{c8=^4HJK4j;&kr;cPs6#*57@^de`dv^h8x7e!x!}*hQ zz_OZ;ojF8bOKUtPT5X;%IsNs^1gvqMO51VBW8b45QyAXTT>_r6%GT)kWX$zrlB3?B zOeu}Q<=KGU<0BLD&J$Xnsj?AD7RgZCU+Pr_JIilLnw?DT?Ch>^#4pjVF^bfo48dD(=a!1taWT88eibf<(N_dpAw=)@NRu5Y&kxAd zVb;fC9lPK665~V;e>wVoz0Uw`2=t|M_!hbQQ`oHE8J;ULu1ob$_4% zKvZw4?w(}3UMF|pU-z4ad+GlBBVAjExkr*uQv20{;Nb}Y2EEsZD(36{*w#T7U2tXL z*DOiqEnkFXG&)D~7JUtk?HJ7DEvZgC3+@96Y(0?;&8F;SJ1Ta2U1+(^8G*3Y;6-a zx%Yao`rJTxrYgXpOTFmS+dwLpVUncD@}YKf?zrXu-rv6iDHykni;Mg9OQ=W3tTS8+ zZEHAN&QDHcL!d`1U`=k9MaHk2x}L2X(f8?mF~iWcps;XsW@g7wWM*+uRU;EArj*hggs0DR0b= z^4ICi;Kp)2>L+p7-t7r{aEFJEh8Iy37P3L}Ut+O|vq9#iYHxle46u7BA)$u&yy2}> z>7OKKIpB;LV~HnO0Q*Muv!LXPI08YE&<}9%O2%<)|C*P@`4oQ|(n6v0l0W1)xtdSK z9jWRlYY(aZ-B?uLyK0vn0i1~Xdj6&56pvdNIld_scA;u!cYDBfu{jaX%XN3-XmgNcdAufqBX!L(m5*RZEmp6h)T`p}g!aw5?!Ny`G zn4SuiMBqp0M?@%80>KU}C6~*i6_lFz?Pa zk8wyi0-Al@n5EF!A|RQV;()RN8^j~rP1o{p%4A3%n7`LjM)e9gS3ZC~-IP&q}1tk3+p=$~jg61CnhPtiRPIH)R9z0hu( zp>jf6pjc)q7ub$b{s5x2b18D5xMU&`0sJ5bK%F!r zLx-fbKIIeU&gAJ3ik{k_?{@kk2*h(y(Kv8hl~q*!=0Ytg@UbzLe{JL%G#J*p6_x8u z0XPFJG(Z}SxV8*slm!VxCB>FInKG*D-i2oVr`Bk%3T>PnHo(dZtM~cwvXcqQvO5Lz)O;&!=C5WLY;f+85 z>IR;rNK?G~J2aQQc5=67_+?l~2q)E}N8LqQg(IV*A;319b7~=6QOBj+LmJoL>l$yY z=<-RFCbKAv@CC2=;I!$TJ6h?#VjvD?Q9v{bAET`FBg%JAWi?wZMdw-Nii>q7uVwQz z04`W^(xkP2=FCEh)&t>gJwnIEiA+RoX#W(uQ=Y5S z9e0EvtPsvMxSsGT@0lIZ!ncU)za-2bhPQT3TybL8MMS*zI;~%x=!+irl2yv1;O^8! zwI2zB*Mz7FLI7EU!C)Vpn|BJxtcO0oy}-ZC=ME@3T@HH??>JMPAGRi#_MOL59ccwb z$KTAqo8y7$W#sKST#5t%ygmI6YyPNR?7F1 zeMtRY4I9d)eV}ejaM$z(9p7d>tGix+5!vf!=o<~k?)A|uylXCuoDfC|wDhNuWXz+|CH zk4Q>VqN1Vcb8J|Mmue3l9o0zR%*x8@8`FGLr3a0TJpnk5JjE;mo!T?U7HcxIrD#%WuXl*C|X|b3Txa< zw+C1tLpFpf9td`)L8wSgDhL8i*7>`x#SZd&HnT6KY#xE z**Kn=_(_8QOI>#?w`a8`Rsuy$_Rh|c?D+pI*8s(bJ)mlia$f5pZP}&X`?yzmrppBWy3o|r}P0g+5`Xl%n9c*ZEZc|zh({s zS&!5?pEWMfsF2IzhA#YwgPda?Fk^5ikluE%M{n=%hUKz@bccN5I0E^ZxDZqF%XS0{ z7J~v>vl98+q$Re1*#W;$hA$mK7|P?FV`EHz{#xyQGShn}Wfqky@gBFyNg;W=gJrbK z73L^rX3-j#@@$z7HXSj6J1dnH?svv2PxLAAtFDK$vonR`#ICB(t#w6-BWi3N zOoQjIhsEzjUtTl~BNkv9M&4g4nG}|*%>gPCbl-#m6K#9%2?b$9j)kSigvOJ{&E<@b z-v5g_fba_yJ-r-9YWG@#c)W{X+**Ia8c^8FyVbLOR`CGG(`JMQ?wfMA-`1;qHiwku zYRbo(QT;bOJYKMLR1f(I!rE-V?#s~4ieRSWuo45Z` z9<%lp#w)&;qm->*S^s1TEcw?I=RjA+65T|cSBuKZ=qg(O{1^ev-~L9`h{$@-uST;- z6sgSeoL5BJRbf?^B38C}h6y!WT2AnA@q2eSdYQV{Ql-GC1S#$T4$zidk5^?|@2(^Z zqo(R#oh5uo_Gc%aa6%>J2nZWK?u*l!1$1b5iF+qHrBu#NK^ zOp&U358b@F4hzLoX*y<#n%j(vGXw;Vy3^{TTtCQeEqK3!$U6DEV=2VPMMst=I92uP6S<7G5`D( z_0$lG&-G$2QSzQXAetjIEd>dvw&F1fB*froT~degyCp}j{;b)nDMsgp#vdi%2aVg z3Zx?w6Cpc0)R>ldqHN1RU3P<|$X`qNtWoGAck6F*gWO@th{$qk)2^`RDsWh&dT_Xt z3tXk-N57|lyLSWKN&TW*%2~9t5;+Sckz|n##Da-9G3Udx7c{NJ(?5&{>=T+)1}&*t z0(t{37Gl9V)#{%5Zx3oPH(S|Q`>rpa^}nA(%;{0+lo$%oFY2%n1u7`^@%h}t(b?IE z`g*UzMjvCJ2e0|f;=UfgA72K%Z)Ul~X>P@)vU!IB}fZ*Z%G-XiR zAU%UMz7CJIxx7L`cn^t<1u}1ZFIa6|3ru>IoG!P-?}e~VJ&omxw1M9f%79xd7s=of zPtT49Cw8hZox7Db^&w2hnx8l&+&kzXOCEnFr8x<94Z);m5~l8xXe#v7qyo;@FC$yzcyiJdOQS`c8z~EiKllF9 zoHAqAJ}JBP*OoFjcx_gE*woTO1G++9_L9rm*$Bs@2)3csnb-$w=)>k~VN9Du&T?ot>TZ zqtCYKJ}co50W3Q_%0U5%URqy6U6Wi}dva)JoZ|sxq>D!sia{lE^U?(tDR$U`p=;vZ z(8d~SHD${zv8%TI1t(0>rJN`HdI*2gBE;pBE%XMWdY~lU)VTb=_3P*=U;{x#z~s&+9Z#Py6WpX4yoC z{8?hqg5Gnh+tEFvHaZfYv_4`UXC=4?TDUo$%1`JIMNhUnBd%DGss#(l0=U{t#sxKK zqk}1IRrf=;QQvdhCl4^ANiflp6|GL|Qkx zF7;PDrVqE@oam=NF7N+v5{4g*Ub=2wgNrExWC@&DPUg`MnEgD#R-slx>>Kz6)`g6J zV4IZV-vk4{h+H*XAQ%m~;E2%{fo+ynDoxu8`$x(Vk-30Nh~bqbOUv>?B2L2l=E-m$ zcTd{k5ux##2K(yl+j+W2p1 z=*oahQ>CrdL3l@hvL0V9fi6ErTvSw<6AdM_?*1$D8fArL@IGQ;QM>dSjV%0pZYsoz zS|-oT!^>0C#Lsm6)!t$q0o0niu-Vq!{0&;qN4Do3A9DCK{(Ra0o`UrOgdg zKhu=KiKc3`8kSd9M=`y(5G%ujHoC$K`#MI|>OxJ4vM~J;Bs&&rBr>DX6(9}>U0At+ ztxXR+3ANQ(`Bgm(XHE3M*ijaXI7cc^=H~+_tOssmXBWD@vm}}2nWNshyv*=VK~{VL zhfAcURo+CkZ2tb?@kdN!8=$=Q%;7DiLCfmm8bV27pkwJF`+&vG^9jmj)EEqO6|f_g z6p5rvSh`4~3l{dFUi-5uDOg|Cr;Od@mY;jCouwiNdcz4Gf+%Ifs+nT)`seY}$^)u2 z>@PYF$n4G&pL;s*Nt7F4r#DYlu>d>6CyMIt&NIrw+>!=1nCU(@b54N{g zXI}PPYHbDARK^VpG~JIp3P%THq)9c_XHr=3cZ&PqP+<{~5*@_`slstvko%2`kI&VE zjUlp*9B@VD)k)cy9X!3gJC3v1PnYg*mxf=r`nV>2ctL{2;_{)u7F3yc<-77Mq!ZjM z3M3uNiB|d^-gTX|&@`mNN4SU|8*`?rg^kU(V){sL3nrEEr|^!_L@$B=wCzZknVGlu z_dz_MVE(}$Cay@^T)P(Dh=;_E3lRXw?A?B&z+#Kf?%hzzOUugY>bTk4O3TW0S8VVp zhPnHg}sF1f9DR zP6&g2{qjj6Du=&c{Pm*1_gdwx#~+oNaS$cKSDahxAF<(h2-RLs%Q2ba@6&F z)%a+^a~d*)|9DU@)!9Fk(fE4Ha`Vd*G=v=w>=1}!w_MI=DaOc^ z6?X`gwh>J~;MvA4UZYOAqTI`!AsED%kHe)%Ms2$ZWqf=*QAUZwFQ1c7IVhjIzZR-y<XP`Jhs7J0isBWrB}r{NNy-rTYxWw~?%GUXt!lEH0{2tf-HD#uTRK zh5@w#uwH_6pD*A^N&)Jn{`=@u0hN^V@FxL>JTtB1Pp3|;RFW+k9Ooi{n9wXPy2GWY z!<0ZuA8$}=dn5$~LISVAKPB4}A-`)HCNRANPD?ql|sMB=8` zejmArXsvnAq;eRv>!2uu*GPf$x-e^w+PG&a3gdL?R1satVO6N=I3Rzqq$mIx3v_p`;1OE6xX2JvJGSAkhzNsZj$`3!Di&Q)j9uDAp^$Rp!+~z!3y4fpiXb& z^T41T)|kr5#G3dP->MiL?dH>UGOP2FMYwtgQ6-ME;2wrNODses)(Zy%&6`nQKf5P|kb-VZB;(kjXi1v=~{dDRpp8Kf=%nOj`Rmn)E zRz@e4avHScdCZRQ5y{oDVB5wjwccW>U$;PS$k^KQ!qcNxdYTXvZyfLXZ*^?#cVMcj zPOvw#Qfm!DP}rpUo(}te=K~^HNLEP|9)@9iBCVWpc=$XhLm6~5v=#=b4H=cUUdppE z^%MoM+*MbF`u_G>lOLzA&IrwLU(N50kdj;NDp6iv|9P9KwR(Pv*}If${Gf zz4$4q?_9bT%4r~$JfFHQv~vKi^YO8@9kg?Hwgy|B5f^>$&RcYlJ-4Iu zw+2VJ4P&|0C&Z~9(ke$sdt3D?a|>&$8AH$DQDI23{gtjtTB^3el%z4tCOuxBW$(jr zjhBF~ao$~-V-o?Whb~VV>`i0~d6N0Z&8Xm%rUnJhvh^8CtB$qXbiAZm^2yuEFJrqy zdfQUMc%TdD7z8ynH9o+o{TGudUH;g==IRdy+rEPwH68x`(9fS}|5Z!1%moQO>ly?n z4njt}$3Fi4Ksps$WDQ*tWVZ^xN`qRM0cEn?N~A~||KH(``yLjhGN<$ylc<(z*t^pp zDUon7-u(~!oN7cJ-)1Y`=FD-tEsB4wq^g5K^DG>L-m1$Lo#iP+MN5N&0)$;YHefwj zFDmBBoSe%;usJD1P(}|x@%EQXeimVdquNWai+FEPXT_du+$DFu_O)?=|KjCxAm_xq z<+BW~AET**3(XQ59Jq2)BXy+cZn$8oV{L6sFyM+0wDcdvn@DhFD=Hr3s7GN(fswa3 zEcsB}aro2x7mwa|!{eG37Z;OitcTmZ@o#IgZ=ucYAE z4XWDu2BwdkU$kLB1%MJ|McC@&dX~t0eM%E!LyM6BT-QqU{Fg<$h|b%b+UV%#|NWIAN|zXkv8c_y_X#m)h*9+bw4c- zgTeuJ3{~T6$!a#jh*3xYa{>1p%`PT76D+oi}aFV`O!=1u7x~xE1h@MhK-SHg>(KlM|(qQmm;yL8{wKk>zue zST<8CTY%J8E|1rI?yr~BT&<8+N#5uVua}GLsc|to-Dy1>Kb5A+v$*X2s#^1T_$Qvi z05LfZTz?f6evNRb6P!v03~%LY=DhuzpP$cx%b7B03gS~Z4;}-9FNcnI@Q#h&XBfmV zE$qyZS#v!5AsrXz4=gU~#V-Gt1Q5y=qOn%x8a6nU%`VM4*U0-ta$(WhGh}l73K09e z&nZ7~SiY+FQXHeKTlyJ|sUUX5kl8}>*{=!u-lHQI1cqzJ8~AJc-NvumIr;g7D=y^e23_CZXSkgF6j+&Cx})^00-!XMkviWTZ^3wh zDx2z`n5vp3s*fN}M7`OceI+Cz@{{zmXCd%s1R-x^5H~(&Oh}gzmwjD*JAXn zpP#h-W_EVTS0;b`9|KM!emyg6gW(kU*v8!si)5M499oT;bdCX zZiS_M~ygA}0S<)H(zbrtE(Ro9Nj3_p% zJrgfUaIzL7J~|jVR`HykT|qKnSz4SMToWXJ;ePaf=D7dEyNOz?#UdB$%GQlX`ug&z z{C_`|^4axy<#3s_@6ph<+?Q)}sM0a1jpj-)K=hMGDCgcSsyO~?UXVC^@61%S%e2|A zrA|)x;N>NQrG9AV@v;x)@*XzNUvsn^Q`}_O%2>YAKjT3iM!EAiibX^E8)=UEHx8nh zS9$8>vI~`FJv&RWQbEVDCKFsHkDDq310Hn3&$GgadS#LH=t}vTUKq!~(n>2JT==T_ z)RLEaj^a6Czpq{tfB48F6P)}nYk)2AQ6_+!w_vVxo(omWfFYZPQlN{Jo-#Y z>>$8wUPT1}5BLOnF8B`q+`pBJ+V3(=G(cRe^FcEfzPpO5q_!BsiS3o~ofpdAgZ{0I zVM^@+ONf2AR4(;MhxkM17tL~YDXJd$vL4Z>JZ33F@LF)@@vy|3>&_j+D(kt-M&G5^ zt$%($+Xl}0i|IXS2I5dFNNCC)+MeU0u!u02T&|vhX89cmwH|+`0hPB9+ofrbL!ONU zRSgVCX^vFka`u=jKUX2h@_bWH%Ef~B;ZM>25DR@5)w?V{sfH?<|DowDgW~AAEsQe^ zP6+N2hT!f5C-CCIU4lEo-Q6|#;1Jy1Ex0=b3$DREU*}fcDvILY4BdVD?6dZI*7m9b zL~tlzj~n?)5{8*O4AeIi{4X%#JXoNg@ut{%OdFb6^1I^XZI}VjXqd0-tA9(vP3?OU z-bp(Me~Kz}0qZo`it-X6q2h%W1sG}S$Ye*TM)7MiGyMEI`?;vDiObBUiA+nrLxv>L zhC&cI=RmotRLz&=F*e&4t+K}7w_Ojrhzl*~>8y|qO@_Xi@T;kj+96}A>DhJ6 zEiQ&80SKSh(@{yKTS4Y}`=g5D)YC(bkQZ4-dQO0LZ6+6ctP3;1-hN0@*tH=8)C^$T z1jybYfIK2agJE?>7o_Wf``4TIhXfrUth;S?sgM3m4%XkJfu)+NcXp{sn_xu< zXl_0?Y<-{k{9v^A3!p9D8qSc|oQVaMapOPJV4)$EuX42HNglJaG4iG&5@2L#i}K=1 z-M8I3xXIEkIb3du0=ystzB?pCUVfp9f3`0Jo$Z?mT%5&f?`TProl z)wmL1RROwm^{)^+yVLJ`v%Gf^zm>Q%Io^#RWKO)d7?B4U*}lHO{=+)TbX{g?nU{0d za$0fZ9xAdZzyQ5FI~et_e(>p{;gl2Q&vFf{-zH)?1ALKSCp~_k;ZS_@u}ewT!O}xL{x(L7w{0 zkf7Y^Kik=@54hk!mnP_R<6i!f+cXX_s{q>6yp#Md20b%NWMjsx%H@TFtt{s{=BI7hf)cz%t@4+r={c=x*%^FQW(cjhe@ zUC);T?-Zec5xcQ5WgmB)0Eo&#po$*IXEhST^dC~0w6Ypz3Pmluv&qT<;%F3 z7;6YUtu+1m=-0mje0;E}Ca}eA2{FwqTv}}r`H2*41ZY$^C~JuIBQ%L4dwbn>&+xfm z>}s*Z>$P4J+*(ZpAU6e&E+wfFf@u)dIc1v}`#mZd&-E0rRyu{;MSJ!Vnth&;SJyV_ zV+X&Up8u#I#f(Qe-3W}WP=$ww2gJWVz_40tIrpK%{zSc`%ouQi9Jc6ZiGQ92kVf~M z0z&anBMRiN?Q^9Ra5d$NKo5Tz=n3QbR)b$B?0x4lfI6MVwqgCO9uQ8!om5ehKA%wY zlwh_$qX8$K=3kzuXPe69c=4Lx*>nR3Wih5XU)CnfV_ygEAUh`~l3Mq5nQ6@~S~*|Q zqyyR1%<`5WW1Y`*Z5*-Z`LH}CCVOTnnzfyo&)#<0bbM*Aeo0kic4R|zj zOzlt>F{3zW*X9jw*jqs2gnwY5Y8QbYd@#Tz9U8L$g=pD#xSjx znKW6)81m;cTx>(X1t6}hudidj;PrK_vBbv3$T{1Ah&$|@9(J=5y!3j@I`taT&qix44QYA1S_wWyW&{LbRlD$`bjlJ9q8NyM!PZSkeTOjm3%omv@FQ}Hy` zlZ*&Tliz9L%w`ef3|+jN&{y`5TioQ-Ff6S8+MDI?3{DC>(;WGaa z)yq5lf%tggBnlN21aqcf5C4^G{F^{~J=(W}Q3i7Kdd|tKqG#Q+8LrzcNkq3l76w1J z@lz!&LqAFVJy;BWTW_r=X4afUOw{y;8oU93negk;rgMQtzi`m$(-!il@PDM*@j|)# zu)wc>O;Nq3M<31)AoyTW*!c(LWySL#YDCnPjMh2@1wOhCh^0Gn|Pi4ey|7HPbmek;b*T-ahoRBC0C zZKcgNYbMj_{gpsePX9Gh^d@1!xw)%C^`_71=4nrLr{CM-?bO-H)%LT`pz7L7ZIPa< z-85MbClO9dcL*EOl!%}CRJNl+rO&KtAWh780}oepYa}+Q2JtjBrt{<84ZI&fAwe}6 zcYH3q4E6&_I^ru$8%_5U#+54a#3dH2ZkJi!P5(lD9sGy1lwWu*wKGplOmuEP?NCLA zP|d2(O(3kQJEyK%jv4~P+a3p=O!)Ap2N`cz=#o=3 ztI!`?RwL4U6q%sp0~b5|-iU%$sP11S%R#Hd&&~yZ{mSvrY+LNrw~*qMB3p;Yso6c2 zt8#fyt-0gG8>UT6OcBe=8J3%D+XdbgS_bkeptVs&e==UM*iL|z+H6rd1^RIPNs7V| zKy<_QXv$bIs!c_~Hvz-uHN=1%XJioA2!t3|R>rSgxi}jDkDO|d=#S(N7*I%jfkX1& z(4?vCd7bF=!aG6C3A1nhm|1jCjgRlgCnjv;Q%Tjt4_3Z4TD_-eI;Z*EDuO$FI2VXQ zWQ~p`Hlu0XXHF@C3;Ki14S8*wpGHZ0>E+h3LR;*8^`A_W_E678$FnV!2-WY=o>Arf zbG04EG5SThZ7Dw)E)Q1)H+~2k=!Jxzt-0|#7y9`ZR0(KRs`G?TVSb{y@77>W`vVx8 z@&6eHlq%Jo``B?TA2%)5MNH`2x=jme&oL;YlA+2H z_5s^_jCC5yrQynuh&u>R+s+Gz6>L5m3E;!5f1AquGq4+1FlT8Ui@CNOj3@TJj0V#e zOGI`%2gv++odpfEsENb(ER<{5djM8lk}qS6feTje!Qis3cqFH~!lKj6`+vT8AixJ+ zDiiqnMr-FUbUyuKmuYq7DbTJhp>)n%UP z`MXw;uTIjMTz2KuHIwc0dJq@ih66^;RDzH1bK|R4t!CfT6A@8NBU(2t_b<-Z6qo3U z=JR3FRh>$_k0~GFg3=GPqO~aRom#(o;vwXe&?Zmieu^6$97Ohg*(JC48ew-P8NSfd z)Fe=f`JF{f%(Vg6Tp-jZqS$pIpfde#m~4#x3$4$?3)mTYgp;Ni^IiAP# zK(k`&_sGE(TclX6f3lmXjM?Oj@kQvRDW%Tlb@rYsuA~Kb=DjOFX~$RCf7aBaPdT6b z-ZBB=vaJS6C%1amlrA>?W!8U23xb!OoJ{2}?Q`mT&()yeBlz}!T}VGXJL>{4#joPg z(>y!S#l2A{%cSIjxic}4&!r9bk|@1+{Q@ayzk&~I#5RU_)e<9$ z;YQH-(0bc8nMUW4s!t9cUp(a89V(CZEO&-Gc#>Nrr@a=!JebVw)!BS<-Pk&GO~~+t zrA3IIMh6#bS+H-$^E>?p`2t5~UWOP75LU*@Xw2I&?uG(_801F^d$KCDc%AceSle!_ zz+1^bFz<+#fzS83+3&f%Q~#p-Vxzqoa|1h2O!V4)X>rk6&vvyvn($W;g35@f5?m=v zf#-=JV7-YY6N&`(0KUxX4!+J#t*m*ESUQsKhl8*`XZC)`jyRMu#sijM`m@D@^fs58 zLEG&nZxra?DG{{asSBMPRE-!0lV-oYEk$(OvokVBJo%*b-*y^ZUG5r{#gGlfWrcjU zzOZgy=iyFhwxgeaG|CH?Z45Q5k62hxdpR}#)F0<}_3kF0Ao8%E8sc~pB6u|N7L)Z& z@cFdf{c42H5fJixQB2?NPOIn;mS)i?;u8xtECaDZSQ*7WM)X{20WdPg=KU04KhoQL zHMO?5Nb~Ur%Fhx=QSPCDYVUkLn%%RKL(Xzj$ofe`FH4ApemQKh_~MbvpHAd%Oe@3I z=FT%)W`_{0;1L#{8~bs=TYpRZ{UALKdW!`i!)aBbAvXM;LWtS zT_$QjR=eB95P;A`ZM3^t3x|zhtYpMq04Cx-X>` zc@!4c1Z9uLSL$uJR^y65c6db#YO7?<$buBp?JhndT3NeLHU5U16YUEj>tB@CV8X2` zynCOOlOxuu3dfG0Nd?0-B^{1&9ugv1QNc{fh0Grqo!3DxDYC5}mOPq%{ow0=pqLGG zpJzs>+ze~wM#`6}c7Dzjw0IwZ1*N`SwHy0uTVuKhS|w7AK_jGl=b5K8Bx2s>ULa$U`lk)|AiBjR2{q5B?;{H@9z|)M5ih8|o zSg`3WVC;N2P1hb3anfR9LG z$;vqFu$8#DBm0MFt{WDHuC4+AKZYCz6FyQJnn7vAs$bSRmcd}dUR7pra8PYz`G+5f zBi-Q?ZB*&4Y$iK3kV_>jz3GjpdxKT+n_3S#q#Eu@ZEdyH?C?e3Q;|GjqyExOyo7Fv zj0kbzo&e)m#~>->@S}E{ znh%wWi|?I-Emu9CqH^`pt+jE6fvqXU@$J(XHIyM`)Tw%@UA;`zb&Vof#n{SfREzPZ zEZoXpW*;k(Q&K5=6)K%ZgJRW4Q~{@qO9%9@`o1WBia9IZO(~?0^u-pG(bIVmCx2qi zFAckGqv$utV6PacBQMw>$P5K43a) z;;X3UaWwqv3#{<9WfFL+e%c~5qCnV1!#6{j8sg`>jY!@IXdyc+ra8R%#qw~mkZy}R z(uM+Rm%+fW@Ds{Q+TSaU_()1F2}%aqe=;j)raX_>AfI&kLhyxGIF)s|XttSt!Hh!@ zc@eH-;vwnuX@t*EwiNXEmcJ0ryBlVNHZp~ZKRXtZHdbOUC6bi+hr;h=*zc-7TfnXJ z{&a<7=#o~neg)X%KgBL}p1Ul!yRpo2vT;i8XV5qOXKD&lF~EGV-U$nI7i5o5-y=}& z(9HgRkZaHI7>}O0XS1TGJ@?op{cg|^>q-~81t;KkHb6)IKqDBpayW)CZRl{25aZ~} z)=xwqj0I%IB)R`ikY*JShyq@X|8$Ah3m}$3qUf*JD|92=3C)Be5zVs>`|7zD(>ELy ze^MM2V#PJk<>TeB^YD#gUfjfG0iAcvX~y?MFcxT1nK7j&L?okdm5%MK-95y}pI2dh z$>$HTKYL~NaLljfi!e07#qgkLN$oMa};&0*Hj{;h~CH zkqX{27D+GNuq)WGqn1_KCEVyAJqG6pc;IZ<4cp%P$Ss*k@%dlxhoDJsgwBZ8UmC-yz%42M;t>g|m2Ab#a1psHgf;HQ`1*-y8M(W6S6_u5g+hsXeJjlHj z?d4?d$}M}TI#{=!L|oWTF#RlP41kE|^agRgRHG*t;cf|4B|swPoen5;>BfmmVI@)uo1Z`ufNa zAAgrQWgJKyR5(k%8#$O1k)??6f|=R-Ox{RPsJ~ykMXa@()m+!hetysGHTmKrO?bVW zQcN#fM77gWLJZN}x}=uI9uz9n4OD`&D&DNe4{liIrv=uyPY`NN2!9CHzkkBve7!Xw z0K?e9HOkd8M2%_M(xr-N{iFPj6(`Zu)`!YWoayB0caB*l*ytN9RtRU>^EJ+i33?b^P>-Ko~M(nFIj*HQk+f&lIsCcQd5C#`XQ?o$C-dO@)* zM#mWql3Z^={iuB@bGq;nn?F; zrM*wp+F6ynqTO}y@zitN|UmzSMVC~46r zH|mx354f)#ME!T(Q;pDwJ|tLIy2I}Y(vvI#gNZ(!>KQ#mGe9CG9ssBYCW8Sx>2jx6 z^EZXeoSYea4CQ#;sG4ENXyCP(?XHD*lLiFX{+@a}ol-boYrfdfsM2LqH)Q*vRteKk zR~HC`Q2`SCH@jJ_|IY9npU;}jrJBT)M&pZX(~UvdEgsz!1h~74RC|nHg3K)QwC~i? zE1d3$H+e<6M$8VqDGq`hze|s|jH4y_I8%((!tz;#Ez1(J%LYb!ko~$T=GiX!^jc=U zFG7eLjOMtm2E#sLypEVXSXi%O4v-T)+x>CS84D5FGhuEXo&yBpl42{UKUpj-!oN8o+HH%0{)e0x#a`T_BXO3ZeGe$-{$D zhh+`E(9{Nf@)28Um}4?l&N42+sxi{QYpQztA6Oe25XdAd8f^1)Z3Nq0SI6$)Ps}6X zP(V9T8f1EB?{%WH83~|*)WFhXuPJlDUuuE3d#k<97g%9uDd)TeltV)gkCpFy9tr_> zz^5vFPxx>9@>#Yq(60IUM$fG?@4jwy8m6YL&GS3fRX3I_I-+(uADa)w;q%mcpqZqL zR6l?h^#vb{Xg+T;!HB}GPyw>k9uW&*6Zy$Fo9DuWLDoTP@7_;b>vo}!8<~gqA9-CP zrpah$yeGfG+WAU7@;^ohG($T#p{+CW`_8@%z>*vRlmEY?1JFq3^|<=&e=WK=HQ2b% zAzxCllemCU`yp>d=7v*##;S4su~d_>&7-%mkqhY4Bk##d>P!>TlxQ+;&zBu2`W*fD zSG4OCjz4y{q-}#4Y!tp+T5FBr;Lj<~K{TD?#Zk!?6LNei+8;wx*1;(1ryesaM@$5c zw#tthCh$EIx){t3!^l%FH?``Y2)YfKA1#3MB1pQBBKsTCm1>0lHsz*>PV^^&kWE1$h=OKAw`!j*HgQItoHc}20fzi;|Q|DMW;RC!`82t zeIDvaV~I|($?PtFsRsX)(W&ic%5W9U-`5z4i7FzuG_%3bnkS@})iq&%AcFB<)T)A` zU-|7p%i^8c{n$<;-c=i+z(8rlbps7n15!8_ybV@M3_hB|#lnbT$%TBw zDuba#)2P;4;S|_}aPr8y(EEKRL9CAPoXp#aqON;@Xiij>Yg8Ls{RmZ%My1zpamFSy z6*s77Isx{~`5!J76}rO!Q)wk9IN0;;VzZkZPiD8TW6k(^n4YKETxLti;!L1HN%)8>M5hl_?FJX#gU#GtePAE zrpVcg)TB&~C*}9*F(or`=?X=?@h{i03E2@q%t#vwPQ( z$Z$kUReJsF>sek*1>b%8HC-RI1<40ihU+9M0kRS(mXD*fAWD7?S3XJ&Qft3&J+b!> z0HCAW&}I#Zd~=pyhgS-4bJzV5rb~tj3!$eb5H^X|L@O!5l*Owv9o1%%PT!abFK@n` zZB{j{op~^^K>;U@Y!N$Pfdo7>K$YwHrJO-)_{Z%nmqS%0S|LoEve%(Wb#>+L_@H@j zC)Yzx7$>{`r#cTIp4c&xGeoia}j~>89hGUE_=c? z#2`*Jw%9x!vVsSe_N^x=g-G+7Xf=L%Yb(~7opovS$>``uoTkX{4I+f%L~Jzq5uYn4 z_fJ0m<~N>^_^1;uff^1jU9gJ9k%<{m6jqWFwJj*kd_2v0C6e{Wf$9=*K4Xjddw7%l5efVZqzKLT^yVKHI=hAn73N(fSmj>rWBauGyb-XEE*2%r69_6 zPT4oA=Ii{s9U!}Ude5Xa+NmtqwOq&n4~Y16>No*ztzGjPwwSK>3i1u0qUM5Mda`|Q z1F8;n(;Axd;(+lCM*&JBGj`3eN)O3-8`eZO97#+ly*qt^fmR5UL{A}OV4N8Vsl-qQs3K)1Y*I<-!#HQ`;(fw`U zCFw(e3xOLc$ym*ZdFmb_)+=OQrrNi%k0a6c$$B)^li=RfhzD$q;5dAxSpD zE){z+Pi+eGmKm}vafLd?AHcM8=-OTr!{SwX(%jV;*xmTPHhTkj*aC`^Uz=BKg4i%6 zV3nH>Mu~-@WE}Qn$${V&Sq0S9S>m>hb9ojX{bV#!gx&;5tb3j&D>(*0`3RutC{qF_ zH6G&g7&Qt_9qXQJ!NS0Tv<9RmKUqRtWlj64fD{Cp#e_@Hf*~<(3WdZwJ4niETObZZ zlrp4m%J=Szkhc{lvy^;3+S*h7kB7UzE7~racjHmn2W18GXcgKD5odL_gNTNj6J1(& zP54Q)E=(*eyQ_`Xtm+(g{B#U*mP{FE5cQHdLRRkM=fy**Nb(1ZCY^Ibt@4HGBWK{v zeop3QXE&)#6wXE-nSVGCg+0w9B+kOb;sykJcBz!DzaM53RDAcyfdK2gN=k<<8P09R zi1!~BN*L?4^@ajw%n%XC2rH}L9S@s^EJZxk4ykIOrF*ofgIW0LfL``Tbdhj%q(rem zkMV~OcWQj~{!RAx?)8w%*xJl3)1S5pbh9DJIbVWQ^MNv@;FMW$waLSYRb>K(VIDR_KO4pU# zwKam$R2C|pN=51I>5tTqBpRPvIx+f0&V|@=t6feHZUt$X=U*1|#vBb7&kC$b%3#XE zIhiBHmhV?kU9r(GZn+eo%Vm=|Bil+?`uDCjo3Vbc)t^ic(Vn8GEjUTs{)q;$y8$?Z zKc3)4C>bgCj-CLK;e{dpH_Sg>SK4Mw$KIr<3k`q9we`QTF)XCG=={&bWhM09+C5iS zU}l3hBw2{yKCCJw1h$L3@0tK-K_X8HLDax#?%Ky)9~74ggYEB6_=;KpzoY4G6;%J_ zQ_B+-Vu4Z^BMtZIrRi<{?G*iNGPR6x!9C-~W)`i^?NO!`BbT#k87KI-UTZ1#hvOt{ ze&xq_l1kiHkMZHvReoUawW5iB^p{Ca#sPv-VslN>n&>Ix zW%IbzfFOz4z0KE+P1_D*xTi-Tt#5Yf=MOwEVu_Uus5c^MYAZn+(^?({@-BX;IWGC~ zVNM#GP6(7Y@+!Cok_87C1Ye}}SZcUs&GH9A{d=mZ4Ap`~5rr87K8E&0V{4_T2yCVn zea1ivN3YoKWjht&tr%MPyA&r*AHDCSw2&aDOIWhuT=T;p{(M1b|*zKu;9~SK^3vh;0Gq1tAEEO&zsV<#y(bw)(ZK8 zWIoPGgG@gJmf0))Xk?)H5CT@tz0c-5v7UP$AmMyYS<;14`VK#L8yr0_cs(FIdE}1 zAhPQoNh{uQhJQ!>dM6C_{$ZI!LmwZY*j6ehT+o7pL&s#F@;e^{AL7%Bckhy3Xr4Or zADq7A2pzRC>5KlSX)00srGOM&QmORGCtZ^gMpi@+QHGX)GTv8utUHn(W_J9iPeKYY?{dk;5{I{ zq-9tjRdlhz_>V|wdLY7}F^~in=!TLfD#25ZnyNs~K`Mpdk(^bW?r>l~iqvMR;?-dV)scR9an^Mfh33`+Y92`@WT#RnrFApIanMf-a zaEO>ukMV%;60n^?aV18vktjVoA)W^Un~pE<-%rChoUQf&2+Bf)osPJIPIYJq*6j*C z7L3>3sU*qp>Iq*2_LC`AHB0Y*AlUEzsw67KSYO{e5*75h!hWVS{Q-|gA1o)bg>IXh zL>U0|U+mPUFi`W2virT2_Sc4aX8)|o)zWWjjubGjERD9FkMDbsHfpFxPE)55vKVacuY^m!2 zNF0}C=SsfL8ou*%ckfbAo&Yrln_q#g|g1y9LR z2qSL=;2?=1hUZg6!bxzfsx&BLlq)6rvz8}W3w?gFy8h`PR)=HKFFdU*%2$<2dUpW{ z7-Xbo&TN%dmb4Gf6pEzF?hJ=Ti&oy#Xw{V>p__DFk+1(QV_!xSP6c>VIw7;)>l`mS zf$Un6U*wY55R-q_F(r1$7qbKRm-mFzx1O)E8O7*B%fRHc1uMix?e~E3ejxjPJ%CdI z7NsykSaX@pBNwl?&wH-dd5H$GRE#kbQvd3IB?1al#YuKQ7q@V2NBS>hj$sn%rnJ&y zy_a?BWcgGi9rO1Dg6iujnIB(%Dlfbt7(2U=oX&NVf%T7@LxJgYlcilnDrq+=#%! ziV8no%zwJeyMhzGMuOFyk}XUOQ3(!=Bt-z?RKXtkAl8jA=yUkU`z??X7XeJxxO5CP znr4l=5WH#B65o|tkl_($57i^k8O)P5y|Xbi7cyW(WxdEVhUbs;9MZC$E^(OtA#c6C zB0-%((xOgqW)4Wij7{<4zPM4l2+t&SuxtB`QE z&s9p`A45Uf3}0n`ZOVZ_g-eV3F^<>>!r#G9Qo>~LMx1n*i#!C!nQ$|(vlA_Hd|7%t z!XO^&tgqIGj)Z>o{C-(G%1srcNEWWfgHNP*QIZ>~M#L<46&MXJ|J50P$Lnw6@+_Hi zJfMB{4s9I<5~vRu*r9$G_r6pA+7S+Z<&~{H++^OAB$r2zfx6+qMAOTuJtE z*z}~*?AkHiouQ@42lK|L)n5B+ril96cdS&$i$0Mu6-GSDBD|Q0UC4Eyv+ef*6yAd> zj&TBbYFx|2tv|!$_ZbuW!v+bkuZ`6{F~EU7m%%bi3~f%1M~9|u<0lF-dmKT34sHmA zzgz$mjAft$`VUfATXKN>e&LD4!XGu3DjOd6n;gG?z!P|U&H}k;m59lDk9!pIP1Eqe zk6YHz?CX&sMtMIRTc#**H7*a=gmco=iG7UFBr*2AP(z|$1Q%HQ=r%bltk>xpW zWV0NyeV9DHW=P2P!r<5!*)4zFp#m1dWKfM?6BHiD#`TqVv`nv?TZ^07rVk^Ymm2<(8@5}YN`6BnmG)HKCrvGq?o4$|_fp-uN9SUjrfp!i z1#X&5VoNnLeQ8@^5{_r2u#6sl0#1H=dM%S;)&J7@5EtdXSQ z3>?m9uV!bAYfA^4V)V5eRYVg9KJOqfCef$B0S&}=@9DRY+N9gs%ogJF`X;u#%R^!=7`jWh`$e02_LT?i|Tm&2xm0Xt@vBrSZL4ybCo4#~HQ9TyF5&OJ- zgvKODV?lKjwIu{*h9GDF`^gi1&pgam(-Ll7vyonxOw)ZwqS^iz1smybNL0&oEo7jy zhjdtIW%OcS=X8Z)Qvds&(@KoWO5Hg68#^XABa$K}J4c-<1^&KKukYx{^3|tU`Qwxc z(6Quu`2jkliBLeL{IYrPTo8<<`cVx_4C~g|#}H>g>*0eXc#KF{J#m|YK)Q$hW9dEUb60mEcp&8A^(63&^cjt-Hz_Q3jOzSjns zH}2Nsv^yunbBuD9J182Ar5p}f)ND9b@1-WUJf)0)nMC=#oQ8GjOsFjqkyTOLyn+V+hfn3OyYv zRrzyAylmgrjvAGq3;Q+E0%D-jVT$0-LQ`HY2sd=XfBd8Kf6aLMSoL&I-}^KO*fL=v z@_tdEBc$LHRGWW6`vH?LG6(0WVUEQzKb@T`CTfFhic=vF^~;-dX2FsMwSFt=n<2#i zyH+2Ke9bSL{22?1SQF=Vy@s{3yxqrLtE0-V``%h?%!bmv_L-uNIw9Eg@JI#FpEfdP zC3CiAqGfkD^I6V2Q2wFlzxhY2s}WCj&8VCASfP|Km3wDwn1XwXz&N>Izy*Z`8cB~5 zxpUj;bp?T?_dUH`Z>W64mc@Q$b#4~W6=Cq+_G2k9?(?qF-@9_^@ zp$%A}b25KNIhZelGhK0RqMvpf%O^JMFaixgeD)`l!YdK>OVNbRcUDKwjouAP9qI0^ zF8bef%n0*JD#^;BcG!zl54WnAS0Wc}d38B3D4H5HqExBFi>H35I z_ygq-P@2gm{6ua&H$VtZ(iC;K#moYN7R+3Zo^!!)VotdKQNAc$W8#n*S^WS@;?fkN z7&0Y5Ww@WXKx{u<>)#PSqVWN*?og)=tmnu|PVu3}w&vOO5huPO(U3cj)5{Q_PZgus zPDRkpLnhfoY4d!DSgVcpubgvoci(X9rTyH#YKs|znQOs};3>t#qTyk(Mc_?y_^jyL+Yf?M@c1O13QHcCA89F!;55vNTZ_n!Ccp64OFR?vdB;$5 z#I!@2wCikAU7DT##1Jw6+&oq78id|Hw+mCGnrzE^eHg(+fe~Rjrjo%?{kR|u$KtY5 zS5x!wvz!TvKg+3CI}uY6(b~xPGttNnNP3kI8`pD3?l z;=R^ZF)Z|JY_tp)jAxO0rEN0_sIu=;<{uHMlux_-zK=l%tOd}@_%d#Rcbdk2i!AI> zQ`Q3LLSKy{{#%@j|1XbDBV4R~L99p@>G}z80jT4ForBIG1-7%L<)KALPBXh*wn)%v z%?($IV?ys^N&}fAl1`(n(7IeSaqD0gD-Pk5?%KE+)nBgyx%IH7PHE@ED_A}oUwe*m zukv5JyGj|o2_KvC&V)`MTef0Pi}LtL4`r<+|Ejd26+IzI!1TVnyv%5riY!@u!RI|# zx*Z5+CYPl>tDj{{?mrE7$|&|%*$RZ8UP~K(dN-yb@{W@NIP1e~sEF-NXF!5v*vr z-fBoUOI>%lZGgAZdqqj+)~IkE`KBl^en{{q(mP5lT@K*Ch6|itdV$q=21ClGt(uiG zf3%8xI5!~hP_+5pQNxa`wFiam#*OCQTd$#w6BTTN+qG5y_`>cw+W$bkqSx!hT8HQS zxI|ebmRJZcP~fEtx#1^WVuWufZ9VYV%Hn|;@BRp!1Xj=Pl%u}jh^^yFR+rGl6vZF9 zHilCxwwnDwv8?EiybKZ{he7w#CZ1zx(5{3X)^6Nx5Edl3(k5Ba_T+$ENF5dHP!ikH zPD_)LNxNW$p<{ey5!t*)CX(x~YsSHGOl(23MK-d1Zns4X28RTqe2mQJZuWbremkxn zDCdR(Jz26_!D9^ju8RUC2(QZ6KZDf8TlePR(-VKoR=jM$e*p^3$e+*v5kT-qD|s>w zD+lqC6^}9qHMaglSmLnXD0MogGKTNq+|2q;`3{pO(%EJ)l5EL#ee`Bj-F;5$?pNtE zQdgY*{F(y=i4w=HAgIc%ALz!P++G5~vOAaC{a7k_#J9Rmb>^4(ix2K_-8;7o=!cDs zjY(o4lptqK{1x8V+Et6K+_$4#z{=@(kY30IvIg`VY;23w<{VhBFLf+(cf}B_b*Fu0bhGB-#>j`xl9%KySA$< z$1?wrC!qudxT?Z>#EMXwEhC@#*woMj5PcvG6&t)vFygM3JMUA;$^`ZHt|*j%7@IjJ5$aJV*dCKp9Kc@ zzdRaP2AFv|n1oRGDz&uv@F%{LIi3nTG7yE>4em9b`BT#@+R8^Jm-3_|9or{=9QQ6{ zDZ=A97ia!#*zNR=;WjL7I4u;EIQAQUJvR}?)X4ZBQxmm^UlNO#La z(*l^Of$2ZZ*3n5y;$+C4LQLWMAXErm_l=uk_9r9PYfxB@#o^7t;$k%+eWEhr(1ld_jO@{vW%~Zn;RPbPAV^%;Kf6!lk=}A`t!8yUDIET zuSQ(@sn(j=zSMB+nJ&oEF4V&*6nJek61~@@bGtxQEeZ_oI9R8^^&yvhCNr(|l0RB_ z$@oVA#;fd%rZ50E1U@hx!2j`C^abBk5N@gk#iypG4DiI7Zk)m6u4@Hb#iMdmMEfu8Q(fV;?v==6_*O#>-J zfWc}db5ekB)yX>4uLPh>9Co;{rw#r-Eotx_;8%WSphQ@(T6pwPIwqV9b?vQNDV#gX zpV1Vr)s$*gkt|b1QVe+(ndNjL!i|K{Jr2qnB|umaY3jAUT|fPMW~+%r9twZZ-L191 zZZ+n;yldBpK*-Zubz)?R=I?Je&mqrr?C==VU62*-t#86F|D|BdV8NReOQ2^4c$gJC zKfq}t#@)ZHa4%$#Dhg``#e8KBhon8l!gS#~lVJ?Cqx)mmM!dtCcP0>2v#h^s| zL8Weoox7z{(SX|o)B62E{T_t-7sTj_SX6K*MKaU$#AqTxbP8YSVN_5EJGasO3)qu& zk-iBD@LbK3MFsa>doztgU9MnY(B8>Nh^qRJG#JI>;-sjoVD}N2Vg=?tk9EI{om*2u zfm!z~p1|C)-}dMJzoYDX&7am6bhNzyJmW`)FGCWkNmcfV) z$>*q7C6b*L&wZ_<%1t?A(g{Q(ZX{BpixVf6LcERXbL|gwDIYBj!Y>V7FU$*cqK_7R z=ZLIN|Lp8qrb|8{`gp_g zOQ8gP6w)Vl_(2CIFbbdfoX_X!CSXZ!q}F<=Y7>%HKDHQ^iM4wFJrzc|?dew57Pt5d z)^R@>PcjvJqPl0-G_ol!V3(iaoP%q?W#RJ6Bc!c+dbddKt;vcxHo04Og^IFOX|^*l z)FP#)x%)xGIe*&k1jy4fGdJJ%%5e-z@g$O5u_;HFPoXhPVeU&u!u^kAtai>eU!|(& z9*$|%qN3EmZ#a)--QytplaG9lE6n8qU_~kivKO}E0Lsf=8$+^Ey+4IPqla(!TpY!9 zeN{rb%6M~9VAbjzzP86+2h9ZDHFm~Wk@Bd}@oy@7#G?%uk-qT~HfyR7Km z(%B+Flb^9@kx5Wao+eIFsR8FZlE5p4?~?HY+TyxXie+A#j0W*s978?EVMOZ5&A8B8WE* z6blb9j4ORi(UqFCl32qOJlT}CFqnIiDufMPXnJHf(uBFAwOR0gwkpWmBiiBpwdExS z>Ww88n6_))KzKb={%9*`P^Ny%8IPMTEF1zC5{Q>olDK_Uglpg71=g5Ud3gv^E40PL z1p`pD{?bq7hgf}J<^cd^X#o8JyFVGIhrocijU&I;u)j~=#4bIBGNsT~y7vk-fhllh zapq({w)z~ADEYpB1p*;k5Ch1e`sLPT`b8xFQ6>N|)(jte47=UOcWm$&eUtuA!p)kZfxaq0KZzp?M#jiULE>WsXj7@GzD3O+6^pSc1K&lOQzg%L>C&Vr;U!G zQ+Q6MmXWFOOU}um%?U%fJ>?dnxy+@)8Y0(Y!)%OG2(fh55l(ba9gj5SU`)o7#hCrh zxBue&p6{RV`#sO+`}w`zueZbO96uGxwAMOHFh$Yy+!*-V#Zd{knfu=nZXHQi#Q8d1 zs`72DZt0|*uTvjhGi47QAYpiyw->N{@6uOoboEHhZDC)wh1^oWu0|opXXRq(?>;bIJes=$LT@gqm2P8PgL1>Vo@elT4{8AtmL9@ z<*Zk3K+I#NK7b&*+mzEG@7Dlik~O{C=r68r?SIbLy1)K^umG#*hSbHl^i!?Gd~sm5?d3x%KwZ^1VrLeG;2X>3vvVE zm_$?42jvfmt-fgteJ_KWjt>Om!?TfNdVYGD^*)c0$t~W(j9jC~zPqk8ANX2PweA$#bGa@zn0q&voBe|uq9I6|rEm4_ z=ABdR zWT9=Q)8OD>2(O9JT7Sy4)sP}C^t62Cke&8@!}&d_VjL`BLdGZJJ&*0x217Jko!np#zKqmT zRWp_)+rYEoJEEgzeu%U}^*3*;I=8&*wq44;=o_mdpShbTf(k`PLnyd&ta8zRl{JLH--Tu~5))>>!(|!K@)`iEL5!G)= zBn}O-@FdAe*x(4~pdIu5dpnfFaO5UkIa=_1!089hhR=PDlqV%8EPs+N!SZ2v^B#Tw zP4QHBWWuOj++tZw<(n?iR)h@b;V&mosY-vErFjY9O@Uy*0rxamH{%;Lg#H$@7HllV z3EUUQz*5b%(dWhZqdG56k(>(dAd!lPDPJyWB7RilxxnG`Ln*{JBmQcCNnRFCqboZN zkuo=DB|`!~fj3TzI@_kd=2W3+r7N|6#5r!YZNc&b%ausVik-60BiU>@Eu}>GYZvqk zXnC3w+nXlyj2&`RHFTyvBuf2PPT+37+P_^FjbAjuC#^dv6~JLm_9(Oe$mjEGem+t? z8SxR&#zrDoxt6?SNtO$G>@?fKzNcIyFF#G!MJs1tn%z9EpGh67$?sPhZ8v+J$iitz*r6-EI31kWn}nIV9Q>q^!QNSU&{M`oz8v&<#qy+(KK^$NNq>+|xhDKVtQ#z!Plo3HdKtQ^?OThW0L%K^^Qt}<& zTJMi|iymg(nS1X!d;e-jtEXDtMR2EoM!zdc$p+5msNvz3-s zSCE!waB*{fW9wiAfv_h9B#FuQNYM6~XvuP>5_u7O4yb4DWelNFu%eNN&*U<1(M%eeu})5R#*BRXjt6 zq5YF*EV?lbRS^?VLDk8Q9>u`&Tubc@Wz7+-$;Hv}8P|`R*5O+r?9|XfNVYt!MY9=+ zGx4yKf$&zqD*Txe{;|;USILJgf$PnCe`vOnd(elWG&857u4#HO&#L*pQipH7yuBo{ zlk6q~O{Ff2tED=-r2%Sp-KLU;gD#nyRHS-Rq)(#~HRP}mdQoG=N#;x{*RBulqt?`t zl%D8f#nBRclMG+K?7Cm}Zg}JB`$Gl)d&uI$xjQPHE3Xipp8Adi#}-fY%j}S6Wos2L zLYmaZXy`cIFyGaO#O}sFIYj#?(s`7^MV-w2*A~Bz=_v5k(g𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ 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𝔒yI{IYU4C!Uqz_ zW`lM#BBGFJQmYET)|QTzhM?iv>ua=1cef5Z@0)sXTd>WQH4ix!V1(cP8yJXscz4qjbk`*Qg^|!!Ui#5kVg%pU|7X9hCn%?h zpJLGpd$618PjNzg-@JKq^qt0;_Ih@@-K+N4=FSuKu;a3iv$@>Fo+^U){i{As!+P3Z zRTlj-j&t?;K_BpMH#3}_YGJ!t#l`HYuzhUU5qSGz>1wJWE@Jj( z_d|HT>?SJcY$GgR^H^99f~qE#9gUM=;vTHNdEn^i*x|od)z1+WWxsY$EPnNA*ng8u z{O&lRqwl1ZPh30!^^rTwO5d_ZpFO6!u&m7SaAIQOiy4&y((1XG*n6dqTxP>rVu@BW zSpl@?rs+?_K3)sVZ@Ju4))5c6 z9vn7?`@dSW*00}uzV3fueQo_ zw9?@ESeSKxR&glg`FrAJ*4D_(XtV@F@TX6<=bx-q=NWOk=>h@*#4(PR>EBBkB0aCy z*T1qTkXFyY+E4SjS9VSAg^B2dF*V4mg6{8}H&6b0Mwszg^HBS*(JXadUJAC~Y;fl_ zH8uTSX-xf3?QL6s5lJ5M{uSj-14?_1EaSasmp>yNUN2-nHt@%nniCA2n~+Z zqbWmYGdDL<0s;b4eWU@!pNfmR*{y>$9WA{Ix8~vfy5E7^6{K$~il#1FQ+^z7cs~ft zp1gY9Hi&{lHH-MhcA#TBeBf#*=99+st*Wr8Wz8dhzUev@c+kFpB;_fuqPb&h?N~Zi@cI2qDoBI3HuDDP&84-aMu!oLm|Q zm0g#3R`eQw6QEqQ_cl=~TS{cX+nv6UAjb6Y@{%H#T|arNtfn?T*cxzsP889VU}!j( zx852q#d!2@3tZ>92&rbjebEzFkqcJ>bu>ZN_Ho{6@{z=N^ z58d`q&7yZcqC}`_b*_&&wvXCAx(NRF0kwg{svyPpNVdr+BA5L?L+3WudkuCE7E*os zg#P21;Xumt0y8^b{7=f*$t+#fFgq-8$pfgOWpWD;XMQdR_tRQF9VdUW0(#3J5@E8= z%bN(D!{<&P^RoQ3)cy`w{=r6`kxvBBmCzk}3Mr4vu#<1C`K|1 z<3|)@#!n_%BI#tAw1Q}ngT~vQpbPIM+TRBU>9_a!QVDT!MvnSZ_ku58oQ*teKf;nv z#vJE!J)6|c)8@!&YQjsB$DMI_3`3dQ+7=arHZmXkO6Dx}R6Jyvswq7S?VMb!DBKRr zp4NPM;psE1@!(8vzqvK#CtatnG17=DQYt6dtqGKpkf|vhJ!H5xNBG~rZ~J{Qj(u)U zPEOqE>1kMx`wYuvX z$?e64O6F4)v0`$yReU4Nz%7zQm&)22ou7{bw@tH1#+YOd0hK^ZMitm5=yIg0Ws7(p z3`#H@=_a#e?(gmS4<~aUDyR$c^Hb8&(D?OMm*zpTcvVikRK_pOt8n8js;p3yX$5$o z?r@|g4sVgf_K`p%(BRt#2d{K>bty>I4;d@okmwrzo-U3GB#Xqftn)ve4AofuKJjN) z_vFI5&@>9#LMi+;$n5g z3-Bu9NX2|rE-tP+2OFF1@8(qlHzf@td3kvXkZiQ0LdcXM5=&)Vz37($v&a#F>FyL~ zT6+2`j#Me(Oz=H7skXp&`R(IlpLqcijp0b6SXsl8?(&WMvoCGFUHWai60-5Km8k{nDfFfd}C)KSx!QHW^V`SXk)k>Gf{@ z%orUTlY0Ip!mQFvT0D0&Z(zf1VC#gP93L|e8{#lijg^_1+5TXH=ELMkP#eCkTFBzl z?#lFxYJ+YIPA*kW*3$e&ONSdB!U~^+<9Lb?`nJFzrld}A+~bW>NCfU>`BYa>_g}p z%VrC_O;u#Q*_IQR5~TgE7IdX0`e%T-@odWQlT=P+%39;$L;UbqP{nV2*~zaC3RE)i zI|RZX)6;LE&D*7Kn!us%u~z!D)L^SZ5eV1iPPBJDW?%`f3?wl(uEsno{_v%+5U0zO zxa03n=gP*$sKv$CqPM5xjaR=*o_h4V&KK+0)qOZM;0-=pU%BUhCdIj-|5N2iHOm*j zW!Bj@XV4&}(>`bLd3ph3k~{+yG`FsfqN43Q-6D}^dwW}g?@`}Srbv;RivM9(mn3GG z$B%&jf?+M3G1&actkn;$pm_Y+sIa#ad3}V;Mo(2s0|g1u1?w_+O_h zZSo*XdU`rBE~dON9as*c!#(ggRh98Ot$fYDC*y@`K_cY%w;%8B?xJ5Xzbc`F3kiLy zgzfSot!|$NKjyK2p(5R6gbe|;Icuv64&_tnu}BcZmep|SqtIPm^gH}_0ZWXCcznQ3 zmf?F8j-43t zDB~J72py@@J2FVgL5kEiHtKEsu7VN7uMrbP?mXw^sDJGrtV`{WpaGdtC0bF7atE71kXD^1QX0q&dTjKNiaztI z6R^#uS~RyuM@L^n?&Gay`e7)=L`eq9893C1cB@1Wz!uQFs`N@@f>s{$Wo_jYb9fjR zF0lskzO_w%MKK!?s6k#r-m|MUC52`ea1iKHl0UY~YJ2l4wQH84hhnKA(9f#kp?&FQ z4H*UxiH#&XrG<(+s*=vX!EsBiBW1!vp=yh*_jc>irBYk7;vu=AjRaS}it&tgub@pd|p%P^FwEao`*xWIzcL@P|7AC%%pRC(2LLT@ptE+^!AAjE!u&VhK6fMIf zU&sp@5oiR&m}t%AW;QmsFaq`%&9ftpR7DD9X|C_Li5MXg6odVN0}jUM??1Mv$KtN* znDa>9=((*w!jg1p;&?~X-N{F|<*ePr(_6^4#Wu-v;OAoK#{F=n-GnT7N0heR?vs~p zVq?c{LotcTlvq*QRQ4Cu^?OU@0V?9+XTv9_zJmcVp^))vQv*uDt$>T?2dVGP^ebT) z5msiuQG5og5zRt7>%O--zSln35oW^EchIKv_=bgi)C^9xx24dVVnni+W^aSx1j4|lYJlyfx%(v!mZ();mw2{8;pR<#% zlg8Q<4Tl?QVFabTO%A%j%EVJ^c4;pvX6`O5o=g>Pd5IL_DQ%rH0q-@_dxc&Mrdbi5J ztCn)=;JvM#hQ>nQe*jEY!=w?XyiM|NQ|?Z^QQ`HrZ0XV&6WCbq2$0^i*xrq@`1PO94UI+p6L-t(@E zl(JrL(^-oPjM|5{T_~OQz@awjL<-4f>8K5R(P6ENL|QqRK)-8L|C(Un&E-EDkk?u) zHT?5uCf7$4sM9gI>M~(lLge^Z--_c+)nDanO6F@8tv<~th&F$|cKPKQ=VyBQ9HjGp zcvLIgxJ*j3;!h)iRGSSB-g)bTMMuwDBaA;Tt$}W3ma#1=!M5pqm8U1i_Q#TTPxI-a zn{6hCV#%Fj0r!DqEw6K=+b}gaeTIj_F@m-2ihc)p6Dxg>({t1yA9QtgT4&)r`S5QnpSs88OWyWaQFU;G4!mmQ*FFOu z=0g^-c1ovygMn9p7J3AS6&JL>S+jprr}?Ig4&#<0M_jYrot)w+cg`;^q!EZp7=g+- z11>s#I67%`@8AnpA-5(YJ6l`Z_Po3{M+b+AcvCtYF>-vy>|xzh$;n)nscyOHdMLpQx*HFVY|Q5$*+nEvx-HJIx)8Dofc-_=u^VR(fcdm z9x2#Cp$w+u1uEqmpIy=Ag3Y2T^y&C!+Ot)29*@IEmzEMt)xV$b&w)m&@V4#%?GwO* zC&S_ojHkN@&^saf`}>WzQ*$F@W2+*GfiXP%{I96Z>u!v7-SE_2{$+XWvyAq8c#7L!f2Rr>~z}GDL<5vJ}K0iCV9rD{AVVw6_d+#YUcHq8o^0xJKObOt6bi!p! z$ZWJ*u;Q^9Ils z#+cQZUL`fP2SeH7;@3G30=CD<)I_WJ>lgO+_6$Xbm&`?0v1JsbnvA3vh`;^#t)SU? z#(?YJ*FCcTrEkQuGvr!==Cfdt$B+~|`KzFN?0NqaPS8KVj{Kw?VekMTmiMoYQ6_g| zL@czIuZS>5W@e(x3>(UAqgmTt);ll7>%nyTm`bd6R*wZEA|hOd#V$&VZAvno%O;uY z%EPI`*|PmfABde2r)Om7a_+G{@9yoz`}9eYojfe{;p&@7j~EiI>ZsYcv#MB?O1!NG=ygu_Tj2`d!({ z6+OP&rpGAehlbF^UjEv0_t_9a!|%}f-+$1ntE=Cekb$KQx2Bka&d%2= zVO=9J{P>vZSi!sHEsp^Wg+n{5p?dI~4~l>T0ex!rn$Um!`D5{WMwcTtbWDxvWBXXN zVfU!MRk#X4vy;R)pD?4!I3SkfvhG)npMB)~ZL+o!IATI=_;n0eo$nsgvKJ@bG$q|44Fa_IsD>}eE3;1g@q{H31g?Mtn6|b=P;z8Xkg1T zo%+w}Pf)SRW!Yn-m`$aO5eN$Ijw}2>GqlP*?`%IMT78jWY#~HUWub=bt#{>LK)g0jx zEKP!rpHF(#u)Do)9I19Ef>rbvwisyquGo%P7B4j>Mk)s)NeooY?L+*~VDl>ZrsHZ@ z%C2ADl;B^TfQyTZg#7WH{PJ?H-@GkN1HHpWPO_%z4%#tAmwWdHQig_P-`O4>p$=sk zUg>Fbu-af_NRpG_haYX{B``fs82@4J{bZobD3_gyGIlgSbNvi~=tFUL#PJrYSp)_? zc6YBy%g+ACrLb{u02k1bHH_;sfA*n4=U#C2`dBof<)E1Whlp0MuHUFF(6i3>@U7o} zZGY!tZ66stWk)>kQVfTwmze?-M}e5+3(0w)q7leV#O;ktDX6 z6#IL#K9~aJ6$Dp;ZThbo>j%xkEnhyMOpQ9|q1aCuBwo|@BUI#*eq%>RJ1MYje4UukRy33ZD%%A(xmbk(a$2Zl5^V z6v~M=Xn%=9dPX!{+z8j3YHMptgP$+l)rcHhqzMa)G#?%Hi{oh|5=Uc_5LMaO6Rwcm zzv}e94@4_ECB?>WKKgtAE$m|`oEpO=REp=Xe97}aG%ys?qxa?>9;cVjDq783Ey5{f zkF|@m(T54t5rm@sEx9@^nq7QQoI-4;drN$QHgSAo?zO=~&eh*EA@4IV|EJD4ntFM8fyf0ZMjStqfI zqM)XROiN1(K{z!%M%19Av{c8=^4HJK4j;&kr;cPs6#*57@^de`dv^h8x7e!x!}*hQ zz_OZ;ojF8bOKUtPT5X;%IsNs^1gvqMO51VBW8b45QyAXTT>_r6%GT)kWX$zrlB3?B zOeu}Q<=KGU<0BLD&J$Xnsj?AD7RgZCU+Pr_JIilLnw?DT?Ch>^#4pjVF^bfo48dD(=a!1taWT88eibf<(N_dpAw=)@NRu5Y&kxAd zVb;fC9lPK665~V;e>wVoz0Uw`2=t|M_!hbQQ`oHE8J;ULu1ob$_4% zKvZw4?w(}3UMF|pU-z4ad+GlBBVAjExkr*uQv20{;Nb}Y2EEsZD(36{*w#T7U2tXL z*DOiqEnkFXG&)D~7JUtk?HJ7DEvZgC3+@96Y(0?;&8F;SJ1Ta2U1+(^8G*3Y;6-a zx%Yao`rJTxrYgXpOTFmS+dwLpVUncD@}YKf?zrXu-rv6iDHykni;Mg9OQ=W3tTS8+ zZEHAN&QDHcL!d`1U`=k9MaHk2x}L2X(f8?mF~iWcps;XsW@g7wWM*+uRU;EArj*hggs0DR0b= z^4ICi;Kp)2>L+p7-t7r{aEFJEh8Iy37P3L}Ut+O|vq9#iYHxle46u7BA)$u&yy2}> z>7OKKIpB;LV~HnO0Q*Muv!LXPI08YE&<}9%O2%<)|C*P@`4oQ|(n6v0l0W1)xtdSK z9jWRlYY(aZ-B?uLyK0vn0i1~Xdj6&56pvdNIld_scA;u!cYDBfu{jaX%XN3-XmgNcdAufqBX!L(m5*RZEmp6h)T`p}g!aw5?!Ny`G zn4SuiMBqp0M?@%80>KU}C6~*i6_lFz?Pa zk8wyi0-Al@n5EF!A|RQV;()RN8^j~rP1o{p%4A3%n7`LjM)e9gS3ZC~-IP&q}1tk3+p=$~jg61CnhPtiRPIH)R9z0hu( zp>jf6pjc)q7ub$b{s5x2b18D5xMU&`0sJ5bK%F!r zLx-fbKIIeU&gAJ3ik{k_?{@kk2*h(y(Kv8hl~q*!=0Ytg@UbzLe{JL%G#J*p6_x8u z0XPFJG(Z}SxV8*slm!VxCB>FInKG*D-i2oVr`Bk%3T>PnHo(dZtM~cwvXcqQvO5Lz)O;&!=C5WLY;f+85 z>IR;rNK?G~J2aQQc5=67_+?l~2q)E}N8LqQg(IV*A;319b7~=6QOBj+LmJoL>l$yY z=<-RFCbKAv@CC2=;I!$TJ6h?#VjvD?Q9v{bAET`FBg%JAWi?wZMdw-Nii>q7uVwQz z04`W^(xkP2=FCEh)&t>gJwnIEiA+RoX#W(uQ=Y5S z9e0EvtPsvMxSsGT@0lIZ!ncU)za-2bhPQT3TybL8MMS*zI;~%x=!+irl2yv1;O^8! zwI2zB*Mz7FLI7EU!C)Vpn|BJxtcO0oy}-ZC=ME@3T@HH??>JMPAGRi#_MOL59ccwb z$KTAqo8y7$W#sKST#5t%ygmI6YyPNR?7F1 zeMtRY4I9d)eV}ejaM$z(9p7d>tGix+5!vf!=o<~k?)A|uylXCuoDfC|wDhNuWXz+|CH zk4Q>VqN1Vcb8J|Mmue3l9o0zR%*x8@8`FGLr3a0TJpnk5JjE;mo!T?U7HcxIrD#%WuXl*C|X|b3Txa< zw+C1tLpFpf9td`)L8wSgDhL8i*7>`x#SZd&HnT6KY#xE z**Kn=_(_8QOI>#?w`a8`Rsuy$_Rh|c?D+pI*8s(bJ)mlia$f5pZP}&X`?yzmrppBWy3o|r}P0g+5`Xl%n9c*ZEZc|zh({s zS&!5?pEWMfsF2IzhA#YwgPda?Fk^5ikluE%M{n=%hUKz@bccN5I0E^ZxDZqF%XS0{ z7J~v>vl98+q$Re1*#W;$hA$mK7|P?FV`EHz{#xyQGShn}Wfqky@gBFyNg;W=gJrbK z73L^rX3-j#@@$z7HXSj6J1dnH?svv2PxLAAtFDK$vonR`#ICB(t#w6-BWi3N zOoQjIhsEzjUtTl~BNkv9M&4g4nG}|*%>gPCbl-#m6K#9%2?b$9j)kSigvOJ{&E<@b z-v5g_fba_yJ-r-9YWG@#c)W{X+**Ia8c^8FyVbLOR`CGG(`JMQ?wfMA-`1;qHiwku zYRbo(QT;bOJYKMLR1f(I!rE-V?#s~4ieRSWuo45Z` z9<%lp#w)&;qm->*S^s1TEcw?I=RjA+65T|cSBuKZ=qg(O{1^ev-~L9`h{$@-uST;- z6sgSeoL5BJRbf?^B38C}h6y!WT2AnA@q2eSdYQV{Ql-GC1S#$T4$zidk5^?|@2(^Z zqo(R#oh5uo_Gc%aa6%>J2nZWK?u*l!1$1b5iF+qHrBu#NK^ zOp&U358b@F4hzLoX*y<#n%j(vGXw;Vy3^{TTtCQeEqK3!$U6DEV=2VPMMst=I92uP6S<7G5`D( z_0$lG&-G$2QSzQXAetjIEd>dvw&F1fB*froT~degyCp}j{;b)nDMsgp#vdi%2aVg z3Zx?w6Cpc0)R>ldqHN1RU3P<|$X`qNtWoGAck6F*gWO@th{$qk)2^`RDsWh&dT_Xt z3tXk-N57|lyLSWKN&TW*%2~9t5;+Sckz|n##Da-9G3Udx7c{NJ(?5&{>=T+)1}&*t z0(t{37Gl9V)#{%5Zx3oPH(S|Q`>rpa^}nA(%;{0+lo$%oFY2%n1u7`^@%h}t(b?IE z`g*UzMjvCJ2e0|f;=UfgA72K%Z)Ul~X>P@)vU!IB}fZ*Z%G-XiR zAU%UMz7CJIxx7L`cn^t<1u}1ZFIa6|3ru>IoG!P-?}e~VJ&omxw1M9f%79xd7s=of zPtT49Cw8hZox7Db^&w2hnx8l&+&kzXOCEnFr8x<94Z);m5~l8xXe#v7qyo;@FC$yzcyiJdOQS`c8z~EiKllF9 zoHAqAJ}JBP*OoFjcx_gE*woTO1G++9_L9rm*$Bs@2)3csnb-$w=)>k~VN9Du&T?ot>TZ zqtCYKJ}co50W3Q_%0U5%URqy6U6Wi}dva)JoZ|sxq>D!sia{lE^U?(tDR$U`p=;vZ z(8d~SHD${zv8%TI1t(0>rJN`HdI*2gBE;pBE%XMWdY~lU)VTb=_3P*=U;{x#z~s&+9Z#Py6WpX4yoC z{8?hqg5Gnh+tEFvHaZfYv_4`UXC=4?TDUo$%1`JIMNhUnBd%DGss#(l0=U{t#sxKK zqk}1IRrf=;QQvdhCl4^ANiflp6|GL|Qkx zF7;PDrVqE@oam=NF7N+v5{4g*Ub=2wgNrExWC@&DPUg`MnEgD#R-slx>>Kz6)`g6J zV4IZV-vk4{h+H*XAQ%m~;E2%{fo+ynDoxu8`$x(Vk-30Nh~bqbOUv>?B2L2l=E-m$ zcTd{k5ux##2K(yl+j+W2p1 z=*oahQ>CrdL3l@hvL0V9fi6ErTvSw<6AdM_?*1$D8fArL@IGQ;QM>dSjV%0pZYsoz zS|-oT!^>0C#Lsm6)!t$q0o0niu-Vq!{0&;qN4Do3A9DCK{(Ra0o`UrOgdg zKhu=KiKc3`8kSd9M=`y(5G%ujHoC$K`#MI|>OxJ4vM~J;Bs&&rBr>DX6(9}>U0At+ ztxXR+3ANQ(`Bgm(XHE3M*ijaXI7cc^=H~+_tOssmXBWD@vm}}2nWNshyv*=VK~{VL zhfAcURo+CkZ2tb?@kdN!8=$=Q%;7DiLCfmm8bV27pkwJF`+&vG^9jmj)EEqO6|f_g z6p5rvSh`4~3l{dFUi-5uDOg|Cr;Od@mY;jCouwiNdcz4Gf+%Ifs+nT)`seY}$^)u2 z>@PYF$n4G&pL;s*Nt7F4r#DYlu>d>6CyMIt&NIrw+>!=1nCU(@b54N{g zXI}PPYHbDARK^VpG~JIp3P%THq)9c_XHr=3cZ&PqP+<{~5*@_`slstvko%2`kI&VE zjUlp*9B@VD)k)cy9X!3gJC3v1PnYg*mxf=r`nV>2ctL{2;_{)u7F3yc<-77Mq!ZjM z3M3uNiB|d^-gTX|&@`mNN4SU|8*`?rg^kU(V){sL3nrEEr|^!_L@$B=wCzZknVGlu z_dz_MVE(}$Cay@^T)P(Dh=;_E3lRXw?A?B&z+#Kf?%hzzOUugY>bTk4O3TW0S8VVp zhPnHg}sF1f9DR zP6&g2{qjj6Du=&c{Pm*1_gdwx#~+oNaS$cKSDahxAF<(h2-RLs%Q2ba@6&F z)%a+^a~d*)|9DU@)!9Fk(fE4Ha`Vd*G=v=w>=1}!w_MI=DaOc^ z6?X`gwh>J~;MvA4UZYOAqTI`!AsED%kHe)%Ms2$ZWqf=*QAUZwFQ1c7IVhjIzZR-y<XP`Jhs7J0isBWrB}r{NNy-rTYxWw~?%GUXt!lEH0{2tf-HD#uTRK zh5@w#uwH_6pD*A^N&)Jn{`=@u0hN^V@FxL>JTtB1Pp3|;RFW+k9Ooi{n9wXPy2GWY z!<0ZuA8$}=dn5$~LISVAKPB4}A-`)HCNRANPD?ql|sMB=8` zejmArXsvnAq;eRv>!2uu*GPf$x-e^w+PG&a3gdL?R1satVO6N=I3Rzqq$mIx3v_p`;1OE6xX2JvJGSAkhzNsZj$`3!Di&Q)j9uDAp^$Rp!+~z!3y4fpiXb& z^T41T)|kr5#G3dP->MiL?dH>UGOP2FMYwtgQ6-ME;2wrNODses)(Zy%&6`nQKf5P|kb-VZB;(kjXi1v=~{dDRpp8Kf=%nOj`Rmn)E zRz@e4avHScdCZRQ5y{oDVB5wjwccW>U$;PS$k^KQ!qcNxdYTXvZyfLXZ*^?#cVMcj zPOvw#Qfm!DP}rpUo(}te=K~^HNLEP|9)@9iBCVWpc=$XhLm6~5v=#=b4H=cUUdppE z^%MoM+*MbF`u_G>lOLzA&IrwLU(N50kdj;NDp6iv|9P9KwR(Pv*}If${Gf zz4$4q?_9bT%4r~$JfFHQv~vKi^YO8@9kg?Hwgy|B5f^>$&RcYlJ-4Iu zw+2VJ4P&|0C&Z~9(ke$sdt3D?a|>&$8AH$DQDI23{gtjtTB^3el%z4tCOuxBW$(jr zjhBF~ao$~-V-o?Whb~VV>`i0~d6N0Z&8Xm%rUnJhvh^8CtB$qXbiAZm^2yuEFJrqy zdfQUMc%TdD7z8ynH9o+o{TGudUH;g==IRdy+rEPwH68x`(9fS}|5Z!1%moQO>ly?n z4njt}$3Fi4Ksps$WDQ*tWVZ^xN`qRM0cEn?N~A~||KH(``yLjhGN<$ylc<(z*t^pp zDUon7-u(~!oN7cJ-)1Y`=FD-tEsB4wq^g5K^DG>L-m1$Lo#iP+MN5N&0)$;YHefwj zFDmBBoSe%;usJD1P(}|x@%EQXeimVdquNWai+FEPXT_du+$DFu_O)?=|KjCxAm_xq z<+BW~AET**3(XQ59Jq2)BXy+cZn$8oV{L6sFyM+0wDcdvn@DhFD=Hr3s7GN(fswa3 zEcsB}aro2x7mwa|!{eG37Z;OitcTmZ@o#IgZ=ucYAE z4XWDu2BwdkU$kLB1%MJ|McC@&dX~t0eM%E!LyM6BT-QqU{Fg<$h|b%b+UV%#|NWIAN|zXkv8c_y_X#m)h*9+bw4c- zgTeuJ3{~T6$!a#jh*3xYa{>1p%`PT76D+oi}aFV`O!=1u7x~xE1h@MhK-SHg>(KlM|(qQmm;yL8{wKk>zue zST<8CTY%J8E|1rI?yr~BT&<8+N#5uVua}GLsc|to-Dy1>Kb5A+v$*X2s#^1T_$Qvi z05LfZTz?f6evNRb6P!v03~%LY=DhuzpP$cx%b7B03gS~Z4;}-9FNcnI@Q#h&XBfmV zE$qyZS#v!5AsrXz4=gU~#V-Gt1Q5y=qOn%x8a6nU%`VM4*U0-ta$(WhGh}l73K09e z&nZ7~SiY+FQXHeKTlyJ|sUUX5kl8}>*{=!u-lHQI1cqzJ8~AJc-NvumIr;g7D=y^e23_CZXSkgF6j+&Cx})^00-!XMkviWTZ^3wh zDx2z`n5vp3s*fN}M7`OceI+Cz@{{zmXCd%s1R-x^5H~(&Oh}gzmwjD*JAXn zpP#h-W_EVTS0;b`9|KM!emyg6gW(kU*v8!si)5M499oT;bdCX zZiS_M~ygA}0S<)H(zbrtE(Ro9Nj3_p% zJrgfUaIzL7J~|jVR`HykT|qKnSz4SMToWXJ;ePaf=D7dEyNOz?#UdB$%GQlX`ug&z z{C_`|^4axy<#3s_@6ph<+?Q)}sM0a1jpj-)K=hMGDCgcSsyO~?UXVC^@61%S%e2|A zrA|)x;N>NQrG9AV@v;x)@*XzNUvsn^Q`}_O%2>YAKjT3iM!EAiibX^E8)=UEHx8nh zS9$8>vI~`FJv&RWQbEVDCKFsHkDDq310Hn3&$GgadS#LH=t}vTUKq!~(n>2JT==T_ z)RLEaj^a6Czpq{tfB48F6P)}nYk)2AQ6_+!w_vVxo(omWfFYZPQlN{Jo-#Y z>>$8wUPT1}5BLOnF8B`q+`pBJ+V3(=G(cRe^FcEfzPpO5q_!BsiS3o~ofpdAgZ{0I zVM^@+ONf2AR4(;MhxkM17tL~YDXJd$vL4Z>JZ33F@LF)@@vy|3>&_j+D(kt-M&G5^ zt$%($+Xl}0i|IXS2I5dFNNCC)+MeU0u!u02T&|vhX89cmwH|+`0hPB9+ofrbL!ONU zRSgVCX^vFka`u=jKUX2h@_bWH%Ef~B;ZM>25DR@5)w?V{sfH?<|DowDgW~AAEsQe^ zP6+N2hT!f5C-CCIU4lEo-Q6|#;1Jy1Ex0=b3$DREU*}fcDvILY4BdVD?6dZI*7m9b zL~tlzj~n?)5{8*O4AeIi{4X%#JXoNg@ut{%OdFb6^1I^XZI}VjXqd0-tA9(vP3?OU z-bp(Me~Kz}0qZo`it-X6q2h%W1sG}S$Ye*TM)7MiGyMEI`?;vDiObBUiA+nrLxv>L zhC&cI=RmotRLz&=F*e&4t+K}7w_Ojrhzl*~>8y|qO@_Xi@T;kj+96}A>DhJ6 zEiQ&80SKSh(@{yKTS4Y}`=g5D)YC(bkQZ4-dQO0LZ6+6ctP3;1-hN0@*tH=8)C^$T z1jybYfIK2agJE?>7o_Wf``4TIhXfrUth;S?sgM3m4%XkJfu)+NcXp{sn_xu< zXl_0?Y<-{k{9v^A3!p9D8qSc|oQVaMapOPJV4)$EuX42HNglJaG4iG&5@2L#i}K=1 z-M8I3xXIEkIb3du0=ystzB?pCUVfp9f3`0Jo$Z?mT%5&f?`TProl z)wmL1RROwm^{)^+yVLJ`v%Gf^zm>Q%Io^#RWKO)d7?B4U*}lHO{=+)TbX{g?nU{0d za$0fZ9xAdZzyQ5FI~et_e(>p{;gl2Q&vFf{-zH)?1ALKSCp~_k;ZS_@u}ewT!O}xL{x(L7w{0 zkf7Y^Kik=@54hk!mnP_R<6i!f+cXX_s{q>6yp#Md20b%NWMjsx%H@TFtt{s{=BI7hf)cz%t@4+r={c=x*%^FQW(cjhe@ zUC);T?-Zec5xcQ5WgmB)0Eo&#po$*IXEhST^dC~0w6Ypz3Pmluv&qT<;%F3 z7;6YUtu+1m=-0mje0;E}Ca}eA2{FwqTv}}r`H2*41ZY$^C~JuIBQ%L4dwbn>&+xfm z>}s*Z>$P4J+*(ZpAU6e&E+wfFf@u)dIc1v}`#mZd&-E0rRyu{;MSJ!Vnth&;SJyV_ zV+X&Up8u#I#f(Qe-3W}WP=$ww2gJWVz_40tIrpK%{zSc`%ouQi9Jc6ZiGQ92kVf~M z0z&anBMRiN?Q^9Ra5d$NKo5Tz=n3QbR)b$B?0x4lfI6MVwqgCO9uQ8!om5ehKA%wY zlwh_$qX8$K=3kzuXPe69c=4Lx*>nR3Wih5XU)CnfV_ygEAUh`~l3Mq5nQ6@~S~*|Q zqyyR1%<`5WW1Y`*Z5*-Z`LH}CCVOTnnzfyo&)#<0bbM*Aeo0kic4R|zj zOzlt>F{3zW*X9jw*jqs2gnwY5Y8QbYd@#Tz9U8L$g=pD#xSjx znKW6)81m;cTx>(X1t6}hudidj;PrK_vBbv3$T{1Ah&$|@9(J=5y!3j@I`taT&qix44QYA1S_wWyW&{LbRlD$`bjlJ9q8NyM!PZSkeTOjm3%omv@FQ}Hy` zlZ*&Tliz9L%w`ef3|+jN&{y`5TioQ-Ff6S8+MDI?3{DC>(;WGaa z)yq5lf%tggBnlN21aqcf5C4^G{F^{~J=(W}Q3i7Kdd|tKqG#Q+8LrzcNkq3l76w1J z@lz!&LqAFVJy;BWTW_r=X4afUOw{y;8oU93negk;rgMQtzi`m$(-!il@PDM*@j|)# zu)wc>O;Nq3M<31)AoyTW*!c(LWySL#YDCnPjMh2@1wOhCh^0Gn|Pi4ey|7HPbmek;b*T-ahoRBC0C zZKcgNYbMj_{gpsePX9Gh^d@1!xw)%C^`_71=4nrLr{CM-?bO-H)%LT`pz7L7ZIPa< z-85MbClO9dcL*EOl!%}CRJNl+rO&KtAWh780}oepYa}+Q2JtjBrt{<84ZI&fAwe}6 zcYH3q4E6&_I^ru$8%_5U#+54a#3dH2ZkJi!P5(lD9sGy1lwWu*wKGplOmuEP?NCLA zP|d2(O(3kQJEyK%jv4~P+a3p=O!)Ap2N`cz=#o=3 ztI!`?RwL4U6q%sp0~b5|-iU%$sP11S%R#Hd&&~yZ{mSvrY+LNrw~*qMB3p;Yso6c2 zt8#fyt-0gG8>UT6OcBe=8J3%D+XdbgS_bkeptVs&e==UM*iL|z+H6rd1^RIPNs7V| zKy<_QXv$bIs!c_~Hvz-uHN=1%XJioA2!t3|R>rSgxi}jDkDO|d=#S(N7*I%jfkX1& z(4?vCd7bF=!aG6C3A1nhm|1jCjgRlgCnjv;Q%Tjt4_3Z4TD_-eI;Z*EDuO$FI2VXQ zWQ~p`Hlu0XXHF@C3;Ki14S8*wpGHZ0>E+h3LR;*8^`A_W_E678$FnV!2-WY=o>Arf zbG04EG5SThZ7Dw)E)Q1)H+~2k=!Jxzt-0|#7y9`ZR0(KRs`G?TVSb{y@77>W`vVx8 z@&6eHlq%Jo``B?TA2%)5MNH`2x=jme&oL;YlA+2H z_5s^_jCC5yrQynuh&u>R+s+Gz6>L5m3E;!5f1AquGq4+1FlT8Ui@CNOj3@TJj0V#e zOGI`%2gv++odpfEsENb(ER<{5djM8lk}qS6feTje!Qis3cqFH~!lKj6`+vT8AixJ+ zDiiqnMr-FUbUyuKmuYq7DbTJhp>)n%UP z`MXw;uTIjMTz2KuHIwc0dJq@ih66^;RDzH1bK|R4t!CfT6A@8NBU(2t_b<-Z6qo3U z=JR3FRh>$_k0~GFg3=GPqO~aRom#(o;vwXe&?Zmieu^6$97Ohg*(JC48ew-P8NSfd z)Fe=f`JF{f%(Vg6Tp-jZqS$pIpfde#m~4#x3$4$?3)mTYgp;Ni^IiAP# zK(k`&_sGE(TclX6f3lmXjM?Oj@kQvRDW%Tlb@rYsuA~Kb=DjOFX~$RCf7aBaPdT6b z-ZBB=vaJS6C%1amlrA>?W!8U23xb!OoJ{2}?Q`mT&()yeBlz}!T}VGXJL>{4#joPg z(>y!S#l2A{%cSIjxic}4&!r9bk|@1+{Q@ayzk&~I#5RU_)e<9$ z;YQH-(0bc8nMUW4s!t9cUp(a89V(CZEO&-Gc#>Nrr@a=!JebVw)!BS<-Pk&GO~~+t zrA3IIMh6#bS+H-$^E>?p`2t5~UWOP75LU*@Xw2I&?uG(_801F^d$KCDc%AceSle!_ zz+1^bFz<+#fzS83+3&f%Q~#p-Vxzqoa|1h2O!V4)X>rk6&vvyvn($W;g35@f5?m=v zf#-=JV7-YY6N&`(0KUxX4!+J#t*m*ESUQsKhl8*`XZC)`jyRMu#sijM`m@D@^fs58 zLEG&nZxra?DG{{asSBMPRE-!0lV-oYEk$(OvokVBJo%*b-*y^ZUG5r{#gGlfWrcjU zzOZgy=iyFhwxgeaG|CH?Z45Q5k62hxdpR}#)F0<}_3kF0Ao8%E8sc~pB6u|N7L)Z& z@cFdf{c42H5fJixQB2?NPOIn;mS)i?;u8xtECaDZSQ*7WM)X{20WdPg=KU04KhoQL zHMO?5Nb~Ur%Fhx=QSPCDYVUkLn%%RKL(Xzj$ofe`FH4ApemQKh_~MbvpHAd%Oe@3I z=FT%)W`_{0;1L#{8~bs=TYpRZ{UALKdW!`i!)aBbAvXM;LWtS zT_$QjR=eB95P;A`ZM3^t3x|zhtYpMq04Cx-X>` zc@!4c1Z9uLSL$uJR^y65c6db#YO7?<$buBp?JhndT3NeLHU5U16YUEj>tB@CV8X2` zynCOOlOxuu3dfG0Nd?0-B^{1&9ugv1QNc{fh0Grqo!3DxDYC5}mOPq%{ow0=pqLGG zpJzs>+ze~wM#`6}c7Dzjw0IwZ1*N`SwHy0uTVuKhS|w7AK_jGl=b5K8Bx2s>ULa$U`lk)|AiBjR2{q5B?;{H@9z|)M5ih8|o zSg`3WVC;N2P1hb3anfR9LG z$;vqFu$8#DBm0MFt{WDHuC4+AKZYCz6FyQJnn7vAs$bSRmcd}dUR7pra8PYz`G+5f zBi-Q?ZB*&4Y$iK3kV_>jz3GjpdxKT+n_3S#q#Eu@ZEdyH?C?e3Q;|GjqyExOyo7Fv zj0kbzo&e)m#~>->@S}E{ znh%wWi|?I-Emu9CqH^`pt+jE6fvqXU@$J(XHIyM`)Tw%@UA;`zb&Vof#n{SfREzPZ zEZoXpW*;k(Q&K5=6)K%ZgJRW4Q~{@qO9%9@`o1WBia9IZO(~?0^u-pG(bIVmCx2qi zFAckGqv$utV6PacBQMw>$P5K43a) z;;X3UaWwqv3#{<9WfFL+e%c~5qCnV1!#6{j8sg`>jY!@IXdyc+ra8R%#qw~mkZy}R z(uM+Rm%+fW@Ds{Q+TSaU_()1F2}%aqe=;j)raX_>AfI&kLhyxGIF)s|XttSt!Hh!@ zc@eH-;vwnuX@t*EwiNXEmcJ0ryBlVNHZp~ZKRXtZHdbOUC6bi+hr;h=*zc-7TfnXJ z{&a<7=#o~neg)X%KgBL}p1Ul!yRpo2vT;i8XV5qOXKD&lF~EGV-U$nI7i5o5-y=}& z(9HgRkZaHI7>}O0XS1TGJ@?op{cg|^>q-~81t;KkHb6)IKqDBpayW)CZRl{25aZ~} z)=xwqj0I%IB)R`ikY*JShyq@X|8$Ah3m}$3qUf*JD|92=3C)Be5zVs>`|7zD(>ELy ze^MM2V#PJk<>TeB^YD#gUfjfG0iAcvX~y?MFcxT1nK7j&L?okdm5%MK-95y}pI2dh z$>$HTKYL~NaLljfi!e07#qgkLN$oMa};&0*Hj{;h~CH zkqX{27D+GNuq)WGqn1_KCEVyAJqG6pc;IZ<4cp%P$Ss*k@%dlxhoDJsgwBZ8UmC-yz%42M;t>g|m2Ab#a1psHgf;HQ`1*-y8M(W6S6_u5g+hsXeJjlHj z?d4?d$}M}TI#{=!L|oWTF#RlP41kE|^agRgRHG*t;cf|4B|swPoen5;>BfmmVI@)uo1Z`ufNa zAAgrQWgJKyR5(k%8#$O1k)??6f|=R-Ox{RPsJ~ykMXa@()m+!hetysGHTmKrO?bVW zQcN#fM77gWLJZN}x}=uI9uz9n4OD`&D&DNe4{liIrv=uyPY`NN2!9CHzkkBve7!Xw z0K?e9HOkd8M2%_M(xr-N{iFPj6(`Zu)`!YWoayB0caB*l*ytN9RtRU>^EJ+i33?b^P>-Ko~M(nFIj*HQk+f&lIsCcQd5C#`XQ?o$C-dO@)* zM#mWql3Z^={iuB@bGq;nn?F; zrM*wp+F6ynqTO}y@zitN|UmzSMVC~46r zH|mx354f)#ME!T(Q;pDwJ|tLIy2I}Y(vvI#gNZ(!>KQ#mGe9CG9ssBYCW8Sx>2jx6 z^EZXeoSYea4CQ#;sG4ENXyCP(?XHD*lLiFX{+@a}ol-boYrfdfsM2LqH)Q*vRteKk zR~HC`Q2`SCH@jJ_|IY9npU;}jrJBT)M&pZX(~UvdEgsz!1h~74RC|nHg3K)QwC~i? zE1d3$H+e<6M$8VqDGq`hze|s|jH4y_I8%((!tz;#Ez1(J%LYb!ko~$T=GiX!^jc=U zFG7eLjOMtm2E#sLypEVXSXi%O4v-T)+x>CS84D5FGhuEXo&yBpl42{UKUpj-!oN8o+HH%0{)e0x#a`T_BXO3ZeGe$-{$D zhh+`E(9{Nf@)28Um}4?l&N42+sxi{QYpQztA6Oe25XdAd8f^1)Z3Nq0SI6$)Ps}6X zP(V9T8f1EB?{%WH83~|*)WFhXuPJlDUuuE3d#k<97g%9uDd)TeltV)gkCpFy9tr_> zz^5vFPxx>9@>#Yq(60IUM$fG?@4jwy8m6YL&GS3fRX3I_I-+(uADa)w;q%mcpqZqL zR6l?h^#vb{Xg+T;!HB}GPyw>k9uW&*6Zy$Fo9DuWLDoTP@7_;b>vo}!8<~gqA9-CP zrpah$yeGfG+WAU7@;^ohG($T#p{+CW`_8@%z>*vRlmEY?1JFq3^|<=&e=WK=HQ2b% zAzxCllemCU`yp>d=7v*##;S4su~d_>&7-%mkqhY4Bk##d>P!>TlxQ+;&zBu2`W*fD zSG4OCjz4y{q-}#4Y!tp+T5FBr;Lj<~K{TD?#Zk!?6LNei+8;wx*1;(1ryesaM@$5c zw#tthCh$EIx){t3!^l%FH?``Y2)YfKA1#3MB1pQBBKsTCm1>0lHsz*>PV^^&kWE1$h=OKAw`!j*HgQItoHc}20fzi;|Q|DMW;RC!`82t zeIDvaV~I|($?PtFsRsX)(W&ic%5W9U-`5z4i7FzuG_%3bnkS@})iq&%AcFB<)T)A` zU-|7p%i^8c{n$<;-c=i+z(8rlbps7n15!8_ybV@M3_hB|#lnbT$%TBw zDuba#)2P;4;S|_}aPr8y(EEKRL9CAPoXp#aqON;@Xiij>Yg8Ls{RmZ%My1zpamFSy z6*s77Isx{~`5!J76}rO!Q)wk9IN0;;VzZkZPiD8TW6k(^n4YKETxLti;!L1HN%)8>M5hl_?FJX#gU#GtePAE zrpVcg)TB&~C*}9*F(or`=?X=?@h{i03E2@q%t#vwPQ( z$Z$kUReJsF>sek*1>b%8HC-RI1<40ihU+9M0kRS(mXD*fAWD7?S3XJ&Qft3&J+b!> z0HCAW&}I#Zd~=pyhgS-4bJzV5rb~tj3!$eb5H^X|L@O!5l*Owv9o1%%PT!abFK@n` zZB{j{op~^^K>;U@Y!N$Pfdo7>K$YwHrJO-)_{Z%nmqS%0S|LoEve%(Wb#>+L_@H@j zC)Yzx7$>{`r#cTIp4c&xGeoia}j~>89hGUE_=c? z#2`*Jw%9x!vVsSe_N^x=g-G+7Xf=L%Yb(~7opovS$>``uoTkX{4I+f%L~Jzq5uYn4 z_fJ0m<~N>^_^1;uff^1jU9gJ9k%<{m6jqWFwJj*kd_2v0C6e{Wf$9=*K4Xjddw7%l5efVZqzKLT^yVKHI=hAn73N(fSmj>rWBauGyb-XEE*2%r69_6 zPT4oA=Ii{s9U!}Ude5Xa+NmtqwOq&n4~Y16>No*ztzGjPwwSK>3i1u0qUM5Mda`|Q z1F8;n(;Axd;(+lCM*&JBGj`3eN)O3-8`eZO97#+ly*qt^fmR5UL{A}OV4N8Vsl-qQs3K)1Y*I<-!#HQ`;(fw`U zCFw(e3xOLc$ym*ZdFmb_)+=OQrrNi%k0a6c$$B)^li=RfhzD$q;5dAxSpD zE){z+Pi+eGmKm}vafLd?AHcM8=-OTr!{SwX(%jV;*xmTPHhTkj*aC`^Uz=BKg4i%6 zV3nH>Mu~-@WE}Qn$${V&Sq0S9S>m>hb9ojX{bV#!gx&;5tb3j&D>(*0`3RutC{qF_ zH6G&g7&Qt_9qXQJ!NS0Tv<9RmKUqRtWlj64fD{Cp#e_@Hf*~<(3WdZwJ4niETObZZ zlrp4m%J=Szkhc{lvy^;3+S*h7kB7UzE7~racjHmn2W18GXcgKD5odL_gNTNj6J1(& zP54Q)E=(*eyQ_`Xtm+(g{B#U*mP{FE5cQHdLRRkM=fy**Nb(1ZCY^Ibt@4HGBWK{v zeop3QXE&)#6wXE-nSVGCg+0w9B+kOb;sykJcBz!DzaM53RDAcyfdK2gN=k<<8P09R zi1!~BN*L?4^@ajw%n%XC2rH}L9S@s^EJZxk4ykIOrF*ofgIW0LfL``Tbdhj%q(rem zkMV~OcWQj~{!RAx?)8w%*xJl3)1S5pbh9DJIbVWQ^MNv@;FMW$waLSYRb>K(VIDR_KO4pU# zwKam$R2C|pN=51I>5tTqBpRPvIx+f0&V|@=t6feHZUt$X=U*1|#vBb7&kC$b%3#XE zIhiBHmhV?kU9r(GZn+eo%Vm=|Bil+?`uDCjo3Vbc)t^ic(Vn8GEjUTs{)q;$y8$?Z zKc3)4C>bgCj-CLK;e{dpH_Sg>SK4Mw$KIr<3k`q9we`QTF)XCG=={&bWhM09+C5iS zU}l3hBw2{yKCCJw1h$L3@0tK-K_X8HLDax#?%Ky)9~74ggYEB6_=;KpzoY4G6;%J_ zQ_B+-Vu4Z^BMtZIrRi<{?G*iNGPR6x!9C-~W)`i^?NO!`BbT#k87KI-UTZ1#hvOt{ ze&xq_l1kiHkMZHvReoUawW5iB^p{Ca#sPv-VslN>n&>Ix zW%IbzfFOz4z0KE+P1_D*xTi-Tt#5Yf=MOwEVu_Uus5c^MYAZn+(^?({@-BX;IWGC~ zVNM#GP6(7Y@+!Cok_87C1Ye}}SZcUs&GH9A{d=mZ4Ap`~5rr87K8E&0V{4_T2yCVn zea1ivN3YoKWjht&tr%MPyA&r*AHDCSw2&aDOIWhuT=T;p{(M1b|*zKu;9~SK^3vh;0Gq1tAEEO&zsV<#y(bw)(ZK8 zWIoPGgG@gJmf0))Xk?)H5CT@tz0c-5v7UP$AmMyYS<;14`VK#L8yr0_cs(FIdE}1 zAhPQoNh{uQhJQ!>dM6C_{$ZI!LmwZY*j6ehT+o7pL&s#F@;e^{AL7%Bckhy3Xr4Or zADq7A2pzRC>5KlSX)00srGOM&QmORGCtZ^gMpi@+QHGX)GTv8utUHn(W_J9iPeKYY?{dk;5{I{ zq-9tjRdlhz_>V|wdLY7}F^~in=!TLfD#25ZnyNs~K`Mpdk(^bW?r>l~iqvMR;?-dV)scR9an^Mfh33`+Y92`@WT#RnrFApIanMf-a zaEO>ukMV%;60n^?aV18vktjVoA)W^Un~pE<-%rChoUQf&2+Bf)osPJIPIYJq*6j*C z7L3>3sU*qp>Iq*2_LC`AHB0Y*AlUEzsw67KSYO{e5*75h!hWVS{Q-|gA1o)bg>IXh zL>U0|U+mPUFi`W2virT2_Sc4aX8)|o)zWWjjubGjERD9FkMDbsHfpFxPE)55vKVacuY^m!2 zNF0}C=SsfL8ou*%ckfbAo&Yrln_q#g|g1y9LR z2qSL=;2?=1hUZg6!bxzfsx&BLlq)6rvz8}W3w?gFy8h`PR)=HKFFdU*%2$<2dUpW{ z7-Xbo&TN%dmb4Gf6pEzF?hJ=Ti&oy#Xw{V>p__DFk+1(QV_!xSP6c>VIw7;)>l`mS zf$Un6U*wY55R-q_F(r1$7qbKRm-mFzx1O)E8O7*B%fRHc1uMix?e~E3ejxjPJ%CdI z7NsykSaX@pBNwl?&wH-dd5H$GRE#kbQvd3IB?1al#YuKQ7q@V2NBS>hj$sn%rnJ&y zy_a?BWcgGi9rO1Dg6iujnIB(%Dlfbt7(2U=oX&NVf%T7@LxJgYlcilnDrq+=#%! ziV8no%zwJeyMhzGMuOFyk}XUOQ3(!=Bt-z?RKXtkAl8jA=yUkU`z??X7XeJxxO5CP znr4l=5WH#B65o|tkl_($57i^k8O)P5y|Xbi7cyW(WxdEVhUbs;9MZC$E^(OtA#c6C zB0-%((xOgqW)4Wij7{<4zPM4l2+t&SuxtB`QE z&s9p`A45Uf3}0n`ZOVZ_g-eV3F^<>>!r#G9Qo>~LMx1n*i#!C!nQ$|(vlA_Hd|7%t z!XO^&tgqIGj)Z>o{C-(G%1srcNEWWfgHNP*QIZ>~M#L<46&MXJ|J50P$Lnw6@+_Hi zJfMB{4s9I<5~vRu*r9$G_r6pA+7S+Z<&~{H++^OAB$r2zfx6+qMAOTuJtE z*z}~*?AkHiouQ@42lK|L)n5B+ril96cdS&$i$0Mu6-GSDBD|Q0UC4Eyv+ef*6yAd> zj&TBbYFx|2tv|!$_ZbuW!v+bkuZ`6{F~EU7m%%bi3~f%1M~9|u<0lF-dmKT34sHmA zzgz$mjAft$`VUfATXKN>e&LD4!XGu3DjOd6n;gG?z!P|U&H}k;m59lDk9!pIP1Eqe zk6YHz?CX&sMtMIRTc#**H7*a=gmco=iG7UFBr*2AP(z|$1Q%HQ=r%bltk>xpW zWV0NyeV9DHW=P2P!r<5!*)4zFp#m1dWKfM?6BHiD#`TqVv`nv?TZ^07rVk^Ymm2<(8@5}YN`6BnmG)HKCrvGq?o4$|_fp-uN9SUjrfp!i z1#X&5VoNnLeQ8@^5{_r2u#6sl0#1H=dM%S;)&J7@5EtdXSQ z3>?m9uV!bAYfA^4V)V5eRYVg9KJOqfCef$B0S&}=@9DRY+N9gs%ogJF`X;u#%R^!=7`jWh`$e02_LT?i|Tm&2xm0Xt@vBrSZL4ybCo4#~HQ9TyF5&OJ- zgvKODV?lKjwIu{*h9GDF`^gi1&pgam(-Ll7vyonxOw)ZwqS^iz1smybNL0&oEo7jy zhjdtIW%OcS=X8Z)Qvds&(@KoWO5Hg68#^XABa$K}J4c-<1^&KKukYx{^3|tU`Qwxc z(6Quu`2jkliBLeL{IYrPTo8<<`cVx_4C~g|#}H>g>*0eXc#KF{J#m|YK)Q$hW9dEUb60mEcp&8A^(63&^cjt-Hz_Q3jOzSjns zH}2Nsv^yunbBuD9J182Ar5p}f)ND9b@1-WUJf)0)nMC=#oQ8GjOsFjqkyTOLyn+V+hfn3OyYv zRrzyAylmgrjvAGq3;Q+E0%D-jVT$0-LQ`HY2sd=XfBd8Kf6aLMSoL&I-}^KO*fL=v z@_tdEBc$LHRGWW6`vH?LG6(0WVUEQzKb@T`CTfFhic=vF^~;-dX2FsMwSFt=n<2#i zyH+2Ke9bSL{22?1SQF=Vy@s{3yxqrLtE0-V``%h?%!bmv_L-uNIw9Eg@JI#FpEfdP zC3CiAqGfkD^I6V2Q2wFlzxhY2s}WCj&8VCASfP|Km3wDwn1XwXz&N>Izy*Z`8cB~5 zxpUj;bp?T?_dUH`Z>W64mc@Q$b#4~W6=Cq+_G2k9?(?qF-@9_^@ zp$%A}b25KNIhZelGhK0RqMvpf%O^JMFaixgeD)`l!YdK>OVNbRcUDKwjouAP9qI0^ zF8bef%n0*JD#^;BcG!zl54WnAS0Wc}d38B3D4H5HqExBFi>H35I z_ygq-P@2gm{6ua&H$VtZ(iC;K#moYN7R+3Zo^!!)VotdKQNAc$W8#n*S^WS@;?fkN z7&0Y5Ww@WXKx{u<>)#PSqVWN*?og)=tmnu|PVu3}w&vOO5huPO(U3cj)5{Q_PZgus zPDRkpLnhfoY4d!DSgVcpubgvoci(X9rTyH#YKs|znQOs};3>t#qTyk(Mc_?y_^jyL+Yf?M@c1O13QHcCA89F!;55vNTZ_n!Ccp64OFR?vdB;$5 z#I!@2wCikAU7DT##1Jw6+&oq78id|Hw+mCGnrzE^eHg(+fe~Rjrjo%?{kR|u$KtY5 zS5x!wvz!TvKg+3CI}uY6(b~xPGttNnNP3kI8`pD3?l z;=R^ZF)Z|JY_tp)jAxO0rEN0_sIu=;<{uHMlux_-zK=l%tOd}@_%d#Rcbdk2i!AI> zQ`Q3LLSKy{{#%@j|1XbDBV4R~L99p@>G}z80jT4ForBIG1-7%L<)KALPBXh*wn)%v z%?($IV?ys^N&}fAl1`(n(7IeSaqD0gD-Pk5?%KE+)nBgyx%IH7PHE@ED_A}oUwe*m zukv5JyGj|o2_KvC&V)`MTef0Pi}LtL4`r<+|Ejd26+IzI!1TVnyv%5riY!@u!RI|# zx*Z5+CYPl>tDj{{?mrE7$|&|%*$RZ8UP~K(dN-yb@{W@NIP1e~sEF-NXF!5v*vr z-fBoUOI>%lZGgAZdqqj+)~IkE`KBl^en{{q(mP5lT@K*Ch6|itdV$q=21ClGt(uiG zf3%8xI5!~hP_+5pQNxa`wFiam#*OCQTd$#w6BTTN+qG5y_`>cw+W$bkqSx!hT8HQS zxI|ebmRJZcP~fEtx#1^WVuWufZ9VYV%Hn|;@BRp!1Xj=Pl%u}jh^^yFR+rGl6vZF9 zHilCxwwnDwv8?EiybKZ{he7w#CZ1zx(5{3X)^6Nx5Edl3(k5Ba_T+$ENF5dHP!ikH zPD_)LNxNW$p<{ey5!t*)CX(x~YsSHGOl(23MK-d1Zns4X28RTqe2mQJZuWbremkxn zDCdR(Jz26_!D9^ju8RUC2(QZ6KZDf8TlePR(-VKoR=jM$e*p^3$e+*v5kT-qD|s>w zD+lqC6^}9qHMaglSmLnXD0MogGKTNq+|2q;`3{pO(%EJ)l5EL#ee`Bj-F;5$?pNtE zQdgY*{F(y=i4w=HAgIc%ALz!P++G5~vOAaC{a7k_#J9Rmb>^4(ix2K_-8;7o=!cDs zjY(o4lptqK{1x8V+Et6K+_$4#z{=@(kY30IvIg`VY;23w<{VhBFLf+(cf}B_b*Fu0bhGB-#>j`xl9%KySA$< z$1?wrC!qudxT?Z>#EMXwEhC@#*woMj5PcvG6&t)vFygM3JMUA;$^`ZHt|*j%7@IjJ5$aJV*dCKp9Kc@ zzdRaP2AFv|n1oRGDz&uv@F%{LIi3nTG7yE>4em9b`BT#@+R8^Jm-3_|9or{=9QQ6{ zDZ=A97ia!#*zNR=;WjL7I4u;EIQAQUJvR}?)X4ZBQxmm^UlNO#La z(*l^Of$2ZZ*3n5y;$+C4LQLWMAXErm_l=uk_9r9PYfxB@#o^7t;$k%+eWEhr(1ld_jO@{vW%~Zn;RPbPAV^%;Kf6!lk=}A`t!8yUDIET zuSQ(@sn(j=zSMB+nJ&oEF4V&*6nJek61~@@bGtxQEeZ_oI9R8^^&yvhCNr(|l0RB_ z$@oVA#;fd%rZ50E1U@hx!2j`C^abBk5N@gk#iypG4DiI7Zk)m6u4@Hb#iMdmMEfu8Q(fV;?v==6_*O#>-J zfWc}db5ekB)yX>4uLPh>9Co;{rw#r-Eotx_;8%WSphQ@(T6pwPIwqV9b?vQNDV#gX zpV1Vr)s$*gkt|b1QVe+(ndNjL!i|K{Jr2qnB|umaY3jAUT|fPMW~+%r9twZZ-L191 zZZ+n;yldBpK*-Zubz)?R=I?Je&mqrr?C==VU62*-t#86F|D|BdV8NReOQ2^4c$gJC zKfq}t#@)ZHa4%$#Dhg``#e8KBhon8l!gS#~lVJ?Cqx)mmM!dtCcP0>2v#h^s| zL8Weoox7z{(SX|o)B62E{T_t-7sTj_SX6K*MKaU$#AqTxbP8YSVN_5EJGasO3)qu& zk-iBD@LbK3MFsa>doztgU9MnY(B8>Nh^qRJG#JI>;-sjoVD}N2Vg=?tk9EI{om*2u zfm!z~p1|C)-}dMJzoYDX&7am6bhNzyJmW`)FGCWkNmcfV) z$>*q7C6b*L&wZ_<%1t?A(g{Q(ZX{BpixVf6LcERXbL|gwDIYBj!Y>V7FU$*cqK_7R z=ZLIN|Lp8qrb|8{`gp_g zOQ8gP6w)Vl_(2CIFbbdfoX_X!CSXZ!q}F<=Y7>%HKDHQ^iM4wFJrzc|?dew57Pt5d z)^R@>PcjvJqPl0-G_ol!V3(iaoP%q?W#RJ6Bc!c+dbddKt;vcxHo04Og^IFOX|^*l z)FP#)x%)xGIe*&k1jy4fGdJJ%%5e-z@g$O5u_;HFPoXhPVeU&u!u^kAtai>eU!|(& z9*$|%qN3EmZ#a)--QytplaG9lE6n8qU_~kivKO}E0Lsf=8$+^Ey+4IPqla(!TpY!9 zeN{rb%6M~9VAbjzzP86+2h9ZDHFm~Wk@Bd}@oy@7#G?%uk-qT~HfyR7Km z(%B+Flb^9@kx5Wao+eIFsR8FZlE5p4?~?HY+TyxXie+A#j0W*s978?EVMOZ5&A8B8WE* z6blb9j4ORi(UqFCl32qOJlT}CFqnIiDufMPXnJHf(uBFAwOR0gwkpWmBiiBpwdExS z>Ww88n6_))KzKb={%9*`P^Ny%8IPMTEF1zC5{Q>olDK_Uglpg71=g5Ud3gv^E40PL z1p`pD{?bq7hgf}J<^cd^X#o8JyFVGIhrocijU&I;u)j~=#4bIBGNsT~y7vk-fhllh zapq({w)z~ADEYpB1p*;k5Ch1e`sLPT`b8xFQ6>N|)(jte47=UOcWm$&eUtuA!p)kZfxaq0KZzp?M#jiULE>WsXj7@GzD3O+6^pSc1K&lOQzg%L>C&Vr;U!G zQ+Q6MmXWFOOU}um%?U%fJ>?dnxy+@)8Y0(Y!)%OG2(fh55l(ba9gj5SU`)o7#hCrh zxBue&p6{RV`#sO+`}w`zueZbO96uGxwAMOHFh$Yy+!*-V#Zd{knfu=nZXHQi#Q8d1 zs`72DZt0|*uTvjhGi47QAYpiyw->N{@6uOoboEHhZDC)wh1^oWu0|opXXRq(?>;bIJes=$LT@gqm2P8PgL1>Vo@elT4{8AtmL9@ z<*Zk3K+I#NK7b&*+mzEG@7Dlik~O{C=r68r?SIbLy1)K^umG#*hSbHl^i!?Gd~sm5?d3x%KwZ^1VrLeG;2X>3vvVE zm_$?42jvfmt-fgteJ_KWjt>Om!?TfNdVYGD^*)c0$t~W(j9jC~zPqk8ANX2PweA$#bGa@zn0q&voBe|uq9I6|rEm4_ z=ABdR zWT9=Q)8OD>2(O9JT7Sy4)sP}C^t62Cke&8@!}&d_VjL`BLdGZJJ&*0x217Jko!np#zKqmT zRWp_)+rYEoJEEgzeu%U}^*3*;I=8&*wq44;=o_mdpShbTf(k`PLnyd&ta8zRl{JLH--Tu~5))>>!(|!K@)`iEL5!G)= zBn}O-@FdAe*x(4~pdIu5dpnfFaO5UkIa=_1!089hhR=PDlqV%8EPs+N!SZ2v^B#Tw zP4QHBWWuOj++tZw<(n?iR)h@b;V&mosY-vErFjY9O@Uy*0rxamH{%;Lg#H$@7HllV z3EUUQz*5b%(dWhZqdG56k(>(dAd!lPDPJyWB7RilxxnG`Ln*{JBmQcCNnRFCqboZN zkuo=DB|`!~fj3TzI@_kd=2W3+r7N|6#5r!YZNc&b%ausVik-60BiU>@Eu}>GYZvqk zXnC3w+nXlyj2&`RHFTyvBuf2PPT+37+P_^FjbAjuC#^dv6~JLm_9(Oe$mjEGem+t? z8SxR&#zrDoxt6?SNtO$G>@?fKzNcIyFF#G!MJs1tn%z9EpGh67$?sPhZ8v+J$iitz*r6-EI31kWn}nIV9Q>q^!QNSU&{M`oz8v&<#qy+(KK^$NNq>+|xhDKVtQ#z!Plo3HdKtQ^?OThW0L%K^^Qt}<& zTJMi|iymg(nS1X!d;e-jtEXDtMR2EoM!zdc$p+5msNvz3-s zSCE!waB*{fW9wiAfv_h9B#FuQNYM6~XvuP>5_u7O4yb4DWelNFu%eNN&*U<1(M%eeu})5R#*BRXjt6 zq5YF*EV?lbRS^?VLDk8Q9>u`&Tubc@Wz7+-$;Hv}8P|`R*5O+r?9|XfNVYt!MY9=+ zGx4yKf$&zqD*Txe{;|;USILJgf$PnCe`vOnd(elWG&857u4#HO&#L*pQipH7yuBo{ zlk6q~O{Ff2tED=-r2%Sp-KLU;gD#nyRHS-Rq)(#~HRP}mdQoG=N#;x{*RBulqt?`t zl%D8f#nBRclMG+K?7Cm}Zg}JB`$Gl)d&uI$xjQPHE3Xipp8Adi#}-fY%j}S6Wos2L zLYmaZXy`cIFyGaO#O}sFIYj#?(s`7^MV-w2*A~Bz=_v5k(g𝔒yI{IYU4C!Uqz_ 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

&FWXhfCWGd5alxk)eoO8?bhL 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 XTk#YexduE9hnMJEt2!d(dGz^z?CV)t literal 0 HcmV?d00001 From 3375b53141ee552f94fabd0a165d38e3e12eeea8 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 7 Jan 2025 16:15:00 +0100 Subject: [PATCH 044/100] Qidi Plus4 profile improvements (#7868) * Added new filament (PLA High Speed) * Changed default infill to crosshatch * Added precise wall option --- resources/profiles/Qidi.json | 16 +++++++++++ ... High Speed @Qidi X-Plus 4 0.2 nozzle.json | 24 +++++++++++++++++ ... High Speed @Qidi X-Plus 4 0.4 nozzle.json | 24 +++++++++++++++++ ... High Speed @Qidi X-Plus 4 0.6 nozzle.json | 27 +++++++++++++++++++ ... High Speed @Qidi X-Plus 4 0.8 nozzle.json | 27 +++++++++++++++++++ .../profiles/Qidi/machine/Qidi X-Plus 4.json | 2 +- .../Qidi/process/fdm_process_common.json | 2 +- .../Qidi/process/fdm_process_qidi_common.json | 3 ++- 8 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index b99f868073..fb4ed61f38 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -772,6 +772,22 @@ "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" }, + { + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" + }, { "name": "Qidi Generic TPU 95A", "sub_path": "filament/Qidi Generic TPU 95A.json" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..7154a7ede3 --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..457adb293b --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..7586e3d4b5 --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..6abc3ea405 --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json index ea5f3d8ceb..c76df889ad 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus4_buildplate_model.stl", "bed_texture": "qidi_xplus4_buildplate_texture.png", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle;QIDI ASA @Qidi X-Plus 4 0.4 nozzle;QIDI ASA @Qidi X-Plus 4 0.2 nozzle;QIDI ASA @Qidi X-Plus 4 0.6 nozzle;QIDI ASA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle" + "default_materials": "QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle;QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle;QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle;QIDI ASA @Qidi X-Plus 4 0.4 nozzle;QIDI ASA @Qidi X-Plus 4 0.2 nozzle;QIDI ASA @Qidi X-Plus 4 0.6 nozzle;QIDI ASA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle" } diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 42558a5d19..244d5f6613 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_common.json index d776fe2bd1..041b21dd00 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -89,6 +89,7 @@ "initial_layer_speed": "15", "initial_layer_infill_speed": "20", "outer_wall_speed": "25", + "precise_outer_wall": "1", "inner_wall_speed": "40", "internal_solid_infill_speed": "40", "top_surface_speed": "30", From 4e19c305aeb8a1ef80c243623f6b0c452566375e Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 7 Jan 2025 16:15:48 +0100 Subject: [PATCH 045/100] Added French translations (#7869) * Added French translations --- localization/i18n/fr/OrcaSlicer_fr.po | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 607ce9f42f..fbfd1a150e 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -11253,7 +11253,7 @@ msgstr "Pressure Advance (Klipper) AKA Linear Advance (Marlin)" msgid "Enable adaptive pressure advance (beta)" msgstr "Activer l’avance de pression adaptative (beta)" -#, fuzzy, no-c-format, no-boost-format +#, no-c-format, no-boost-format msgid "" "With increasing print speeds (and hence increasing volumetric flow through " "the nozzle) and increasing accelerations, it has been observed that the " @@ -11295,6 +11295,7 @@ msgstr "" "remplacée. Cependant, une valeur par défaut raisonnable est fortement " "recommandée pour servir de solution de secours et en cas de changement " "d’outil.\n" +"\n" msgid "Adaptive pressure advance measurements (beta)" msgstr "Mesures adaptatives de l’avance de pression (beta)" @@ -13275,12 +13276,15 @@ msgid "Force a retraction when changes layer" msgstr "Cela force une rétraction sur les changements de couche." msgid "Retract on top layer" -msgstr "" +msgstr "Rétracter sur la couche supérieure" msgid "" "Force a retraction on top layer. Disabling could prevent clog on very slow " "patterns with small movements, like Hilbert curve" msgstr "" +"Force la rétraction de la couche supérieure. La désactivation pourrait " +"empêcher le bouchage des motifs très lents avec de petits mouvements, comme " +"la courbe de Hilbert." msgid "Retraction Length" msgstr "Longueur de Rétraction" From a90cc292e988364ff0829337e1eb52c9aa74b72a Mon Sep 17 00:00:00 2001 From: Arne Keller Date: Tue, 7 Jan 2025 16:25:32 +0100 Subject: [PATCH 046/100] Fix compatibility with newer Boost (#7884) * PrintBase.cpp: fix compatibility with newer Boost * Plater.cpp: fix compatibility with newer Boost * RemovableDriveManager.cpp: fix compatibility with newer Boost * AuxiliaryDataViewModel.cpp: fix compatibility with newer Boost --- src/libslic3r/PrintBase.cpp | 2 +- src/slic3r/GUI/AuxiliaryDataViewModel.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/RemovableDriveManager.cpp | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp index 25b282c7ba..81ee858c26 100644 --- a/src/libslic3r/PrintBase.cpp +++ b/src/libslic3r/PrintBase.cpp @@ -79,7 +79,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str cfg.opt_string("input_filename_base") + default_ext : this->placeholder_parser().process(format, 0, &cfg); if (filename.extension().empty()) - filename = boost::filesystem::change_extension(filename, default_ext); + filename.replace_extension(default_ext); return filename.string(); } catch (std::runtime_error &err) { throw Slic3r::PlaceholderParserError(L("Failed processing of the filename_format template.") + "\n" + err.what()); diff --git a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp index 50368b8544..cad5cf5455 100644 --- a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp +++ b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp @@ -337,7 +337,7 @@ wxDataViewItemArray AuxiliaryModel::ImportFile(AuxiliaryModelNode* sel, wxArrayS dir_path += "\\" + src_bfs_path.filename().generic_wstring(); boost::system::error_code ec; - if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_option::overwrite_if_exists, ec)) + if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_options::overwrite_existing, ec)) continue; // Update model data diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f3782be140..e12f0c321c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10265,7 +10265,7 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) std::replace(name.begin(), name.end(), '\\', '/'); // rename if file exists std::string filename = path.filename().string(); - std::string extension = boost::filesystem::extension(path); + std::string extension = path.extension().string(); std::string just_filename = filename.substr(0, filename.size() - extension.size()); std::string final_filename = just_filename; diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index a26e13448d..83ec4695c7 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #endif @@ -202,7 +201,7 @@ namespace search_for_drives_internal stat(path.c_str(), &buf); uid_t uid = buf.st_uid; if (getuid() == uid) - out.emplace_back(DriveData{ boost::filesystem::basename(boost::filesystem::path(path)), path }); + out.emplace_back(DriveData{ boost::filesystem::path(path).stem().string(), path }); } } } From 3e520c713ccfeba711429fe13ea404fc96d215ed Mon Sep 17 00:00:00 2001 From: Co Print 3D Printing Technologies <138680258+coprint@users.noreply.github.com> Date: Tue, 7 Jan 2025 18:26:52 +0300 Subject: [PATCH 047/100] Add New Machine Profiles and Improve Existing Settings for Co Print ChromaSet 0.4 (#7889) Add files via upload Improved the existing 'Co Print ChromaSet 0.4 nozzle' and 'Co Print ChromaSet 0.4 nozzle fast' machine files. Added new machine files: 'Co Print ChromaSet 0.4 nozzle - Ender-3 V3' and 'Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus'. Enhanced the '0.2mm Standard @Co Print ChromaSet 0.4' and '0.2mm Fast @Co Print ChromaSet 0.4' process files. Updated the 'CoPrint Generic PLA' file to ensure compatibility with the newly added machine files. Co-authored-by: SoftFever --- resources/profiles/Co Print.json | 8 + .../filament/CoPrint Generic PLA.json | 6 +- .../filament/fdm_filament_common.json | 4 +- .../Co Print/filament/fdm_filament_pla.json | 8 +- ...hromaSet 0.4 nozzle - Ender-3 V3 Plus.json | 150 ++++++++++++++++++ ...int ChromaSet 0.4 nozzle - Ender-3 V3.json | 150 ++++++++++++++++++ .../Co Print ChromaSet 0.4 nozzle fast.json | 15 +- .../Co Print ChromaSet 0.4 nozzle.json | 25 +-- .../Co Print/machine/fdm_coprint_common.json | 25 +-- .../Co Print/machine/fdm_machine_common.json | 12 +- .../0.2mm Fast @Co Print ChromaSet 0.4.json | 13 +- ....2mm Standard @Co Print ChromaSet 0.4.json | 4 +- .../Co Print/process/fdm_process_common.json | 42 ++--- .../process/fdm_process_coprint_common.json | 48 +++--- 14 files changed, 415 insertions(+), 95 deletions(-) create mode 100644 resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json create mode 100644 resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json diff --git a/resources/profiles/Co Print.json b/resources/profiles/Co Print.json index 049814d4ed..a21f5940fa 100644 --- a/resources/profiles/Co Print.json +++ b/resources/profiles/Co Print.json @@ -47,6 +47,14 @@ "name": "Co Print ChromaSet 0.4 nozzle", "sub_path": "machine/Co Print ChromaSet 0.4 nozzle.json" }, + { + "name": "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "sub_path": "machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json" + }, + { + "name": "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "sub_path": "machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json" + }, { "name": "Co Print ChromaSet 0.4 nozzle fast", "sub_path": "machine/Co Print ChromaSet 0.4 nozzle fast.json" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json b/resources/profiles/Co Print/filament/CoPrint Generic PLA.json index 0c0fde1371..467830fc77 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic PLA.json @@ -7,13 +7,15 @@ "instantiation": "true", "inherits": "fdm_filament_pla", "filament_load_time": [ - "10" + "9.75" ], "filament_unload_time": [ - "10" + "9.75" ], "compatible_printers": [ "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", "Co Print ChromaSet 0.4 nozzle fast" ] } diff --git a/resources/profiles/Co Print/filament/fdm_filament_common.json b/resources/profiles/Co Print/filament/fdm_filament_common.json index 6b50d8385b..27d081eae8 100644 --- a/resources/profiles/Co Print/filament/fdm_filament_common.json +++ b/resources/profiles/Co Print/filament/fdm_filament_common.json @@ -41,7 +41,7 @@ ], "filament_flow_ratio": [ - "0.91" + "0.95" ], "reduce_fan_stop_start_freq": [ "0" @@ -62,7 +62,7 @@ "1.75" ], "filament_max_volumetric_speed": [ - "15" + "14" ], "filament_minimal_purge_on_wipe_tower": [ "15" diff --git a/resources/profiles/Co Print/filament/fdm_filament_pla.json b/resources/profiles/Co Print/filament/fdm_filament_pla.json index e3b8ae5e24..49e6e1fc27 100644 --- a/resources/profiles/Co Print/filament/fdm_filament_pla.json +++ b/resources/profiles/Co Print/filament/fdm_filament_pla.json @@ -56,14 +56,14 @@ "1.75" ], "filament_flow_ratio": [ - "0.91" + "0.95" ], "filament_is_support": [ "0" ], "filament_max_volumetric_speed": [ - "15" + "14" ], "filament_minimal_purge_on_wipe_tower": [ "15" @@ -175,10 +175,10 @@ "90" ], "filament_load_time": [ - "0" + "9.75" ], "filament_unload_time": [ - "0" + "9.75" ], "filament_toolchange_delay": [ "0" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json new file mode 100644 index 0000000000..d7dbb1cddb --- /dev/null +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json @@ -0,0 +1,150 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Co Print ChromaSet", + "default_print_profile": "0.2mm Standard @Co Print ChromaSet 0.4", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "290x0", + "290x283", + "0x283" + ], + "printable_height": "330", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "100" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "10" + ], + "machine_max_acceleration_e": [ + "2500" + ], + "machine_max_acceleration_extruding": [ + "5000" + ], + "machine_max_acceleration_retracting": [ + "2500" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "5000" + ], + "machine_max_acceleration_y": [ + "5000" + ], + "machine_max_acceleration_z": [ + "100" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "8" + ], + "machine_max_jerk_y": [ + "8" + ], + "machine_max_jerk_z": [ + "0.2" + ], + "z_hop": [ + "0.2" + ], + "retraction_speed": [ + "60" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "96x96", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "machine_start_gcode": "start_print EXTRUDER=[initial_extruder] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "end_print", + "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", + "default_filament_profile": [ + "Co Print PLA" + ], + "extruder_clearance_radius": [ + "65" + ], + "extruder_clearance_height_to_rod": [ + "36" + ], + "extruder_clearance_height_to_lid": [ + "140" + ], + "min_layer_height": [ + "0.08" + ], + "max_layer_height": [ + "0.32" + ], + "retract_restart_extra": [ + "0" + ], + "cooling_tube_retraction": [ + "0" + ], + "cooling_tube_length": [ + "0" + ], + "parking_pos_retraction": [ + "25" + ], + "retract_when_changing_layer": [ + "0" + ], + "extra_loading_move": [ + "0" + ], + "high_current_on_filament_swap": [ + "1" + ], + + "z_hop_types": "Spiral Lift" + + +} \ No newline at end of file diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json new file mode 100644 index 0000000000..a93a312ae7 --- /dev/null +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json @@ -0,0 +1,150 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Co Print ChromaSet", + "default_print_profile": "0.2mm Standard @Co Print ChromaSet 0.4", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "180x0", + "180x173", + "0x173" + ], + "printable_height": "250", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "100" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "10" + ], + "machine_max_acceleration_e": [ + "2500" + ], + "machine_max_acceleration_extruding": [ + "5000" + ], + "machine_max_acceleration_retracting": [ + "2500" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "5000" + ], + "machine_max_acceleration_y": [ + "5000" + ], + "machine_max_acceleration_z": [ + "100" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "8" + ], + "machine_max_jerk_y": [ + "8" + ], + "machine_max_jerk_z": [ + "0.2" + ], + "z_hop": [ + "0.2" + ], + "retraction_speed": [ + "60" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "96x96", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "machine_start_gcode": "start_print EXTRUDER=[initial_extruder] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "end_print", + "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", + "default_filament_profile": [ + "Co Print PLA" + ], + "extruder_clearance_radius": [ + "65" + ], + "extruder_clearance_height_to_rod": [ + "36" + ], + "extruder_clearance_height_to_lid": [ + "140" + ], + "min_layer_height": [ + "0.08" + ], + "max_layer_height": [ + "0.32" + ], + "retract_restart_extra": [ + "0" + ], + "cooling_tube_retraction": [ + "0" + ], + "cooling_tube_length": [ + "0" + ], + "parking_pos_retraction": [ + "25" + ], + "retract_when_changing_layer": [ + "0" + ], + "extra_loading_move": [ + "0" + ], + "high_current_on_filament_swap": [ + "1" + ], + + "z_hop_types": "Spiral Lift" + + +} \ No newline at end of file diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json index 07be563532..ab8b377122 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json @@ -12,7 +12,7 @@ "0.4" ], "retract_before_wipe": [ - "70%" + "0%" ], "printable_area": [ "0x0", @@ -20,13 +20,13 @@ "225x225", "0x225" ], - "printable_height": "345", + "printable_height": "250", "gcode_flavor": "klipper", "retraction_length": [ - "1" + "0.5" ], "machine_max_speed_e": [ - "20" + "100" ], "machine_max_speed_x": [ "700" @@ -74,7 +74,7 @@ "0.2" ], "retraction_speed": [ - "30" + "60" ], "deretraction_speed": [ "30" @@ -94,6 +94,7 @@ "thumbnails": [ "300x300", "400x300", + "96x96", "32x32" ], "retract_lift_below": [ @@ -134,7 +135,7 @@ "25" ], "retract_when_changing_layer": [ - "1" + "0" ], "extra_loading_move": [ "0" @@ -143,7 +144,7 @@ "1" ], - "z_hop_types": "Normal Lift" + "z_hop_types": "Spiral Lift" } \ No newline at end of file diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json index b8e02072ee..5a6858a137 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json @@ -12,7 +12,7 @@ "0.4" ], "retract_before_wipe": [ - "70%" + "0%" ], "printable_area": [ "0x0", @@ -20,10 +20,10 @@ "225x225", "0x225" ], - "printable_height": "345", + "printable_height": "250", "gcode_flavor": "klipper", "retraction_length": [ - "1" + "0.5" ], "machine_max_speed_e": [ "100" @@ -35,7 +35,7 @@ "500" ], "machine_max_speed_z": [ - "20" + "10" ], "machine_max_acceleration_e": [ "2500" @@ -56,16 +56,16 @@ "5000" ], "machine_max_acceleration_z": [ - "500" + "100" ], "machine_max_jerk_e": [ "2.5" ], "machine_max_jerk_x": [ - "10" + "8" ], "machine_max_jerk_y": [ - "10" + "8" ], "machine_max_jerk_z": [ "0.2" @@ -74,10 +74,10 @@ "0.2" ], "retraction_speed": [ - "50" + "60" ], "deretraction_speed": [ - "50" + "30" ], "retraction_minimum_travel": [ "1" @@ -86,7 +86,7 @@ "2" ], "wipe": [ - "0" + "1" ], "wipe_distance": [ "2" @@ -94,6 +94,7 @@ "thumbnails": [ "300x300", "400x300", + "96x96", "32x32" ], "retract_lift_below": [ @@ -134,7 +135,7 @@ "25" ], "retract_when_changing_layer": [ - "1" + "0" ], "extra_loading_move": [ "0" @@ -143,7 +144,7 @@ "1" ], - "z_hop_types": "Normal Lift" + "z_hop_types": "Spiral Lift" } \ No newline at end of file diff --git a/resources/profiles/Co Print/machine/fdm_coprint_common.json b/resources/profiles/Co Print/machine/fdm_coprint_common.json index 8cfeb1be12..3d13604e33 100644 --- a/resources/profiles/Co Print/machine/fdm_coprint_common.json +++ b/resources/profiles/Co Print/machine/fdm_coprint_common.json @@ -10,18 +10,18 @@ "0.4" ], "retract_before_wipe": [ - "70%" + "0%" ], "printable_area": [ "0x0", - "350x0", - "350x350", - "0x350" + "225x0", + "225x225", + "0x225" ], - "printable_height": "345", + "printable_height": "250", "gcode_flavor": "klipper", "retraction_length": [ - "1" + "0.5" ], "machine_max_speed_e": [ "100" @@ -33,7 +33,7 @@ "500" ], "machine_max_speed_z": [ - "20" + "10" ], "machine_max_acceleration_e": [ "2500" @@ -54,16 +54,16 @@ "5000" ], "machine_max_acceleration_z": [ - "500" + "100" ], "machine_max_jerk_e": [ "2.5" ], "machine_max_jerk_x": [ - "10" + "8" ], "machine_max_jerk_y": [ - "10" + "8" ], "machine_max_jerk_z": [ "0.2" @@ -72,10 +72,10 @@ "0.2" ], "retraction_speed": [ - "50" + "60" ], "deretraction_speed": [ - "50" + "30" ], "retraction_minimum_travel": [ "1" @@ -89,6 +89,7 @@ "thumbnails": [ "300x300", "400x300", + "96x96", "32x32" ], "retract_lift_below": [ diff --git a/resources/profiles/Co Print/machine/fdm_machine_common.json b/resources/profiles/Co Print/machine/fdm_machine_common.json index 37eae97975..a24474d89b 100644 --- a/resources/profiles/Co Print/machine/fdm_machine_common.json +++ b/resources/profiles/Co Print/machine/fdm_machine_common.json @@ -5,7 +5,7 @@ "instantiation": "false", "printer_technology": "FFF", "deretraction_speed": [ - "50" + "30" ], "extruder_colour": [ "#FCE94F" @@ -31,7 +31,7 @@ "10000" ], "machine_max_acceleration_z": [ - "500" + "100" ], "machine_max_speed_e": [ "60" @@ -82,13 +82,13 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retract_when_changing_layer": [ - "1" + "0" ], "retraction_length": [ - "1" + "0.5" ], "retract_length_toolchange": [ "1" @@ -103,7 +103,7 @@ "0" ], "retraction_speed": [ - "50" + "60" ], "single_extruder_multi_material": "1", "wipe": [ diff --git a/resources/profiles/Co Print/process/0.2mm Fast @Co Print ChromaSet 0.4.json b/resources/profiles/Co Print/process/0.2mm Fast @Co Print ChromaSet 0.4.json index e5c65b3e7a..fbf01ea897 100644 --- a/resources/profiles/Co Print/process/0.2mm Fast @Co Print ChromaSet 0.4.json +++ b/resources/profiles/Co Print/process/0.2mm Fast @Co Print ChromaSet 0.4.json @@ -5,15 +5,15 @@ "from": "system", "instantiation": "true", "inherits": "fdm_process_coprint_common", - "elefant_foot_compensation": "0.15", + "elefant_foot_compensation": "0.1", "initial_layer_speed": "60", "initial_layer_infill_speed": "100", - "inner_wall_speed": "300", + "inner_wall_speed": "200", "small_perimeter_speed": "50%", "internal_solid_infill_speed": "300", "travel_speed": "500", "gap_infill_speed": "300", - "outer_wall_speed":"100", + "outer_wall_speed":"120", "top_surface_speed": "150", "default_acceleration": "10000", "outer_wall_acceleration": "3000", @@ -24,8 +24,11 @@ "internal_solid_infill_acceleration": "80%", "top_surface_acceleration": "2000", "travel_acceleration": "10000", - "default_jerk": "9", + "default_jerk": "0", + "wipe_tower_max_purge_speed": "200", "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle fast" + "Co Print ChromaSet 0.4 nozzle fast", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus" ] } diff --git a/resources/profiles/Co Print/process/0.2mm Standard @Co Print ChromaSet 0.4.json b/resources/profiles/Co Print/process/0.2mm Standard @Co Print ChromaSet 0.4.json index 3f67140d82..0b485ef04c 100644 --- a/resources/profiles/Co Print/process/0.2mm Standard @Co Print ChromaSet 0.4.json +++ b/resources/profiles/Co Print/process/0.2mm Standard @Co Print ChromaSet 0.4.json @@ -7,6 +7,8 @@ "inherits": "fdm_process_coprint_common", "default_acceleration": "5000", "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle" + "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus" ] } diff --git a/resources/profiles/Co Print/process/fdm_process_common.json b/resources/profiles/Co Print/process/fdm_process_common.json index 841ddc2ea6..e3d42b5918 100644 --- a/resources/profiles/Co Print/process/fdm_process_common.json +++ b/resources/profiles/Co Print/process/fdm_process_common.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "false", "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", + "reduce_crossing_wall": "1", "bridge_flow": "0.9031", "bridge_speed": "25", "internal_bridge_speed": "100", @@ -14,11 +14,11 @@ "default_acceleration": "5000", "bridge_no_support": "0", "elefant_foot_compensation": "0.1", - "outer_wall_line_width": "0.4", + "outer_wall_line_width": "0.42", "outer_wall_speed": "60", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", - "sparse_infill_density": "10%", + "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", "initial_layer_line_width": "0.5", "layer_height": "0.2", @@ -34,53 +34,53 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}{filament_type[0]}{layer_height}_{print_time}.gcode", "wall_loops": "2", - "inner_wall_line_width": "0.4", - "inner_wall_speed": "200", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "100", "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", "seam_gap": "5%", - "skirt_distance": "4", + "skirt_distance": "2", "skirt_height": "1", "minimum_sparse_infill_area": "0", - "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", "support_filament": "0", - "support_line_width": "0.4", + "support_line_width": "0.42", "support_interface_filament": "0", "support_on_build_plate_only": "0", - "support_top_z_distance": "0", + "support_top_z_distance": "0.2", "support_interface_loop_pattern": "0", - "support_interface_top_layers": "0", - "support_interface_spacing": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", "support_interface_speed": "200", "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2", + "support_base_pattern_spacing": "2.5", "support_speed": "200", "extra_perimeters_on_overhangs": "0", - "initial_layer_infill_speed": "100", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.5", + "initial_layer_infill_speed": "60", + "support_threshold_angle": "35", + "support_object_xy_distance": "0.35", "detect_thin_wall": "1", "top_surface_line_width": "0.4", "top_surface_speed": "80", "travel_speed": "350", "enable_prime_tower": "1", - "prime_tower_width": "120", + "prime_tower_width": "150", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "resolution": "0.012", - "wall_generator": "classic", + "wall_generator": "arachne", "wall_sequence": "inner wall/outer wall", "print_flow_ratio": "1", "top_shell_layers": "4", "internal_bridge_flow": "0.9031", "slow_down_layers": "3", - "gap_fill_target": "everywhere", - "skirt_loops": "6", + "gap_fill_target": "nowhere", + "skirt_loops": "3", "skirt_speed": "50", "draft_shield": "disabled", "brim_type": "no_brim", @@ -88,7 +88,7 @@ "inner_wall_acceleration": "3000", "top_solid_infill_flow_ratio": "1", "bottom_solid_infill_flow_ratio": "1", - "outer_wall_acceleration": "1000", + "outer_wall_acceleration": "1500", "bridge_acceleration": "800%", "sparse_infill_acceleration": "80%", "internal_solid_infill_acceleration": "80%", diff --git a/resources/profiles/Co Print/process/fdm_process_coprint_common.json b/resources/profiles/Co Print/process/fdm_process_coprint_common.json index c9df5e9979..5f5d557f44 100644 --- a/resources/profiles/Co Print/process/fdm_process_coprint_common.json +++ b/resources/profiles/Co Print/process/fdm_process_coprint_common.json @@ -5,10 +5,10 @@ "instantiation": "false", "inherits": "fdm_process_common", "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", + "reduce_crossing_wall": "1", "bridge_flow": "0.9031", "bridge_speed": "25", - "default_jerk": "9", + "default_jerk": "0", "infill_jerk": "12", "inner_wall_jerk": "7", "outer_wall_jerk": "7", @@ -23,11 +23,11 @@ "default_acceleration": "5000", "bridge_no_support": "0", "elefant_foot_compensation": "0.1", - "outer_wall_line_width": "0.4", + "outer_wall_line_width": "0.42", "outer_wall_speed": "60", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", - "sparse_infill_density": "10%", + "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -42,53 +42,55 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}{filament_type[0]}{layer_height}_{print_time}.gcode", "wall_loops": "2", - "inner_wall_line_width": "0.4", - "inner_wall_speed": "200", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "100", "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", "seam_gap": "5%", - "skirt_distance": "4", + "skirt_distance": "2", "skirt_height": "1", - "support_type": "tree(manual)", + "support_type": "tree(auto)", "minimum_sparse_infill_area": "0", - "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", "support_filament": "0", - "support_line_width": "0.4", + "support_line_width": "0.42", "support_interface_filament": "0", - "initial_layer_infill_speed": "100", + "initial_layer_infill_speed": "60", "support_on_build_plate_only": "0", - "support_top_z_distance": "0", + "support_top_z_distance": "0.2", "support_interface_loop_pattern": "0", - "support_interface_top_layers": "0", - "support_interface_spacing": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", "support_interface_speed": "200", "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2", + "support_base_pattern_spacing": "2.5", "support_speed": "200", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.5", + "support_threshold_angle": "35", + "support_object_xy_distance": "0.35", "detect_thin_wall": "1", "top_surface_line_width": "0.4", "top_surface_speed": "80", "travel_speed": "350", "enable_prime_tower": "1", - "prime_tower_width": "120", + "prime_tower_width": "150", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "resolution": "0.012", - "wall_generator": "classic", + "wall_generator": "arachne", "wall_sequence": "inner wall/outer wall", + "wipe_tower_max_purge_speed": "150", "print_flow_ratio": "1", "internal_bridge_flow": "0.9031", - "gap_fill_target": "everywhere", + "gap_fill_target": "nowhere", "slow_down_layers": "3", "top_shell_layers": "4", - "skirt_loops": "6", + "skirt_loops": "3", "skirt_speed": "50", "extra_perimeters_on_overhangs": "0", "bottom_solid_infill_flow_ratio": "1", @@ -97,7 +99,7 @@ "brim_type": "no_brim", "exclude_object": "1", "inner_wall_acceleration": "3000", - "outer_wall_acceleration": "1000", + "outer_wall_acceleration": "1500", "bridge_acceleration": "80%", "sparse_infill_acceleration": "80%", "internal_solid_infill_acceleration": "80%", From 77b8272c6ab4cee63c56e595f7441bce37b02f54 Mon Sep 17 00:00:00 2001 From: Asim Siddiqui Date: Wed, 8 Jan 2025 02:28:41 +1100 Subject: [PATCH 048/100] Added SUNLU filaments for Bambu Lab printers (#7890) Added SUNLU PLA Matte, PLA+, PLA+ 2.0, Silk PLA+, Wood PLA, Marble PLA and PETG filaments for Bambu Lab printers Co-authored-by: SoftFever --- resources/profiles/BBL.json | 244 ++++++++++++++++++ .../SUNLU/SUNLU Marble PLA @BBL A1.json | 43 +++ .../SUNLU/SUNLU Marble PLA @BBL A1M.json | 43 +++ .../SUNLU/SUNLU Marble PLA @BBL P1P.json | 40 +++ .../SUNLU/SUNLU Marble PLA @BBL X1.json | 22 ++ .../SUNLU/SUNLU Marble PLA @BBL X1C.json | 28 ++ .../SUNLU/SUNLU Marble PLA @base.json | 23 ++ .../SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json | 17 ++ .../SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json | 24 ++ .../filament/SUNLU/SUNLU PETG @BBL A1.json | 17 ++ .../SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json | 20 ++ .../SUNLU/SUNLU PETG @BBL A1M 0.8 nozzle.json | 24 ++ .../filament/SUNLU/SUNLU PETG @BBL A1M.json | 23 ++ .../SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json | 24 ++ .../SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json | 35 +++ .../filament/SUNLU/SUNLU PETG @BBL X1C.json | 24 ++ .../BBL/filament/SUNLU/SUNLU PETG @base.json | 84 ++++++ .../SUNLU PLA Matte @BBL A1 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU PLA Matte @BBL A1.json | 37 +++ .../SUNLU PLA Matte @BBL A1M 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU PLA Matte @BBL A1M.json | 37 +++ .../SUNLU PLA Matte @BBL P1P 0.2 nozzle.json | 32 +++ .../SUNLU/SUNLU PLA Matte @BBL P1P.json | 34 +++ .../SUNLU/SUNLU PLA Matte @BBL X1.json | 19 ++ .../SUNLU PLA Matte @BBL X1C 0.2 nozzle.json | 20 ++ .../SUNLU/SUNLU PLA Matte @BBL X1C.json | 22 ++ .../filament/SUNLU/SUNLU PLA Matte @base.json | 47 ++++ .../SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU PLA+ 2.0 @BBL A1.json | 37 +++ .../SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json | 37 +++ .../SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json | 32 +++ .../SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json | 34 +++ .../SUNLU/SUNLU PLA+ 2.0 @BBL X1.json | 19 ++ .../SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json | 20 ++ .../SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json | 22 ++ .../filament/SUNLU/SUNLU PLA+ 2.0 @base.json | 47 ++++ .../SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json | 38 +++ .../filament/SUNLU/SUNLU PLA+ @BBL A1.json | 37 +++ .../SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json | 38 +++ .../filament/SUNLU/SUNLU PLA+ @BBL A1M.json | 37 +++ .../SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json | 32 +++ .../filament/SUNLU/SUNLU PLA+ @BBL P1P.json | 34 +++ .../filament/SUNLU/SUNLU PLA+ @BBL X1.json | 19 ++ .../SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json | 20 ++ .../filament/SUNLU/SUNLU PLA+ @BBL X1C.json | 19 ++ .../BBL/filament/SUNLU/SUNLU PLA+ @base.json | 47 ++++ .../SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU Silk PLA+ @BBL A1.json | 37 +++ .../SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json | 38 +++ .../SUNLU/SUNLU Silk PLA+ @BBL A1M.json | 37 +++ .../SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json | 26 ++ .../SUNLU/SUNLU Silk PLA+ @BBL P1P.json | 28 ++ .../SUNLU/SUNLU Silk PLA+ @BBL X1.json | 16 ++ .../SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json | 20 ++ .../SUNLU/SUNLU Silk PLA+ @BBL X1C.json | 22 ++ .../filament/SUNLU/SUNLU Silk PLA+ @base.json | 54 ++++ .../SUNLU/SUNLU Wood PLA @BBL A1.json | 40 +++ .../SUNLU/SUNLU Wood PLA @BBL A1M.json | 40 +++ .../SUNLU/SUNLU Wood PLA @BBL P1P.json | 37 +++ .../SUNLU/SUNLU Wood PLA @BBL X1.json | 19 ++ .../SUNLU/SUNLU Wood PLA @BBL X1C.json | 19 ++ .../filament/SUNLU/SUNLU Wood PLA @base.json | 56 ++++ 63 files changed, 2231 insertions(+) create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.8 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1M.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL P1P.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 356da0b297..e27e29ef0a 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -712,6 +712,34 @@ { "name": "Bambu Support W @base", "sub_path": "filament/Bambu Support W @base.json" + }, + { + "name": "SUNLU PLA Matte @base", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @base.json" + }, + { + "name": "SUNLU PLA+ @base", + "sub_path": "filament/SUNLU/SUNLU PLA+ @base.json" + }, + { + "name": "SUNLU PLA+ 2.0 @base", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @base.json" + }, + { + "name": "SUNLU Silk PLA+ @base", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @base.json" + }, + { + "name": "SUNLU Marble PLA @base", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @base.json" + }, + { + "name": "SUNLU Wood PLA @base", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @base.json" + }, + { + "name": "SUNLU PETG @base", + "sub_path": "filament/SUNLU/SUNLU PETG @base.json" }, { "name": "eSUN PLA+ @base", @@ -1293,6 +1321,222 @@ "name": "Bambu Support W @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu Support W @BBL A1 0.2 nozzle.json" }, + { + "name": "SUNLU PLA Matte @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL X1C.json" + }, + { + "name": "SUNLU PLA Matte @BBL X1C 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL X1C 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA Matte @BBL X1", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL X1.json" + }, + { + "name": "SUNLU PLA Matte @BBL P1P 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL P1P 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA Matte @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL P1P.json" + }, + { + "name": "SUNLU PLA Matte @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL A1M.json" + }, + { + "name": "SUNLU PLA Matte @BBL A1M 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL A1M 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA Matte @BBL A1", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL A1.json" + }, + { + "name": "SUNLU PLA Matte @BBL A1 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA Matte @BBL A1 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL X1C.json" + }, + { + "name": "SUNLU PLA+ @BBL X1C 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ @BBL X1", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL X1.json" + }, + { + "name": "SUNLU PLA+ @BBL P1P 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL P1P.json" + }, + { + "name": "SUNLU PLA+ @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL A1M.json" + }, + { + "name": "SUNLU PLA+ @BBL A1M 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ @BBL A1", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL A1.json" + }, + { + "name": "SUNLU PLA+ @BBL A1 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL X1", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL A1", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1.json" + }, + { + "name": "SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL X1C.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL X1C 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL X1", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL X1.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL P1P 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL P1P.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL A1M.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL A1M 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL A1", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL A1.json" + }, + { + "name": "SUNLU Silk PLA+ @BBL A1 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json" + }, + { + "name": "SUNLU Marble PLA @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @BBL X1C.json" + }, + { + "name": "SUNLU Marble PLA @BBL X1", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @BBL X1.json" + }, + { + "name": "SUNLU Marble PLA @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @BBL P1P.json" + }, + { + "name": "SUNLU Marble PLA @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @BBL A1M.json" + }, + { + "name": "SUNLU Marble PLA @BBL A1", + "sub_path": "filament/SUNLU/SUNLU Marble PLA @BBL A1.json" + }, + { + "name": "SUNLU Wood PLA @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @BBL X1C.json" + }, + { + "name": "SUNLU Wood PLA @BBL X1", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @BBL X1.json" + }, + { + "name": "SUNLU Wood PLA @BBL P1P", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @BBL P1P.json" + }, + { + "name": "SUNLU Wood PLA @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @BBL A1M.json" + }, + { + "name": "SUNLU Wood PLA @BBL A1", + "sub_path": "filament/SUNLU/SUNLU Wood PLA @BBL A1.json" + }, + { + "name": "SUNLU PETG @BBL X1C", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL X1C.json" + }, + { + "name": "SUNLU PETG @BBL X1C 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json" + }, + { + "name": "SUNLU PETG @BBL X1C 0.8 nozzle", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json" + }, + { + "name": "SUNLU PETG @BBL A1M", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL A1M.json" + }, + { + "name": "SUNLU PETG @BBL A1M 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json" + }, + { + "name": "SUNLU PETG @BBL A1", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL A1.json" + }, + { + "name": "SUNLU PETG @BBL A1 0.2 nozzle", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json" + }, + { + "name": "SUNLU PETG @BBL A1 0.8 nozzle", + "sub_path": "filament/SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json" + }, { "name": "eSUN PLA+ @BBL X1C", "sub_path": "filament/eSUN PLA+ @BBL X1C.json" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1.json new file mode 100644 index 0000000000..5af164f2db --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @BBL A1", + "inherits": "SUNLU PLA Marble @base", + "from": "system", + "setting_id": "SNLS06_02", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1M.json new file mode 100644 index 0000000000..b9d8571487 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL A1M.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @BBL A1M", + "inherits": "SUNLU PLA Marble @base", + "from": "system", + "setting_id": "SNLS06_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL P1P.json new file mode 100644 index 0000000000..943a0fcec9 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL P1P.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @BBL P1P", + "inherits": "SUNLU PLA Marble @base", + "from": "system", + "setting_id": "SNLS06_01", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1.json new file mode 100644 index 0000000000..8761be2c91 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @BBL X1", + "inherits": "SUNLU PLA Marble @base", + "from": "system", + "setting_id": "SNLS06_00", + "instantiation": "true", + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1C.json new file mode 100644 index 0000000000..458c449ce8 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @BBL X1C.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @BBL X1C", + "inherits": "SUNLU PLA Marble @base", + "from": "system", + "setting_id": "SNLS06", + "instantiation": "true", + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json new file mode 100644 index 0000000000..5e4dfa6f87 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "SUNLU PLA Marble @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL06", + "instantiation": "false", + "filament_cost": [ + "31.99" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..5888102a75 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1 0.2 nozzle", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08_03", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json new file mode 100644 index 0000000000..9030212fb6 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1 0.8 nozzle", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08_04", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Bambu Lab A1 0.8 nozzle", + "Bambu Lab A1 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1.json new file mode 100644 index 0000000000..2c37b70b83 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08_02", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..b5d0c81a48 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1M 0.2 nozzle", + "inherits": "SUNLU PETG @BBL X1C 0.2 nozzle", + "from": "system", + "setting_id": "SNLS08_06", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.8 nozzle.json new file mode 100644 index 0000000000..7f0aa9ecc7 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1M 0.8 nozzle", + "inherits": "SUNLU PETG @BBL X1C 0.8 nozzle", + "from": "system", + "setting_id": "SNLS08_07", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M.json new file mode 100644 index 0000000000..bfa82c8fc6 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL A1M.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL A1M 0.4 nozzle", + "inherits": "SUNLU PETG @BBL X1C", + "from": "system", + "setting_id": "SNLS08_05", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..85c562747d --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.2 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL X1C 0.2 nozzle", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08_00", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..6053714f18 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C 0.8 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL X1C 0.8 nozzle", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08_01", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C.json new file mode 100644 index 0000000000..a476f0aacb --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @BBL X1C.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "SUNLU PETG @BBL X1C", + "inherits": "SUNLU PETG @base", + "from": "system", + "setting_id": "SNLS08", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab X1E 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json new file mode 100644 index 0000000000..5a190a7283 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json @@ -0,0 +1,84 @@ +{ + "type": "filament", + "name": "SUNLU PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "SNL08", + "instantiation": "false", + "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "22.99" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_vendor": [ + "SUNLU" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "temperature_vitrification": [ + "64" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..105595c393 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL A1 0.2 nozzle", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1.json new file mode 100644 index 0000000000..3c6c118de4 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL A1", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_05", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..05edebac01 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL A1M 0.2 nozzle", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_08", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M.json new file mode 100644 index 0000000000..d2ac4aeebc --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL A1M.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL A1M", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_07", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..1de562eaff --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL P1P 0.2 nozzle", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P.json new file mode 100644 index 0000000000..87a52e6e7c --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL P1P.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL P1P", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1.json new file mode 100644 index 0000000000..6da07bd2a7 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL X1", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_01", + "instantiation": "true", + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..04f1b86ead --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @BBL X1C 0.2 nozzle", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02_00", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C.json new file mode 100644 index 0000000000..1dd73cb486 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @BBL X1C.json @@ -0,0 +1,22 @@ + { + "type": "filament", + "name": "SUNLU PLA Matte @BBL X1C", + "inherits": "SUNLU PLA Matte @base", + "from": "system", + "setting_id": "SNLS02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json new file mode 100644 index 0000000000..64ed41a54a --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "SUNLU PLA Matte @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL02", + "instantiation": "false", + "filament_cost": [ + "25.99" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height":[ + "5%" + ], + "filament_scarf_gap":[ + "0%" + ], + "filament_scarf_length":[ + "10" + ], + "temperature_vitrification": [ + "53" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..5df3c719c9 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL A1 0.2 nozzle", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_05", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1.json new file mode 100644 index 0000000000..98c26d563c --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL A1", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..84313ba197 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL A1M 0.2 nozzle", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json new file mode 100644 index 0000000000..c6fb3d5985 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL A1M.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL A1M", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_07", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..bde9b68587 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL P1P 0.2 nozzle", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json new file mode 100644 index 0000000000..2d3b4aded3 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL P1P.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL P1P", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_02", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1.json new file mode 100644 index 0000000000..a3e55b0f3a --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL X1", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_00", + "instantiation": "true", + "slow_down_layer_time": [ + "10" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..7403d83252 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL X1C 0.2 nozzle", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04_01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.8" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json new file mode 100644 index 0000000000..7a5c535549 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @BBL X1C.json @@ -0,0 +1,22 @@ + { + "type": "filament", + "name": "SUNLU PLA+ 2.0 @BBL X1C", + "inherits": "SUNLU PLA+ 2.0 @base", + "from": "system", + "setting_id": "SNLS04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json new file mode 100644 index 0000000000..8b1c52eb35 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ 2.0 @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL04", + "instantiation": "false", + "filament_cost": [ + "18.99" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "1.0" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height":[ + "5%" + ], + "filament_scarf_gap":[ + "0%" + ], + "filament_scarf_length":[ + "10" + ], + "temperature_vitrification": [ + "53" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..04ce4d4300 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL A1 0.2 nozzle", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1.json new file mode 100644 index 0000000000..1d010a1403 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL A1", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..2db639d2ac --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL A1M 0.2 nozzle", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M.json new file mode 100644 index 0000000000..a5d2a227bb --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL A1M.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL A1M", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_05", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..7012a45b34 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL P1P 0.2 nozzle", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P.json new file mode 100644 index 0000000000..1bd59de764 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL P1P.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL P1P", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_02", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1.json new file mode 100644 index 0000000000..f99799480c --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL X1", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_00", + "instantiation": "true", + "slow_down_layer_time": [ + "10" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..9f0eb408d1 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @BBL X1C 0.2 nozzle", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03_01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.8" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C.json new file mode 100644 index 0000000000..6507463304 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @BBL X1C.json @@ -0,0 +1,19 @@ + { + "type": "filament", + "name": "SUNLU PLA+ @BBL X1C", + "inherits": "SUNLU PLA+ @base", + "from": "system", + "setting_id": "SNLS03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json new file mode 100644 index 0000000000..ec96f4bb23 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "SUNLU PLA+ @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL03", + "instantiation": "false", + "filament_cost": [ + "18.99" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "1.0" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height":[ + "5%" + ], + "filament_scarf_gap":[ + "0%" + ], + "filament_scarf_length":[ + "10" + ], + "temperature_vitrification": [ + "53" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..178d490717 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL A1 0.2 nozzle", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_05", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1.json new file mode 100644 index 0000000000..9da213a390 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL A1", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e02ca3141e --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M 0.2 nozzle.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL A1M 0.2 nozzle", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_07", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M.json new file mode 100644 index 0000000000..5065b6ff77 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL A1M.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL A1M", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..97f8694eca --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL P1P 0.2 nozzle", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_03", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P.json new file mode 100644 index 0000000000..aa47301396 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL P1P.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL P1P", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_02", + "instantiation": "true", + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1.json new file mode 100644 index 0000000000..f517fadc8a --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL X1", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_00", + "instantiation": "true", + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..ca47fe9998 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL X1C 0.2 nozzle", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05_01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C.json new file mode 100644 index 0000000000..ff38680448 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @BBL X1C.json @@ -0,0 +1,22 @@ + { + "type": "filament", + "name": "SUNLU Silk PLA+ @BBL X1C", + "inherits": "SUNLU Silk PLA+ @base", + "from": "system", + "setting_id": "SNLS05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json new file mode 100644 index 0000000000..a4e07641fc --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "SUNLU Silk PLA+ @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL05", + "instantiation": "false", + "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_scarf_height": [ + "5%" + ], + "filament_scarf_gap": [ + "0%" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "temperature_vitrification": [ + "53" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1.json new file mode 100644 index 0000000000..a003f3b34d --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "SUNLU Wood PLA @BBL A1", + "inherits": "SUNLU Wood PLA @base", + "from": "system", + "setting_id": "SNLS07_02", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1M.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1M.json new file mode 100644 index 0000000000..b88cbf0771 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL A1M.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "SUNLU Wood PLA @BBL A1M", + "inherits": "SUNLU Wood PLA @base", + "from": "system", + "setting_id": "SNLS07_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL P1P.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL P1P.json new file mode 100644 index 0000000000..b1d4fd41b9 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL P1P.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "SUNLU Wood PLA @BBL P1P", + "inherits": "SUNLU Wood PLA @base", + "from": "system", + "setting_id": "SNLS07_01", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1.json new file mode 100644 index 0000000000..26cabdb1f5 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "SUNLU Wood PLA @BBL X1", + "inherits": "SUNLU Wood PLA @base", + "from": "system", + "setting_id": "SNLS07_00", + "instantiation": "true", + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1C.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1C.json new file mode 100644 index 0000000000..f5f6952803 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @BBL X1C.json @@ -0,0 +1,19 @@ + { + "type": "filament", + "name": "SUNLU Wood PLA @BBL X1C", + "inherits": "SUNLU Wood PLA @base", + "from": "system", + "setting_id": "SNLS07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json new file mode 100644 index 0000000000..dfd91a5564 --- /dev/null +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "name": "SUNLU Wood PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SNL07", + "instantiation": "false", + "filament_cost": [ + "26.99" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "1.0" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_retraction_length": [ + "4" + ], + "filament_retraction_speed": [ + "50" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "SUNLU" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height":[ + "5%" + ], + "filament_scarf_gap":[ + "0%" + ], + "filament_scarf_length":[ + "10" + ], + "temperature_vitrification": [ + "45" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file From 72f324f147d7de7b6bd0431819baa5bdfc2be64a Mon Sep 17 00:00:00 2001 From: Heiko Liebscher Date: Tue, 7 Jan 2025 16:38:46 +0100 Subject: [PATCH 049/100] add new features to lang files (#7918) --- localization/i18n/OrcaSlicer.pot | 113 +- localization/i18n/ca/OrcaSlicer_ca.po | 152 ++- localization/i18n/cs/OrcaSlicer_cs.po | 165 ++- localization/i18n/de/OrcaSlicer_de.po | 203 ++- localization/i18n/en/OrcaSlicer_en.po | 142 ++- localization/i18n/es/OrcaSlicer_es.po | 184 ++- localization/i18n/fr/OrcaSlicer_fr.po | 180 ++- localization/i18n/hu/OrcaSlicer_hu.po | 138 ++- localization/i18n/it/OrcaSlicer_it.po | 183 ++- localization/i18n/ja/OrcaSlicer_ja.po | 139 ++- localization/i18n/ko/OrcaSlicer_ko.po | 174 ++- localization/i18n/nl/OrcaSlicer_nl.po | 138 ++- localization/i18n/pl/OrcaSlicer_pl.po | 178 ++- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 156 ++- localization/i18n/ru/OrcaSlicer_ru.po | 172 ++- localization/i18n/sv/OrcaSlicer_sv.po | 145 ++- localization/i18n/tr/OrcaSlicer_tr.po | 166 ++- localization/i18n/uk/OrcaSlicer_uk.po | 192 ++- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 164 ++- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 1231 ++++++++++++------- 20 files changed, 3179 insertions(+), 1136 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index a6fe7f89da..63f60d7743 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: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1260,9 +1260,6 @@ msgstr "" msgid "Center of circle" msgstr "" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "" @@ -1278,17 +1275,24 @@ msgstr "" msgid "Esc" msgstr "" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "" msgctxt "Verb" -msgid "Scale" +msgid "Scale all" msgstr "" msgid "None" @@ -1303,6 +1307,42 @@ msgstr "" msgid "Selection" msgstr "" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "" @@ -1318,6 +1358,27 @@ msgstr "" msgid "Distance XYZ" msgstr "" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "" @@ -2653,7 +2714,7 @@ msgstr "" msgid "About %s" msgstr "" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3395,9 +3456,9 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" msgid "" @@ -7247,7 +7308,15 @@ msgstr "" msgid "Nozzle temperature when printing" msgstr "" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "" msgid "" @@ -7452,7 +7521,7 @@ msgstr "" msgid "Layer height limits" msgstr "" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -8946,6 +9015,11 @@ msgstr "" msgid "Initial layer bed temperature" msgstr "" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10347,8 +10421,8 @@ msgid "mm/s² or %" msgstr "" 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." +"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 "" msgid "" @@ -11399,7 +11473,7 @@ msgid "" "change" msgstr "" -msgid "Z hop when retract" +msgid "Z-hop height" msgstr "" msgid "" @@ -11424,6 +11498,9 @@ msgid "" "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -12516,9 +12593,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index e3d1f0c721..7be3f31cc7 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-07-07 18:43+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -1298,9 +1298,6 @@ msgstr "Centre de l'aresta" msgid "Center of circle" msgstr "Centre del cercle" -msgid "ShiftLeft mouse button" -msgstr "Màj+Botó esquerre del ratolí" - msgid "Select feature" msgstr "Seleccioneu una característica" @@ -1316,18 +1313,25 @@ msgstr "Reinicia la selecció" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Desmarcar" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Mesurar" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Editar a escala" msgctxt "Verb" -msgid "Scale" -msgstr "Escalar" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Cap" @@ -1341,6 +1345,42 @@ msgstr "Longitut" msgid "Selection" msgstr "Selecció" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copiar al porta-retalls" @@ -1356,6 +1396,27 @@ msgstr "Distància directa" msgid "Distance XYZ" msgstr "Distància XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2790,8 +2851,8 @@ msgstr "" msgid "About %s" msgstr "Sobre %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer es basa en BambuStudio, PrusaSlicer i SuperSlicer." @@ -3265,8 +3326,8 @@ msgid "" "be opened during copy check. The output G-code is at %1%.tmp." msgstr "" "La còpia del codi-G temporal ha finalitzat, però el codi exportat no s'ha " -"pogut obrir durant la verificació de la còpia. El codi-G de sortida és a %1%." -"tmp." +"pogut obrir durant la verificació de la còpia. El codi-G de sortida és a " +"%1%.tmp." #, boost-format msgid "G-code file exported to %1%" @@ -3630,9 +3691,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "La temperatura actual de la cambra és superior a la temperatura segura del " "material, pot provocar un estovament i obstrucció del material. La " @@ -7901,7 +7962,15 @@ msgstr "Broquet( nozzle )" msgid "Nozzle temperature when printing" msgstr "Temperatura del broquet en imprimir" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "Base Freda" msgid "" @@ -8122,8 +8191,8 @@ msgstr "" msgid "Layer height limits" msgstr "Límits d'alçada de capa" -msgid "Lift Z Enforcement" -msgstr "Forçar elevació Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retracció en canviar de material" @@ -9841,6 +9910,11 @@ msgstr "Capa inicial" msgid "Initial layer bed temperature" msgstr "Temperatura del llit en la capa inicial" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11549,8 +11623,8 @@ msgid "mm/s² or %" msgstr "mm/s o %" 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." +"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 "" "Acceleració del farciment poc dens. Si el valor s'expressa en percentatge " "( per exemple, 100% ), es calcularà a partir de l'acceleració predeterminada." @@ -12865,8 +12939,8 @@ msgstr "" "Característica experimental. Longitud de retracció abans de tallar durant el " "canvi de filament" -msgid "Z hop when retract" -msgstr "Salt en Z quan hi ha retracció" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12899,6 +12973,9 @@ msgstr "" "sobre del paràmetre: \"Límit inferior de salt en Z\" i estigui per sota " "d'aquest valor" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Tipus de salt en Z" @@ -14264,9 +14341,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14984,8 +15061,8 @@ msgstr "Suport: propagar branques a la capa %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Format de fitxer desconegut. El fitxer d'entrada ha de tenir extensió .stl, ." -"obj, .amf( .xml )." +"Format de fitxer desconegut. El fitxer d'entrada ha de tenir " +"extensió .stl, .obj, .amf( .xml )." msgid "Loading of a model file failed." msgstr "La càrrega d'un fitxer de model ha fallat." @@ -17337,9 +17414,28 @@ msgstr "" "augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "deformació." -#~ msgid "Cool Plate" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Màj+Botó esquerre del ratolí" + +#~ msgid "Unselect" +#~ msgstr "Desmarcar" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Escalar" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" #~ msgstr "Base Freda" +#~ msgid "Lift Z Enforcement" +#~ msgstr "Forçar elevació Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Salt en Z quan hi ha retracció" + #~ msgid "Reverse on odd" #~ msgstr "Invertir en capes senars" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index ddcbd9cbf0..8087ede4a3 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: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-11-03 20:59+0100\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -1286,9 +1286,6 @@ msgstr "Střed hrany" msgid "Center of circle" msgstr "Střed kruhu" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Vyberat objekt" @@ -1304,18 +1301,25 @@ msgstr "Zrušit výběr" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Zrušení výběru" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Měření" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Změna rozměru" msgctxt "Verb" -msgid "Scale" -msgstr "Měřítko" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Žádné" @@ -1329,6 +1333,42 @@ msgstr "Vzdálenost" msgid "Selection" msgstr "Výběr" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Kopírovat do schránky" @@ -1344,6 +1384,27 @@ msgstr "Přímá vzdálenost" msgid "Distance XYZ" msgstr "Vzdálenost XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2755,8 +2816,8 @@ msgstr "" msgid "About %s" msgstr "O %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer je založen na BambuStudio, PrusaSlicer a SuperSlicer." @@ -3563,9 +3624,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Aktuální teplota komory je vyšší než bezpečná teplota materiálu,může to " "způsobit změkčení materiálu a jeho ucpaní. Maximální bezpečná teplota pro " @@ -7690,8 +7751,16 @@ msgstr "Tryska" msgid "Nozzle temperature when printing" msgstr "Teplota trysky při tisku" -msgid "Cool plate" -msgstr "Cool podložka" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Podložka" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -7910,8 +7979,8 @@ msgstr "" msgid "Layer height limits" msgstr "Výškové limity vrstvy" -msgid "Lift Z Enforcement" -msgstr "Vynutit Zvednout Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retrakce při změně materiálu" @@ -9535,6 +9604,11 @@ msgstr "První vrstva" msgid "Initial layer bed temperature" msgstr "Teplota podložky první vrstvy" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11100,8 +11174,8 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Zrychlení vnitřní výplně. Pokud je hodnota vyjádřena v procentech (např. 100 " "%), bude vypočítána na základě výchozího zrychlení." @@ -12320,8 +12394,8 @@ msgid "" "change" msgstr "" -msgid "Z hop when retract" -msgstr "Z hop při retrakci" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12352,6 +12426,9 @@ msgstr "" "Pokud je tato hodnota kladná, Z hop bude mít vliv pouze tehdy, pokud je " "hodnota Z nad dolní mezí Z hop a zároveň pod touto hodnotou" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Typ Z hop" @@ -13601,9 +13678,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14273,8 +14350,8 @@ msgstr "Podpěry: šíření větví na vrstvě %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Neznámý formát souboru. Vstupní soubor musí mít příponu .stl, .obj nebo ." -"amf(.xml)" +"Neznámý formát souboru. Vstupní soubor musí mít příponu .stl, .obj " +"nebo .amf(.xml)" msgid "Loading of a model file failed." msgstr "Nahrávání souboru modelu selhalo." @@ -16323,8 +16400,24 @@ msgid "" "probability of warping." msgstr "" -#~ msgid "Cool Plate" -#~ msgstr "Cool Podložka" +#~ msgid "Unselect" +#~ msgstr "Zrušení výběru" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Měřítko" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Cool podložka" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Vynutit Zvednout Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hop při retrakci" #~ msgid "Reverse on odd" #~ msgstr "Obrátit na lichých" @@ -16761,10 +16854,10 @@ msgstr "" #~ "3mf je generován starým Orca Slicerem, načtěte pouze geometrická data." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -17132,8 +17225,8 @@ msgstr "" #~ msgstr "Úroveň ladění" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" #~ "Nastaví úroveň protokolování ladění. 0:fatal, 1:error, 2:warning, 3:info, " #~ "4:debug, 5:sledovat\n" @@ -17178,8 +17271,8 @@ msgstr "" #~ "OrcaSlicer configuration file may be corrupted and is not abled to be " #~ "parsed.Please delete the file and try again." #~ msgstr "" -#~ "Konfigurační soubor OrcaSlicer může být poškozen a nelze jej analyzovat." -#~ "Smažte soubor a zkuste to znovu." +#~ "Konfigurační soubor OrcaSlicer může být poškozen a nelze jej " +#~ "analyzovat.Smažte soubor a zkuste to znovu." #~ msgid "Online Models" #~ msgstr "Online modely" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index f51fe858c6..a4a7cdfa5d 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -1299,9 +1299,6 @@ msgstr "Zentrum der Kante" msgid "Center of circle" msgstr "Zentrum des Kreises" -msgid "ShiftLeft mouse button" -msgstr "Umschalttaste + Linksklick" - msgid "Select feature" msgstr "Feature auswählen" @@ -1317,18 +1314,24 @@ msgstr "Auswahl neu starten" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Abwählen" +msgid "Cancel a feature until exit" +msgstr "Abbrechen einer Funktion bis zum Verlassen" msgid "Measure" msgstr "Messen" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "Bitte bestätigen Sie das Explosionsverhältnis = 1, und wählen Sie mindestens ein Objekt aus" + +msgid "Please select at least one object." +msgstr "Bitte wählen Sie mindestens ein Objekt aus." + msgid "Edit to scale" msgstr "Bearbeiten auf Skala" -msgctxt "Verb" -msgid "Scale" -msgstr "Skalieren" +msgid "Scale all" +msgstr "Alle skalieren" msgid "None" msgstr "Keine" @@ -1342,6 +1345,48 @@ msgstr "Länge" msgid "Selection" msgstr "Auswahl" +msgid " (Moving)" +msgstr " (Bewegen)" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" +"Wählen Sie 2 Flächen auf Objekten aus und \n" +"lassen Sie die Objekte zusammenfügen." + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" +"Wählen Sie 2 Punkte oder Kreise auf Objekten aus und \n" +"geben Sie den Abstand zwischen ihnen an." + +msgid "Face" +msgstr "Fläche" + +msgid " (Fixed)" +msgstr " (Fest)" + +msgid "Point" +msgstr "Punkt" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" +"Feature 1 wurde zurückgesetzt, \n" +"Feature 2 wurde zu Feature 1" + +msgid "Warning:please select Plane's feature." +msgstr "Warnung: Bitte wählen Sie die Funktion der Ebene." + +msgid "Warning:please select Point's or Circle's feature." +msgstr "Warnung: Bitte wählen Sie die Funktion des Punktes oder Kreises." + +msgid "Warning:please select two different mesh." +msgstr "Warnung: Bitte wählen Sie zwei verschiedene Mesh-Netze." + msgid "Copy to clipboard" msgstr "In Zwischenablage kopieren" @@ -1357,6 +1402,27 @@ msgstr "Direkte Entfernung" msgid "Distance XYZ" msgstr "Entfernung XYZ" +msgid "Parallel" +msgstr "Parallel" + +msgid "Center coincidence" +msgstr "Zentrumsgleichheit" + +msgid "Featue 1" +msgstr "Funktion 1" + +msgid "Reverse rotation" +msgstr "Rotation umkehren" + +msgid "Rotate around center:" +msgstr "Um Zentrum drehen:" + +msgid "Parallel distance:" +msgstr "Parallele Entfernung:" + +msgid "Flip by Face 2" +msgstr "Umdrehen durch Fläche 2" + msgid "Ctrl+" msgstr "Strg +" @@ -2812,8 +2878,8 @@ msgstr "" msgid "About %s" msgstr "Über %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "Orca Slicer" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer basiert auf BambuStudio, PrusaSlicer und SuperSlicer." @@ -3668,9 +3734,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Die aktuelle Kammer-Temperatur ist höher als die sichere Temperatur des " "Materials, dies kann zu Materialerweichung und Verstopfung führen. Die " @@ -7774,8 +7840,8 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" -"Die Schichthöhe überschreitet das Limit in Druckereinstellungen -> Extruder -" -"> Schichthöhenlimits. Dies kann zu Problemen mit der Druckqualität führen." +"Die Schichthöhe überschreitet das Limit in Druckereinstellungen -> Extruder " +"-> Schichthöhenlimits. Dies kann zu Problemen mit der Druckqualität führen." msgid "Adjust to the set range automatically? \n" msgstr "Automatisch an den eingestellten Bereich anpassen? \n" @@ -7973,7 +8039,17 @@ msgstr "Düse" msgid "Nozzle temperature when printing" msgstr "Düsentemperatur beim Drucken" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "Kalte Druckplatte (SuperTack)" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" +"Dies ist die Betttemperatur, wenn die kalte Druckplatte installiert ist. Ein " +"Wert von 0 bedeutet, dass das Filament auf der kalten Druckplatte SuperTack " + +msgid "Cool Plate" msgstr "Kalte Druckplatte" msgid "" @@ -8205,8 +8281,8 @@ msgstr "" msgid "Layer height limits" msgstr "Höhenbegrenzungen für Schichten" -msgid "Lift Z Enforcement" -msgstr "Z-Höhe einhalten" +msgid "Z-Hop" +msgstr "Z-Hop" msgid "Retraction when switching material" msgstr "Rückzug bei Materialwechsel" @@ -9806,8 +9882,8 @@ msgstr "" "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/" +"Passwort in die URL in folgendem Format eingegeben werden: https://" +"username:password@Ihre-octopi-Adresse/" msgid "Device UI" msgstr "Gerät" @@ -9951,6 +10027,13 @@ msgstr "Erste Schicht" msgid "Initial layer bed temperature" msgstr "Druckbettemperatur für die erste Schicht" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" +"Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " +"dass das Filament auf der kalten Druckplatte SuperTack nicht unterstützt " + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10992,8 +11075,8 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Reihenfolge der Wand/Füllung. Wenn das Kontrollkästchen nicht aktiviert ist," -"werden die Wände zuerst gedruckt, was in den meisten Fällen am besten " +"Reihenfolge der Wand/Füllung. Wenn das Kontrollkästchen nicht aktiviert " +"ist,werden die Wände zuerst gedruckt, was in den meisten Fällen am besten " "funktioniert.\n" "\n" "Das Drucken der Füllung zuerst kann bei extremen Überhängen helfen, da die " @@ -11883,16 +11966,16 @@ 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 "" -"Beschleunigung der Brücken. Wenn der Wert als Prozentwert angegeben wird (z." -"B. 50%), wird er auf der Grundlage der Beschleunigung der Außenwand " +"Beschleunigung der Brücken. Wenn der Wert als Prozentwert angegeben wird " +"(z.B. 50%), wird er auf der Grundlage der Beschleunigung der Außenwand " "berechnet." msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Beschleunigung der spärlichen Innenfüllung. Wenn der Wert als Prozentwert " "angegeben wird (z.B. 100%), wird er auf der Grundlage der " @@ -12258,8 +12341,8 @@ msgstr "" "aus, bevor die Geschwindigkeit auf die Zielgeschwindigkeit reduziert wird, " "um den Kühlventilator anzuschubsen.Dies ist bei Lüftern nützlich, bei denen " "eine niedrige PWM-Leistung möglicherweise nicht ausreicht, um den Lüfter vom " -"Stillstand aus zu starten oder um den Lüfter schneller auf Touren zu bringen." -"Setze den Wert auf 0, um diese Funktion zu deaktivieren." +"Stillstand aus zu starten oder um den Lüfter schneller auf Touren zu " +"bringen.Setze den Wert auf 0, um diese Funktion zu deaktivieren." msgid "Time cost" msgstr "Druckzeit Kosten" @@ -13228,8 +13311,8 @@ msgstr "" "Experimentelle Funktion. Rückzugslänge vor dem Abschneiden beim Filament-" "Wechsel" -msgid "Z hop when retract" -msgstr "Z-Hop beim Rückzug" +msgid "Z-hop height" +msgstr "Z-Hub-Höhe" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13261,6 +13344,9 @@ msgstr "" "Wenn dieser Wert positiv ist, wird der Z-Hub nur wirksam, wenn Z über dem " "Parameter: \"Z-Hub untere Grenze\" liegt und unter diesem Wert liegt" +msgid "Z-hop type" +msgstr "Z-Hub Typ" + msgid "Z hop type" msgstr "Z-Hub Typ" @@ -13495,8 +13581,8 @@ msgstr "" "Geschwindigkeit der äußeren oder inneren Wände abweicht. Wenn die hier " "angegebene Geschwindigkeit höher ist als die Geschwindigkeit der äußeren " "oder inneren Wände, wird der Drucker auf die langsamere der beiden " -"Geschwindigkeiten zurückgesetzt. Wenn sie als Prozentsatz angegeben wird (z." -"B. 80%), wird die Geschwindigkeit auf der Grundlage der jeweiligen " +"Geschwindigkeiten zurückgesetzt. Wenn sie als Prozentsatz angegeben wird " +"(z.B. 80%), wird die Geschwindigkeit auf der Grundlage der jeweiligen " "Geschwindigkeit der äußeren oder inneren Wand berechnet. Der Standardwert " "ist auf 100% eingestellt." @@ -14697,9 +14783,9 @@ msgid "Idle temperature" msgstr "Leerlauftemperatur" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Düsentemperatur, wenn das Werkzeug in Mehrwerkzeug-Setups derzeit nicht " "verwendet wird. Dies wird nur verwendet, wenn die „Ausflussverhinderung“ in " @@ -15425,8 +15511,8 @@ msgstr "Stützen: Verbreiten von Zweigen auf Ebene %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Unbekanntes Dateiformat: Die Eingabedatei muss die Endung .stl, .obj oder ." -"amf(.xml) haben." +"Unbekanntes Dateiformat: Die Eingabedatei muss die Endung .stl, .obj " +"oder .amf(.xml) haben." msgid "Loading of a model file failed." msgstr "Das Laden der Modelldatei ist fehlgeschlagen." @@ -17782,6 +17868,28 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Umschalttaste + Linksklick" + +#~ msgid "Unselect" +#~ msgstr "Abwählen" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Skalieren" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Kalte Druckplatte" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Z-Höhe einhalten" + +#~ msgid "Z hop when retract" +#~ msgstr "Z-Hop beim Rückzug" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -17793,9 +17901,6 @@ msgstr "" #~ "Umfangsbreite sein.\n" #~ "Der Wert 0 aktiviert die Umkehrung auf jeder geraden Schicht." -#~ msgid "Cool Plate" -#~ msgstr "Kalte Druckplatte" - #~ msgid "Reverse on odd" #~ msgstr "Umkehren bei ungeraden Schichten" @@ -18832,10 +18937,10 @@ msgstr "" #~ msgstr "wiki" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -19286,11 +19391,11 @@ msgstr "" #~ msgstr "Fehlersuchstufe" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Legt die Stufe der Fehlerprotokollierung fest. 0:fatal, 1:error, 2:" -#~ "warning, 3:info, 4:debug, 5:trace\n" +#~ "Legt die Stufe der Fehlerprotokollierung fest. 0:fatal, 1:error, " +#~ "2:warning, 3:info, 4:debug, 5:trace\n" #, boost-format #~ msgid "The selected preset: %1% is not found." diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 55fb48c8ad..6b70c07fd6 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1261,9 +1261,6 @@ msgstr "Center of edge" msgid "Center of circle" msgstr "Center of circle" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Select feature" @@ -1279,18 +1276,25 @@ msgstr "Restart selection" msgid "Esc" msgstr "Esc" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "Measure" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Edit to scale" msgctxt "Verb" -msgid "Scale" -msgstr "Scale" +msgid "Scale all" +msgstr "" msgid "None" msgstr "None" @@ -1304,6 +1308,42 @@ msgstr "Length" msgid "Selection" msgstr "Selection" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copy to clipboard" @@ -1319,6 +1359,27 @@ msgstr "Direct distance" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2707,7 +2768,7 @@ msgstr "" msgid "About %s" msgstr "About %s" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3522,9 +3583,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Current chamber temperature is higher than the material's safe temperature; " "this may result in material softening and nozzle clogs.The maximum safe " @@ -7652,8 +7713,16 @@ msgstr "Nozzle" msgid "Nozzle temperature when printing" msgstr "Nozzle temperature when printing" -msgid "Cool plate" -msgstr "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -7872,7 +7941,7 @@ msgstr "" msgid "Layer height limits" msgstr "Layer height limits" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -9479,6 +9548,11 @@ msgstr "First layer" msgid "Initial layer bed temperature" msgstr "First layer bed temperature" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10982,11 +11056,11 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" -"Acceleration of sparse infill. If the value is expressed as a percentage (e." -"g. 100%), it will be calculated based on the default acceleration." +"Acceleration of sparse infill. If the value is expressed as a percentage " +"(e.g. 100%), it will be calculated based on the default acceleration." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -12113,8 +12187,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "Z hop when retracting" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12146,6 +12220,9 @@ msgstr "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -13343,9 +13420,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -16161,8 +16238,15 @@ msgstr "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping?" -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate" +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Scale" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hop when retracting" #~ msgid "" #~ "While printing by Object, the extruder may collide skirt.\n" @@ -16752,11 +16836,11 @@ msgstr "" #~ msgstr "Debug level" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgid "Embeded" #~ msgstr "Embedded" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index faac511fc7..92f5362e01 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -1302,9 +1302,6 @@ msgstr "Centro de la arista" msgid "Center of circle" msgstr "Centro del círculo" -msgid "ShiftLeft mouse button" -msgstr "Mayúsculas + Botón izquierdo del ratón" - msgid "Select feature" msgstr "Seleccionar característica" @@ -1320,18 +1317,25 @@ msgstr "Reiniciar selección" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Deseleccionar" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Medir" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Editar a escala" msgctxt "Verb" -msgid "Scale" -msgstr "Escala" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Ninguno" @@ -1345,6 +1349,42 @@ msgstr "Longitud" msgid "Selection" msgstr "Selección" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copiar al portapapeles" @@ -1360,6 +1400,27 @@ msgstr "Distancia directa" msgid "Distance XYZ" msgstr "Distancia XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2813,8 +2874,8 @@ msgstr "" msgid "About %s" msgstr "Acerca de %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer está basado en BambuStudio, PrusaSlicer, y SuperSlicer." @@ -3659,9 +3720,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "La temperatura actual de la cámara es superior a la temperatura de seguridad " "del material, puede provocar que el material se ablande y se atasque. La " @@ -7945,7 +8006,15 @@ msgstr "Boquilla" msgid "Nozzle temperature when printing" msgstr "Temperatura de la boquilla al imprimir" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "Bandeja Fría" msgid "" @@ -8180,8 +8249,8 @@ msgstr "" msgid "Layer height limits" msgstr "Límites de altura de la capa" -msgid "Lift Z Enforcement" -msgstr "Forzar elevación Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retracción al cambiar de material" @@ -9765,8 +9834,8 @@ msgstr "" "contener el nombre de host, la dirección IP o la URL de la instancia de la " "impresora. Se puede acceder a la impresora detrás de un proxy con la " "autenticación básica activada por un nombre de usuario y contraseña en la " -"URL en el siguiente formato: https://nombredeusuario:" -"contraseña@tudirecciondeoctopi/" +"URL en el siguiente formato: https://" +"nombredeusuario:contraseña@tudirecciondeoctopi/" msgid "Device UI" msgstr "IU de dispositivo" @@ -9909,6 +9978,11 @@ msgstr "Capa inicial" msgid "Initial layer bed temperature" msgstr "Temperatura de la cama durante la primera capa" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11856,8 +11930,8 @@ msgid "mm/s² or %" msgstr "mm/s² o %" 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." +"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 "" "Aceleración del relleno de baja densidad. Si el valor se expresa en " "porcentaje (por ejemplo 100%), se calculará basándose en la aceleración por " @@ -11991,8 +12065,8 @@ msgid "" "Can only be overridden by disable_fan_first_layers." msgstr "" "Esta velocidad de ventilador se fuerza cuando se imprimen todas las " -"interfaces de soporte, con el objetivo de debilitar la unión con la pieza." -"Sólo puede ser anulado por disable_fan_first_layers." +"interfaces de soporte, con el objetivo de debilitar la unión con la " +"pieza.Sólo puede ser anulado por disable_fan_first_layers." msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " @@ -13204,8 +13278,8 @@ msgstr "" "Función experimental. Longitud de retracción antes del corte durante el " "cambio de filamento" -msgid "Z hop when retract" -msgstr "Salto en Z al retraer" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13237,6 +13311,9 @@ msgstr "" "Si este valor es positivo, Z hop sólo se usará cuando Z esté por encima del " "parámetro \"Límite inferior de salto Z\" y por debajo de este valor" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Tipo de salto Z" @@ -14665,9 +14742,9 @@ msgid "Idle temperature" msgstr "Temperatura de Espera" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Temperatura de la boquilla cuando el cabezal no se está utilizando en " "configuraciones multicabezal. Este parámetro sólo es utilizado cuando la " @@ -14746,8 +14823,8 @@ msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " "following format: \"XxY, XxY, ...\"" msgstr "" -"Los tamaños de las imágenes para almacenar en archivos .gcode y .sl1 / ." -"sl1s, en el siguiente formato: \"XxY, XxY, ...\"" +"Los tamaños de las imágenes para almacenar en archivos .gcode " +"y .sl1 / .sl1s, en el siguiente formato: \"XxY, XxY, ...\"" msgid "Format of G-code thumbnails" msgstr "Formato de las miniaturas de G-Code" @@ -15396,8 +15473,8 @@ msgstr "Soporte: propagando ramas en la capa %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Formato de archivo desconocido: el archivo de entrada debe tener extensión ." -"stl, .obj o .amf (.xml)." +"Formato de archivo desconocido: el archivo de entrada debe tener " +"extensión .stl, .obj o .amf (.xml)." msgid "Loading of a model file failed." msgstr "Error en la carga del fichero de modelo." @@ -15407,8 +15484,8 @@ msgstr "El archivo proporcionado no puede ser leído debido a que está vacío" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Formato de archivo desconocido: el archivo de entrada debe tener " -"extensión .3mf o .zip.amf." +"Formato de archivo desconocido: el archivo de entrada debe tener extensión " +".3mf o .zip.amf." msgid "Canceled" msgstr "Cancelado" @@ -17763,6 +17840,28 @@ msgstr "" "aumentar adecuadamente la temperatura de la cama térmica puede reducir la " "probabilidad de deformaciones." +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Mayúsculas + Botón izquierdo del ratón" + +#~ msgid "Unselect" +#~ msgstr "Deseleccionar" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Escala" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Bandeja Fría" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Forzar elevación Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Salto en Z al retraer" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -17773,9 +17872,6 @@ msgstr "" #~ "considere útil. Puede ser % del ancho del perímetro.\n" #~ "El valor 0 permite la inversión en todas las capas pares." -#~ msgid "Cool Plate" -#~ msgstr "Bandeja Fría" - #~ msgid "Reverse on odd" #~ msgstr "Invertir en impar" @@ -18686,10 +18782,10 @@ msgstr "" #~ "geometría." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -19146,11 +19242,11 @@ msgstr "" #~ msgstr "Nivel de depuración" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Ajusta el nivel de registro de depuración. 0:fatal, 1:error, 2:" -#~ "advertencia, 3:información, 4:depuración, 5:rastreo\n" +#~ "Ajusta el nivel de registro de depuración. 0:fatal, 1:error, " +#~ "2:advertencia, 3:información, 4:depuración, 5:rastreo\n" #, boost-format #~ msgid "The selected preset: %1% is not found." diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index fbfd1a150e..537142692c 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: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -1311,9 +1311,6 @@ msgstr "Centrer sur l’arête " msgid "Center of circle" msgstr "Centrer du cercle" -msgid "ShiftLeft mouse button" -msgstr "ShiftLeft mouse button" - msgid "Select feature" msgstr "Sélectionner un trait" @@ -1329,18 +1326,25 @@ msgstr "Recommencer la sélection" msgid "Esc" msgstr "Échap" -msgid "Unselect" -msgstr "Désélectionner" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Mesurer" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Modifier à l’échelle" msgctxt "Verb" -msgid "Scale" -msgstr "Redimensionner" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Aucun" @@ -1354,6 +1358,42 @@ msgstr "Longueur" msgid "Selection" msgstr "Sélection" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" @@ -1369,6 +1409,27 @@ msgstr "Distance directe" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2813,8 +2874,8 @@ msgstr "" msgid "About %s" msgstr "À propos de %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "Orca Slicer est basé sur BambuStudio, PrusaSlicer, et SuperSlicer." @@ -3665,9 +3726,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "La température actuelle du caisson est supérieure à la température de " "sécurité du matériau, ce qui peut entraîner un ramollissement et un bouchage " @@ -7819,9 +7880,9 @@ msgid "" "complications.Please use with the latest printer firmware." msgstr "" "Fonction expérimentale : Rétracter et couper le filament à une plus grande " -"distance lors des changements de filament afin de minimiser l’affleurement." -"Bien que cela puisse réduire sensiblement l’affleurement, cela peut " -"également augmenter le risque d’obstruction des buses ou d’autres " +"distance lors des changements de filament afin de minimiser " +"l’affleurement.Bien que cela puisse réduire sensiblement l’affleurement, " +"cela peut également augmenter le risque d’obstruction des buses ou d’autres " "complications d’impression.Veuillez utiliser le dernier micrologiciel de " "l’imprimante." @@ -7989,8 +8050,16 @@ msgstr "Buse" msgid "Nozzle temperature when printing" msgstr "Température de la buse lors de l'impression" -msgid "Cool plate" -msgstr "Plaque Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate/Plaque PLA" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8227,8 +8296,8 @@ msgstr "" msgid "Layer height limits" msgstr "Limites de hauteur de couche" -msgid "Lift Z Enforcement" -msgstr "Exécution du décalage en Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Rétraction lors du changement de matériau" @@ -9993,6 +10062,11 @@ msgstr "Couche initiale" msgid "Initial layer bed temperature" msgstr "Température du plateau lors de la couche initiale" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11958,8 +12032,8 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Accélération du remplissage interne. Si la valeur est exprimée en " "pourcentage (par exemple 100%), elle sera calculée en fonction de " @@ -13321,8 +13395,8 @@ msgstr "" "Fonction expérimentale : longueur de rétraction avant la coupure lors du " "changement de filament." -msgid "Z hop when retract" -msgstr "Décalage du Z lors de la rétraction" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13355,6 +13429,9 @@ msgstr "" "supérieur au paramètre : « Limite inférieure de Z hop » et qu’il est " "inférieur à cette valeur." +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Type de décalage en Z" @@ -14791,9 +14868,9 @@ msgid "Idle temperature" msgstr "Température au repos" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Température de la buse lorsque l’outil n’est pas utilisé dans les " "configurations multi-outils. Cette fonction n’est utilisée que lorsque la " @@ -15529,8 +15606,8 @@ msgstr "Support : propagation des branches à la couche %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Format de fichier inconnu : le fichier d'entrée doit porter l'extension ." -"stl, .obj ou .amf (.xml)." +"Format de fichier inconnu : le fichier d'entrée doit porter " +"l'extension .stl, .obj ou .amf (.xml)." msgid "Loading of a model file failed." msgstr "Le chargement du fichier modèle a échoué." @@ -15540,8 +15617,8 @@ msgstr "Le fichier fourni n'a pas pu être lu car il est vide." msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Format de fichier inconnu : le fichier d'entrée doit porter " -"l'extension .3mf, .zip ou .amf." +"Format de fichier inconnu : le fichier d'entrée doit porter l'extension " +".3mf, .zip ou .amf." msgid "Canceled" msgstr "Annulé" @@ -17927,6 +18004,28 @@ msgstr "" "déformer, tels que l’ABS, une augmentation appropriée de la température du " "plateau chauffant peut réduire la probabilité de déformation." +#~ msgid "ShiftLeft mouse button" +#~ msgstr "ShiftLeft mouse button" + +#~ msgid "Unselect" +#~ msgstr "Désélectionner" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Redimensionner" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Plaque Cool plate" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Exécution du décalage en Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Décalage du Z lors de la rétraction" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -17938,9 +18037,6 @@ msgstr "" #~ "périmètre.\n" #~ "La valeur 0 permet l’inversion sur toutes les couches paires." -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate/Plaque PLA" - #~ msgid "Reverse on odd" #~ msgstr "Parois inversées sur couches impaires" @@ -19096,10 +19192,10 @@ msgstr "" #~ "chargement des données de géométrie uniquement." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -19456,11 +19552,11 @@ msgstr "" #~ msgstr "Niveau de débogage" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Définit le niveau de journalisation du débogage. 0 :fatal, 1 :erreur, 2 :" -#~ "avertissement, 3 :info, 4 :débogage, 5 :trace\n" +#~ "Définit le niveau de journalisation du débogage. 0 :fatal, 1 :erreur, " +#~ "2 :avertissement, 3 :info, 4 :débogage, 5 :trace\n" #~ msgid "" #~ "3D Scene Operations\n" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 5c4e404921..3bf96206c6 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1260,9 +1260,6 @@ msgstr "Center of edge" msgid "Center of circle" msgstr "Center of circle" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Select feature" @@ -1278,18 +1275,25 @@ msgstr "Restart selection" msgid "Esc" msgstr "Esc" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "Measure" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Edit to scale" msgctxt "Verb" -msgid "Scale" -msgstr "Átméretezés" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Sehol" @@ -1303,6 +1307,42 @@ msgstr "Hossz" msgid "Selection" msgstr "Selection" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Másolás a vágólapra" @@ -1318,6 +1358,27 @@ msgstr "Direct distance" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2729,7 +2790,7 @@ msgstr "" msgid "About %s" msgstr "%s névjegye" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3558,9 +3619,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Current chamber temperature is higher than the material's safe temperature; " "this may result in material softening and nozzle clogs.The maximum safe " @@ -7725,8 +7786,16 @@ msgstr "Fúvóka" msgid "Nozzle temperature when printing" msgstr "Fúvóka hőmérséklete nyomtatáskor" -msgid "Cool plate" -msgstr "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -7948,7 +8017,7 @@ msgstr "" msgid "Layer height limits" msgstr "Rétegmagasság limitek" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -9592,6 +9661,11 @@ msgstr "Kezdőréteg" msgid "Initial layer bed temperature" msgstr "Első réteg asztalhőmérséklete" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11107,8 +11181,8 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Gyorsulás a ritkás kitöltéseknél. Ha az érték százalékban van megadva (pl. " "100%), akkor az alapértelmezett gyorsulás alapján kerül kiszámításra." @@ -12258,8 +12332,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "Z-tengely emelés visszahúzáskor" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12291,6 +12365,9 @@ msgstr "" "Ha ez az érték pozitív, a Z-emelés csak akkor történik meg, ha az emelés " "mértéke a „Z-emelés alsó határánál“ nagyobb, de kisebb ennél az értéknél" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -13515,9 +13592,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -16349,8 +16426,15 @@ msgstr "" "Tudtad, hogy a vetemedésre hajlamos anyagok (például ABS) nyomtatásakor a " "tárgyasztal hőmérsékletének növelése csökkentheti a vetemedés valószínűségét?" -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate" +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Átméretezés" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + +#~ msgid "Z hop when retract" +#~ msgstr "Z-tengely emelés visszahúzáskor" #~ msgid "" #~ "While printing by Object, the extruder may collide skirt.\n" @@ -16978,11 +17062,11 @@ msgstr "" #~ msgstr "Hibakeresés szintje" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "A hibakeresési naplózási szint beállítása. 0:fatal, 1:error, 2:warning, 3:" -#~ "info, 4:debug, 5:trace\n" +#~ "A hibakeresési naplózási szint beállítása. 0:fatal, 1:error, 2:warning, " +#~ "3:info, 4:debug, 5:trace\n" #~ msgid "" #~ "3D Scene Operations\n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 5f83b1bd2b..ad04e3acca 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1306,9 +1306,6 @@ 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" @@ -1324,18 +1321,25 @@ msgstr "Riavvio della selezione" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Deseleziona" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Misura" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Modifica in scala" msgctxt "Verb" -msgid "Scale" -msgstr "Ridimensiona" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Nessuno" @@ -1349,6 +1353,42 @@ msgstr "Lunghezza" msgid "Selection" msgstr "Selezione" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copia negli appunti" @@ -1364,6 +1404,27 @@ msgstr "Distanza diretta" msgid "Distance XYZ" msgstr "Distanza XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2800,8 +2861,8 @@ msgstr "" msgid "About %s" msgstr "Informazioni su %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer è basato su BambuStudio, PrusaSlicer e SuperSlicer." @@ -3255,8 +3316,8 @@ msgid "" msgstr "" "Copia del G-code temporaneo nel G-code di output non riuscita. Potrebbe " "esserci un problema nel dispositivo di destinazione, prova una nuova " -"esportazione con un dispositivo diverso. Il file G-code corrotto è su %1%." -"tmp." +"esportazione con un dispositivo diverso. Il file G-code corrotto è su " +"%1%.tmp." #, boost-format msgid "" @@ -3282,8 +3343,8 @@ msgid "" "be opened during copy check. The output G-code is at %1%.tmp." msgstr "" "Copia del G-code temporaneo completata ma non è stato possibile aprire il " -"codice esportato durante il controllo copia. Il G-code di output è su %1%." -"tmp." +"codice esportato durante il controllo copia. Il G-code di output è su " +"%1%.tmp." #, boost-format msgid "G-code file exported to %1%" @@ -3645,9 +3706,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "L'attuale temperatura della camera è superiore alla temperatura di sicurezza " "del materiale, può causare l'ammorbidimento e l'intasamento del materiale. " @@ -7878,8 +7939,16 @@ msgstr "Ugello" msgid "Nozzle temperature when printing" msgstr "Temperatura del nozzle durante la stampa" -msgid "Cool plate" -msgstr "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8099,8 +8168,8 @@ msgstr "" msgid "Layer height limits" msgstr "Limiti altezza layer" -msgid "Lift Z Enforcement" -msgstr "Applicazione dell'ascensore Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retrazione quando si cambia materiale" @@ -9816,6 +9885,11 @@ msgstr "Primo layer" msgid "Initial layer bed temperature" msgstr "Temperatura del piano per il primo layer" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11504,8 +11578,8 @@ msgid "mm/s² or %" msgstr "mm/s o %" 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." +"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 "" "Accelerazione del riempimento rado. Se il valore è espresso in percentuale " "(ad esempio 100%), verrà calcolato in base all'accelerazione predefinita." @@ -12798,8 +12872,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "Z hop in fase retrazione" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12832,6 +12906,9 @@ msgstr "" "di sopra del parametro: \"Z hop lower boundary\" ed è al di sotto di questo " "valore" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Tipo Z Hop" @@ -14172,9 +14249,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14896,8 +14973,8 @@ msgstr "Impossibile leggere il file fornito perché è vuoto." msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Formato file sconosciuto: il file di input deve avere estensione .3mf o .zip." -"amf." +"Formato file sconosciuto: il file di input deve avere estensione .3mf " +"o .zip.amf." msgid "Canceled" msgstr "Annullato" @@ -17194,8 +17271,27 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "MaiuscTasto sinistro del mouse" + +#~ msgid "Unselect" +#~ msgstr "Deseleziona" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Ridimensiona" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Applicazione dell'ascensore Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hop in fase retrazione" #~ msgid "Reverse on odd" #~ msgstr "Retromarcia su dispari" @@ -17376,9 +17472,10 @@ msgstr "" #~ "\n" #~ "\n" #~ "Per impostazione predefinita, i piccoli bridge interni vengono filtrati e " -#~ "il riempimento solido interno viene stampato direttamente sul riempimento." -#~ "Questo metodo funziona bene nella maggior parte dei casi, velocizzando la " -#~ "stampa senza compromettere troppo la qualità della superficie superiore.\n" +#~ "il riempimento solido interno viene stampato direttamente sul " +#~ "riempimento.Questo metodo funziona bene nella maggior parte dei casi, " +#~ "velocizzando la stampa senza compromettere troppo la qualità della " +#~ "superficie superiore.\n" #~ "\n" #~ "Tuttavia, in modelli fortemente inclinati o curvi, soprattutto se si " #~ "utilizza una densità di riempimento troppo bassa, potrebbe comportare " @@ -18012,10 +18109,10 @@ msgstr "" #~ "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 unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -18427,11 +18524,11 @@ msgstr "" #~ msgstr "Livello di debug" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Imposta livello di debug. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Imposta livello di debug. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #, boost-format #~ msgid "The selected preset: %1% is not found." diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 5a64176778..d981372f8c 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1280,9 +1280,6 @@ msgstr "Center of edge" msgid "Center of circle" msgstr "円の中心" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Select feature" @@ -1298,18 +1295,25 @@ msgstr "Restart selection" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "選択解除" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Measure" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Edit to scale" msgctxt "Verb" -msgid "Scale" -msgstr "スケール" +msgid "Scale all" +msgstr "" msgid "None" msgstr "無し" @@ -1323,6 +1327,42 @@ msgstr "長さ" msgid "Selection" msgstr "Selection" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "コピー" @@ -1338,6 +1378,27 @@ msgstr "Direct distance" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2718,7 +2779,7 @@ msgstr "" msgid "About %s" msgstr "%s について" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3516,9 +3577,9 @@ msgstr "値が小さすぎます、0.5に戻します" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Current chamber temperature is higher than the material's safe temperature; " "this may result in material softening and nozzle clogs.The maximum safe " @@ -7589,7 +7650,15 @@ msgstr "ノズル" msgid "Nozzle temperature when printing" msgstr "ノズル温度" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "常温プレート" msgid "" @@ -7807,7 +7876,7 @@ msgstr "" msgid "Layer height limits" msgstr "積層ピッチの制限" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -9400,6 +9469,11 @@ msgstr "1層目" msgid "Initial layer bed temperature" msgstr "1層目ベッド温度" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10879,11 +10953,11 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" -"Acceleration of sparse infill. If the value is expressed as a percentage (e." -"g. 100%), it will be calculated based on the default acceleration." +"Acceleration of sparse infill. If the value is expressed as a percentage " +"(e.g. 100%), it will be calculated based on the default acceleration." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -11992,8 +12066,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "リトラクト時にZ方向調整" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12023,6 +12097,9 @@ msgstr "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -13218,9 +13295,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -16034,9 +16111,19 @@ msgstr "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping?" -#~ msgid "Cool Plate" +#~ msgid "Unselect" +#~ msgstr "選択解除" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "スケール" + +#~ msgid "Cool plate" #~ msgstr "常温プレート" +#~ msgid "Z hop when retract" +#~ msgstr "リトラクト時にZ方向調整" + #~ msgid "" #~ "While printing by Object, the extruder may collide skirt.\n" #~ "Thus, reset the skirt layer to 1 to avoid that." @@ -16647,8 +16734,8 @@ msgstr "" #~ msgstr "デバッグ レベル" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" #~ "デバッグロギングレベルを設定します。0:fatal、1:error、2:warning、3:info、" #~ "4:debug、5:trace。\n" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 466e969b02..058f9d3e9b 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-11-06 21:10+0900\n" -"Last-Translator: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github." -"com>\n" +"Last-Translator: ElectricalBoy " +"<15651807+ElectricalBoy@users.noreply.github.com>\n" "Language-Team: crwusiz@gmail.com\n" "Language: ko_KR\n" "MIME-Version: 1.0\n" @@ -1282,9 +1282,6 @@ msgstr "가장자리 중심" msgid "Center of circle" msgstr "원의 중심" -msgid "ShiftLeft mouse button" -msgstr "Shift + 왼쪽 마우스 버튼" - msgid "Select feature" msgstr "기능 선택" @@ -1300,18 +1297,25 @@ msgstr "다시 선택" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "선택 취소" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "측정" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "규모에 맞게 편집" msgctxt "Verb" -msgid "Scale" -msgstr "규모" +msgid "Scale all" +msgstr "" msgid "None" msgstr "없음" @@ -1325,6 +1329,42 @@ msgstr "길이" msgid "Selection" msgstr "선택" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "클립보드로 복사" @@ -1340,6 +1380,27 @@ msgstr "직접적인 거리" msgid "Distance XYZ" msgstr "XYZ 거리" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2730,8 +2791,8 @@ msgstr "" msgid "About %s" msgstr "%s 정보" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "" @@ -3532,9 +3593,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "현재 챔버 온도가 재료의 안전 온도보다 높으므로 재료가 부드러워지고 막힐 수 있" "습니다. 재료의 최대 안전 온도는 %d입니다" @@ -5122,8 +5183,8 @@ msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" -".gcode.3mf 파일에는 G코드 데이터가 없습니다. OrcaSlicer에서 슬라이스하고 새 ." -"gcode.3mf 파일을 내보내십시오." +".gcode.3mf 파일에는 G코드 데이터가 없습니다. OrcaSlicer에서 슬라이스하고 " +"새 .gcode.3mf 파일을 내보내십시오." #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -7649,7 +7710,15 @@ msgstr "노즐" msgid "Nozzle temperature when printing" msgstr "출력 시 노즐 온도" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "쿨 플레이트" msgid "" @@ -7873,8 +7942,8 @@ msgstr "" msgid "Layer height limits" msgstr "레이어 높이 한도" -msgid "Lift Z Enforcement" -msgstr "강제 Z 올리기" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "재료 전환 시 후퇴" @@ -9399,9 +9468,9 @@ msgid "" msgstr "" "Orca Slicer은 G코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 " "프린터 호스트 인스턴스의 호스트 이름, IP 주소 또는 URL이 포함되어야 합니다. " -"기본 인증이 활성화된 HAProxy 뒤의 출력 호스트는 https://username:" -"password@your-octopi-address/ 형식의 URL에 사용자 이름과 암호를 입력하여 액세" -"스할 수 있습니다" +"기본 인증이 활성화된 HAProxy 뒤의 출력 호스트는 https://" +"username:password@your-octopi-address/ 형식의 URL에 사용자 이름과 암호를 입력" +"하여 액세스할 수 있습니다" msgid "Device UI" msgstr "장치 UI" @@ -9533,6 +9602,11 @@ msgstr "초기 레이어" msgid "Initial layer bed temperature" msgstr "초기 레이어 베드 온도" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11324,8 +11398,8 @@ msgid "mm/s² or %" msgstr "mm/s² 또는 %" 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." +"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%)로 표시되면 기본 가속도를 기준으로 " "계산됩니다." @@ -12579,8 +12653,8 @@ msgid "" "change" msgstr "실험적 기능. 필라멘트 교체 시 절단 전 후퇴 길이" -msgid "Z hop when retract" -msgstr "후퇴 시 Z 올리기" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12611,6 +12685,9 @@ msgstr "" "이 값이 양수인 경우 Z 올리기는 Z가 매개변수 \"Z 올리기 하한 경계\"보다 높고 " "이 값보다 낮을 때만 적용됩니다" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Z 올리기 유형" @@ -13934,9 +14011,9 @@ msgid "Idle temperature" msgstr "공회전 온도" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "도구가 현재 다중 도구 설정에서 사용되지 않을 때의 노즐 온도. 이는 출력 설정에" "서 '얼룩 방지'가 활성화된 경우에만 사용됩니다. 비활성화하려면 0으로 설정합니" @@ -16844,6 +16921,28 @@ msgstr "" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 " "높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Shift + 왼쪽 마우스 버튼" + +#~ msgid "Unselect" +#~ msgstr "선택 취소" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "규모" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "쿨 플레이트" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "강제 Z 올리기" + +#~ msgid "Z hop when retract" +#~ msgstr "후퇴 시 Z 올리기" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -16854,9 +16953,6 @@ msgstr "" #~ "의 %일 수 있습니다.\n" #~ "값 0은 관계없이 모든 짝수 레이어에서 반전을 활성화합니다." -#~ msgid "Cool Plate" -#~ msgstr "쿨 플레이트" - #~ msgid "Reverse on odd" #~ msgstr "홀수에 반전" @@ -17657,10 +17753,10 @@ msgstr "" #~ msgstr "위키" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (absolute " +#~ "extrusion mode). Wipe tower is only compatible with relative mode. It is " +#~ "always enabled on BambuLab printers. Default is checked" #~ msgstr "" #~ "상대적 압출은 \"label_objects\" 옵션(기타; 개체 이름표)을 사용할 때 권장됩" #~ "니다. 일부 압출기는 이 옵션을 해제하면 더 잘 작동합니다(절대 압출 모드). " @@ -18051,8 +18147,8 @@ msgstr "" #~ msgstr "디버그 수준" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" #~ "디버그 로깅 수준을 설정합니다. 0:치명적, 1:오류, 2:경고, 3:정보, 4:디버" #~ "그, 5:추적\n" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 1ac39062b1..ac6e5934c0 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1274,9 +1274,6 @@ msgstr "Midden van rand" msgid "Center of circle" msgstr "Middelpunt van cirkel" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Functie selecteren" @@ -1292,18 +1289,25 @@ msgstr "Selectie herstarten" msgid "Esc" msgstr "Esc" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "Maatregel" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Op schaal bewerken" msgctxt "Verb" -msgid "Scale" -msgstr "Schalen" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Geen" @@ -1317,6 +1321,42 @@ msgstr "Lengte" msgid "Selection" msgstr "Selectie" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Kopieer naar klembord" @@ -1332,6 +1372,27 @@ msgstr "Direct distance" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2760,7 +2821,7 @@ msgstr "" msgid "About %s" msgstr "Over %s" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3597,9 +3658,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "De huidige kamertemperatuur is hoger dan de veilige temperatuur van het " "materiaal; dit kan leiden tot verzachting van het materiaal en verstoppingen " @@ -7836,8 +7897,16 @@ msgstr "Mondstuk" msgid "Nozzle temperature when printing" msgstr "Mondstuk temperatuur tijdens printen" -msgid "Cool plate" -msgstr "Koudeplaat" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool (koud) printbed" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8059,7 +8128,7 @@ msgstr "" msgid "Layer height limits" msgstr "Limieten voor laaghoogte" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -9727,6 +9796,11 @@ msgstr "Eerste laag" msgid "Initial layer bed temperature" msgstr "Printbed temperatuur voor de eerste laag" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11253,8 +11327,8 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Versnelling van de schaarse invulling. Als de waarde wordt uitgedrukt als " "een percentage (bijvoorbeeld 100%), wordt deze berekend op basis van de " @@ -12420,8 +12494,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "Z hop tijdens terugtrekken (retraction)" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12453,6 +12527,9 @@ msgstr "" "Als deze waarde positief is, treedt Z hop alleen in werking als Z boven de " "parameter ligt: \"Z hop ondergrens\" en onder deze waarde ligt" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -13683,9 +13760,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -16600,8 +16677,15 @@ msgstr "" "kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het " "warmtebed de kans op kromtrekken kan verkleinen?" -#~ msgid "Cool Plate" -#~ msgstr "Cool (koud) printbed" +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Schalen" + +#~ msgid "Cool plate" +#~ msgstr "Koudeplaat" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hop tijdens terugtrekken (retraction)" #~ msgid "Reverse on odd" #~ msgstr "Overhang omkering" @@ -17263,11 +17347,11 @@ msgstr "" #~ msgstr "Debuggen level" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Sets debug logging level. 0:fataal, 1:error, 2:waarschuwing, 3:info, 4:" -#~ "debug, 5:trace\n" +#~ "Sets debug logging level. 0:fataal, 1:error, 2:waarschuwing, 3:info, " +#~ "4:debug, 5:trace\n" #~ msgid "" #~ "3D Scene Operations\n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index f34f1ae89d..7576fc583c 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga \n" "Language-Team: \n" @@ -1294,9 +1294,6 @@ msgstr "Środek krawędzi" msgid "Center of circle" msgstr "Środek okręgu" -msgid "ShiftLeft mouse button" -msgstr "Shift + Lewy przycisk myszy" - msgid "Select feature" msgstr "Wybierz funkcję" @@ -1312,18 +1309,25 @@ msgstr "Restartuj wybór" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Odznacz" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Zmierz" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Edytuj do skali" msgctxt "Verb" -msgid "Scale" -msgstr "Skala" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Brak" @@ -1337,6 +1341,42 @@ msgstr "Długość" msgid "Selection" msgstr "Wybór" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Kopiuj do schowka" @@ -1352,6 +1392,27 @@ msgstr "Bezpośrednia odległość" msgid "Distance XYZ" msgstr "Odległość XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2785,8 +2846,8 @@ msgstr "" msgid "About %s" msgstr "O %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "" @@ -3628,9 +3689,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Obecna temperatura komory jest wyższa niż bezpieczna temperatura dla " "filamentu, co może prowadzić do jego mięknięcia i zatykania. Maksymalna " @@ -7878,8 +7939,16 @@ msgstr "Dysza" msgid "Nozzle temperature when printing" msgstr "Temperatura dyszy podczas druku" -msgid "Cool plate" -msgstr "Cool plate / PLA Plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8107,8 +8176,8 @@ msgstr "" msgid "Layer height limits" msgstr "Ograniczenia wysokości warstwy" -msgid "Lift Z Enforcement" -msgstr "Wymuszenie podniesienia osi Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retrakcja podczas zmiany filamentu" @@ -9692,8 +9761,8 @@ msgstr "" "Orca Slicer może przesyłać pliki G-code na hosta drukarki. To pole powinno " "zawierać nazwę hosta, adres IP lub URL hosta drukarki. Host drukowania za " "HAProxy z włączoną autoryzacją podstawową można uzyskać, wpisując nazwę " -"użytkownika i hasło w URL w następującym formacie: https://username:" -"password@your-octopi-address/" +"użytkownika i hasło w URL w następującym formacie: https://" +"username:password@your-octopi-address/" msgid "Device UI" msgstr "UI urządzenia" @@ -9833,6 +9902,11 @@ msgstr "Pierwsza warstwa" msgid "Initial layer bed temperature" msgstr "Temperatura stołu pierwszej warstwy" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11748,8 +11822,8 @@ msgid "mm/s² or %" msgstr "mm/s² lub %" 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." +"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 "" "Przyspieszenie na rzadkim wypełnieniu. Jeśli wartość jest wyrażona w " "procentach (np. 100%), będzie obliczana na podstawie domyślnego " @@ -13090,8 +13164,8 @@ msgstr "" "Funkcja eksperymentalna. Długość retrakcji przed odcięciem podczas zmiany " "filamentu" -msgid "Z hop when retract" -msgstr "Z-hop podczas retrakcji" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13125,6 +13199,9 @@ msgstr "" "określonej tutaj wysokości. Dzięki temu możesz wyłączyć podnoszenie osi Z " "podczas drukowania pierwszych warstw (na początku drukowania)." +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Typ Z-hop" @@ -14534,9 +14611,9 @@ msgid "Idle temperature" msgstr "Temperatura w bezczynności" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Temperatura dyszy, gdy narzędzie nie jest aktualnie używane w konfiguracjach " "wielonarzędziowych. Jest to używane tylko wtedy, gdy \"Zapobieganie " @@ -15256,8 +15333,8 @@ msgstr "Podpory: rozprzestrzeniaj gałęzie na warstwie %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .stl, .obj, ." -"amf(.xml)." +"Nieznany format pliku. Plik wejściowy musi mieć " +"rozszerzenie .stl, .obj, .amf(.xml)." msgid "Loading of a model file failed." msgstr "Ładowanie pliku modelu nie powiodło się." @@ -15267,8 +15344,8 @@ msgstr "Dostarczony plik nie mógł być odczytany, ponieważ jest pusty" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .3mf lub .zip." -"amf." +"Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .3mf " +"lub .zip.amf." msgid "Canceled" msgstr "Anulowano" @@ -17581,6 +17658,28 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Shift + Lewy przycisk myszy" + +#~ msgid "Unselect" +#~ msgstr "Odznacz" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Skala" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Cool plate / PLA Plate" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Wymuszenie podniesienia osi Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Z-hop podczas retrakcji" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -17591,9 +17690,6 @@ msgstr "" #~ "za użyteczne. Może być procentem szerokości obwodu.\n" #~ "Wartość 0 aktywuje odwrócenie na każdej parzystej warstwie." -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate / PLA Plate" - #~ msgid "Reverse on odd" #~ msgstr "Przeciwny kierunek na nieparzystych warstwach" @@ -19839,10 +19935,10 @@ msgstr "" #~ msgstr "Pliki certyfikatów (.crt, .pem)|.crt;.pem|Wszystkie pliki|." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (absolute " +#~ "extrusion mode). Wipe tower is only compatible with relative mode. It is " +#~ "always enabled on BambuLab printers. Default is checked" #~ msgstr "" #~ "Przy użyciu opcji \"label_objects\" zaleca się ekstruzję względną. " #~ "Niektóre ekstrudery działają lepiej, gdy ta opcja jest odznaczona (tryb " @@ -20158,11 +20254,11 @@ msgstr "" #~ msgstr "Poziom debugowania" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Ustawia poziom logowania debugowania. 0:fatal, 1:error, 2:warning, 3:" -#~ "info, 4:debug, 5:trace\n" +#~ "Ustawia poziom logowania debugowania. 0:fatal, 1:error, 2:warning, " +#~ "3:info, 4:debug, 5:trace\n" #~ msgid "The selected preset: %1% is not found." #~ msgstr "Wybrana przędło: %1% nie została znaleziona." diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index c5300cadad..85867bb031 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-06-01 21:51-0300\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" @@ -1297,9 +1297,6 @@ msgstr "Centro da borda" msgid "Center of circle" msgstr "Centro do círculo" -msgid "ShiftLeft mouse button" -msgstr "Botão do mouse ShiftLeft" - msgid "Select feature" msgstr "Selecionar recurso" @@ -1315,18 +1312,25 @@ msgstr "Reiniciar seleção" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Desmarcar" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Medir" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Editar para escala" msgctxt "Verb" -msgid "Scale" -msgstr "Escala" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Nenhum" @@ -1340,6 +1344,42 @@ msgstr "Comprimento" msgid "Selection" msgstr "Seleção" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Copiar para a área de transferência" @@ -1355,6 +1395,27 @@ msgstr "Distância direta" msgid "Distance XYZ" msgstr "Distância XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2785,8 +2846,8 @@ msgstr "" msgid "About %s" msgstr "Sobre %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer é baseado no BambuStudio, PrusaSlicer e SuperSlicer." @@ -3625,9 +3686,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "A temperatura da câmara atual está mais alta do que a temperatura segura do " "material, pode resultar em amolecimento e entupimento do material. A " @@ -6826,8 +6887,8 @@ msgstr "Associar arquivos .step/.stp ao OrcaSlicer" msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "" -"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos ." -"step" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir " +"arquivos .step" msgid "Associate web links to OrcaSlicer" msgstr "Associar links da web ao OrcaSlicer" @@ -7876,8 +7937,16 @@ msgstr "Bico" msgid "Nozzle temperature when printing" msgstr "Temperatura do bico ao imprimir" -msgid "Cool plate" -msgstr "Mesa fria" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Mesa Fria" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8099,8 +8168,8 @@ msgstr "" msgid "Layer height limits" msgstr "Limites de altura da camada" -msgid "Lift Z Enforcement" -msgstr "Aplicação do Z hop" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Retração ao trocar material" @@ -9787,6 +9856,11 @@ msgstr "Primeira camada" msgid "Initial layer bed temperature" msgstr "Temperatura da mesa da primeira camada" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11470,8 +11544,8 @@ msgid "mm/s² or %" msgstr "mm/s² ou %" 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." +"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 "" "Aceleração do preenchimento não sólido. Se o valor for expresso como uma " "porcentagem (por exemplo, 100%), será calculado com base na aceleração " @@ -12771,8 +12845,8 @@ msgstr "" "Funcionalidade experimental. Comprimento de retração antes de cortar durante " "a mudança de filamento" -msgid "Z hop when retract" -msgstr "Z hop ao retrair" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12803,6 +12877,9 @@ msgstr "" "Se este valor for positivo, o Z hop só entrará em vigor quando Z estiver " "acima do parâmetro: \"Limite inferior do Z hop\" e abaixo deste valor" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Tipo de Z hop" @@ -14147,9 +14224,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14859,8 +14936,8 @@ msgstr "Suporte: propagar ramificações na camada %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão ." -"stl, .obj, .amf(.xml)." +"Formato de arquivo desconhecido. O arquivo de entrada deve ter " +"extensão .stl, .obj, .amf(.xml)." msgid "Loading of a model file failed." msgstr "Falha ao carregar um arquivo de modelo." @@ -17160,8 +17237,27 @@ msgstr "" "aumentar adequadamente a temperatura da mesa aquecida pode reduzir a " "probabilidade de empenamento?" -#~ msgid "Cool Plate" -#~ msgstr "Mesa Fria" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Botão do mouse ShiftLeft" + +#~ msgid "Unselect" +#~ msgstr "Desmarcar" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Escala" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Mesa fria" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Aplicação do Z hop" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hop ao retrair" #~ msgid "Reverse on odd" #~ msgstr "Inverter em ímpares" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index db9820c823..368635fff3 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 V2.2.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-09-25 22:36+0700\n" "Last-Translator: \n" "Language-Team: Andylg \n" @@ -1303,9 +1303,6 @@ msgstr "Центр ребра" msgid "Center of circle" msgstr "Центр окружности" -msgid "ShiftLeft mouse button" -msgstr "Левая кнопка мыши" - msgid "Select feature" msgstr "Выбрать элемент" @@ -1322,18 +1319,25 @@ msgstr "Выбрать заново" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Отменить выбор" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Измерения" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Редактировать масштаб" msgctxt "Verb" -msgid "Scale" -msgstr "Масштаб" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Нет" @@ -1347,6 +1351,42 @@ msgstr "Длина" msgid "Selection" msgstr "Выделение" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Скопировать в буфер обмена" @@ -1362,6 +1402,27 @@ msgstr "Длина прямой" msgid "Distance XYZ" msgstr "Расстояние XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2807,8 +2868,8 @@ msgstr "" msgid "About %s" msgstr "О %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer основан на проектах BambuStudio, PrusaSlicer и SuperSlicer." @@ -3662,9 +3723,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Текущая температура внутри термокамеры превышает безопасную температуру для " "этого материала, что может привести к размягчению материала или засорению " @@ -6123,9 +6184,9 @@ msgid "" "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"Твердость сопла, установленного по умолчанию, недостаточна для печати " -"данной пластиковой нитью. Замените сопло на закалённое или смените " -"пластиковую нить. В противном случае сопло будет изношено или повреждено." +"Твердость сопла, установленного по умолчанию, недостаточна для печати данной " +"пластиковой нитью. Замените сопло на закалённое или смените пластиковую " +"нить. В противном случае сопло будет изношено или повреждено." msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " @@ -7973,8 +8034,16 @@ msgstr "Сопло" msgid "Nozzle temperature when printing" msgstr "Температура сопла при печати" -msgid "Cool plate" -msgstr "Не нагреваемая пластина" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8211,8 +8280,8 @@ msgstr "" msgid "Layer height limits" msgstr "Ограничение высоты слоя" -msgid "Lift Z Enforcement" -msgstr "Принудительный подъем оси Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Откат при смене материала" @@ -9953,6 +10022,11 @@ msgstr "Первый слой" msgid "Initial layer bed temperature" msgstr "Температура стола для первого слоя" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10137,6 +10211,7 @@ msgstr "" msgid "Cooling overhang threshold" msgstr "Порог включения обдува на нависаниях" +#, fuzzy, c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " "exceeds this value. Expressed as percentage which indicates how much width " @@ -10412,8 +10487,7 @@ msgstr "" "При нуле разворот будет на каждом чётном слое, независимо от величина " "свеса.\n" "Если «Определять нависающие периметры» не включено, этот параметр " -"игнорируется, и разворот происходит на каждом чётном слое без " -"исключений." +"игнорируется, и разворот происходит на каждом чётном слое без исключений." msgid "Classic mode" msgstr "Классический режим" @@ -11097,9 +11171,8 @@ msgstr "" "максимальные точки. OrcaSlicer следит за тем, чтобы значения " "adaptive_bed_mesh_min/adaptive_bed_mesh_max не превышают эти минимальные/" "максимальные значения. Эту информацию можно получить у производителя " -"принтера. По умолчанию установлено значение (99999, 99999), которое " -"означает отсутствие ограничений, что позволяет проводить зондирование по " -"всему столу." +"принтера. По умолчанию установлено значение (99999, 99999), которое означает " +"отсутствие ограничений, что позволяет проводить зондирование по всему столу." msgid "Probe point distance" msgstr "Расстояние между точками зондирования" @@ -11885,8 +11958,8 @@ msgid "mm/s² or %" msgstr "мм/с² или %" 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." +"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 "" "Ускорение на разреженном заполнении. Если задано в процентах, то значение " "вычисляться относительно ускорения по умолчанию." @@ -13256,8 +13329,8 @@ msgstr "" "Экспериментальная функция. Длина втягивания перед отрезанием пластиковой " "нити при её смене." -msgid "Z hop when retract" -msgstr "Подъём оси Z при откате" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13291,6 +13364,9 @@ msgstr "" "(после) заданной здесь высоты (высота считается от стола). Таким образом вы " "можете отключить подъём оси Z при печати на первых слоях (в начале печати)." +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Тип подъёма оси Z" @@ -14738,9 +14814,9 @@ msgid "Idle temperature" msgstr "Температура ожидания" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Температура сопла в момент, когда для печати используется другое сопло. Этот " "параметр используется только в том случае, если в настройках печати активна " @@ -15487,8 +15563,8 @@ msgstr "Предоставленный файл не может быть про msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Неизвестный формат файла. Входной файл должен иметь расширение *.3mf или *." -"zip.amf." +"Неизвестный формат файла. Входной файл должен иметь расширение *.3mf или " +"*.zip.amf." msgid "Canceled" msgstr "Отменено" @@ -17435,9 +17511,9 @@ msgid "" "overhangs?" msgstr "" "Порядок печати периметров «Сэндвич»\n" -"Знаете ли вы, что можно использовать порядок печати периметров «Сэндвич» (т." -"е. внутренний-внешний-внутренний) для повышения точности и согласованности " -"слоёв, если у вашей модели не очень крутые нависания?" +"Знаете ли вы, что можно использовать порядок печати периметров «Сэндвич» " +"(т.е. внутренний-внешний-внутренний) для повышения точности и " +"согласованности слоёв, если у вашей модели не очень крутые нависания?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -17807,6 +17883,28 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Левая кнопка мыши" + +#~ msgid "Unselect" +#~ msgstr "Отменить выбор" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Масштаб" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" +#~ msgstr "Не нагреваемая пластина" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Принудительный подъем оси Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Подъём оси Z при откате" + # ??? Если установлено 0, то изменение направления будет происходить на каждом чётном слое, независимо от величина (длины ) свеса. #, no-c-format, no-boost-format #~ msgid "" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 53c78a31ae..e46d2a89ac 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1259,9 +1259,6 @@ msgstr "Center of edge" msgid "Center of circle" msgstr "Center of circle" -msgid "ShiftLeft mouse button" -msgstr "" - msgid "Select feature" msgstr "Select feature" @@ -1277,18 +1274,25 @@ msgstr "Restart selection" msgid "Esc" msgstr "Esc" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "Measure" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Edit to scale" msgctxt "Verb" -msgid "Scale" -msgstr "Skala" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Ingen" @@ -1302,6 +1306,42 @@ msgstr "Längd" msgid "Selection" msgstr "Selection" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Kopiera till urklipp" @@ -1317,6 +1357,27 @@ msgstr "Direct distance" msgid "Distance XYZ" msgstr "Distance XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl +" @@ -2717,7 +2778,7 @@ msgstr "" msgid "About %s" msgstr "Om %s" -msgid "Orca Slicer " +msgid "Orca Slicer" msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." @@ -3533,9 +3594,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Current chamber temperature is higher than the material's safe temperature; " "this may result in material softening and nozzle clogs.The maximum safe " @@ -7676,8 +7737,16 @@ msgstr "Nozzel" msgid "Nozzle temperature when printing" msgstr "Nozzel temperatur vid utskrift" -msgid "Cool plate" -msgstr "Kall platta" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Cool Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -7748,9 +7817,10 @@ msgid "" "maximum fan speed according to layer printing time" msgstr "" "Del kylfläktens hastigheten kommer att börja gå med min hastighet när den " -"beräknade lagringstiden inte är längre än lagringstiden i inställningarna." -"När lager tiden är kortare än gräns värdet, ställer fläkthastigheten sig " -"mellan lägsta och högsta fläkthastighet enligt lagrets utskriftstid" +"beräknade lagringstiden inte är längre än lagringstiden i " +"inställningarna.När lager tiden är kortare än gräns värdet, ställer " +"fläkthastigheten sig mellan lägsta och högsta fläkthastighet enligt lagrets " +"utskriftstid" msgid "Max fan speed threshold" msgstr "Max fläkt hastighets gräns" @@ -7896,7 +7966,7 @@ msgstr "" msgid "Layer height limits" msgstr "Lagerhöjds begränsning" -msgid "Lift Z Enforcement" +msgid "Z-Hop" msgstr "" msgid "Retraction when switching material" @@ -9499,6 +9569,11 @@ msgstr "Första lager" msgid "Initial layer bed temperature" msgstr "Byggplattans första lager temperatur" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10995,8 +11070,8 @@ msgid "mm/s² or %" msgstr "mm/s² or %" 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." +"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 "" "Acceleration av gles utfyllnad. Om värdet uttrycks som en procentsats (t.ex. " "100%) kommer det att beräknas baserat på standard accelerationen." @@ -12127,8 +12202,8 @@ msgstr "" "Experimental feature. Retraction length before cutting off during filament " "change" -msgid "Z hop when retract" -msgstr "Z hopp vid retraktion" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12160,6 +12235,9 @@ msgstr "" "Om detta värde är positivt kommer Z hop endast att träda i kraft när Z är " "över parametern: \"Z hop nedre gräns\" och är under detta värde" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "" @@ -13354,9 +13432,9 @@ msgid "Idle temperature" msgstr "" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -16190,8 +16268,15 @@ msgstr "" "ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten " "för vridning." -#~ msgid "Cool Plate" -#~ msgstr "Cool Plate" +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Skala" + +#~ msgid "Cool plate" +#~ msgstr "Kall platta" + +#~ msgid "Z hop when retract" +#~ msgstr "Z hopp vid retraktion" #~ msgid "" #~ "While printing by Object, the extruder may collide skirt.\n" @@ -16794,11 +16879,11 @@ msgstr "" #~ msgstr "Felsökningsnivå" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Välj felsöknings nivå. 0:allvarlig, 1:fel, 2:varning, 3:info, 4:felsök, 5:" -#~ "spåra\n" +#~ "Välj felsöknings nivå. 0:allvarlig, 1:fel, 2:varning, 3:info, 4:felsök, " +#~ "5:spåra\n" #~ msgid "" #~ "3D Scene Operations\n" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 568994d747..13ee660c24 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-10-01 22:31+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -1290,9 +1290,6 @@ 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" @@ -1308,18 +1305,25 @@ msgstr "Seçimi sıfırla" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Seçimi kaldır" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Ölçüm" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Ölçeğe göre düzenleyin" msgctxt "Verb" -msgid "Scale" -msgstr "Ölçek" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Hiçbiri" @@ -1333,6 +1337,42 @@ msgstr "Uzunluk" msgid "Selection" msgstr "Seçim" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Panoya kopyala" @@ -1348,6 +1388,27 @@ msgstr "Doğrudan mesafe" msgid "Distance XYZ" msgstr "Uzaklık XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2760,8 +2821,8 @@ msgstr "" msgid "About %s" msgstr "Hakkında %s" -msgid "Orca Slicer " -msgstr "Orca Dilimleyici " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer, BambuStudio, PrusaSlicer ve SuperSlicer'ı temel alır." @@ -3587,9 +3648,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, " "malzemenin yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum " @@ -7808,8 +7869,16 @@ msgstr "Nozul" msgid "Nozzle temperature when printing" msgstr "Yazdırma sırasında nozul sıcaklığı" -msgid "Cool plate" -msgstr "Soğuk plaka" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" +msgstr "Soğuk Plaka" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -8036,8 +8105,8 @@ msgstr "" msgid "Layer height limits" msgstr "Katman Yüksekliği Sınırları" -msgid "Lift Z Enforcement" -msgstr "Z Kaldırma Uygulaması" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Malzemeyi Değiştirirken Geri Çekme" @@ -9742,6 +9811,11 @@ msgstr "Başlangıç katmanı" msgid "Initial layer bed temperature" msgstr "İlk katman yatak sıcaklığı" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11613,8 +11687,8 @@ msgid "mm/s² or %" msgstr "mm/s² veya %" 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." +"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 "" "Seyrek dolgunun hızlandırılması. Değer yüzde olarak ifade edilirse (örn. " "%100), varsayılan ivmeye göre hesaplanacaktır." @@ -12927,8 +13001,8 @@ msgstr "" "Deneysel özellik.Filament değişimi sırasında kesilmeden önce geri çekilme " "uzunluğu" -msgid "Z hop when retract" -msgstr "Geri çekme esnasında Z sıçraması" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12961,6 +13035,9 @@ msgstr "" "etkinleşir: \"Z sıçrama alt sınırı\" parametresinin üzerinde ve bu değerin " "altında olduğunda" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Z sıçraması türü" @@ -14358,9 +14435,9 @@ msgid "Idle temperature" msgstr "Boşta sıcaklık" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" "Alet şu anda çoklu alet kurulumlarında kullanılmadığında püskürtme ucu " "sıcaklığı. Bu yalnızca Yazdırma Ayarlarında ‘Sızıntı önleme’ etkin olduğunda " @@ -17384,6 +17461,28 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Shift + Sol fare düğmesi" + +#~ msgid "Unselect" +#~ msgstr "Seçimi kaldır" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Ölçek" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Dilimleyici " + +#~ msgid "Cool plate" +#~ msgstr "Soğuk plaka" + +#~ msgid "Lift Z Enforcement" +#~ msgstr "Z Kaldırma Uygulaması" + +#~ msgid "Z hop when retract" +#~ msgstr "Geri çekme esnasında Z sıçraması" + #, no-c-format, no-boost-format #~ msgid "" #~ "Number of mm the overhang need to be for the reversal to be considered " @@ -17394,9 +17493,6 @@ msgstr "" #~ "gerekir. Çevre genişliğinin %’si olabilir.\n" #~ "0 değeri ne olursa olsun her çift katmanda ters çevirmeyi mümkün kılar." -#~ msgid "Cool Plate" -#~ msgstr "Soğuk Plaka" - #~ msgid "Reverse on odd" #~ msgstr "Tersine çevir" @@ -18418,10 +18514,10 @@ msgstr "" #~ msgstr "wiki" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (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 " @@ -18821,11 +18917,11 @@ msgstr "" #~ msgstr "Hata ayıklama düzeyi" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "Hata ayıklama günlüğü düzeyini ayarlar. 0:önemli, 1:hata, 2:uyarı, 3:" -#~ "bilgi, 4:hata ayıklama, 5:izleme\n" +#~ "Hata ayıklama günlüğü düzeyini ayarlar. 0:önemli, 1:hata, 2:uyarı, " +#~ "3:bilgi, 4:hata ayıklama, 5:izleme\n" #, boost-format #~ msgid "The selected preset: %1% is not found." diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index d6bc51d674..9ad2539bdc 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-27 23:05+0800\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-12-23 20:09+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -1297,9 +1297,6 @@ msgstr "Центр ребра" msgid "Center of circle" msgstr "Центр кола" -msgid "ShiftLeft mouse button" -msgstr "ShiftЛіва кнопка миші" - msgid "Select feature" msgstr "Виберіть функцію" @@ -1315,18 +1312,25 @@ msgstr "Вибрати заново" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "Зняти виділення" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "Виміряти" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "Редагувати масштаб" msgctxt "Verb" -msgid "Scale" -msgstr "Масштаб" +msgid "Scale all" +msgstr "" msgid "None" msgstr "Ні" @@ -1340,6 +1344,42 @@ msgstr "Довжина" msgid "Selection" msgstr "Вибір" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "Копіювати в буфер обміну" @@ -1355,6 +1395,27 @@ msgstr "Пряма відстань" msgid "Distance XYZ" msgstr "Відстань XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2773,16 +2834,16 @@ msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"Це програмне забезпечення використовує компоненти з відкритим вихідним кодом," -"авторські права та інші\n" +"Це програмне забезпечення використовує компоненти з відкритим вихідним " +"кодом,авторські права та інші\n" "права власності належать їх відповідним власникам" #, c-format, boost-format msgid "About %s" msgstr "Про %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer базується на BambuStudio, PrusaSlicer та SuperSlicer." @@ -3618,9 +3679,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "Поточна температура камери вища, ніж безпечна температура матеріалу, це може " "призвести до розм’якшення матеріалу та його забивання. Максимально безпечна " @@ -4434,8 +4495,8 @@ msgid "" "confirming that the height is within the build volume." msgstr "" "Об'єкт знаходиться за кордоном пластини або перевищує обмеження по висоті.\n" -"Будь ласка, вирішіть проблему, перемістивши її повністю на тарілку або з неї," -"і підтвердження того, що висота знаходиться в межах обсягу збирання." +"Будь ласка, вирішіть проблему, перемістивши її повністю на тарілку або з " +"неї,і підтвердження того, що висота знаходиться в межах обсягу збирання." msgid "Calibration step selection" msgstr "Вибір кроку калібрування" @@ -7866,7 +7927,15 @@ msgstr "Сопло" msgid "Nozzle temperature when printing" msgstr "Температура сопла під час друку" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "Холодна пластина" msgid "" @@ -8088,8 +8157,8 @@ msgstr "" msgid "Layer height limits" msgstr "Обмеження висоти шару" -msgid "Lift Z Enforcement" -msgstr "Забезпечення стрибків Z" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "Втягування під час зміни матеріалу" @@ -9786,6 +9855,11 @@ msgstr "Перший шар" msgid "Initial layer bed temperature" msgstr "Температура першого шару" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -11371,8 +11445,8 @@ msgstr "" "знайдено, лінія заповнення з'єднується з сегментом периметра лише з одного " "боку, і довжина взятого сегменту периметра обмежена цим параметром, але не " "більше anchor_length_max.\n" -"Встановіть цей параметр рівним нулю, щоб вимкнути периметри прив'язки." -"пов'язані з однією лінією заповнення." +"Встановіть цей параметр рівним нулю, щоб вимкнути периметри " +"прив'язки.пов'язані з однією лінією заповнення." msgid "0 (no open anchors)" msgstr "0 (немає відкритих прив'язок)" @@ -11442,8 +11516,8 @@ msgid "mm/s² or %" msgstr "мм/с² або %" 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." +"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%), воно буде розраховане на основі прискорення за умовчанням." @@ -11575,8 +11649,8 @@ msgid "" "Set to -1 to disable this override.\n" "Can only be overridden by disable_fan_first_layers." msgstr "" -"Ця швидкість вентилятора забезпечується під час усіх інтерфейсів підтримки," -"щоб мати можливість послабити їхнє з'єднання з високою " +"Ця швидкість вентилятора забезпечується під час усіх інтерфейсів " +"підтримки,щоб мати можливість послабити їхнє з'єднання з високою " "швидкістювентилятора.\n" "Встановіть -1, щоб вимкнути це перевизначення.\n" "Може бути перевизначений лише disable_fan_first_layers." @@ -12734,8 +12808,8 @@ msgstr "" "Експериментальна функція. Відстань втягування перед відрізанням під час " "зміни філаменту" -msgid "Z hop when retract" -msgstr "Z-стрибок при втягуванні" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12767,6 +12841,9 @@ msgstr "" "Якщо це значення позитивне, то Z-hop буде діяти лише тоді, коли Z перевищує " "параметр “Межа зниження Z” і знаходиться нижче цього значення" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "Тип Z-стрибка" @@ -13062,8 +13139,8 @@ msgid "" "To minimize the visibility of the seam in a closed loop extrusion, a small " "inward movement is executed before the extruder leaves the loop." msgstr "" -"Щоб звести до мінімуму видимість шва при екструзії із замкнутим контуром," -"Невеликий рух усередину виконується до виходу екструдера з контуру." +"Щоб звести до мінімуму видимість шва при екструзії із замкнутим " +"контуром,Невеликий рух усередину виконується до виходу екструдера з контуру." msgid "Wipe before external loop" msgstr "Очищати перед зовнішнім контуром" @@ -13463,8 +13540,8 @@ msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Створювати підтримку тільки для критичних областей, включаючи гострий хвіст," -"консоль і т.д." +"Створювати підтримку тільки для критичних областей, включаючи гострий " +"хвіст,консоль і т.д." msgid "Remove small overhangs" msgstr "Видалити невеликі виступи" @@ -14099,9 +14176,9 @@ msgid "Idle temperature" msgstr "Температура очікування" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14792,8 +14869,8 @@ msgstr "Підтримка: розповсюдження гілок на шар msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Невідомий формат файлу: вхідний файл повинен мати розширення .stl, .obj або ." -"amf (.xml)." +"Невідомий формат файлу: вхідний файл повинен мати розширення .stl, .obj " +"або .amf (.xml)." msgid "Loading of a model file failed." msgstr "Не вдалося завантажити файл моделі." @@ -14803,8 +14880,8 @@ msgstr "Наданий файл не вдалося прочитати, оскі msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Невідомий формат файлу: вхідний файл повинен мати розширення .3mf або .zip." -"amf." +"Невідомий формат файлу: вхідний файл повинен мати розширення .3mf " +"або .zip.amf." msgid "Canceled" msgstr "Скасовано" @@ -17109,9 +17186,28 @@ msgstr "" "ABS, відповідне підвищення температури гарячого ліжка може зменшити " "ймовірність деформації." -#~ msgid "Cool Plate" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "ShiftЛіва кнопка миші" + +#~ msgid "Unselect" +#~ msgstr "Зняти виділення" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "Масштаб" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "Cool plate" #~ msgstr "Холодна пластина" +#~ msgid "Lift Z Enforcement" +#~ msgstr "Забезпечення стрибків Z" + +#~ msgid "Z hop when retract" +#~ msgstr "Z-стрибок при втягуванні" + #~ msgid "Reverse on odd" #~ msgstr "Зворотній на непарних" @@ -17606,8 +17702,8 @@ msgstr "" #~ "Only one of the results with the same name will be saved. Are you sure " #~ "you want to overrides the other results?" #~ msgstr "" -#~ "Збережено буде лише один із результатів з однаковою назвою. Ви впевнені," -#~ "що хочете перезаписати інші результати?" +#~ "Збережено буде лише один із результатів з однаковою назвою. Ви " +#~ "впевнені,що хочете перезаписати інші результати?" #, c-format, boost-format #~ msgid "" @@ -17837,10 +17933,10 @@ msgstr "" #~ "3mf генерується старим слайсером Orca, завантажувати лише дані геометрії." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unchecked (absolute extrusion " -#~ "mode). Wipe tower is only compatible with relative mode. It is always " -#~ "enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" " +#~ "option.Some extruders work better with this option unchecked (absolute " +#~ "extrusion mode). Wipe tower is only compatible with relative mode. It is " +#~ "always enabled on BambuLab printers. Default is checked" #~ msgstr "" #~ "При використанні опції «label_objects» рекомендується відносне " #~ "Видавлювання. Деякі екструдери працюють краще з цією опцією без " @@ -18157,8 +18253,8 @@ msgstr "" #~ msgstr "Рівень налагодження" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" #~ "Встановлює рівень реєстрації налагодження. 0: непереборний, 1: помилка, " #~ "2: попередження, 3: інформація, 4: налагодження, 5: трасування\n" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index e7afc790b4..f9bb50944f 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: 2024-12-01 08:07+0100\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-07-28 07:12+0000\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -1269,9 +1269,6 @@ msgstr "边的中心" msgid "Center of circle" msgstr "圆心" -msgid "ShiftLeft mouse button" -msgstr "Shift + 鼠标左键" - msgid "Select feature" msgstr "选择特征" @@ -1287,18 +1284,25 @@ msgstr "重新选择" msgid "Esc" msgstr "Esc" -msgid "Unselect" -msgstr "取消选择" +msgid "Cancel a feature until exit" +msgstr "" msgid "Measure" msgstr "测量" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "编辑比例" msgctxt "Verb" -msgid "Scale" -msgstr "比例" +msgid "Scale all" +msgstr "" msgid "None" msgstr "无" @@ -1312,6 +1316,42 @@ msgstr "长度" msgid "Selection" msgstr "选中" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "复制到剪贴板" @@ -1327,6 +1367,27 @@ msgstr "直线距离" msgid "Distance XYZ" msgstr "距离 XYZ" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -2685,8 +2746,8 @@ msgstr "本软件使用开源组件,其版权和其他所有权属于各自的 msgid "About %s" msgstr "关于 %s" -msgid "Orca Slicer " -msgstr "逆戟鲸切片" +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer基于BambuStudio、PrusaSlicer 以及SuperSlicer开发。" @@ -3463,9 +3524,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" "当前腔体温度高于材料的安全温度,这可能导致材料软化和堵塞。该材料的最高安全温" "度为 %d。" @@ -5033,8 +5094,8 @@ msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" -".gcode.3mf文件中不包含G-code数据。请使用Orca Slicer进行切片并导出新的." -"gcode.3mf文件。" +".gcode.3mf文件中不包含G-code数据。请使用Orca Slicer进行切片并导出新" +"的.gcode.3mf文件。" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -7465,7 +7526,15 @@ msgstr "喷嘴" msgid "Nozzle temperature when printing" msgstr "打印时的喷嘴温度" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "低温打印热床" msgid "" @@ -7675,8 +7744,8 @@ msgstr "" msgid "Layer height limits" msgstr "层高限制" -msgid "Lift Z Enforcement" -msgstr "强化抬Z策略" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "切换材料时的回抽量" @@ -9239,6 +9308,11 @@ msgstr "首层" msgid "Initial layer bed temperature" msgstr "首层床温" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" @@ -10779,8 +10853,8 @@ msgid "mm/s² or %" msgstr "mm/s² 或 %" 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." +"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%),则将根据默认加速度进行计" "算。" @@ -11920,8 +11994,8 @@ msgid "" "change" msgstr "实验性选项。在更换耗材丝时,切断前的回抽长度" -msgid "Z hop when retract" -msgstr "回抽时抬升Z" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -11947,6 +12021,9 @@ msgid "" "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "如果该值为正,则Z抬升仅在Z高于参数(Z抬升下边界)且低于该值时才会生效" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "抬Z类型" @@ -13156,9 +13233,9 @@ msgid "Idle temperature" msgstr "待机温度" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" msgid "X-Y hole compensation" @@ -14020,10 +14097,10 @@ msgid "" msgstr "" "请从我们的wiki中找到动态流量校准的详细信息。\n" "\n" -"通常情况下,校准是不必要的。当您开始单色/单材料打印,并在打印开始菜单中勾选" -"了“动态流量校准”选项时,打印机将按照旧的方式,在打印前校准丝料;当您开始多色/" -"多材料打印时,打印机将在每次换丝料时使用默认的补偿参数,这在大多数情况下会产" -"生良好的效果。\n" +"通常情况下,校准是不必要的。当您开始单色/单材料打印,并在打印开始菜单中勾选了" +"“动态流量校准”选项时,打印机将按照旧的方式,在打印前校准丝料;当您开始多色/多" +"材料打印时,打印机将在每次换丝料时使用默认的补偿参数,这在大多数情况下会产生" +"良好的效果。\n" "\n" "有几种情况可能导致校准结果不可靠,例如打印板的的附着力不足。清洗打印板或者使" "用胶水可以增强打印板附着力。您可以在我们的维基上找到更多相关信息。\n" @@ -15909,9 +15986,28 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" -#~ msgid "Cool Plate" +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Shift + 鼠标左键" + +#~ msgid "Unselect" +#~ msgstr "取消选择" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "比例" + +#~ msgid "Orca Slicer " +#~ msgstr "逆戟鲸切片" + +#~ msgid "Cool plate" #~ msgstr "低温打印热床" +#~ msgid "Lift Z Enforcement" +#~ msgstr "强化抬Z策略" + +#~ msgid "Z hop when retract" +#~ msgstr "回抽时抬升Z" + #~ msgid "Reverse on odd" #~ msgstr "反转奇数层悬垂方向" @@ -16796,11 +16892,11 @@ msgstr "" #~ msgstr "调试等级" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" -#~ "设置调试日志等级。0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "设置调试日志等级。0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #, boost-format #~ msgid "The selected preset: %1% is not found." diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index d2c70544f5..be5dde9138 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-11 22:56+0800\n" +"POT-Creation-Date: 2025-01-04 17:35+0100\n" "PO-Revision-Date: 2024-12-31 23:58+0800\n" "Last-Translator: lin-ycv \n" "Language-Team: \n" @@ -363,10 +363,7 @@ 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 "" -"點擊翻轉切割面" -"拖曳移動切割面" -"右鍵點擊零件切換為另一側" +msgstr "點擊翻轉切割面拖曳移動切割面右鍵點擊零件切換為另一側" msgid "Move cut plane" msgstr "移動切割面" @@ -727,8 +724,8 @@ msgstr "文字與字型不相容,請選擇其他的字型" msgid "Embossed text cannot contain only white spaces." msgstr "浮雕文字不能僅包含空白字元。" -msgid "Text contains character glyph (represented by '?')unknown by font." -msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" msgid "Text input doesn't show font skew." msgstr "" @@ -784,7 +781,7 @@ msgid "Change Text Type" msgstr "更改文字類型" #, boost-format -msgid "Rename style(%1%)for embossing text" +msgid "Rename style(%1%) for embossing text" msgstr "" msgid "Name can't be empty." @@ -998,8 +995,8 @@ msgid "" "Can't load exactly same font(\"%1%\"). Application selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" -"無法載入完全相同的字型(\"%1%\")。應用程式選擇了相似的字型(\"%2%\")。" -"必須指定字型才能啟用文字編輯。" +"無法載入完全相同的字型(\"%1%\")。應用程式選擇了相似的字型(\"%2%\")。必須" +"指定字型才能啟用文字編輯。" msgid "No symbol" msgstr "" @@ -1023,7 +1020,7 @@ msgstr "用面" #. TRN - Input label. Be short as possible #. Option to change projection on curved surface -#. for each character(glyph)in text separately +#. for each character(glyph) in text separately msgid "Per glyph" msgstr "每個字形" @@ -1117,8 +1114,7 @@ msgstr "" msgid "" "Final shape contains self-intersection or multiple points with same " "coordinate." -msgstr "" -"最終形狀包含自相交或多個具有相同座標的點。" +msgstr "最終形狀包含自相交或多個具有相同座標的點。" #, boost-format msgid "Shape is marked as invisible (%1%)." @@ -1126,15 +1122,15 @@ msgstr "形狀被標記為隱形 (%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%." +msgid "Fill of shape (%1%) contains unsupported: %2%." msgstr "" #, boost-format -msgid "Stroke of shape (%1%)is too thin (minimal width is %2% mm)." +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." msgstr "" #, boost-format -msgid "Stroke of shape (%1%)contains unsupported: %2%." +msgid "Stroke of shape (%1%) contains unsupported: %2%." msgstr "" msgid "Face the camera" @@ -1271,9 +1267,6 @@ msgstr "邊中心" msgid "Center of circle" msgstr "圓中心" -msgid "ShiftLeft mouse button" -msgstr "Shift左滑鼠" - msgid "Select feature" msgstr "選擇特徵" @@ -1289,18 +1282,25 @@ msgstr "" msgid "Esc" msgstr "Esc" -msgid "Unselect" +msgid "Cancel a feature until exit" msgstr "" msgid "Measure" msgstr "測量" +msgid "" +"Please confirm explosion ratio = 1,and please select at least one object" +msgstr "" + +msgid "Please select at least one object." +msgstr "" + msgid "Edit to scale" msgstr "" msgctxt "Verb" -msgid "Scale" -msgstr "縮放" +msgid "Scale all" +msgstr "" msgid "None" msgstr "無" @@ -1314,6 +1314,42 @@ msgstr "長度" msgid "Selection" msgstr "所選項目" +msgid " (Moving)" +msgstr "" + +msgid "" +"Select 2 faces on objects and \n" +" make objects assemble together." +msgstr "" + +msgid "" +"Select 2 points or circles on objects and \n" +" specify distance between them." +msgstr "" + +msgid "Face" +msgstr "" + +msgid " (Fixed)" +msgstr "" + +msgid "Point" +msgstr "" + +msgid "" +"Feature 1 has been reset, \n" +"feature 2 has been feature 1" +msgstr "" + +msgid "Warning:please select Plane's feature." +msgstr "" + +msgid "Warning:please select Point's or Circle's feature." +msgstr "" + +msgid "Warning:please select two different mesh." +msgstr "" + msgid "Copy to clipboard" msgstr "複製到剪貼簿" @@ -1329,6 +1365,27 @@ msgstr "" msgid "Distance XYZ" msgstr "XYZ距離" +msgid "Parallel" +msgstr "" + +msgid "Center coincidence" +msgstr "" + +msgid "Featue 1" +msgstr "" + +msgid "Reverse rotation" +msgstr "" + +msgid "Rotate around center:" +msgstr "" + +msgid "Parallel distance:" +msgstr "" + +msgid "Flip by Face 2" +msgstr "" + msgid "Ctrl+" msgstr "Ctrl+" @@ -1506,8 +1563,7 @@ 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 "同步用戶預設" @@ -1542,8 +1598,7 @@ msgstr "選擇一個 G-code 檔案:" msgid "" "Could not start URL download. Destination folder is not set. Please choose " "destination folder in Configuration Wizard." -msgstr "" -"無法開始 URL 下載。未設置目標資料夾。請在設定精靈中選擇目標資料夾。" +msgstr "無法開始 URL 下載。未設置目標資料夾。請在設定精靈中選擇目標資料夾。" msgid "Import File" msgstr "匯入檔案" @@ -1709,8 +1764,9 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"這個模型在頂部表面具有文字浮雕效果。為了達到最佳效果,建議將「One Wall Threshold" -"(min_width_top_surface)」設為 0,以便「僅在頂部表面用一層牆壁」能夠最佳運作。\n" +"這個模型在頂部表面具有文字浮雕效果。為了達到最佳效果,建議將「One Wall " +"Threshold(min_width_top_surface)」設為 0,以便「僅在頂部表面用一層牆壁」能" +"夠最佳運作。\n" "是 - 自動更改這些設定\n" "否 - 不為我更改這些設定" @@ -2442,8 +2498,7 @@ msgstr "咬入線材" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filaments." -msgstr "" -"選擇一個 AMS 槽,然後按下「上料」或「退料」按鈕來自動加載或卸載耗材。" +msgstr "選擇一個 AMS 槽,然後按下「上料」或「退料」按鈕來自動加載或卸載耗材。" msgid "Edit" msgstr "編輯" @@ -2634,7 +2689,8 @@ msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 列印設備預設。" +"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 列印設備預" +"設。" msgid "Importing canceled." msgstr "匯入已取消。" @@ -2705,12 +2761,11 @@ msgstr "本軟體使用開源組件,其版權和其他所有權屬於各自的 msgid "About %s" msgstr "關於 %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " +msgid "Orca Slicer" +msgstr "" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" -"Orca Slicer 是基於 BambuStudio, PrusaSlicer, 與 SuperSlicer 的開發" +msgstr "Orca Slicer 是基於 BambuStudio, PrusaSlicer, 與 SuperSlicer 的開發" msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "BambuStudio 最初是基於 PrusaResearch 的 PrusaSlicer。" @@ -2897,9 +2952,8 @@ msgid "" "desiccant pack is changed. it take hours to absorb the moisture, low " "temperatures also slow down the process." msgstr "" -"當濕度太高時,請更換乾燥劑。在以下情況濕度指標可能會不準確:" -"開子打開時 或 乾燥劑剛換,乾燥劑需數小時才能有效吸收濕氣" -"低溫也會降低吸收速度" +"當濕度太高時,請更換乾燥劑。在以下情況濕度指標可能會不準確:開子打開時 或 乾" +"燥劑剛換,乾燥劑需數小時才能有效吸收濕氣低溫也會降低吸收速度" msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2972,8 +3026,7 @@ msgstr "" msgid "" "Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." -msgstr "" -"備註: 若在列印過程中插入新的線材,AMS會等到列印完成才會讀取線材資訊" +msgstr "備註: 若在列印過程中插入新的線材,AMS會等到列印完成才會讀取線材資訊" msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -2990,8 +3043,8 @@ msgid "" "start-up. It will take about 1 minute.The reading process will roll filament " "spools." msgstr "" -"每次開機時,AMS 將會自動讀取有插入的線材資訊(讀取過程會轉動線卷)。需要" -"花費大約1分鐘。" +"每次開機時,AMS 將會自動讀取有插入的線材資訊(讀取過程會轉動線卷)。需要花費" +"大約1分鐘。" msgid "" "The AMS will not automatically read information from inserted filament " @@ -3025,8 +3078,7 @@ msgstr "偵測到憑空列印" msgid "" "Detects clogging and filament grinding, halting printing immediately to " "conserve time and filament." -msgstr "" -"偵測到卡料,已暫停列印來節省時間與線材" +msgstr "偵測到卡料,已暫停列印來節省時間與線材" msgid "File" msgstr "檔案" @@ -3051,9 +3103,9 @@ msgid "Please home all axes (click " msgstr "請先執行回原點(點擊" msgid "" -")to locate the toolhead's position. This prevents device moving beyond the " +") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." -msgstr ")來定位目前工具頭位置,以防止移動時超出邊界造成設備損壞" +msgstr "" msgid "Go Home" msgstr "回原點" @@ -3220,8 +3272,7 @@ msgstr "" msgid "" "Please select the devices you would like to manage here (up to 6 devices)" -msgstr "" -"請選擇要管理的設備(最多6台)" +msgstr "請選擇要管理的設備(最多6台)" msgid "Add" msgstr "新增" @@ -3397,9 +3448,9 @@ msgid "" msgstr "G-code 0,0 坐標相對於矩形框左前角的距離。" msgid "" -"Diameter of the print bed. It is assumed that origin (0,0)is located in the " +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." -msgstr "熱床直徑。假定原點(0,0)位於中心。" +msgstr "" msgid "Rectangular" msgstr "矩形" @@ -3453,14 +3504,12 @@ msgstr "熱床形狀" msgid "" "The recommended minimum temperature is less than 190 degree or the " "recommended maximum temperature is greater than 300 degree.\n" -msgstr "" -"推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n" +msgstr "推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " "maximum temperature.\n" -msgstr "" -"推薦的最小溫度不能高於推薦的最大溫度。\n" +msgstr "推薦的最小溫度不能高於推薦的最大溫度。\n" msgid "Please check.\n" msgstr "請檢查。\n" @@ -3489,12 +3538,12 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe " +"temperature,it may result in material softening and clogging.The maximum " +"safe temperature for the material is %d" msgstr "" -"目前列印設備內部溫度高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高安" -"全溫度為:%d" +"目前列印設備內部溫度高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高" +"安全溫度為:%d" msgid "" "Too small layer height.\n" @@ -3551,8 +3600,7 @@ msgstr "" msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " -msgstr "" -"當確保垂直外殼厚度設為「全部」時,交錯額外牆壁效果不佳。" +msgstr "當確保垂直外殼厚度設為「全部」時,交錯額外牆壁效果不佳。" msgid "" "Change these settings automatically? \n" @@ -3609,8 +3657,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 結構機型將不產生縮時攝影。" @@ -3756,18 +3804,14 @@ msgstr "更新失敗。" msgid "" "The current chamber temperature or the target chamber temperature exceeds " "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -"TPU)is not allowed to be loaded." +"TPU) is not allowed to be loaded." msgstr "" -"目前設備內部溫度超過 45℃。為避免阻塞,不允許進料低溫線材(PLA / PETG / " -"TPU)。" msgid "" -"Low temperature filament(PLA/PETG/TPU)is loaded in the extruder.In order to " +"Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" -"為避免堵塞,使用低溫線材(PLA / PETG / TPU)時,不充許將設備內部溫度" -"設置於45℃以上" msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " @@ -4892,8 +4936,7 @@ msgstr "請確認列印設備是否已連接。" msgid "" "The printer is currently busy downloading. Please try again after it " "finishes." -msgstr "" -"列印機目前正忙於下載。請待下載完成後再試一次。" +msgstr "列印機目前正忙於下載。請待下載完成後再試一次。" msgid "Printer camera is malfunctioning." msgstr "列印設備攝影機故障。" @@ -4903,8 +4946,7 @@ msgstr "發生問題。請更新列印設備韌體後再試一次。" msgid "" "LAN Only Liveview is off. Please turn on the liveview on printer screen." -msgstr "" -"僅 LAN 模式的LiveView已關閉。請在列印機螢幕上開啟LiveView。" +msgstr "僅 LAN 模式的LiveView已關閉。請在列印機螢幕上開啟LiveView。" msgid "Please enter the IP of printer to connect." msgstr "請輸入列印設備的 IP 以進行連接。" @@ -4918,8 +4960,7 @@ msgstr "連線失敗。請檢查網路並重試。" msgid "" "Please check the network and try again, You can restart or update the " "printer if the issue persists." -msgstr "" -"請檢查網路並重試。如果問題持續,你可以重新啟動或更新列印設備。" +msgstr "請檢查網路並重試。如果問題持續,你可以重新啟動或更新列印設備。" msgid "The printer has been logged out and cannot connect." msgstr "列印設備已登出,無法連接。" @@ -5035,8 +5076,7 @@ msgstr "初始化失敗(未連接列印設備)" msgid "" "Browsing file in SD card is not supported in current firmware. Please update " "the printer firmware." -msgstr "" -"目前韌體不支援瀏覽 SD 卡中的檔案。請更新列印機韌體。" +msgstr "目前韌體不支援瀏覽 SD 卡中的檔案。請更新列印機韌體。" msgid "Initialize failed (Storage unavailable, insert SD card.)!" msgstr "初始化失敗(存儲不可用,請插入 SD 卡)。" @@ -5080,8 +5120,8 @@ msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" -".gcode.3mf 檔案中不包含 G-code 數據。請使用 Orca Slicer 進行切片並匯出新的." -"gcode.3mf 檔案。" +".gcode.3mf 檔案中不包含 G-code 數據。請使用 Orca Slicer 進行切片並匯出新" +"的.gcode.3mf 檔案。" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -5112,8 +5152,7 @@ msgstr "下載中 %d%%..." msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." -msgstr "" -"重新連接列印機,操作無法立即完成,請稍後再試。" +msgstr "重新連接列印機,操作無法立即完成,請稍後再試。" msgid "File does not exist." msgstr "檔案不存在。" @@ -5272,8 +5311,7 @@ msgstr "%d/%d 層" msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." -msgstr "" -"請在上料或退料之前將噴嘴加熱至 170 度以上。" +msgstr "請在上料或退料之前將噴嘴加熱至 170 度以上。" msgid "Still unload" msgstr "繼續退料" @@ -5449,8 +5487,7 @@ msgstr "較新的 3mf 版本" msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." -msgstr "" -"該 3MF 檔案版本為測試版,並且較目前的 OrcaSlicer 版本更新。" +msgstr "該 3MF 檔案版本為測試版,並且較目前的 OrcaSlicer 版本更新。" msgid "If you would like to try Orca Slicer Beta, you may click to" msgstr "如果你想嘗試 Orca Slicer 測試版,可以點擊以下載。" @@ -5806,22 +5843,22 @@ msgid "" "Orca Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"有一些未知型號的線材套用於通用預設上。請更新或者重啟 Orca Slicer,以檢查系" -"統預設檔有無更新。" +"有一些未知型號的線材套用於通用預設上。請更新或者重啟 Orca Slicer,以檢查系統" +"預設檔有無更新。" #, boost-format msgid "Do you want to save changes to \"%1%\"?" msgstr "是否儲存變更到 \"%1%\"?" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" -"Successfully unmounted. The device %s(%s)can now be safely removed from the " +"Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." -msgstr "卸載成功。設備 %s(%s)現在可能安全地從電腦移除。" +msgstr "" #, c-format, boost-format -msgid "Ejecting of device %s(%s)has failed." -msgstr "退出設備 %s(%s)失敗。" +msgid "Ejecting of device %s(%s) has failed." +msgstr "" msgid "Previous unsaved project detected, do you want to restore it?" msgstr "偵測到有未儲存的專案,是否恢復此專案?" @@ -5842,8 +5879,8 @@ msgid "" "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化噴嘴或線材,否則" -"噴嘴可能被磨損或損壞。" +"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化噴嘴或線材,否則噴" +"嘴可能被磨損或損壞。" msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " @@ -5894,8 +5931,7 @@ msgstr "該 3MF 檔案在耗材或列印機預設中具有以下修改過的 GCO msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" -msgstr "" -"請確認這些修改過的 GCODE 是安全的,以防止對機器造成任何損壞!" +msgstr "請確認這些修改過的 GCODE 是安全的,以防止對機器造成任何損壞!" msgid "Modified G-codes" msgstr "已修改的 GCODE" @@ -5906,8 +5942,7 @@ msgstr "該 3MF 檔案具有以下自訂的耗材或列印機預設:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" -msgstr "" -"請確認這些預設中的 GCODE 是安全的,以防止對機器造成任何損壞!" +msgstr "請確認這些預設中的 GCODE 是安全的,以防止對機器造成任何損壞!" msgid "Customized Preset" msgstr "" @@ -5986,9 +6021,7 @@ msgstr "匯出 OBJ 檔案:" msgid "" "The file %s already exists\n" "Do you want to replace it?" -msgstr "" -"檔案 %s 已存在" -"您確定要替換它嗎?" +msgstr "檔案 %s 已存在您確定要替換它嗎?" msgid "Confirm Save As" msgstr "確認另存為" @@ -6235,8 +6268,8 @@ msgid "" "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" -"你確定要將原始 SVG 檔案及其本地路徑儲存到 3MF 檔案中嗎?" -"如果選擇「否」,專案中的所有 SVG 將不再可編輯。" +"你確定要將原始 SVG 檔案及其本地路徑儲存到 3MF 檔案中嗎?如果選擇「否」,專案" +"中的所有 SVG 將不再可編輯。" msgid "Private protection" msgstr "" @@ -6315,10 +6348,8 @@ msgstr "提示:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows)or CAD softwares." +"on Orca Slicer(windows) or CAD softwares." msgstr "" -"\"修復模型\"功能目前僅適用於 Windows 系統。請在 Windows 版本的 Orca slicer " -"或 CAD 軟體上修復模型。" #, c-format, boost-format msgid "" @@ -6402,8 +6433,8 @@ msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" -"這會停止數據傳輸到 Bambu 的雲端服務。" -"使用者如果不使用 Bambu 機台或僅使用區域網路模式,可以安全地啟用此功能。" +"這會停止數據傳輸到 Bambu 的雲端服務。使用者如果不使用 Bambu 機台或僅使用區域" +"網路模式,可以安全地啟用此功能。" msgid "Enable network plugin" msgstr "啟用網路插件" @@ -6436,8 +6467,8 @@ msgid "" "same OrcaSlicer is already running, that instance will be reactivated " "instead." msgstr "" -"啟用後,嘗試開起 OrcaSlicer 時若有另一個 OrcaSlicer 程序已在運行時," -"已在運行的程序會被重新啟動。" +"啟用後,嘗試開起 OrcaSlicer 時若有另一個 OrcaSlicer 程序已在運行時,已在運行" +"的程序會被重新啟動。" msgid "Home" msgstr "首頁" @@ -6459,9 +6490,8 @@ msgid "" "Default: LMB+move for rotation, RMB/MMB+move for panning.\n" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" -"選擇相機導航樣式。" -"預設:左鍵+移動旋轉,右鍵/中鍵+移動平移。" -"觸控板:Alt+移動旋轉,Shift+移動平移。" +"選擇相機導航樣式。預設:左鍵+移動旋轉,右鍵/中鍵+移動平移。觸控板:Alt+移動旋" +"轉,Shift+移動平移。" msgid "Zoom to mouse position" msgstr "放大到滑鼠位置" @@ -6503,11 +6533,10 @@ msgstr "啟用後,換色時自動計算" msgid "" "Flushing volumes: Auto-calculate every time when the filament is changed." -msgstr "" -"廢料體積:換料時自動計算" +msgstr "廢料體積:換料時自動計算" msgid "If enabled, auto-calculate every time when filament is changed" -msgstr "啟用後,換料時自動計算" +msgstr "啟用後,換料時自動計算" msgid "Remember printer configuration" msgstr "記住機臺設定" @@ -6515,8 +6544,7 @@ msgstr "記住機臺設定" msgid "" "If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." -msgstr "" -"啟用後,Orca會記住且自動切換各機臺線材與列印設定" +msgstr "啟用後,Orca會記住且自動切換各機臺線材與列印設定" msgid "Multi-device Management(Take effect after restarting Orca)." msgstr "多臺設備管理(需重開Orca)" @@ -6524,8 +6552,7 @@ msgstr "多臺設備管理(需重開Orca)" msgid "" "With this option enabled, you can send a task to multiple devices at the " "same time and manage multiple devices." -msgstr "" -"啟用時可以同時傳送到並管理多個機臺" +msgstr "啟用時可以同時傳送到並管理多個機臺" msgid "Auto arrange plate after cloning" msgstr "複製後自動排列" @@ -7033,10 +7060,9 @@ msgstr "請在進行列印前插入 SD 記憶卡" #, c-format, boost-format msgid "" -"The selected printer (%s)is incompatible with the chosen printer profile in " +"The selected printer (%s) is incompatible with the chosen printer profile in " "the slicer (%s)." msgstr "" -"以選的機臺(%s)與切片軟體內所選的機臺預設(%s)不相容" msgid "An SD card needs to be inserted to record timelapse." msgstr "使用縮時攝影功能需要插入 SD 記憶卡" @@ -7060,8 +7086,7 @@ msgstr "當啟用花瓶模式時,門架結構的設備不會產生縮時攝影 msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." -msgstr "" -"逐件列印模式下不支援縮時錄影" +msgstr "逐件列印模式下不支援縮時錄影" msgid "Errors" msgstr "錯誤" @@ -7082,8 +7107,8 @@ msgid "" "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"AMS 設定中存在一些未知的線材。請檢查是否符合所需的線材。如果符合,按\"確定\"以開" -"始列印作業。" +"AMS 設定中存在一些未知的線材。請檢查是否符合所需的線材。如果符合,按\"確定" +"\"以開始列印作業。" #, c-format, boost-format msgid "nozzle in preset: %s %s" @@ -7101,7 +7126,7 @@ msgstr "" #, c-format, boost-format msgid "" -"Printing high temperature material(%s material)with %s may cause nozzle " +"Printing high temperature material(%s material) with %s may cause nozzle " "damage" msgstr "" @@ -7550,7 +7575,15 @@ msgstr "噴嘴" msgid "Nozzle temperature when printing" msgstr "列印時的噴嘴溫度" -msgid "Cool plate" +msgid "Cool Plate (SuperTack)" +msgstr "" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate SuperTack" +msgstr "" + +msgid "Cool Plate" msgstr "低溫列印板" msgid "" @@ -7591,9 +7624,7 @@ msgstr "紋理 PEI 列印板" 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 "" -"使用紋理 PEI 列印板時的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印" -"板" +msgstr "使用紋理 PEI 列印板時的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" msgid "Volumetric speed limitation" msgstr "體積流量速度限制" @@ -7616,9 +7647,8 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"當預計的層時間小於設定的層時間時,物件冷卻風扇速度將開始以最小速度運轉。當" -"層時間小於設定值時,風扇速度將根據該層列印時間在最小和最大風扇速度之間自動調" -"整" +"當預計的層時間小於設定的層時間時,物件冷卻風扇速度將開始以最小速度運轉。當層" +"時間小於設定值時,風扇速度將根據該層列印時間在最小和最大風扇速度之間自動調整" msgid "Max fan speed threshold" msgstr "最大風扇速度臨界值" @@ -7765,8 +7795,8 @@ msgstr "" msgid "Layer height limits" msgstr "層高限制" -msgid "Lift Z Enforcement" -msgstr "強化抬Z策略" +msgid "Z-Hop" +msgstr "" msgid "Retraction when switching material" msgstr "切換線材時的回抽量" @@ -7790,7 +7820,8 @@ 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 處理預設。若刪除此印表設備,這些預設將被刪除。" +"此印表設備含有 %d 線材預設和 %d 處理預設。若刪除此印表設備,這些預設將被刪" +"除。" msgid "Presets inherited by other presets can not be deleted!" msgstr "被其他預設繼承的預設無法刪除!" @@ -7969,8 +8000,7 @@ msgstr "將數值從左邊轉移到右邊" msgid "" "If enabled, this dialog can be used for transfer selected values from left " "to right preset." -msgstr "" -"如果啟用,則此視窗可用於將選定的數值從左邊轉移到右邊的預設值。" +msgstr "如果啟用,則此視窗可用於將選定的數值從左邊轉移到右邊的預設值。" msgid "Add File" msgstr "新增檔案" @@ -8152,8 +8182,8 @@ msgid "" "changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -msgid "Flushing volume (mm³)for each filament pair." -msgstr "在兩個線材間切換所需的廢料體積(mm³)" +msgid "Flushing volume (mm³) for each filament pair." +msgstr "" #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" @@ -8501,8 +8531,8 @@ msgid "" msgstr "按下「確定」後,下次啟動 Orca Slicer 時會更新網路插件" #, c-format, boost-format -msgid "A new Network plug-in(%s)available, Do you want to install it?" -msgstr "新版的網路插件( %s)可用,是否要安裝?" +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" msgid "New version of Orca Slicer" msgstr "新版本的 Orca Slicer" @@ -9286,11 +9316,9 @@ msgstr "避免跨越外牆-最大繞行長度" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " "detour distance is large than this value. Detour length could be specified " -"either as an absolute value or as percentage (for example 50%)of a direct " +"either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"避免跨越外牆時的最大繞行距離。如果繞行距離大於該數值,則不繞行。繞行距離" -"可為絕對值或直線路徑的百分比(例如 50%)。0 表示禁用" msgid "mm or %" msgstr "mm 或 %" @@ -9335,6 +9363,11 @@ msgstr "首層" msgid "Initial layer bed temperature" msgstr "首層床溫" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate SuperTack" +msgstr "" + #, fuzzy msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -9517,7 +9550,7 @@ msgid "Bridge flow ratio" msgstr "橋接流量" msgid "" -"Decrease this value slightly(for example 0.9)to reduce the amount of " +"Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag. \n" "\n" "The actual bridge flow used is calculated by multiplying this value with the " @@ -9530,7 +9563,7 @@ msgstr "內部橋接流量" 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.\n" +"0.9) to improve surface quality over sparse infill.\n" "\n" "The actual internal bridge flow used is calculated by multiplying this value " "with the bridge flow ratio, the filament flow ratio, and if set, the " @@ -9591,8 +9624,8 @@ msgid "" "artifacts." msgstr "" "如果頂面需要列印,但是它的一部分被其它層覆蓋,那麼當它的寬度小於這個值時,它" -"不會被認為是頂層。這個設定可以用於避免在狹窄頂面上觸發\"頂面單層牆\"。這個值可" -"以是 mm 或線寬的 %。\n" +"不會被認為是頂層。這個設定可以用於避免在狹窄頂面上觸發\"頂面單層牆\"。這個值" +"可以是 mm 或線寬的 %。\n" "警告:如果啟用該選項,可能會在下一層上產生一些薄的特徵,比如字母。將此設定設" "為 0 可以消除這些偽影。" @@ -9610,8 +9643,7 @@ msgstr "懸挑上的額外周長" msgid "" "Create additional perimeter paths over steep overhangs and areas where " "bridges cannot be anchored. " -msgstr "" -"在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" +msgstr "在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" msgid "Reverse on even" msgstr "偶數反向" @@ -9628,7 +9660,8 @@ msgid "" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." msgstr "" -"在偶數層上,對於有懸挑部分的外圍輪廓,採用反向擠出。這種交替模式可以大幅改善陡峭的懸挑。\n" +"在偶數層上,對於有懸挑部分的外圍輪廓,採用反向擠出。這種交替模式可以大幅改善" +"陡峭的懸挑。\n" "\n" "此設定還有助於減少因零件牆壁應力降低而導致的變形。" @@ -9740,8 +9773,8 @@ msgid "" msgstr "" "外部可見橋接擠出速度。\n" "\n" -"如果禁用了「翹邊處降速」或啟用了「經典懸挑模式」,則它將是支撐不足 13% 的懸挑牆的列印速度," -"無論它們是橋接的一部分還是懸挑。" +"如果禁用了「翹邊處降速」或啟用了「經典懸挑模式」,則它將是支撐不足 13% 的懸挑" +"牆的列印速度,無論它們是橋接的一部分還是懸挑。" msgid "mm/s" msgstr "" @@ -9753,7 +9786,8 @@ msgid "" "Speed of internal bridges. If the value is expressed as a percentage, it " "will be calculated based on the bridge_speed. Default value is 150%." msgstr "" -"內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 150%" +"內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 " +"150%" msgid "Brim width" msgstr "Brim(裙邊)寬度" @@ -9856,8 +9890,8 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"勾選這個選項,將降低列印速度,使得最終的層列印時間不小於\"最大風扇速度臨界值\"" -"裡的層時間臨界值,從而使得該層獲得更久的冷卻。這能夠改善尖頂和小細節的冷卻" +"勾選這個選項,將降低列印速度,使得最終的層列印時間不小於\"最大風扇速度臨界值" +"\"裡的層時間臨界值,從而使得該層獲得更久的冷卻。這能夠改善尖頂和小細節的冷卻" "效果" msgid "Normal printing" @@ -9934,15 +9968,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 "Filter out small internal bridges (beta)" msgstr "篩選掉短的內部橋接(beta)" @@ -9977,21 +10011,22 @@ msgid "" msgstr "" "此選項有助於減少在大幅傾斜或曲面的模型上頂部表面瑕疵。\n" "\n" -"預設情況下,小型內部橋接會被篩選掉,內部實心填充會直接印刷在稀疏填充上。這在大多數情況下" -"運作良好,能加速列印並且不會過度影響頂部表面質量。\n" +"預設情況下,小型內部橋接會被篩選掉,內部實心填充會直接印刷在稀疏填充上。這在" +"大多數情況下運作良好,能加速列印並且不會過度影響頂部表面質量。\n" "\n" -"在大幅傾斜或曲面的模型中,特別是當使用過低的稀疏填充密度時,這可能會導致支撐不夠的實心" -"填充翹曲,進而造成瑕疵。\n" +"在大幅傾斜或曲面的模型中,特別是當使用過低的稀疏填充密度時,這可能會導致支撐" +"不夠的實心填充翹曲,進而造成瑕疵。\n" "\n" -"禁用此選項將在稍微未支撐的內部實心填充區列印內部橋接層。以下選項控制篩選的程度(創建" -"內部橋接的數量)。\n" +"禁用此選項將在稍微未支撐的內部實心填充區列印內部橋接層。以下選項控制篩選的程" +"度(創建內部橋接的數量)。\n" "\n" "篩選 - 啟用此選項。這是預設行為,並且在大多數情況下運作良好。\n" "\n" -"有限篩選 - 僅在大幅傾斜的表面上創建內部橋接。這對大多數困難模型來說效果良好。\n" +"有限篩選 - 僅在大幅傾斜的表面上創建內部橋接。這對大多數困難模型來說效果良" +"好。\n" "\n" -"不篩選 - 在每個可能的內部懸挑處創建內部橋接。這個選項對於大幅傾斜的頂部表面模型很有用。" -"然而,在大多數情況下,它會創建過多不必要的橋接。" +"不篩選 - 在每個可能的內部懸挑處創建內部橋接。這個選項對於大幅傾斜的頂部表面模" +"型很有用。然而,在大多數情況下,它會創建過多不必要的橋接。" msgid "Filter" msgstr "篩選" @@ -10010,8 +10045,8 @@ msgid "" "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-code" @@ -10025,8 +10060,7 @@ msgstr "物件分隔" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" -msgstr "" -"在物件之間插入 Gcode。此參數僅在逐次列印時生效。" +msgstr "在物件之間插入 Gcode。此參數僅在逐次列印時生效。" msgid "End G-code when finish the printing of this filament" msgstr "使用該線材列印結束時的結尾 G-code" @@ -10113,12 +10147,9 @@ msgstr "微小部位" msgid "" "This separate setting will affect the speed of perimeters having radius <= " "small_perimeter_threshold (usually holes). If expressed as percentage (for " -"example: 80%)it will be calculated on the outer wall speed setting above. " +"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 "微小部位周長臨界值" @@ -10131,7 +10162,7 @@ msgid "Walls printing order" msgstr "牆列印順序" msgid "" -"Print sequence of the internal (inner)and external (outer)walls. \n" +"Print sequence of the internal (inner) and external (outer) walls. \n" "\n" "Use Inner/Outer for best overhangs. This is because the overhanging walls " "can adhere to a neighbouring perimeter while printing. However, this option " @@ -10193,8 +10224,8 @@ msgid "" msgstr "" "從上方觀看時,牆擠出方向。\n" "\n" -"預設情況下,所有牆面都是以逆時針方向擠出,除非啟用了「偶數反向」。將此設置為「自動」以外的" -"任何選項,將強制牆面方向,無論是否啟用了「偶數反向」。\n" +"預設情況下,所有牆面都是以逆時針方向擠出,除非啟用了「偶數反向」。將此設置為" +"「自動」以外的任何選項,將強制牆面方向,無論是否啟用了「偶數反向」。\n" "\n" "如果啟用了花瓶模式,這個選項將被禁用。" @@ -10263,7 +10294,7 @@ msgid "Probe point distance" msgstr "" msgid "" -"This option sets the preferred distance between probe points (grid size)for " +"This option sets the preferred distance between probe points (grid size) for " "the X and Y directions, with the default being 50mm for both X and Y." msgstr "" @@ -10273,8 +10304,7 @@ msgstr "" msgid "" "This option determines the additional distance by which the adaptive bed " "mesh area should be expanded in the XY directions." -msgstr "" -"此選項決定自適應床面網格區域在 XY 方向上應該擴展的額外距離。" +msgstr "此選項決定自適應床面網格區域在 XY 方向上應該擴展的額外距離。" msgid "Extruder Color" msgstr "擠出機顏色" @@ -10296,8 +10326,8 @@ msgid "" "has slight overflow or underflow" msgstr "" "線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" -"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許" -"可以嘗試微調這個參數。" +"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗" +"試微調這個參數。" msgid "" "The material may have volumetric change after switching between molten state " @@ -10310,9 +10340,8 @@ msgid "" "ratio." msgstr "" "線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" -"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許" -"可以嘗試微調這個參數。" -"\n" +"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗" +"試微調這個參數。\n" "最終物體流量比是此值與線材流量比的乘積。" msgid "Enable pressure advance" @@ -10323,9 +10352,8 @@ msgid "" "enabled." msgstr "啟用壓力提前,一旦啟用會覆蓋自動校準的結果" -#, fuzzy -msgid "Pressure advance(Klipper)AKA Linear advance factor(Marlin)" -msgstr "壓力提前(Klipper)或者線性提前(Marlin)" +msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +msgstr "" msgid "Enable adaptive pressure advance (beta)" msgstr "啟用進階壓力提前 (beta)" @@ -10333,7 +10361,7 @@ msgstr "啟用進階壓力提前 (beta)" #, no-c-format, no-boost-format msgid "" "With increasing print speeds (and hence increasing volumetric flow through " -"the nozzle)and increasing accelerations, it has been observed that the " +"the nozzle) and increasing accelerations, it has been observed that the " "effective PA value typically decreases. This means that a single PA value is " "not always 100% optimal for all features and a compromise value is usually " "used that does not cause too much bulging on features with lower flow speed " @@ -10357,7 +10385,7 @@ msgstr "自適應壓力提前測量(beta)" #, no-c-format, no-boost-format msgid "" -"Add sets of pressure advance (PA)values, the volumetric flow speeds and " +"Add sets of pressure advance (PA) values, the volumetric flow speeds and " "accelerations they were measured at, separated by a comma. One set of values " "per line. For example\n" "0.04,3.96,3000\n" @@ -10395,9 +10423,8 @@ msgid "" "set accurately, it will cause uniformity issues on the external surfaces " "before and after overhangs.\n" msgstr "" -"啟用自適應 PA 以應對懸挑以及同一特徵內流量變化。" -"這是一個實驗性選項,因為如果 PA 配置未準確設定,可能會在懸挑前後的外部表面上造成均勻" -"性問題。\n" +"啟用自適應 PA 以應對懸挑以及同一特徵內流量變化。這是一個實驗性選項,因為如果 " +"PA 配置未準確設定,可能會在懸挑前後的外部表面上造成均勻性問題。\n" msgid "Pressure advance for bridges" msgstr "橋接壓力提前" @@ -10412,8 +10439,8 @@ msgid "" msgstr "" "橋接的壓力提前值。設為 0 可禁用。\n" "\n" -"在列印橋接時,較低的 PA 值有助於減少橋接結束後出現的輕微欠擠壓現象。" -"這是由於列印空中時噴嘴內部壓力下降,較低的 PA 值有助於抵消這個問題。" +"在列印橋接時,較低的 PA 值有助於減少橋接結束後出現的輕微欠擠壓現象。這是由於" +"列印空中時噴嘴內部壓力下降,較低的 PA 值有助於抵消這個問題。" msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " @@ -10428,8 +10455,8 @@ msgid "" "If enable this setting, part cooling fan will never be stopped and will run " "at least at minimum speed to reduce the frequency of starting and stopping" msgstr "" -"如果勾選這個選項,物件冷卻風扇將不會停止,並且會以最小風扇轉速設定值" -"運轉以減少風扇的頻繁開關" +"如果勾選這個選項,物件冷卻風扇將不會停止,並且會以最小風扇轉速設定值運轉以減" +"少風扇的頻繁開關" msgid "Don't slow down outer walls" msgstr "列印外牆不減速" @@ -10442,17 +10469,10 @@ msgid "" " 1. To avoid changes in shine when printing glossy filaments \n" "2. To avoid changes in external wall speed which may create slight wall " "artifacts that appear like z banding \n" -"3. To avoid printing at speeds which cause VFAs (fine artifacts)on the " +"3. To avoid printing at speeds which cause VFAs (fine artifacts) on the " "external walls\n" "\n" msgstr "" -"如果啟用,這個設定將確保外圍輪廓不會因為達到最小層時間而減慢速度。" -"這在以下情境中特別有幫助:\n" -"\n" -" 1. 避免在列印光面材料時發生光澤變化\n" -" 2. 避免外牆速度變化,這可能會產生類似Z帶紋的牆面瑕疵\n" -" 3. 避免以會在外牆上造成細微瑕疵(細節瑕疵,VFA)速度列印\n" -"\n" msgid "Layer time" msgstr "層時間" @@ -10490,8 +10510,8 @@ msgid "" "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"這個設定表示每秒能夠融化和擠出的線材體積。列印速度會受限於到最大體積速度," -"防止設定過高和不合理的速度。不允許設定為 0。" +"這個設定表示每秒能夠融化和擠出的線材體積。列印速度會受限於到最大體積速度,防" +"止設定過高和不合理的速度。不允許設定為 0。" msgid "mm³/s" msgstr "mm³/s" @@ -10538,7 +10558,7 @@ msgid "" "Internally it is converted to filament_diameter. All other volume " "calculations remain the same.\n" "\n" -"filament_diameter = sqrt( (4 * pellet_flow_coefficient)/ PI )" +"filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgstr "" msgid "Shrinkage (XY)" @@ -10819,7 +10839,7 @@ 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 " +"additional perimeter. 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 " @@ -10829,11 +10849,6 @@ msgid "" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" -"將內填充線連接到內牆邊緣,並使用一小段額外的邊緣。如果以百分比表示(例如:15%)," -"則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充線連接到一段短邊緣。" -"如果找不到小於 infill_anchor_max 的邊緣段,則內填充線將只連接到一側的邊緣段," -"且所選的邊緣段長度會限制在此參數範圍內,但不超過\"錨點長度\"最大值。若將此參數設為零," -"則會禁用連接到單一內填充線的錨固邊緣。" #, fuzzy msgid "0 (no open anchors)" @@ -10847,7 +10862,7 @@ 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 " +"additional perimeter. 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 " @@ -10857,11 +10872,6 @@ msgid "" "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%)," -"則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充線連接到一段短邊緣。" -"如果找不到小於此參數的邊緣段,則內填充線將只連接到一側的邊緣段,且所選的邊緣段長度會限制於" -"infill_anchor,但不會超過此參數。\n" -"如果設為0,則會使用舊的內填充連接算法,這應該會產生與設為 1000 和 0 相同的結果。" msgid "0 (Simple connect)" msgstr "0(簡單連接)" @@ -10893,8 +10903,8 @@ msgid "mm/s² or %" msgstr "mm/s² 或 %" 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." +"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%),則將根據預設加速度進行計" "算。" @@ -10996,9 +11006,9 @@ msgid "" "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 "" -"風扇速度將從\"禁用第一層\"的零線性上升到\"全風扇速度層\"的最大。如果低於\"禁用風扇第一層\"" -",則\"全風扇速度第一層\"將被忽略,在這種情況下,風扇將在\"禁用風扇第一層\"+1層以最大允許" -"速度運行。" +"風扇速度將從\"禁用第一層\"的零線性上升到\"全風扇速度層\"的最大。如果低於\"禁" +"用風扇第一層\",則\"全風扇速度第一層\"將被忽略,在這種情況下,風扇將在\"禁用" +"風扇第一層\"+1層以最大允許速度運行。" msgid "layer" msgstr "層" @@ -11094,8 +11104,8 @@ msgstr "" msgid "Add line number" msgstr "標註行號" -msgid "Enable this to add line number(Nx)at the beginning of each G-Code line" -msgstr "打開這個設定,G-code 的每一行的開頭會增加Nx標註行號。" +msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" +msgstr "" msgid "Scan first layer" msgstr "首層檢查" @@ -11198,7 +11208,8 @@ msgid "" "Set to 0 to deactivate." msgstr "" "先用最快風扇速度運轉冷卻風扇N秒後再降低到目標速度。\n" -"這對於低 PWM/功率不足以讓風扇從停止狀態啟動,或使風扇加速更快的情況非常有用。\n" +"這對於低 PWM/功率不足以讓風扇從停止狀態啟動,或使風扇加速更快的情況非常有" +"用。\n" "設定為 0 以停用。" msgid "Time cost" @@ -11297,12 +11308,12 @@ msgid "" "Maximum layer height for the combined sparse infill. \n" "\n" "Set it to 0 or 100% to use the nozzle diameter (for maximum reduction in " -"print time)or a value of ~80% to maximize sparse infill strength.\n" +"print time) or a value of ~80% to maximize sparse infill strength.\n" "\n" "The number of layers over which infill is combined is derived by dividing " "this value with the layer height and rounded down to the nearest decimal.\n" "\n" -"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle)or % values " +"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values " "(eg 80%). This value must not be larger than the nozzle diameter." msgstr "" @@ -11419,7 +11430,8 @@ 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 "" -"熨燙是指使用小流量在表面相同高度再次列印,以使平面更加光滑。此設定控制哪些層進行熨燙。" +"熨燙是指使用小流量在表面相同高度再次列印,以使平面更加光滑。此設定控制哪些層" +"進行熨燙。" msgid "No ironing" msgstr "不熨燙" @@ -11634,8 +11646,8 @@ msgstr "平滑擠出率" msgid "" "This parameter smooths out sudden extrusion rate changes that happen when " -"the printer transitions from printing a high flow (high speed/larger width)" -"extrusion to a lower flow (lower speed/smaller width)extrusion and vice " +"the printer transitions from printing a high flow (high speed/larger width) " +"extrusion to a lower flow (lower speed/smaller width) extrusion and vice " "versa.\n" "\n" "It defines the maximum rate by which the extruded volumetric flow in mm3/sec " @@ -11645,7 +11657,7 @@ msgid "" "A value of 0 disables the feature. \n" "\n" "For a high speed, high flow direct drive printer (like the Bambu lab or " -"Voron)this value is usually not needed. However it can provide some " +"Voron) this value is usually not needed. However it can provide some " "marginal benefit in certain cases where feature speeds vary greatly. For " "example, when there are aggressive slowdowns due to overhangs. In these " "cases a high value of around 300-350mm3/s2 is recommended as this allows for " @@ -11660,23 +11672,6 @@ msgid "" "\n" "Note: this parameter disables arc fitting." msgstr "" -"此參數是列印設備從列印高流量(高速/較大寬度)擠出轉換到較低流量(較低速度/" -"較小寬度)擠出時,用於平滑突然變擠出速率,反之亦然。\n" -"它定義了擠出體積流量(mm3/秒)隨時間變化的最大速率。數值越高意味著允許" -"更高的擠出速率變化,從而實現更快的速度轉換。\n" -"\n" -"值為 0 會停用該功能。\n" -"\n" -"對於高速、高流量的機型(如 Bambu lab 或 Voron),通常不需要此設置。但是,在某些" -"速度差異很大的情況下,它可以提供一些邊際效益。 例如,當出現因懸空而導致的劇烈減" -"速時。在這些情況下,建議使用大約 300-350 mm3/s2,因為這樣剛好允許足夠的平" -"滑,以幫助壓力提前實現更平滑的流量過渡。\n" -"\n" -"對於速度較慢且沒有壓力提前的機種,應將此值設置為較低。對於近程擠出機來說\n" -"10-15 mm3/s2 是一個好的起點,而對於遠程擠出機來說是 5-10 mm3/s2。\n" -"此功能在 Prusa 切片軟體中稱為壓力均衡器。\n" -"\n" -"注意:此參數會停用圓弧擬合。" msgid "mm³/s²" msgstr "mm³/s²" @@ -11995,8 +11990,8 @@ 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 "Long retraction when cut(experimental)" msgstr "" @@ -12016,8 +12011,8 @@ msgid "" "change" msgstr "" -msgid "Z hop when retract" -msgstr "回抽時抬升Z" +msgid "Z-hop height" +msgstr "" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -12043,6 +12038,9 @@ msgid "" "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +msgid "Z-hop type" +msgstr "" + msgid "Z hop type" msgstr "抬Z類型" @@ -12315,8 +12313,8 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"擦拭速度是根據此配置中指定的速度設定。如果該值以百分比形式表示(例如 " -"80%),則將根據空駛速度設定進行計算。該參數的預設值為 80%。" +"擦拭速度是根據此配置中指定的速度設定。如果該值以百分比形式表示(例如 80%)," +"則將根據空駛速度設定進行計算。該參數的預設值為 80%。" msgid "Skirt distance" msgstr "Skirt距離" @@ -12516,13 +12514,11 @@ msgstr "手動更換線材" msgid "" "Enable this option to omit the custom Change filament G-code only at the " -"beginning of the print. The tool change command (e.g., T0)will be skipped " +"beginning of the print. The tool change command (e.g., T0) will be skipped " "throughout the entire print. This is useful for manual multi-material " "printing, where we use M600/PAUSE to trigger the manual filament change " "action." msgstr "" -"啟用此選項以僅在列印開始時省略自訂更換線材 G-code。工具更換命令(例如 T0)將在整個" -"列印過程中跳過。這對於手動多線材列印很有用,我們使用 M600/PAUSE 來觸發手動線材更換動作。" msgid "Purge in prime tower" msgstr "沖刷進換料塔" @@ -12586,14 +12582,11 @@ msgid "Z offset" msgstr "Z 偏移(Z offset)" msgid "" -"This value will be added (or subtracted)from all the Z coordinates in the " +"This value will be added (or subtracted) from all the Z coordinates in the " "output G-code. It is used to compensate for bad Z endstop position: for " "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" -"該設定值將從輸出 G-code 中的所有 Z 座標增加(或 減少)。 它用於 Z 軸限位器位" -"置的補償:例如,你的 Z 軸限位器實際上使噴嘴距離列印板高了 0.3 mm,請將其設定" -"為 -0.3。" msgid "Enable support" msgstr "開啟支撐" @@ -12602,12 +12595,10 @@ msgid "Enable support generation." msgstr "開啟支撐產生。" msgid "" -"normal(auto)and tree(auto)is used to generate support automatically. If " -"normal(manual)or tree(manual)is selected, only support enforcers are " +"normal(auto) and tree(auto) is used to generate support automatically. If " +"normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"普通(自動)和樹狀(自動)用於自動產生支撐體。如果選擇普通(手動)或樹狀(手" -"動),僅會在支撐強制面上產生支撐。" msgid "normal(auto)" msgstr "普通(自動)" @@ -12678,8 +12669,7 @@ 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 " @@ -12766,8 +12756,8 @@ msgstr "支撐線距" msgid "Normal Support expansion" msgstr "普通支撐延伸" -msgid "Expand (+)or shrink (-)the horizontal span of normal support" -msgstr "在水平方向對普通支撐進行延伸(+)或收縮(-)" +msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "" msgid "Speed of support" msgstr "支撐列印速度" @@ -12831,8 +12821,8 @@ msgid "" "tree support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" -"此設定決定樹狀支撐的最大分支角度。如果角度增加,可以更水平地列印分支," -"使它們可以到達更遠的地方。" +"此設定決定樹狀支撐的最大分支角度。如果角度增加,可以更水平地列印分支,使它們" +"可以到達更遠的地方。" msgid "Preferred Branch Angle" msgstr "偏好樹狀分支角度" @@ -12843,8 +12833,8 @@ msgid "" "model. Use a lower angle to make them more vertical and more stable. Use a " "higher angle for branches to merge faster." msgstr "" -"當樹狀分支不必避開模型時的偏好角度。 使用較低的角度使它們更垂直且更穩" -"定。 使用更高的角度使分支合併得更快。" +"當樹狀分支不必避開模型時的偏好角度。 使用較低的角度使它們更垂直且更穩定。 使" +"用更高的角度使分支合併得更快。" msgid "Tree support branch distance" msgstr "樹狀支撐分支距離" @@ -12957,11 +12947,12 @@ msgid "" "either via macros or natively and is usually used when an active chamber " "heater is installed." msgstr "" -"此選項啟用機箱溫度控制。此選項會在 \"machine_start_gcode\" 之前啟用 M191 命令," -"設定機箱溫度並等待達到設定溫度。此外,它會在列印結束時發出 M141 命令來關閉機箱加熱器" -"(如果存在)\n。" -"\n" -"此選項依賴於韌體支援 M191 和 M141 命令(通過巨集或原生),通常用於主動機箱加熱器。" +"此選項啟用機箱溫度控制。此選項會在 \"machine_start_gcode\" 之前啟用 M191 命" +"令,設定機箱溫度並等待達到設定溫度。此外,它會在列印結束時發出 M141 命令來關" +"閉機箱加熱器(如果存在)\n" +"。\n" +"此選項依賴於韌體支援 M191 和 M141 命令(通過巨集或原生),通常用於主動機箱加" +"熱器。" msgid "Chamber temperature" msgstr "機箱溫度" @@ -12974,27 +12965,17 @@ msgid "" "ASA. \n" "\n" "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option " -"should be disabled (set to 0)as the chamber temperature should be low to " +"should be disabled (set to 0) as the chamber temperature should be low to " "avoid extruder clogging caused by material softening at the heat break.\n" "\n" "If enabled, this parameter also sets a gcode variable named " "chamber_temperature, which can be used to pass the desired chamber " "temperature to your print start macro, or a heat soak macro like this: " -"PRINT_START (other variables)CHAMBER_TEMP=[chamber_temperature]. This may " +"PRINT_START (other variables) CHAMBER_TEMP=[chamber_temperature]. This may " "be useful if your printer does not support M141/M191 commands, or if you " "desire to handle heat soaking in the print start macro if no active chamber " "heater is installed." msgstr "" -"對於 ABS、ASA、PC 和 PA 等高溫材料,較高的機箱溫度有助於抑制或減少翹曲,並可能提高層間" -"結合強度。然而,同時,較高的機箱溫度會降低列印 ABS 和 ASA 時的空氣過濾效率。\n" -"\n" -"對於 PLA、PETG、TPU、PVA 和其他低溫材料,不應使用此選項(設置為 0),因為機箱溫度應較低," -"以避免由於材料在喉管軟化而導致擠出機堵塞。\n" -"\n" -"如果啟用,此參數還設置了一個名為 chamber_temperature 的 gcode 變數,可將所需的機箱溫度" -"傳遞給列印巨集,例如:PRINT_START(其他變數)CHAMBER_TEMP=[chamber_temperature]。" -"如果你的印表設備不支持 M141/M191 命令,或者你希望在沒有安裝主動機箱加熱器的情況下在列印" -"開始巨集中處理熱浸處理,這可能很有用。" msgid "Nozzle temperature for layers after the initial one" msgstr "除首層外的其它層的噴嘴溫度" @@ -13082,9 +13063,10 @@ msgid "" msgstr "" "描述當回抽時噴嘴沿最後一條路徑移動的時間。\n" "\n" -"根據擦拭操作持續時間、擠出機/線材回抽設定的速度和時間長度,可能需要回抽來抽回剩餘的線材。" -"\n" -"若在下面的擦拭設定之前設定回抽量,將會在擦拭之前執行多餘的回抽,否則將在之後執行。" +"根據擦拭操作持續時間、擠出機/線材回抽設定的速度和時間長度,可能需要回抽來抽回" +"剩餘的線材。\n" +"若在下面的擦拭設定之前設定回抽量,將會在擦拭之前執行多餘的回抽,否則將在之後" +"執行。" msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " @@ -13152,15 +13134,16 @@ msgid "" "For the wipe tower external perimeters the internal perimeter speed is used " "regardless of this setting." msgstr "" -"在換料塔中和換料塔稀疏層時的最快列印速度。在列印時,如果稀疏填充速度或從線材最大體積速度計算出" -"的速度較低,則將使用較低的速度。\n" +"在換料塔中和換料塔稀疏層時的最快列印速度。在列印時,如果稀疏填充速度或從線材" +"最大體積速度計算出的速度較低,則將使用較低的速度。\n" "\n" -"在列印稀疏層時,如果內部周界速度或從線材最大體積速度計算出的速度較低,則將使用較低的速度。\n" +"在列印稀疏層時,如果內部周界速度或從線材最大體積速度計算出的速度較低,則將使" +"用較低的速度。\n" "\n" "提高此速度可能會影響塔的穩定性,並增加噴嘴與換料塔上斑點的碰撞力。\n" "\n" -"在將此參數提高於預設值 90mm/sec 以上之前,請確保你的印表設備能夠可靠地在更高的速度下橋接," -"並且工具更換時的溢出能良好的被控制。\n" +"在將此參數提高於預設值 90mm/sec 以上之前,請確保你的印表設備能夠可靠地在更高" +"的速度下橋接,並且工具更換時的溢出能良好的被控制。\n" "\n" "對於換料塔外部周邊,無論此設定如何,都使用內部周邊速度。" @@ -13228,18 +13211,19 @@ msgid "" "purging lines thicker or narrower than they normally would be. The spacing " "is adjusted automatically." msgstr "" -"用於換料塔上的換料的額外流量。這會使列印線比正常情況更粗或更細。間距會自動調整。" +"用於換料塔上的換料的額外流量。這會使列印線比正常情況更粗或更細。間距會自動調" +"整。" msgid "Idle temperature" msgstr "閒置溫度" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool setups." -"This is only used when 'Ooze prevention' is active in Print Settings. Set to " -"0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool " +"setups.This is only used when 'Ooze prevention' is active in Print Settings. " +"Set to 0 to disable." msgstr "" -"當工具頭在多工具頭設置中未使用時的噴嘴溫度。" -"僅在「列印設定」中啟用「溢出預防」時有效。設置 0 為禁用。" +"當工具頭在多工具頭設置中未使用時的噴嘴溫度。僅在「列印設定」中啟用「溢出預" +"防」時有效。設置 0 為禁用。" msgid "X-Y hole compensation" msgstr "X-Y 孔洞尺寸補償" @@ -13269,13 +13253,10 @@ msgstr "將圓孔轉換為多邊形孔" msgid "" "Search for almost-circular holes that span more than one layer and convert " -"the geometry to polyholes. Use the nozzle size and the (biggest)diameter to " +"the geometry to polyholes. Use the nozzle size and the (biggest) diameter to " "compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" -"搜索跨越多層的近似圓形孔,並將幾何形狀轉換為多邊形孔。使用噴嘴尺寸和(最大)" -"直徑來計算多邊形孔。\n" -"參見http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgid "Polyhole detection margin" msgstr "偵測多邊形孔邊緣" @@ -13325,8 +13306,9 @@ msgid "" "Wipe tower is only compatible with relative mode. It is recommended on most " "printers. Default is checked" msgstr "" -"建議在使用「標籤物件」選項時使用相對擠出。某些擠出機取消此選項(絕對擠出模式)" -"時工作效果更好。換料塔僅與相對模式兼容。建議在大部分印表設備上使用。預設為啟用。" +"建議在使用「標籤物件」選項時使用相對擠出。某些擠出機取消此選項(絕對擠出模" +"式)時工作效果更好。換料塔僅與相對模式兼容。建議在大部分印表設備上使用。預設" +"為啟用。" msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -13419,11 +13401,12 @@ msgid "" "top-surface. 'One wall threshold' is only visible if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"調整此值可防止列印短的、未閉合的牆面,這些可能會增加列印時間。較高的值會移除更多、更長的牆面。\n" +"調整此值可防止列印短的、未閉合的牆面,這些可能會增加列印時間。較高的值會移除" +"更多、更長的牆面。\n" "\n" -"注意:底部和頂部表面不受此值影響,以防止模型外部出現視覺間隙。調整下面的「高級設定」中的" -"「單壁閾值」來調整對什麼被視為頂表面的敏感度。「單壁閾值」僅在此設定設置為大於預設值 0.5" -"或啟用單壁頂部表面時可見。" +"注意:底部和頂部表面不受此值影響,以防止模型外部出現視覺間隙。調整下面的「高" +"級設定」中的「單壁閾值」來調整對什麼被視為頂表面的敏感度。「單壁閾值」僅在此" +"設定設置為大於預設值 0.5或啟用單壁頂部表面時可見。" msgid "First layer minimum wall width" msgstr "首層牆最小線寬" @@ -13440,12 +13423,10 @@ msgstr "牆最小線寬" msgid "" "Width of the wall that will replace thin features (according to the Minimum " -"feature size)of the model. If the Minimum wall width is thinner than the " +"feature size) of the model. If the Minimum wall width is thinner than the " "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"用於替換模型細小特徵(根據最小特徵尺寸)的牆線寬。如果牆最小線寬小於最小特徵" -"的厚度,則牆將變得和特徵本身一樣厚。參數值表示為相對噴嘴直徑的百分比" msgid "Detect narrow internal solid infill" msgstr "識別狹窄內部實心填充" @@ -13532,16 +13513,16 @@ msgid "" "custom G-code travels somewhere else, it should write to this variable so " "OrcaSlicer knows where it travels from when it gets control back." msgstr "" -"自訂 G-code 區塊開頭的擠出機位置。如果自訂 G-code 移動到了其他位置,應該寫入此變數," -"以便 OrcaSlicer 知道它從哪裡移動到當它重新獲得控制權時。" +"自訂 G-code 區塊開頭的擠出機位置。如果自訂 G-code 移動到了其他位置,應該寫入" +"此變數,以便 OrcaSlicer 知道它從哪裡移動到當它重新獲得控制權時。" msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "OrcaSlicer de-retracts correctly when it gets control back." msgstr "" -"自訂 G-code 區塊開頭的回抽狀態。如果自訂 G-code 移動了擠出機軸,應該寫入此變數," -"以便 OrcaSlicer 在重新獲得控制權時正確返回抽。" +"自訂 G-code 區塊開頭的回抽狀態。如果自訂 G-code 移動了擠出機軸,應該寫入此變" +"數,以便 OrcaSlicer 在重新獲得控制權時正確返回抽。" msgid "Extra de-retraction" msgstr "額外返回抽" @@ -13569,8 +13550,7 @@ msgstr "目前列印物件的索引" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." -msgstr "" -"特定於序列列印。目前列印物件的索引,從 0 開始。" +msgstr "特定於序列列印。目前列印物件的索引,從 0 開始。" msgid "Has wipe tower" msgstr "有換料塔" @@ -13584,8 +13564,7 @@ msgstr "初始擠出機" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." -msgstr "" -"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_tool 相同。" +msgstr "列印中使用的第一個擠出機的索引,從 0 開始。與 initial_tool 相同。" msgid "Initial tool" msgstr "初始工具頭" @@ -13593,8 +13572,7 @@ msgstr "初始工具頭" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." -msgstr "" -"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_extruder 相同。" +msgstr "列印中使用的第一個擠出機的索引,從 0 開始。與 initial_extruder 相同。" msgid "Is extruder used?" msgstr "擠出機是否被使用?" @@ -13633,8 +13611,7 @@ msgstr "各擠出機擠出總重" msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." -msgstr "" -"各擠出機擠出總重,依據線材密度計算" +msgstr "各擠出機擠出總重,依據線材密度計算" msgid "Total weight" msgstr "總重" @@ -13671,8 +13648,8 @@ msgid "" "index 0).\n" "Example: 'x:100% y:50% z:100'." msgstr "" -"包含一個字串,描述了每個物件縮放的資訊。第一個物件索引為 0。" -"例如:'x:100% y:50% z:100'" +"包含一個字串,描述了每個物件縮放的資訊。第一個物件索引為 0。例如:'x:100% " +"y:50% z:100'" msgid "Input filename without extension" msgstr "輸入檔名(不含副檔名)" @@ -13682,14 +13659,12 @@ msgstr "第一個物件的原始檔名(不含副檔名)" msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." -msgstr "" -"這個向量包含兩個元素:點的 x 和 y 座標,單位為毫米。" +msgstr "這個向量包含兩個元素:點的 x 和 y 座標,單位為毫米。" msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." -msgstr "" -"這個向量包含兩個元素:邊界的 x 和 y 尺寸,單位為mm。" +msgstr "這個向量包含兩個元素:邊界的 x 和 y 尺寸,單位為mm。" msgid "First layer convex hull" msgstr "第一層凸包" @@ -13746,7 +13721,8 @@ msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" -"切片使用的各個擠出機的線材預設名稱。此變數是一個向量,包含每個擠出機相對應的名稱。" +"切片使用的各個擠出機的線材預設名稱。此變數是一個向量,包含每個擠出機相對應的" +"名稱。" msgid "Printer preset name" msgstr "列印設備預設名稱" @@ -13766,8 +13742,7 @@ msgstr "總擠出機數" msgid "" "Total number of extruders, regardless of whether they are used in the " "current print." -msgstr "" -"總擠出機數,無論是否用於列印。" +msgstr "總擠出機數,無論是否用於列印。" msgid "Layer number" msgstr "層數" @@ -13838,10 +13813,9 @@ msgid "Slicing mesh" msgstr "正在切片網格" msgid "" -"No layers were detected. You might want to repair your STL file(s)or check " +"No layers were detected. You might want to repair your STL file(s) or check " "their size or thickness and retry.\n" msgstr "" -"沒有切到層次。你可能需要修復 STL 檔案,或檢查模型尺寸、厚度等,之後再重試。\n" msgid "" "An object's XY size compensation will not be used because it is also color-" @@ -13883,8 +13857,8 @@ msgid "Support: propagate branches at layer %d" msgstr "支撐:正在生長 %d 層的樹枝" msgid "" -"Unknown file format. Input file must have .stl, .obj, .amf(.xml)extension." -msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .stl、.obj 或 .amf(.xml)。" +"Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." +msgstr "" msgid "Loading of a model file failed." msgstr "載入模型檔案失敗。" @@ -14034,8 +14008,8 @@ msgid "" "historical results. \n" "Do you still want to continue the calibration?" msgstr "" -"此機型每個噴嘴只能儲存 16 筆歷史記錄。你可以刪除現有的歷史記錄,然後開始校準。" -"或者你可以繼續校準,但無法建立新的校準歷史記錄。\n" +"此機型每個噴嘴只能儲存 16 筆歷史記錄。你可以刪除現有的歷史記錄,然後開始校" +"準。或者你可以繼續校準,但無法建立新的校準歷史記錄。\n" "是否仍要繼續校準?" msgid "Connecting to printer..." @@ -14053,15 +14027,14 @@ msgid "" "Only one of the results with the same name is saved. Are you sure you want " "to override the historical result?" msgstr "" -"已經有一個同名的歷史校準結果:%s。" -"僅保存同名結果中的其中一個。確定要覆寫歷史結果嗎?" +"已經有一個同名的歷史校準結果:%s。僅保存同名結果中的其中一個。確定要覆寫歷史" +"結果嗎?" #, c-format, boost-format msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." -msgstr "" -"此機型每個噴嘴只能儲存 %d 筆歷史記錄。此結果將不會被保存。" +msgstr "此機型每個噴嘴只能儲存 %d 筆歷史記錄。此結果將不會被保存。" msgid "Internal Error" msgstr "內部錯誤" @@ -14118,15 +14091,17 @@ msgid "" msgstr "" "請參考我們的 Wiki 頁面,了解「流體動力校準」的詳細資訊。\n" "\n" -"通常不需要進行校準。當你啟動單色/單材質列印,並在列印開始選單中勾選「流體動力校準」選項時," -"列印設備將按照舊方式,在列印前校準耗材。當你啟動多色/多材質列印時,列印設備將在每次耗材切換時使用" -"預設的補償參數,這在大部分情況下都能得到良好的結果。\n" +"通常不需要進行校準。當你啟動單色/單材質列印,並在列印開始選單中勾選「流體動力" +"校準」選項時,列印設備將按照舊方式,在列印前校準耗材。當你啟動多色/多材質列印" +"時,列印設備將在每次耗材切換時使用預設的補償參數,這在大部分情況下都能得到良" +"好的結果。\n" "\n" -"請注意,有些情況可能會導致校準結果不可靠,例如列印板上的黏著力不足。你可以通過清洗印板板或" -"塗抹膠水來改善黏著力。有關此主題的更多資訊,請參考我們的 Wiki。\n" +"請注意,有些情況可能會導致校準結果不可靠,例如列印板上的黏著力不足。你可以通" +"過清洗印板板或塗抹膠水來改善黏著力。有關此主題的更多資訊,請參考我們的 " +"Wiki。\n" "\n" -"在我們的測試中,校準結果存在約 10% 的誤差,這可能導致每次校準的結果不完全相同。" -"我們仍在調查根本原因,並將在新的更新中進行改進。" +"在我們的測試中,校準結果存在約 10% 的誤差,這可能導致每次校準的結果不完全相" +"同。我們仍在調查根本原因,並將在新的更新中進行改進。" msgid "When to use Flow Rate Calibration" msgstr "何時使用流量率校準" @@ -14188,10 +14163,10 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" -"自動流量率校準採用 Bambu Lab 的雷射雷達技術,直接測量校準圖案。然而,請注" -"意,這種方法的功效和準確性可能會因特定類型的線材而受影響。特別是透明或半透" -"明、帶有閃光顆粒或具有高反射表面的線材可能不適合這種校準,並可能產生不理想的" -"結果。\n" +"自動流量率校準採用 Bambu Lab 的雷射雷達技術,直接測量校準圖案。然而,請注意," +"這種方法的功效和準確性可能會因特定類型的線材而受影響。特別是透明或半透明、帶" +"有閃光顆粒或具有高反射表面的線材可能不適合這種校準,並可能產生不理想的結" +"果。\n" "\n" "校準結果可能因每次校準或線材的不同而有所不同。我們仍在透過韌體更新不斷提高這" "種校準的準確性和相容性。\n" @@ -14240,8 +14215,7 @@ msgstr "名稱不能超過40個字元。" msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to override the other results?" -msgstr "" -"同名的結果只能儲存一個,是否要覆蓋其他結果?" +msgstr "同名的結果只能儲存一個,是否要覆蓋其他結果?" msgid "Please find the best line on your plate" msgstr "請在你的列印板上找到最佳線條" @@ -14592,8 +14566,8 @@ msgstr "傳送 G-code 到列印設備" msgid "Upload to Printer Host with the following filename:" msgstr "使用下列檔案名上傳到列印設備:" -msgid "Use forward slashes ( / )as a directory separator if needed." -msgstr "如有需要,請使用正斜槓( / )作為目錄分隔符號。" +msgid "Use forward slashes ( / ) as a directory separator if needed." +msgstr "" msgid "Upload to storage" msgstr "上傳到儲存單位" @@ -14776,8 +14750,7 @@ msgstr "自訂廠牌尚未輸入,請輸入自訂廠牌。" msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." -msgstr "" -"「Bambu」或「Generic」不能作為自訂線材的廠牌名稱。" +msgstr "「Bambu」或「Generic」不能作為自訂線材的廠牌名稱。" msgid "Filament type is not selected, please reselect type." msgstr "線材類型尚未選擇,請重新選擇類型。" @@ -14788,8 +14761,7 @@ 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 "自訂廠牌或序號中的所有輸入都是空白,請重新輸入。" @@ -14799,8 +14771,7 @@ msgstr "廠牌不能為數字,請重新輸入。" msgid "" "You have not selected a printer or preset yet. Please select at least one." -msgstr "" -"尚未選擇列印設備或預設,請至少選擇一個。" +msgstr "尚未選擇列印設備或預設,請至少選擇一個。" #, c-format, boost-format msgid "" @@ -14923,14 +14894,12 @@ 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 entered, please enter it." msgstr "未輸入自訂列印設備或型號,請輸入。" @@ -14945,9 +14914,9 @@ msgid "" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" "創建的列印設備預設設定已經有相同名稱的預設設定。是否要覆蓋它?\n" -"\t是:覆蓋相同名稱的列印設備預設設定,並重新創建名稱相同的線材和處理預設設定," -"名稱不同的線材和處理預設設定將被保留。\n " -"\t取消:不創建預設設定,返回創建界面。" +"\t是:覆蓋相同名稱的列印設備預設設定,並重新創建名稱相同的線材和處理預設設" +"定,名稱不同的線材和處理預設設定將被保留。\n" +" \t取消:不創建預設設定,返回創建界面。" msgid "You need to select at least one filament preset." msgstr "需要至少選擇一個線材預設設定。" @@ -14970,27 +14939,23 @@ msgstr "目前廠牌沒有可用的型號,請重新選擇。" msgid "" "You have not selected the vendor and model or entered 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 "請檢查熱床可列印區域形狀和原點設定。" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "" -"尚未選擇要更換噴嘴的列印設備,請選擇。" +msgstr "尚未選擇要更換噴嘴的列印設備,請選擇。" msgid "Create Printer Successful" msgstr "列印設備創建成功" @@ -15013,8 +14978,8 @@ msgid "" "volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -"如果需要,請前往線材設定編輯你的預設設定。\n " -"請注意,噴嘴溫度、熱床溫度和最大體積速度對列印品質有重大影響,請小心設置。" +"如果需要,請前往線材設定編輯你的預設設定。\n" +" 請注意,噴嘴溫度、熱床溫度和最大體積速度對列印品質有重大影響,請小心設置。" msgid "" "\n" @@ -15026,8 +14991,8 @@ msgid "" msgstr "" "\n" "\n" -"Orca 偵測到你的使用者預設設定同步功能未啟用,這可能會導致設備頁面上的線材設定無法成功。" -"請點擊「同步使用者預設設定」以啟用同步功能。" +"Orca 偵測到你的使用者預設設定同步功能未啟用,這可能會導致設備頁面上的線材設定" +"無法成功。請點擊「同步使用者預設設定」以啟用同步功能。" msgid "Printer Setting" msgstr "列印設備設定" @@ -15092,8 +15057,7 @@ msgstr "" 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 "僅顯示對線材預設設定有變更的線材名稱。" @@ -15102,7 +15066,8 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"只有具有使用者列印設備預設設定的列印設備名稱會顯示,你選擇的每個預設設定將以 zip 檔案格式匯出。" +"只有具有使用者列印設備預設設定的列印設備名稱會顯示,你選擇的每個預設設定將以 " +"zip 檔案格式匯出。" msgid "" "Only the filament names with user filament presets will be displayed, \n" @@ -15207,8 +15172,7 @@ 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" @@ -15321,8 +15285,7 @@ msgstr "無法連接到 FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." -msgstr "" -"注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" +msgstr "注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" msgid "Connection to MKS works correctly." msgstr "成功連接到 MKS。" @@ -15416,39 +15379,40 @@ msgid "" "It has a small layer height, and results in almost negligible layer lines " "and high printing quality. It is suitable for most general printing cases." msgstr "" -"它具有較小的層高,產生幾乎可以忽略不計的層線並具有較高的列印品質。" -"適用於大多數一般的列印情況。" +"它具有較小的層高,產生幾乎可以忽略不計的層線並具有較高的列印品質。適用於大多" +"數一般的列印情況。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " "and acceleration, and the sparse infill pattern is Gyroid. So, it results in " "much higher printing quality, but a much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較低的速度和加速度," -"且稀疏填充圖案為 Gyroid。因此,列印品質大幅提高,但列印時間大幅延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較低的速度和加速度,且稀疏填充圖案" +"為 Gyroid。因此,列印品質大幅提高,但列印時間大幅延長。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a slightly " "bigger layer height, and results in almost negligible layer lines, and " "slightly shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有略大的層高," -"產生幾乎可以忽略不計的層線,並略微縮短列印時間。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有略大的層高,產生幾乎可以忽略不計的層" +"線,並略微縮短列印時間。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " "height, and results in slightly visible layer lines, but shorter printing " "time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生略微可見的層線,但列印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生略微可見的層線,但列" +"印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " "height, and results in almost invisible layer lines and higher printing " "quality, but shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生幾乎不可見的層線並提高列印品質,但列印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎不可見的層線並提" +"高列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15456,16 +15420,17 @@ msgid "" "Gyroid. So, it results in almost invisible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度," -"且稀疏填充圖案為 Gyroid。因此,產生幾乎不可見的層線並大幅提高列印品質,但列印時間會大大延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀" +"疏填充圖案為 Gyroid。因此,產生幾乎不可見的層線並大幅提高列印品質,但列印時間" +"會大大延長。" msgid "" "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " "height, and results in minimal layer lines and higher printing quality, but " "shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生最小的層線並提高列印品質,但列印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生最小的層線並提高列印" +"品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15473,8 +15438,9 @@ msgid "" "Gyroid. So, it results in minimal layer lines and much higher printing " "quality, but much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度," -"且稀疏填充圖案為 Gyroid。因此,產生最小的層線並大幅提高列印品質,但列印時間會大大延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀" +"疏填充圖案為 Gyroid。因此,產生最小的層線並大幅提高列印品質,但列印時間會大大" +"延長。" msgid "" "It has a general layer height, and results in general layer lines and " @@ -15495,24 +15461,24 @@ msgid "" "height, and results in more apparent layer lines and lower printing quality, " "but slightly shorter printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高," -"產生更明顯的層線並降低列印品質,但列印時間略微縮短。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列" +"印品質,但列印時間略微縮短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高," -"產生更明顯的層線並降低列印品質,但列印時間較短。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列" +"印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生較不明顯的層線並提高列印品質,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並提高" +"列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15520,16 +15486,17 @@ msgid "" "Gyroid. So, it results in less apparent layer lines and much higher printing " "quality, but much longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度," -"且稀疏填充圖案為 Gyroid。因此,產生較不明顯的層線,並且列印品質大幅提高,但列印時間會大大延長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀" +"疏填充圖案為 Gyroid。因此,產生較不明顯的層線,並且列印品質大幅提高,但列印時" +"間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生幾乎可以忽略不計的層線,並提高列印品質,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層" +"線,並提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15537,22 +15504,22 @@ msgid "" "Gyroid. So, it results in almost negligible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度," -"且稀疏填充圖案為 Gyroid。因此,產生幾乎可以忽略不計的層線," -"並且列印品質大幅提高,但列印時間會大大延長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀" +"疏填充圖案為 Gyroid。因此,產生幾乎可以忽略不計的層線,並且列印品質大幅提高," +"但列印時間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and longer printing " "time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層線,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層" +"線,但列印時間較長。" msgid "" "It has a big layer height, and results in apparent layer lines and ordinary " "printing quality and printing time." -msgstr "" -"它具有較大的層高,產生明顯的層線,並且列印品質和列印時間屬於普通水平。" +msgstr "它具有較大的層高,產生明顯的層線,並且列印品質和列印時間屬於普通水平。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " @@ -15567,54 +15534,53 @@ msgid "" "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time in some printing cases." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高," -"產生較為明顯的層線並降低列印品質,但在某些情況下會縮短列印時間。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生較為明顯的層線並降低" +"列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " "height, and results in much more apparent layer lines and much lower " "printing quality, but shorter printing time in some printing cases." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高," -"產生更明顯的層線並顯著降低列印品質,但在某些情況下會縮短列印時間。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並顯著降" +"低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and slight higher printing " "quality, but longer printing time." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生較不明顯的層線並略微提高列印品質,但列印時間較長。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並略微" +"提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高," -"產生較不明顯的層線並提高列印品質,但列印時間較長。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並提高" +"列印品質,但列印時間較長。" msgid "" "It has a very big layer height, and results in very apparent layer lines, " "low printing quality and general printing time." -msgstr "" -"它具有非常大的層高,產生明顯的層線、較低的列印品質和一般的列印時間。" +msgstr "它具有非常大的層高,產生明顯的層線、較低的列印品質和一般的列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " "height, and results in very apparent layer lines and much lower printing " "quality, but shorter printing time in some printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有較大的層高,產生非常明顯的層線並顯著降低列印品質," -"但在某些情況下會縮短列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有較大的層高,產生非常明顯的層線並顯著降低" +"列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " "layer height, and results in extremely apparent layer lines and much lower " "printing quality, but much shorter printing time in some printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有更大的層高,產生極為明顯的層線並顯著降低列印品質," -"但在某些情況下會大幅縮短列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有更大的層高,產生極為明顯的層線並顯著降低" +"列印品質,但在某些情況下會大幅縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a slightly " @@ -15622,8 +15588,8 @@ msgid "" "lines and slightly higher printing quality, but longer printing time in some " "printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有略小的層高,產生略少但仍明顯的層線," -"並略微提高列印品質,但在某些情況下會延長列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有略小的層高,產生略少但仍明顯的層線,並略" +"微提高列印品質,但在某些情況下會延長列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " @@ -15684,12 +15650,10 @@ msgstr "" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" "Sandwich mode\n" -"Did you know that you can use sandwich mode (inner-outer-inner)to improve " +"Did you know that you can use sandwich mode (inner-outer-inner) to improve " "precision and layer consistency if your model doesn't have very steep " "overhangs?" msgstr "" -"三明治模式\n" -"如果模型沒有非常陡峭的懸垂部分,可以使用三明治模式(內-外-內)來提高精度和層次一致性" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15706,7 +15670,8 @@ msgid "" "beloved calibration solution in OrcaSlicer." msgstr "" "校準\n" -"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方案。" +"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方" +"案。" #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" @@ -15810,8 +15775,8 @@ msgid "" "F key." msgstr "" "指定列印物件底部\n" -"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能或" -"按F鍵。" +"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能" +"或按F鍵。" #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -15839,7 +15804,8 @@ msgid "" "Simplify mesh feature? Right-click the model and select Simplify model." msgstr "" "簡化模型\n" -"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化模型。" +"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化" +"模型。" #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -15867,8 +15833,8 @@ msgid "" "directly in Orca Slicer." msgstr "" "減去零件\n" -"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?" -"這樣,你可以在 Orca Slicer 中輕鬆創建可調整大小的孔洞。" +"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?這樣,你可以在 Orca " +"Slicer 中輕鬆創建可調整大小的孔洞。" #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -16012,8 +15978,8 @@ msgid "" "higher enclosure temperature. More info about this in the Wiki." msgstr "" "需要在開啟列印設備門的情況下列印\n" -"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的機率嗎?" -"更多資訊請參閱Wiki。" +"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的" +"機率嗎?更多資訊請參閱Wiki。" #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -16023,11 +15989,326 @@ msgid "" "probability of warping." msgstr "" "避免翹曲\n" -"你知道當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率嗎?" +"你知道當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率" +"嗎?" -#~ msgid "Cool Plate" +#~ msgid "Text contains character glyph (represented by '?')unknown by font." +#~ msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" + +#~ msgid "ShiftLeft mouse button" +#~ msgstr "Shift左滑鼠" + +#~ msgctxt "Verb" +#~ msgid "Scale" +#~ msgstr "縮放" + +#~ msgid "Orca Slicer " +#~ msgstr "Orca Slicer " + +#~ msgid "" +#~ ")to locate the toolhead's position. This prevents device moving beyond " +#~ "the printable boundary and causing equipment wear." +#~ msgstr ")來定位目前工具頭位置,以防止移動時超出邊界造成設備損壞" + +#~ msgid "" +#~ "Diameter of the print bed. It is assumed that origin (0,0)is located in " +#~ "the center." +#~ msgstr "熱床直徑。假定原點(0,0)位於中心。" + +#~ msgid "" +#~ "The current chamber temperature or the target chamber temperature exceeds " +#~ "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" +#~ "TPU)is not allowed to be loaded." +#~ msgstr "" +#~ "目前設備內部溫度超過 45℃。為避免阻塞,不允許進料低溫線材(PLA / PETG / " +#~ "TPU)。" + +#~ msgid "" +#~ "Low temperature filament(PLA/PETG/TPU)is loaded in the extruder.In order " +#~ "to avoid extruder clogging,it is not allowed to set the chamber " +#~ "temperature above 45℃." +#~ msgstr "" +#~ "為避免堵塞,使用低溫線材(PLA / PETG / TPU)時,不充許將設備內部溫度設置於" +#~ "45℃以上" + +#, fuzzy, c-format, boost-format +#~ msgid "" +#~ "Successfully unmounted. The device %s(%s)can now be safely removed from " +#~ "the computer." +#~ msgstr "卸載成功。設備 %s(%s)現在可能安全地從電腦移除。" + +#, c-format, boost-format +#~ msgid "Ejecting of device %s(%s)has failed." +#~ msgstr "退出設備 %s(%s)失敗。" + +#~ msgid "" +#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " +#~ "model on Orca Slicer(windows)or CAD softwares." +#~ msgstr "" +#~ "\"修復模型\"功能目前僅適用於 Windows 系統。請在 Windows 版本的 Orca " +#~ "slicer 或 CAD 軟體上修復模型。" + +#, c-format, boost-format +#~ msgid "" +#~ "The selected printer (%s)is incompatible with the chosen printer profile " +#~ "in the slicer (%s)." +#~ msgstr "以選的機臺(%s)與切片軟體內所選的機臺預設(%s)不相容" + +#~ msgid "Cool plate" #~ msgstr "低溫列印板" +#~ msgid "Lift Z Enforcement" +#~ msgstr "強化抬Z策略" + +#~ msgid "Flushing volume (mm³)for each filament pair." +#~ msgstr "在兩個線材間切換所需的廢料體積(mm³)" + +#, c-format, boost-format +#~ msgid "A new Network plug-in(%s)available, Do you want to install it?" +#~ msgstr "新版的網路插件( %s)可用,是否要安裝?" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value. Detour length could be " +#~ "specified either as an absolute value or as percentage (for example 50%)" +#~ "of a direct travel path. Zero to disable" +#~ msgstr "" +#~ "避免跨越外牆時的最大繞行距離。如果繞行距離大於該數值,則不繞行。繞行距離可" +#~ "為絕對值或直線路徑的百分比(例如 50%)。0 表示禁用" + +#~ msgid "" +#~ "This separate setting will affect the speed of perimeters having radius " +#~ "<= small_perimeter_threshold (usually holes). If expressed as percentage " +#~ "(for example: 80%)it will be calculated on the outer wall speed setting " +#~ "above. Set to zero for auto." +#~ msgstr "" +#~ "這個單獨的設定將影響半徑 <= small_perimeter_threshold(通常是圓孔)的周長" +#~ "的速度。 如果以百分比表示(例如:80%),它將根據上面的外牆速度設定進行計" +#~ "算。 自動設定為零。" + +#, fuzzy +#~ msgid "Pressure advance(Klipper)AKA Linear advance factor(Marlin)" +#~ msgstr "壓力提前(Klipper)或者線性提前(Marlin)" + +#~ msgid "" +#~ "If enabled, this setting will ensure external perimeters are not slowed " +#~ "down to meet the minimum layer time. This is particularly helpful in the " +#~ "below scenarios:\n" +#~ "\n" +#~ " 1. To avoid changes in shine when printing glossy filaments \n" +#~ "2. To avoid changes in external wall speed which may create slight wall " +#~ "artifacts that appear like z banding \n" +#~ "3. To avoid printing at speeds which cause VFAs (fine artifacts)on the " +#~ "external walls\n" +#~ "\n" +#~ msgstr "" +#~ "如果啟用,這個設定將確保外圍輪廓不會因為達到最小層時間而減慢速度。這在以下" +#~ "情境中特別有幫助:\n" +#~ "\n" +#~ " 1. 避免在列印光面材料時發生光澤變化\n" +#~ " 2. 避免外牆速度變化,這可能會產生類似Z帶紋的牆面瑕疵\n" +#~ " 3. 避免以會在外牆上造成細微瑕疵(細節瑕疵,VFA)速度列印\n" +#~ "\n" + +#~ 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. 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%),則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充" +#~ "線連接到一段短邊緣。如果找不到小於 infill_anchor_max 的邊緣段,則內填充線" +#~ "將只連接到一側的邊緣段,且所選的邊緣段長度會限制在此參數範圍內,但不超過" +#~ "\"錨點長度\"最大值。若將此參數設為零,則會禁用連接到單一內填充線的錨固邊" +#~ "緣。" + +#~ 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. 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%),則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充" +#~ "線連接到一段短邊緣。如果找不到小於此參數的邊緣段,則內填充線將只連接到一側" +#~ "的邊緣段,且所選的邊緣段長度會限制於infill_anchor,但不會超過此參數。\n" +#~ "如果設為0,則會使用舊的內填充連接算法,這應該會產生與設為 1000 和 0 相同的" +#~ "結果。" + +#~ msgid "" +#~ "Enable this to add line number(Nx)at the beginning of each G-Code line" +#~ msgstr "打開這個設定,G-code 的每一行的開頭會增加Nx標註行號。" + +#~ msgid "" +#~ "This parameter smooths out sudden extrusion rate changes that happen when " +#~ "the printer transitions from printing a high flow (high speed/larger " +#~ "width)extrusion to a lower flow (lower speed/smaller width)extrusion " +#~ "and vice versa.\n" +#~ "\n" +#~ "It defines the maximum rate by which the extruded volumetric flow in mm3/" +#~ "sec can change over time. Higher values mean higher extrusion rate " +#~ "changes are allowed, resulting in faster speed transitions.\n" +#~ "\n" +#~ "A value of 0 disables the feature. \n" +#~ "\n" +#~ "For a high speed, high flow direct drive printer (like the Bambu lab or " +#~ "Voron)this value is usually not needed. However it can provide some " +#~ "marginal benefit in certain cases where feature speeds vary greatly. For " +#~ "example, when there are aggressive slowdowns due to overhangs. In these " +#~ "cases a high value of around 300-350mm3/s2 is recommended as this allows " +#~ "for just enough smoothing to assist pressure advance achieve a smoother " +#~ "flow transition.\n" +#~ "\n" +#~ "For slower printers without pressure advance, the value should be set " +#~ "much lower. A value of 10-15mm3/s2 is a good starting point for direct " +#~ "drive extruders and 5-10mm3/s2 for Bowden style. \n" +#~ "\n" +#~ "This feature is known as Pressure Equalizer in Prusa slicer.\n" +#~ "\n" +#~ "Note: this parameter disables arc fitting." +#~ msgstr "" +#~ "此參數是列印設備從列印高流量(高速/較大寬度)擠出轉換到較低流量(較低速度/" +#~ "較小寬度)擠出時,用於平滑突然變擠出速率,反之亦然。\n" +#~ "它定義了擠出體積流量(mm3/秒)隨時間變化的最大速率。數值越高意味著允許更高" +#~ "的擠出速率變化,從而實現更快的速度轉換。\n" +#~ "\n" +#~ "值為 0 會停用該功能。\n" +#~ "\n" +#~ "對於高速、高流量的機型(如 Bambu lab 或 Voron),通常不需要此設置。但是," +#~ "在某些速度差異很大的情況下,它可以提供一些邊際效益。 例如,當出現因懸空而" +#~ "導致的劇烈減速時。在這些情況下,建議使用大約 300-350 mm3/s2,因為這樣剛" +#~ "好允許足夠的平滑,以幫助壓力提前實現更平滑的流量過渡。\n" +#~ "\n" +#~ "對於速度較慢且沒有壓力提前的機種,應將此值設置為較低。對於近程擠出機來說\n" +#~ "10-15 mm3/s2 是一個好的起點,而對於遠程擠出機來說是 5-10 mm3/s2。\n" +#~ "此功能在 Prusa 切片軟體中稱為壓力均衡器。\n" +#~ "\n" +#~ "注意:此參數會停用圓弧擬合。" + +#~ msgid "Z hop when retract" +#~ msgstr "回抽時抬升Z" + +#~ msgid "" +#~ "Enable this option to omit the custom Change filament G-code only at the " +#~ "beginning of the print. The tool change command (e.g., T0)will be " +#~ "skipped throughout the entire print. This is useful for manual multi-" +#~ "material printing, where we use M600/PAUSE to trigger the manual filament " +#~ "change action." +#~ msgstr "" +#~ "啟用此選項以僅在列印開始時省略自訂更換線材 G-code。工具更換命令(例如 T0)" +#~ "將在整個列印過程中跳過。這對於手動多線材列印很有用,我們使用 M600/PAUSE 來" +#~ "觸發手動線材更換動作。" + +#~ msgid "" +#~ "This value will be added (or subtracted)from all the Z coordinates in " +#~ "the output G-code. It is used to compensate for bad Z endstop position: " +#~ "for example, if your endstop zero actually leaves the nozzle 0.3mm far " +#~ "from the print bed, set this to -0.3 (or fix your endstop)." +#~ msgstr "" +#~ "該設定值將從輸出 G-code 中的所有 Z 座標增加(或 減少)。 它用於 Z 軸限位器" +#~ "位置的補償:例如,你的 Z 軸限位器實際上使噴嘴距離列印板高了 0.3 mm,請將其" +#~ "設定為 -0.3。" + +#~ msgid "" +#~ "normal(auto)and tree(auto)is used to generate support automatically. If " +#~ "normal(manual)or tree(manual)is selected, only support enforcers are " +#~ "generated" +#~ msgstr "" +#~ "普通(自動)和樹狀(自動)用於自動產生支撐體。如果選擇普通(手動)或樹狀" +#~ "(手動),僅會在支撐強制面上產生支撐。" + +#~ msgid "Expand (+)or shrink (-)the horizontal span of normal support" +#~ msgstr "在水平方向對普通支撐進行延伸(+)或收縮(-)" + +#~ msgid "" +#~ "For high-temperature materials like ABS, ASA, PC, and PA, a higher " +#~ "chamber temperature can help suppress or reduce warping and potentially " +#~ "lead to higher interlayer bonding strength. However, at the same time, a " +#~ "higher chamber temperature will reduce the efficiency of air filtration " +#~ "for ABS and ASA. \n" +#~ "\n" +#~ "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option " +#~ "should be disabled (set to 0)as the chamber temperature should be low to " +#~ "avoid extruder clogging caused by material softening at the heat break.\n" +#~ "\n" +#~ "If enabled, this parameter also sets a gcode variable named " +#~ "chamber_temperature, which can be used to pass the desired chamber " +#~ "temperature to your print start macro, or a heat soak macro like this: " +#~ "PRINT_START (other variables)CHAMBER_TEMP=[chamber_temperature]. This " +#~ "may be useful if your printer does not support M141/M191 commands, or if " +#~ "you desire to handle heat soaking in the print start macro if no active " +#~ "chamber heater is installed." +#~ msgstr "" +#~ "對於 ABS、ASA、PC 和 PA 等高溫材料,較高的機箱溫度有助於抑制或減少翹曲,並" +#~ "可能提高層間結合強度。然而,同時,較高的機箱溫度會降低列印 ABS 和 ASA 時的" +#~ "空氣過濾效率。\n" +#~ "\n" +#~ "對於 PLA、PETG、TPU、PVA 和其他低溫材料,不應使用此選項(設置為 0),因為" +#~ "機箱溫度應較低,以避免由於材料在喉管軟化而導致擠出機堵塞。\n" +#~ "\n" +#~ "如果啟用,此參數還設置了一個名為 chamber_temperature 的 gcode 變數,可將所" +#~ "需的機箱溫度傳遞給列印巨集,例如:PRINT_START(其他變數)" +#~ "CHAMBER_TEMP=[chamber_temperature]。如果你的印表設備不支持 M141/M191 命" +#~ "令,或者你希望在沒有安裝主動機箱加熱器的情況下在列印開始巨集中處理熱浸處" +#~ "理,這可能很有用。" + +#~ msgid "" +#~ "Search for almost-circular holes that span more than one layer and " +#~ "convert the geometry to polyholes. Use the nozzle size and the (biggest)" +#~ "diameter to compute the polyhole.\n" +#~ "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" +#~ msgstr "" +#~ "搜索跨越多層的近似圓形孔,並將幾何形狀轉換為多邊形孔。使用噴嘴尺寸和(最" +#~ "大)直徑來計算多邊形孔。\n" +#~ "參見http://hydraraptor.blogspot.com/2011/02/polyholes.html" + +#~ msgid "" +#~ "Width of the wall that will replace thin features (according to the " +#~ "Minimum feature size)of the model. If the Minimum wall width is thinner " +#~ "than the thickness of the feature, the wall will become as thick as the " +#~ "feature itself. It's expressed as a percentage over nozzle diameter" +#~ msgstr "" +#~ "用於替換模型細小特徵(根據最小特徵尺寸)的牆線寬。如果牆最小線寬小於最小特" +#~ "徵的厚度,則牆將變得和特徵本身一樣厚。參數值表示為相對噴嘴直徑的百分比" + +#~ msgid "" +#~ "No layers were detected. You might want to repair your STL file(s)or " +#~ "check their size or thickness and retry.\n" +#~ msgstr "" +#~ "沒有切到層次。你可能需要修復 STL 檔案,或檢查模型尺寸、厚度等,之後再重" +#~ "試。\n" + +#~ msgid "" +#~ "Unknown file format. Input file must have .stl, .obj, .amf(.xml)" +#~ "extension." +#~ msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .stl、.obj 或 .amf(.xml)。" + +#~ msgid "Use forward slashes ( / )as a directory separator if needed." +#~ msgstr "如有需要,請使用正斜槓( / )作為目錄分隔符號。" + +#~ msgid "" +#~ "Sandwich mode\n" +#~ "Did you know that you can use sandwich mode (inner-outer-inner)to " +#~ "improve precision and layer consistency if your model doesn't have very " +#~ "steep overhangs?" +#~ msgstr "" +#~ "三明治模式\n" +#~ "如果模型沒有非常陡峭的懸垂部分,可以使用三明治模式(內-外-內)來提高精度和" +#~ "層次一致性" + #~ msgid "Reverse on odd" #~ msgstr "反轉奇數層方向" @@ -16172,9 +16453,9 @@ msgstr "" #~ "請從我們的wiki中找到流量動態校準的詳細資訊。\n" #~ "\n" #~ "通常情況下,校準是不必要的。當你開始單色/單線材列印,並在列印開始選單中勾" -#~ "選了\"流量動態校準\"選項時,列印設備將按照舊的方式,在列印前校準絲料;當你開" -#~ "始多色/多線材列印時,列印設備將在每次換絲料時使用預設的補償參數,這在大多" -#~ "數情況下會產生良好的效果。\n" +#~ "選了\"流量動態校準\"選項時,列印設備將按照舊的方式,在列印前校準絲料;當你" +#~ "開始多色/多線材列印時,列印設備將在每次換絲料時使用預設的補償參數,這在大" +#~ "多數情況下會產生良好的效果。\n" #~ "\n" #~ "請注意,有幾種情況會導致校準結果不可靠:使用紋理板進行校準;建模平台黏附效" #~ "果不好(請清洗建模平台或塗抹膠棒)... 你可以在我們的wiki中找到更多資訊。\n" @@ -16256,7 +16537,8 @@ msgstr "" #~ "Green means that AMS humidity is normal, orange represent humidity is " #~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" #~ msgstr "" -#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越好。)" +#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" +#~ "好。)" #~ msgid "Desiccant status" #~ msgstr "乾燥劑狀態" @@ -16265,7 +16547,8 @@ msgstr "" #~ "A desiccant status lower than two bars indicates that desiccant may be " #~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ msgstr "" -#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越好。)" +#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" +#~ "好。)" #~ msgid "" #~ "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -16280,7 +16563,8 @@ msgstr "" #~ "Note: if new filament is inserted during printing, the AMS will not " #~ "automatically read any information until printing is completed." #~ msgstr "" -#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材信息。" +#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材" +#~ "信息。" #, boost-format #~ msgid "Succeed to export G-code to %1%" @@ -16358,7 +16642,8 @@ msgstr "" #~ "layer cooling is enabled, when printing overhangs and when feature speeds " #~ "are not specified explicitly." #~ msgstr "" -#~ "線材最小列印速度。當啟用減速以實現更好的層冷卻、列印懸空以及未明確指定特徵速度時" +#~ "線材最小列印速度。當啟用減速以實現更好的層冷卻、列印懸空以及未明確指定特徵" +#~ "速度時" #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "無稀疏層(实验性功能)" @@ -16710,8 +16995,8 @@ msgstr "" #~ msgstr "除錯等級" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" -#~ "trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " +#~ "5:trace\n" #~ msgstr "" #~ "設定除錯日誌等級。0:fatal, 1:error, 2:warning, 3:info, 4:debug, " #~ "5:trace\n" @@ -16743,8 +17028,8 @@ msgstr "" #~ "temperature. More info about this in the Wiki." #~ msgstr "" #~ "當需要打開列印設備門進行列印時\n" -#~ "當列印較低溫度的線材時,打開列印設備門可以減少擠出機或熱端堵塞的可能性。 有" -#~ "關此內容的更多信息,請參見 Wiki。" +#~ "當列印較低溫度的線材時,打開列印設備門可以減少擠出機或熱端堵塞的可能性。 " +#~ "有關此內容的更多信息,請參見 Wiki。" #~ msgid "Embedded" #~ msgstr "嵌入的" From 5f8da1086bd14c658974b7cee92975d78a4fdd65 Mon Sep 17 00:00:00 2001 From: Shuwn Hsu <20023822+shuwn@users.noreply.github.com> Date: Tue, 7 Jan 2025 23:44:18 +0800 Subject: [PATCH 050/100] Traditional Chinese update (#7948) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correct the incorrect character “)”, and add some traditional Chinese translations. Co-authored-by: SoftFever --- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 46 +++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index be5dde9138..c439d5bdfa 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -1,7 +1,8 @@ -# Copyright (C)2019 THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST Translator Jiang Yue , 2019. -# REVISED Victor Lin, 2024 +# REVISED Victor Lin, 2024. +# REVISED Shuwn Hsu, 2024. # msgid "" msgstr "" @@ -341,10 +342,10 @@ msgid "Width" msgstr "寬度" msgid "Flap Angle" -msgstr "" +msgstr "翼偏角" msgid "Groove Angle" -msgstr "" +msgstr "凹槽角" msgid "Part" msgstr "零件" @@ -725,7 +726,8 @@ msgid "Embossed text cannot contain only white spaces." msgstr "浮雕文字不能僅包含空白字元。" msgid "Text contains character glyph (represented by '?') unknown by font." -msgstr "" +msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" + msgid "Text input doesn't show font skew." msgstr "" @@ -753,7 +755,7 @@ msgid "Font \"%1%\" can't be selected." msgstr "字型 \"%1%\" 無法選擇。" msgid "Operation" -msgstr "" +msgstr "操作" msgid "Join" msgstr "合併" @@ -782,7 +784,8 @@ msgstr "更改文字類型" #, boost-format msgid "Rename style(%1%) for embossing text" -msgstr "" +msgstr "重新命名浮雕文字樣式 (%1%)" + msgid "Name can't be empty." msgstr "名稱不可空白" @@ -4073,7 +4076,7 @@ msgid "Layer Height (mm)" msgstr "層高(mm)" msgid "Line Width (mm)" -msgstr "線寬 (mm)" +msgstr "線寬(mm)" msgid "Speed (mm/s)" msgstr "速度(mm/s)" @@ -5858,7 +5861,7 @@ msgstr "" #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." -msgstr "" +msgstr "退出設備 %s(%s)失敗。" msgid "Previous unsaved project detected, do you want to restore it?" msgstr "偵測到有未儲存的專案,是否恢復此專案?" @@ -8183,7 +8186,7 @@ msgid "" msgstr "" msgid "Flushing volume (mm³) for each filament pair." -msgstr "" +msgstr "在兩個線材間切換所需的廢料體積(mm³)" #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" @@ -8532,7 +8535,7 @@ msgstr "按下「確定」後,下次啟動 Orca Slicer 時會更新網路插 #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "" +msgstr "新版的網路插件( %s)可用,是否要安裝?" msgid "New version of Orca Slicer" msgstr "新版本的 Orca Slicer" @@ -10352,8 +10355,9 @@ msgid "" "enabled." msgstr "啟用壓力提前,一旦啟用會覆蓋自動校準的結果" +#, fuzzy msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "" +msgstr "壓力提前(Klipper)或者線性提前(Marlin)" msgid "Enable adaptive pressure advance (beta)" msgstr "啟用進階壓力提前 (beta)" @@ -12595,8 +12599,8 @@ msgid "Enable support generation." msgstr "開啟支撐產生。" msgid "" -"normal(auto) and tree(auto) is used to generate support automatically. If " -"normal(manual) or tree(manual) is selected, only support enforcers are " +"normal(auto) and tree(auto)is used to generate support automatically. If " +"normal(manual)or tree(manual)is selected, only support enforcers are " "generated" msgstr "" @@ -12757,7 +12761,7 @@ msgid "Normal Support expansion" msgstr "普通支撐延伸" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "" +msgstr "在水平方向對普通支撐進行延伸(+)或收縮(-)" msgid "Speed of support" msgstr "支撐列印速度" @@ -14889,7 +14893,7 @@ msgid "Process Preset Template" msgstr "處理預設設定模板" msgid "Back Page 1" -msgstr "" +msgstr "返回第一頁" msgid "" "You have not yet chosen which printer preset to create based on. Please " @@ -16358,7 +16362,7 @@ msgstr "" #, fuzzy #~ msgid "" -#~ "Decrease this value slightly(for example 0.9)to reduce the amount of " +#~ "Decrease this value slightly(for example 0.9) to reduce the amount of " #~ "material for bridge, to improve sag" #~ msgstr "稍微減小這個數值(比如 0.9)可以減小橋接的線材量,來改善下垂。" @@ -16395,7 +16399,7 @@ msgstr "" #~ msgstr "切換線材時,退料所需時間。只用於統計資訊。" #~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0)to load a " +#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to load a " #~ "new filament during a tool change (when executing the T code). This time " #~ "is added to the total print time by the G-code time estimator." #~ msgstr "" @@ -16404,7 +16408,7 @@ msgstr "" #~ "上去。" #~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0)to unload " +#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to unload " #~ "a filament during a tool change (when executing the T code). This time is " #~ "added to the total print time by the G-code time estimator." #~ msgstr "" @@ -16614,13 +16618,13 @@ msgstr "" #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" -#~ "Would you like to keep these changed settings (new value)after switching " +#~ "Would you like to keep these changed settings (new value) after switching " #~ "preset?" #~ msgstr "你已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" #~ msgid "" #~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings (new value)after switching " +#~ "Would you like to keep these changed settings (new value) after switching " #~ "preset?" #~ msgstr "你已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" From 599b0e09ebf87cd53039fa754020476b3009838d Mon Sep 17 00:00:00 2001 From: Azi Date: Tue, 7 Jan 2025 17:09:35 -0800 Subject: [PATCH 051/100] fixed a custom filament creation bug (#7965) fixed a bug with custom filament creation where orca doesnt recognize capitalized letter in 'Nozzle' in the printer name --- src/slic3r/GUI/CreatePresetsDialog.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 7c790f2959..b2ba961506 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -542,21 +542,24 @@ static char* read_json_file(const std::string &preset_path) } static std::string get_printer_nozzle_diameter(std::string printer_name) { + // Create a lowercase version of the printer_name for case-insensitive search + std::string printer_name_lower = printer_name; + std::transform(printer_name_lower.begin(), printer_name_lower.end(), printer_name_lower.begin(), ::tolower); - size_t index = printer_name.find(" nozzle)"); + size_t index = printer_name_lower.find(" nozzle)"); if (std::string::npos == index) { - size_t index = printer_name.find(" nozzle"); + size_t index = printer_name_lower.find(" nozzle"); if (std::string::npos == index) { return ""; } - std::string nozzle = printer_name.substr(0, index); + std::string nozzle = printer_name_lower.substr(0, index); size_t last_space_index = nozzle.find_last_of(" "); if (std::string::npos == index) { return ""; } return nozzle.substr(last_space_index + 1); } else { - std::string nozzle = printer_name.substr(0, index); + std::string nozzle = printer_name_lower.substr(0, index); size_t last_bracket_index = nozzle.find_last_of("("); if (std::string::npos == index) { return ""; From ac80575b28901a46468920cf1707213de4c86d22 Mon Sep 17 00:00:00 2001 From: xiaoyeliu <166936931+womendoushihaoyin@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:33:23 +0800 Subject: [PATCH 052/100] =?UTF-8?q?Fix=EF=BC=9Awrong=20extruder=20count=20?= =?UTF-8?q?by=20switching=20printers=20with=20tab=20(#7860)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.Fix: wrong extruder_counts by Switching between multi-extruder printers using tabs 2. unneccessary unsaved dialog --- src/slic3r/GUI/GUI_App.cpp | 3 ++- src/slic3r/GUI/Tab.cpp | 17 ++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 72eed3e7c1..2cbbd21683 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -5597,7 +5597,8 @@ bool GUI_App::check_and_save_current_preset_changes(const wxString& caption, con if (remember_choice) act_buttons |= ActionButtons::REMEMBER_CHOISE; UnsavedChangesDialog dlg(caption, header, "", act_buttons); - if (dlg.ShowModal() == wxID_CANCEL) + bool no_need_change = dlg.getUpdateItemCount() == 0 ? true : false; + if (!no_need_change && dlg.ShowModal() == wxID_CANCEL) return false; if (dlg.save_preset()) // save selected changes diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index b86e2b75e1..b71248a07c 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5114,17 +5114,13 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, apply_config_from_cache(); // Orca: update presets for the selected printer + load_current_preset(); + if (m_type == Preset::TYPE_PRINTER && wxGetApp().app_config->get_bool("remember_printer_config")) { m_preset_bundle->update_selections(*wxGetApp().app_config); - int extruders_count = m_preset_bundle->printers.get_edited_preset().config.opt("nozzle_diameter")->values.size(); - if (extruders_count > 1) { - // multi tool - wxGetApp().plater()->sidebar().on_filaments_change(extruders_count); - } else { - wxGetApp().plater()->sidebar().on_filaments_change(m_preset_bundle->filament_presets.size()); - } + wxGetApp().plater()->sidebar().on_filaments_change(m_preset_bundle->filament_presets.size()); } - load_current_preset(); + if (delete_third_printer) { wxGetApp().CallAfter([filament_presets, process_presets]() { @@ -6104,9 +6100,8 @@ void Page::update_visibility(ConfigOptionMode mode, bool update_contolls_visibil #ifdef __WXMSW__ if (!m_show) return; // BBS: fix field control position - auto groups = this->m_optgroups; - wxTheApp->CallAfter([groups]() { - for (auto group : groups) { + wxTheApp->CallAfter([this]() { + for (auto group : m_optgroups) { if (group->custom_ctrl) group->custom_ctrl->fixup_items_positions(); } }); From 7834f78c9021760803fef906daf60ebb162ac59e Mon Sep 17 00:00:00 2001 From: Diogo Santos <36373982+dfosantos@users.noreply.github.com> Date: Wed, 8 Jan 2025 03:35:08 +0000 Subject: [PATCH 053/100] Feature Ironing Inset added (#7969) --- src/libslic3r/Fill/Fill.cpp | 12 ++++++++++-- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 12 +++++++++++- src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/ConfigManipulation.cpp | 2 +- src/slic3r/GUI/GUI_Factories.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 1 + 7 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index e75698f80f..6b35acb47c 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -1109,6 +1109,7 @@ void Layer::make_ironing() double height; double speed; double angle; + double inset; bool operator<(const IroningParams &rhs) const { if (this->extruder < rhs.extruder) @@ -1135,12 +1136,16 @@ void Layer::make_ironing() return true; if (this->angle > rhs.angle) return false; + if (this->inset < rhs.inset) + return true; + if (this->inset > rhs.inset) + return false; return false; } bool operator==(const IroningParams &rhs) const { return this->extruder == rhs.extruder && this->just_infill == rhs.just_infill && - this->line_spacing == rhs.line_spacing && this->height == rhs.height && this->speed == rhs.speed && this->angle == rhs.angle && this->pattern == rhs.pattern; + this->line_spacing == rhs.line_spacing && this->height == rhs.height && this->speed == rhs.speed && this->angle == rhs.angle && this->pattern == rhs.pattern && this->inset == rhs.inset; } LayerRegion *layerm = nullptr; @@ -1184,6 +1189,7 @@ void Layer::make_ironing() //TODO just_infill is currently not used. ironing_params.just_infill = false; ironing_params.line_spacing = config.ironing_spacing; + ironing_params.inset = config.ironing_inset; ironing_params.height = default_layer_height * 0.01 * config.ironing_flow; ironing_params.speed = config.ironing_speed; ironing_params.angle = (config.ironing_angle >= 0 ? config.ironing_angle : config.infill_direction) * M_PI / 180.; @@ -1274,7 +1280,9 @@ void Layer::make_ironing() polys = union_safety_offset(polys); } // Trim the top surfaces with half the nozzle diameter. - ironing_areas = intersection_ex(polys, offset(this->lslices, - float(scale_(0.5 * nozzle_dmr)))); + // BBS: ironing inset + double ironing_areas_offset = ironing_params.inset == 0 ? float(scale_(0.5 * nozzle_dmr)) : scale_(ironing_params.inset); + ironing_areas = intersection_ex(polys, offset(this->lslices, - ironing_areas_offset)); } // Create the filler object. diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1ed6d07ad8..1906013cbd 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -767,7 +767,7 @@ static std::vector s_Preset_print_options { "seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", "infill_direction", "solid_infill_direction", "rotate_solid_infill_direction", "counterbore_hole_bridging", "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target", - "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", + "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "ironing_inset", "max_travel_detour_distance", "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index e922af9c5d..21048fbdb1 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3082,7 +3082,17 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0.1)); + def->set_default_value(new ConfigOptionFloat(0)); + + def = this->add("ironing_inset", coFloat); + def->label = L("Ironing inset"); + def->category = L("Quality"); + def->tooltip = L("The distance to keep from the edges. A value of 0 sets this to half of the nozzle diameter"); + def->sidetext = L("mm"); + def->min = 0; + def->max = 100; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0)); def = this->add("ironing_speed", coFloat); def->label = L("Ironing speed"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index e406e4f3c2..1f1650699a 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -931,6 +931,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionEnum, ironing_pattern)) ((ConfigOptionPercent, ironing_flow)) ((ConfigOptionFloat, ironing_spacing)) + ((ConfigOptionFloat, ironing_inset)) ((ConfigOptionFloat, ironing_direction)) ((ConfigOptionFloat, ironing_speed)) ((ConfigOptionFloat, ironing_angle)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 600cb30c0f..4bfcf18cf0 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -646,7 +646,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_field(el, have_support_material && !(support_is_normal_tree && !have_raft)); bool has_ironing = (config->opt_enum("ironing_type") != IroningType::NoIroning); - for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_speed", "ironing_angle" }) + for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_speed", "ironing_angle", "ironing_inset"}) toggle_line(el, has_ironing); bool have_sequential_printing = (config->opt_enum("print_sequence") == PrintSequence::ByObject); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index cb0748f2a5..8d1452a0fa 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -101,7 +101,7 @@ std::map> SettingsFactory::OBJECT_C std::map> SettingsFactory::PART_CATEGORY_SETTINGS= { - { L("Quality"), {{"ironing_type", "",8},{"ironing_flow", "",9},{"ironing_spacing", "",10},{"bridge_flow", "",11},{"make_overhang_printable", "",11},{"bridge_density", "", 1} + { L("Quality"), {{"ironing_type", "",8},{"ironing_flow", "",9},{"ironing_spacing", "",10},{"ironing_inset", "", 11},{"bridge_flow", "",11},{"make_overhang_printable", "",11},{"bridge_density", "", 1} }}, { L("Strength"), {{"wall_loops", "",1},{"top_shell_layers", L("Top Solid Layers"),1},{"top_shell_thickness", L("Top Minimum Shell Thickness"),1}, {"bottom_shell_layers", L("Bottom Solid Layers"),1}, {"bottom_shell_thickness", L("Bottom Minimum Shell Thickness"),1}, diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index b71248a07c..e851340b77 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2064,6 +2064,7 @@ void TabPrint::build() optgroup->append_single_option_line("ironing_speed"); optgroup->append_single_option_line("ironing_flow"); optgroup->append_single_option_line("ironing_spacing"); + optgroup->append_single_option_line("ironing_inset"); optgroup->append_single_option_line("ironing_angle"); optgroup = page->new_optgroup(L("Wall generator"), L"param_wall_generator"); From 2b95ef4e3b04fc65ffaea28f3a8a5b493859530e Mon Sep 17 00:00:00 2001 From: Marius Wachtler Date: Wed, 8 Jan 2025 12:06:39 +0700 Subject: [PATCH 054/100] Fix some errors uncovered via compiler warnings (#7954) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: tray_exist_bits != tray_exist_bits comparison * fix: title == GetTitle() == title comparison * fix: possibly dangling reference to a temporary ``` OrcaSlicer/src/libslic3r/calib.cpp:456:17: warning: possibly dangling reference to a temporary [-Wdangling-reference] 456 | const auto &w = bed_ext.size().x(); OrcaSlicer/src/libslic3r/calib.cpp:456:45: note: the temporary was destroyed at the end of the full expression ‘((Eigen::DenseCoeffsBase, 1>*)(& Slic3r::BoundingBoxBase::size() const [with PointClass = Eigen::Matrix]()))->Eigen::DenseCoeffsBase, 1>::x()’ 456 | const auto &w = bed_ext.size().x(); ``` * fix: mixup of | and || in this case I think it actually does not change the semantics it just means that both comparison have to be evaluated. * fix: multi-character character constants need " OrcaSlicer/src/slic3r/GUI/MediaPlayCtrl.cpp:392: warning: multi-character character constant [-Wmultichar] 392 | if (auto n = tunnel.find_first_of('/_'); n != std::string::npos) OrcaSlicer/src/slic3r/GUI/MediaPlayCtrl.cpp: In member function ‘void Slic3r::GUI::MediaPlayCtrl::Stop(const wxString&)’: OrcaSlicer/src/slic3r/GUI/MediaPlayCtrl.cpp:392: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘12127’ to ‘95’ [-Woverflow] * fix: missing paranthesis - skips null check * NFC: Remove this check it can never be false * NFC: fix warning: statement has no effect --- src/libslic3r/Support/TreeSupport.cpp | 4 ++-- src/libslic3r/calib.cpp | 4 ++-- src/slic3r/GUI/DeviceManager.cpp | 4 ++-- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 4 ++-- src/slic3r/GUI/Jobs/PrintJob.cpp | 10 ++++------ src/slic3r/GUI/Jobs/SendJob.cpp | 10 ++++------ src/slic3r/GUI/MainFrame.cpp | 1 - src/slic3r/GUI/MediaPlayCtrl.cpp | 2 +- src/slic3r/GUI/ReleaseNote.cpp | 2 +- src/slic3r/GUI/SendMultiMachinePage.cpp | 10 ++++------ src/slic3r/GUI/Tab.cpp | 2 +- src/slic3r/Utils/UndoRedo.cpp | 6 +++--- 12 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index a0440bfcaf..df81041213 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -2380,7 +2380,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no ExPolygons& base_areas = ts_layer->base_areas; int layer_nr_lower = layer_nr - 1; - for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { + for (; layer_nr_lower >= 0; layer_nr_lower--) { if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } if (layer_nr_lower <= 0) continue; @@ -2470,7 +2470,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no if (ts_layer->area_groups.empty()) continue; int layer_nr_lower = layer_nr - 1; - for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { + for (; layer_nr_lower >= 0; layer_nr_lower--) { if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } if (layer_nr_lower < 0) continue; diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index 39a36990ec..fb986cb8da 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -453,8 +453,8 @@ std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, dou } auto bed_sizes = mp_gcodegen->config().printable_area.values; - const auto &w = bed_ext.size().x(); - const auto &h = bed_ext.size().y(); + const auto w = bed_ext.size().x(); + const auto h = bed_ext.size().y(); count = std::min(count, int((h - 10) / m_space_y)); m_length_long = 40 + std::min(w - 120.0, 0.0); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b085bfb3c7..1ce29c28a3 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3873,10 +3873,10 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) } } if (ams_exist_bits != last_ams_exist_bits - || last_tray_exist_bits != last_tray_exist_bits + || tray_exist_bits != last_tray_exist_bits || tray_is_bbl_bits != last_is_bbl_bits || tray_read_done_bits != last_read_done_bits - || last_ams_version != ams_version) { + || ams_version != last_ams_version) { is_ams_need_update = true; } else { diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index e379ea2f90..2b55fb6a6a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -915,7 +915,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) } else if (m_current == FdmSupports) { GLGizmoFdmSupports* fdm_support = dynamic_cast(get_current()); - if (fdm_support != nullptr && keyCode == 'F' || keyCode == 'S' || keyCode == 'C' || keyCode == 'G') { + if (fdm_support != nullptr && (keyCode == 'F' || keyCode == 'S' || keyCode == 'C' || keyCode == 'G')) { processed = fdm_support->on_key_down_select_tool_type(keyCode); } if (processed) { @@ -925,7 +925,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) } else if (m_current == Seam) { GLGizmoSeam* seam = dynamic_cast(get_current()); - if (seam != nullptr && keyCode == 'S' || keyCode == 'C') { + if (seam != nullptr && (keyCode == 'S' || keyCode == 'C')) { processed = seam->on_key_down_select_tool_type(keyCode); } if (processed) { diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index fe4174b6ba..bb21337e6b 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -47,12 +47,10 @@ void PrintJob::prepare() { if (job_data.is_from_plater) m_plater->get_print_job_data(&job_data); - if (&job_data) { - std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; - auto check_access_code_path = temp_file.c_str(); - BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; - job_data._temp_path = fs::path(check_access_code_path); - } + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); } void PrintJob::on_success(std::function success) diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 36b5bd5b3c..4047a84ac6 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -38,12 +38,10 @@ SendJob::SendJob(std::string dev_id) void SendJob::prepare() { m_plater->get_print_job_data(&job_data); - if (&job_data) { - std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; - auto check_access_code_path = temp_file.c_str(); - BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; - job_data._temp_path = fs::path(check_access_code_path); - } + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); } wxString SendJob::get_http_error_msg(unsigned int status, std::string body) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 26a96ec9b4..123939efb0 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -916,7 +916,6 @@ void MainFrame::update_title_colour_after_set_title() void MainFrame::show_option(bool show) { - if (!this) { return; } if (!show) { if (m_slice_btn->IsShown()) { m_slice_btn->Hide(); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 202f095ceb..208182b9a1 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -389,7 +389,7 @@ void MediaPlayCtrl::Stop(wxString const &msg) } auto tunnel = m_url.empty() ? "" : into_u8(wxURI(m_url).GetPath()).substr(1); - if (auto n = tunnel.find_first_of('/_'); n != std::string::npos) + if (auto n = tunnel.find_first_of("/_"); n != std::string::npos) tunnel = tunnel.substr(0, n); if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 && m_last_failed_codes.find(m_failed_code) == m_last_failed_codes.end() diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 331711a823..a2a805a39f 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -786,7 +786,7 @@ void SecondaryCheckDialog::on_hide() void SecondaryCheckDialog::update_title_style(wxString title, SecondaryCheckDialog::ButtonStyle style, wxWindow* parent) { - if (m_button_style == style && title == GetTitle() == title) return; + if (m_button_style == style && title == GetTitle()) return; SetTitle(title); diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index bf766d78d0..c041306122 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -473,12 +473,10 @@ BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) PrintPrepareData job_data; m_plater->get_print_job_data(&job_data); - if (&job_data) { - std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; - auto check_access_code_path = temp_file.c_str(); - BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; - job_data._temp_path = fs::path(check_access_code_path); - } + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); int curr_plate_idx; if (job_data.plate_idx >= 0) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index e851340b77..ee1d01e51e 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -881,7 +881,7 @@ void TabPrinter::init_options_list() for (const std::string& opt_key : m_config->keys()) { - if (opt_key == "printable_area" || opt_key == "bed_exclude_area" | opt_key == "thumbnails") { + if (opt_key == "printable_area" || opt_key == "bed_exclude_area" || opt_key == "thumbnails") { m_options_list.emplace(opt_key, m_opt_status_value); continue; } diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index eaf90c7349..8e7bd703c3 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -1071,7 +1071,7 @@ bool StackImpl::has_redo_snapshot() const // BBS: undo-redo until modify record auto it = std::lower_bound(m_snapshots.begin(), m_snapshots.end(), Snapshot(m_active_snapshot_time)); - for (it; it != m_snapshots.end(); ++it) { + for (; it != m_snapshots.end(); ++it) { if (snapshot_modifies_project(*it)) return true; } @@ -1340,12 +1340,12 @@ bool StackImpl::has_real_change_from(size_t time) const Snapshot(m_active_snapshot_time)); if (it_active == m_snapshots.end()) return true; if (it_active > it_time) { - for (it_time; it_time < it_active; ++it_time) { + for (; it_time < it_active; ++it_time) { if (snapshot_modifies_project(*it_time)) return true; } } else { - for (it_active; it_active < it_time; ++it_active) { + for (; it_active < it_time; ++it_active) { if (snapshot_modifies_project(*it_active)) return true; } From 7f391bc1af8ebf947e59c3d7e66376f410faa49c Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Wed, 8 Jan 2025 07:37:13 +0100 Subject: [PATCH 055/100] Update OrcaSlicer.pot (#7949) * Update OrcaSlicer.pot Made sentence a bit clearer. * Update PrintConfig.cpp Made sentence a bit clearer. * Update OrcaSlicer.pot corrected previous expression * Update PrintConfig.cpp corrected previous expression --- localization/i18n/OrcaSlicer.pot | 6 +++--- src/libslic3r/PrintConfig.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 63f60d7743..be45f8d755 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -11199,9 +11199,9 @@ msgid "Min print speed" msgstr "" msgid "" -"The minimum printing speed that the printer will slow down to to attempt to " -"maintain the minimum layer time above, when slow down for better layer " -"cooling is enabled." +"The minimum print speed to which the printer slows down " +"to maintain the minimum layer time defined above " +"when the slowdown for better layer cooling is enabled." msgstr "" msgid "Diameter of nozzle" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 21048fbdb1..b420c5ae89 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3405,8 +3405,8 @@ void PrintConfigDef::init_fff_params() def = this->add("slow_down_min_speed", coFloats); def->label = L("Min print speed"); - def->tooltip = L("The minimum printing speed that the printer will slow down to to attempt to maintain the minimum layer time " - "above, when slow down for better layer cooling is enabled."); + def->tooltip = L("The minimum print speed to which the printer slows down to maintain the minimum layer time defined above " + "when the slowdown for better layer cooling is enabled."); def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; From e3155861258205f93048bb9c10c3fae511bd6b15 Mon Sep 17 00:00:00 2001 From: Dima Buzdyk <46728448+buzzhuzz@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:38:25 +0600 Subject: [PATCH 056/100] do not set project filename on object import (#7973) --- src/slic3r/GUI/Plater.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e12f0c321c..eb017db695 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9387,7 +9387,8 @@ void Plater::add_model(bool imperial_units, std::string fname) if (!load_files(paths, strategy, ask_multi).empty()) { if (get_project_name() == _L("Untitled") && paths.size() > 0) { - p->set_project_filename(wxString::FromUTF8(paths[0].string())); + boost::filesystem::path full_path(paths[0].string()); + p->set_project_name(from_u8(full_path.stem().string())); } wxGetApp().mainframe->update_title(); @@ -10997,8 +10998,8 @@ void Plater::add_file() Plater::TakeSnapshot snapshot(this, snapshot_label); if (!load_files(paths, LoadStrategy::LoadModel, false).empty()) { if (get_project_name() == _L("Untitled") && paths.size() > 0) { - p->set_project_filename(wxString::FromUTF8(paths[0].string())); - + boost::filesystem::path full_path(paths[0].string()); + p->set_project_name(from_u8(full_path.stem().string())); } wxGetApp().mainframe->update_title(); } @@ -11018,7 +11019,8 @@ void Plater::add_file() Plater::TakeSnapshot snapshot(this, snapshot_label); if (!load_files(paths, LoadStrategy::LoadModel, true).empty()) { if (get_project_name() == _L("Untitled") && paths.size() > 0) { - p->set_project_filename(wxString::FromUTF8(paths[0].string())); + boost::filesystem::path full_path(paths[0].string()); + p->set_project_name(from_u8(full_path.stem().string())); } wxGetApp().mainframe->update_title(); } From 51b5305ca408768f53aed3559bc567770fd0545a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 12 Jan 2025 22:21:00 +0800 Subject: [PATCH 057/100] Support Clang --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b1b293ced..ac1af19e33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -293,7 +293,7 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP add_compile_options(-Wno-deprecated-declarations) endif() - if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) + if((${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang") AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) add_compile_options(-Wno-error=enum-constexpr-conversion) endif() From bc03b95a7879a1e011e59dd1ac2b2dd767986a8f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 12 Jan 2025 22:27:20 +0800 Subject: [PATCH 058/100] fix missing "compatible_printers" error in RatRig BigNozzle TPU.json --- .../Ratrig/filament/RatRig BigNozzle TPU.json | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json index 21dbd9141e..e4447ec439 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json @@ -29,5 +29,32 @@ ], "nozzle_temperature_range_low": [ "220" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } From cd4a1e01ae57ad3918f65f8dfca92ba83c19a5b9 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 12 Jan 2025 15:33:31 +0100 Subject: [PATCH 059/100] Add Anycubic Kobra S1 profile (#7987) * Prettified generic filament files * Added Anycubic Kobra S1 * Enabled precise outer walls --- resources/profiles/Anycubic.json | 44 +++ .../Anycubic Kobra S1_buildplate_model.stl | Bin 0 -> 400484 bytes .../Anycubic Kobra S1_buildplate_texture.svg | 35 +++ .../Anycubic/Anycubic Kobra S1_cover.png | Bin 0 -> 10422 bytes ...bic ABS @Anycubic Kobra S1 0.4 nozzle.json | 252 +++++++++++++++ ...bic ASA @Anycubic Kobra S1 0.4 nozzle.json | 255 +++++++++++++++ ...ic PETG @Anycubic Kobra S1 0.4 nozzle.json | 255 +++++++++++++++ ...bic PLA @Anycubic Kobra S1 0.4 nozzle.json | 258 ++++++++++++++++ ...h Speed @Anycubic Kobra S1 0.4 nozzle.json | 255 +++++++++++++++ ...LA Silk @Anycubic Kobra S1 0.4 nozzle.json | 256 +++++++++++++++ ...ic PLA+ @Anycubic Kobra S1 0.4 nozzle.json | 255 +++++++++++++++ ...bic TPU @Anycubic Kobra S1 0.4 nozzle.json | 255 +++++++++++++++ .../Anycubic/filament/fdm_filament_abs.json | 20 +- .../Anycubic/filament/fdm_filament_asa.json | 20 +- .../filament/fdm_filament_common.json | 14 +- .../Anycubic/filament/fdm_filament_pa.json | 20 +- .../Anycubic/filament/fdm_filament_pc.json | 20 +- .../Anycubic/filament/fdm_filament_pet.json | 20 +- .../Anycubic/filament/fdm_filament_pla.json | 20 +- .../Anycubic/filament/fdm_filament_pva.json | 20 +- .../Anycubic/filament/fdm_filament_tpu.json | 20 +- .../machine/Anycubic Kobra S1 0.4 nozzle.json | 233 ++++++++++++++ .../Anycubic/machine/Anycubic Kobra S1.json | 12 + ...tandard @Anycubic Kobra S1 0.4 nozzle.json | 292 ++++++++++++++++++ 24 files changed, 2744 insertions(+), 87 deletions(-) create mode 100644 resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_model.stl create mode 100644 resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_texture.svg create mode 100644 resources/profiles/Anycubic/Anycubic Kobra S1_cover.png create mode 100644 resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json create mode 100644 resources/profiles/Anycubic/machine/Anycubic Kobra S1.json create mode 100644 resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index a9f897aef5..ba7e86fed5 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -59,6 +59,10 @@ { "name": "Anycubic Kobra 3", "sub_path": "machine/Anycubic Kobra 3.json" + }, + { + "name": "Anycubic Kobra S1", + "sub_path": "machine/Anycubic Kobra S1.json" } ], "process_list": [ @@ -225,6 +229,10 @@ { "name": "0.40mm Standard @Anycubic Kobra 3 0.8 nozzle", "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json" } ], "filament_list": [ @@ -375,6 +383,38 @@ { "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json" } ], "machine_list": [ @@ -449,6 +489,10 @@ { "name": "Anycubic Kobra 3 0.8 nozzle", "sub_path": "machine/Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra S1 0.4 nozzle.json" } ] } diff --git a/resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_model.stl b/resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_model.stl new file mode 100644 index 0000000000000000000000000000000000000000..79d6e08316d4fb6c83ad93aac1d3f5dc516cb963 GIT binary patch literal 400484 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 T-Xc-#e8;nPK2!gHxP_Pk literal 0 HcmV?d00001 diff --git a/resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_texture.svg b/resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_texture.svg new file mode 100644 index 0000000000..d5a4c3d2aa --- /dev/null +++ b/resources/profiles/Anycubic/Anycubic Kobra S1_buildplate_texture.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Anycubic/Anycubic Kobra S1_cover.png b/resources/profiles/Anycubic/Anycubic Kobra S1_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..c84e2cb4cf79e9f4c6742a792fd4fc3e2dd00c86 GIT binary patch literal 10422 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 Date: Mon, 13 Jan 2025 04:49:46 -0800 Subject: [PATCH 060/100] enabled dependency setting for filament and process (#6235) * enabled dependency setting for filament and process * Add information about inheritance back to Dependencies tab * Merge pull request #1 from michmela44/Add_inherits_to_dependencies Add information about inheritance back to Dependencies tab * Merge branch 'main' into feature/enable_profile_dependencies --- src/slic3r/GUI/Tab.cpp | 270 +++++++++++++++++++++-------------------- 1 file changed, 137 insertions(+), 133 deletions(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index ee1d01e51e..27a85e0276 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1064,26 +1064,24 @@ void Tab::on_roll_back_value(const bool to_sys /*= true*/) load_key_value("printable_area", true/*some value*/, true); } } - //if (group->title == "Profile dependencies") { - // // "compatible_printers" option doesn't exists in Printer Settimgs Tab - // if (m_type != Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { - // to_sys ? group->back_to_sys_value("compatible_printers") : group->back_to_initial_value("compatible_printers"); - // load_key_value("compatible_printers", true/*some value*/, true); + if (group->title == "Profile dependencies") { + if (m_type != Preset::TYPE_PRINTER && (m_options_list["compatible_printers"] & os) == 0) { + to_sys ? group->back_to_sys_value("compatible_printers") : group->back_to_initial_value("compatible_printers"); + load_key_value("compatible_printers", true/*some value*/, true); - // bool is_empty = m_config->option("compatible_printers")->values.empty(); - // m_compatible_printers.checkbox->SetValue(is_empty); - // is_empty ? m_compatible_printers.btn->Disable() : m_compatible_printers.btn->Enable(); - // } - // // "compatible_prints" option exists only in Filament Settimgs and Materials Tabs - // if ((m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) && (m_options_list["compatible_prints"] & os) == 0) { - // to_sys ? group->back_to_sys_value("compatible_prints") : group->back_to_initial_value("compatible_prints"); - // load_key_value("compatible_prints", true/*some value*/, true); + bool is_empty = m_config->option("compatible_printers")->values.empty(); + m_compatible_printers.checkbox->SetValue(is_empty); + is_empty ? m_compatible_printers.btn->Disable() : m_compatible_printers.btn->Enable(); + } + if ((m_type == Preset::TYPE_FILAMENT || m_type == Preset::TYPE_SLA_MATERIAL) && (m_options_list["compatible_prints"] & os) == 0) { + to_sys ? group->back_to_sys_value("compatible_prints") : group->back_to_initial_value("compatible_prints"); + load_key_value("compatible_prints", true/*some value*/, true); - // bool is_empty = m_config->option("compatible_prints")->values.empty(); - // m_compatible_prints.checkbox->SetValue(is_empty); - // is_empty ? m_compatible_prints.btn->Disable() : m_compatible_prints.btn->Enable(); - // } - //} + bool is_empty = m_config->option("compatible_prints")->values.empty(); + m_compatible_prints.checkbox->SetValue(is_empty); + is_empty ? m_compatible_prints.btn->Disable() : m_compatible_prints.btn->Enable(); + } + } for (const auto &kvp : group->opt_map()) { const std::string& opt_key = kvp.first; if ((m_options_list[opt_key] & os) == 0) @@ -1380,6 +1378,11 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) return; } + if (opt_key == "compatible_prints") + this->compatible_widget_reload(m_compatible_prints); + if (opt_key == "compatible_printers") + this->compatible_widget_reload(m_compatible_printers); + const bool is_fff = supports_printer_technology(ptFFF); ConfigOptionsGroup* og_freq_chng_params = wxGetApp().sidebar().og_freq_chng_params(is_fff); //BBS: GUI refactor @@ -1855,7 +1858,7 @@ void Tab::build_preset_description_line(ConfigOptionsGroup* optgroup) }; auto detach_preset_btn = [this](wxWindow* parent) { - m_detach_preset_btn = new ScalableButton(parent, wxID_ANY, "lock_normal_sys", "", + m_detach_preset_btn = new ScalableButton(parent, wxID_ANY, "lock_normal", "", wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); ScalableButton* btn = m_detach_preset_btn; btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); @@ -1863,25 +1866,25 @@ void Tab::build_preset_description_line(ConfigOptionsGroup* optgroup) auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn); - //btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent&) - //{ - // bool system = m_presets->get_edited_preset().is_system; - // bool dirty = m_presets->get_edited_preset().is_dirty; - // wxString msg_text = system ? - // _(L("A copy of the current system preset will be created, which will be detached from the system preset.")) : - // _(L("The current custom preset will be detached from the parent system preset.")); - // if (dirty) { - // msg_text += "\n\n"; - // msg_text += _(L("Modifications to the current profile will be saved.")); - // } - // msg_text += "\n\n"; - // msg_text += _(L("This action is not revertible.\nDo you want to proceed?")); + btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent&) + { + bool system = m_presets->get_edited_preset().is_system; + bool dirty = m_presets->get_edited_preset().is_dirty; + wxString msg_text = system ? + _(L("A copy of the current system preset will be created, which will be detached from the system preset.")) : + _(L("The current custom preset will be detached from the parent system preset.")); + if (dirty) { + msg_text += "\n\n"; + msg_text += _(L("Modifications to the current profile will be saved.")); + } + msg_text += "\n\n"; + msg_text += _(L("This action is not revertible.\nDo you want to proceed?")); - // //wxMessageDialog dialog(parent, msg_text, _(L("Detach preset")), wxICON_WARNING | wxYES_NO | wxCANCEL); - // MessageDialog dialog(parent, msg_text, _(L("Detach preset")), wxICON_WARNING | wxYES_NO | wxCANCEL); - // if (dialog.ShowModal() == wxID_YES) - // save_preset(m_presets->get_edited_preset().is_system ? std::string() : m_presets->get_edited_preset().name, true); - //}); + //wxMessageDialog dialog(parent, msg_text, _(L("Detach preset")), wxICON_WARNING | wxYES_NO | wxCANCEL); + MessageDialog dialog(parent, msg_text, _(L("Detach preset")), wxICON_WARNING | wxYES_NO | wxCANCEL); + if (dialog.ShowModal() == wxID_YES) + save_preset(m_presets->get_edited_preset().is_system ? std::string() : m_presets->get_edited_preset().name, true); + }); btn->Hide(); @@ -1903,72 +1906,72 @@ void Tab::update_preset_description_line() wxString description_line; - //if (preset.is_default) { - // description_line = _(L("This is a default preset.")); - //} else if (preset.is_system) { - // description_line = _(L("This is a system preset.")); - //} else if (parent == nullptr) { - // description_line = _(L("Current preset is inherited from the default preset.")); - //} else { - // std::string name = parent->name; - // boost::replace_all(name, "&", "&&"); - // description_line = _(L("Current preset is inherited from")) + ":\n\t" + from_u8(name); - //} + if (preset.is_default) { + description_line = _(L("This is a default preset.")); + } else if (preset.is_system) { + description_line = _(L("This is a system preset.")); + } else if (parent == nullptr) { + description_line = _(L("Current preset is inherited from the default preset.")); + } else { + std::string name = parent->name; + boost::replace_all(name, "&", "&&"); + description_line = _(L("Current preset is inherited from")) + ":\n\t" + from_u8(name); + } - //if (preset.is_default || preset.is_system) - // description_line += "\n\t" + _(L("It can't be deleted or modified.")) + - // "\n\t" + _(L("Any modifications should be saved as a new preset inherited from this one.")) + - // "\n\t" + _(L("To do that please specify a new name for the preset.")); + if (preset.is_default || preset.is_system) + description_line += "\n\t" + _(L("It can't be deleted or modified.")) + + "\n\t" + _(L("Any modifications should be saved as a new preset inherited from this one.")) + + "\n\t" + _(L("To do that please specify a new name for the preset.")); - //if (parent && parent->vendor) - //{ - // description_line += "\n\n" + _(L("Additional information:")) + "\n"; - // description_line += "\t" + _(L("vendor")) + ": " + (m_type == Slic3r::Preset::TYPE_PRINTER ? "\n\t\t" : "") + parent->vendor->name + - // ", ver: " + parent->vendor->config_version.to_string(); - // if (m_type == Slic3r::Preset::TYPE_PRINTER) { - // const std::string &printer_model = preset.config.opt_string("printer_model"); - // if (! printer_model.empty()) - // description_line += "\n\n\t" + _(L("printer model")) + ": \n\t\t" + printer_model; - // switch (preset.printer_technology()) { - // case ptFFF: - // { - // //FIXME add prefered_sla_material_profile for SLA - // const std::string &default_print_profile = preset.config.opt_string("default_print_profile"); - // const std::vector &default_filament_profiles = preset.config.option("default_filament_profile")->values; - // if (!default_print_profile.empty()) - // description_line += "\n\n\t" + _(L("default print profile")) + ": \n\t\t" + default_print_profile; - // if (!default_filament_profiles.empty()) - // { - // description_line += "\n\n\t" + _(L("default filament profile")) + ": \n\t\t"; - // for (auto& profile : default_filament_profiles) { - // if (&profile != &*default_filament_profiles.begin()) - // description_line += ", "; - // description_line += profile; - // } - // } - // break; - // } - // case ptSLA: - // { - // //FIXME add prefered_sla_material_profile for SLA - // const std::string &default_sla_material_profile = preset.config.opt_string("default_sla_material_profile"); - // if (!default_sla_material_profile.empty()) - // description_line += "\n\n\t" + _(L("default SLA material profile")) + ": \n\t\t" + default_sla_material_profile; + if (parent && parent->vendor) + { + description_line += "\n\n" + _(L("Additional information:")) + "\n"; + description_line += "\t" + _(L("vendor")) + ": " + (m_type == Slic3r::Preset::TYPE_PRINTER ? "\n\t\t" : "") + parent->vendor->name + + ", ver: " + parent->vendor->config_version.to_string(); + if (m_type == Slic3r::Preset::TYPE_PRINTER) { + const std::string &printer_model = preset.config.opt_string("printer_model"); + if (! printer_model.empty()) + description_line += "\n\n\t" + _(L("printer model")) + ": \n\t\t" + printer_model; + switch (preset.printer_technology()) { + case ptFFF: + { + //FIXME add prefered_sla_material_profile for SLA + const std::string &default_print_profile = preset.config.opt_string("default_print_profile"); + const std::vector &default_filament_profiles = preset.config.option("default_filament_profile")->values; + if (!default_print_profile.empty()) + description_line += "\n\n\t" + _(L("default print profile")) + ": \n\t\t" + default_print_profile; + if (!default_filament_profiles.empty()) + { + description_line += "\n\n\t" + _(L("default filament profile")) + ": \n\t\t"; + for (auto& profile : default_filament_profiles) { + if (&profile != &*default_filament_profiles.begin()) + description_line += ", "; + description_line += profile; + } + } + break; + } + case ptSLA: + { + //FIXME add prefered_sla_material_profile for SLA + const std::string &default_sla_material_profile = preset.config.opt_string("default_sla_material_profile"); + if (!default_sla_material_profile.empty()) + description_line += "\n\n\t" + _(L("default SLA material profile")) + ": \n\t\t" + default_sla_material_profile; - // const std::string &default_sla_print_profile = preset.config.opt_string("default_sla_print_profile"); - // if (!default_sla_print_profile.empty()) - // description_line += "\n\n\t" + _(L("default SLA print profile")) + ": \n\t\t" + default_sla_print_profile; - // break; - // } - // default: break; - // } - // } - // else if (!preset.alias.empty()) - // { - // description_line += "\n\n\t" + _(L("full profile name")) + ": \n\t\t" + preset.name; - // description_line += "\n\t" + _(L("symbolic profile name")) + ": \n\t\t" + preset.alias; - // } - //} + const std::string &default_sla_print_profile = preset.config.opt_string("default_sla_print_profile"); + if (!default_sla_print_profile.empty()) + description_line += "\n\n\t" + _(L("default SLA print profile")) + ": \n\t\t" + default_sla_print_profile; + break; + } + default: break; + } + } + else if (!preset.alias.empty()) + { + description_line += "\n\n\t" + _(L("full profile name")) + ": \n\t\t" + preset.name; + description_line += "\n\t" + _(L("symbolic profile name")) + ": \n\t\t" + preset.alias; + } + } m_parent_preset_description_line->SetText(description_line, false); @@ -2377,20 +2380,20 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v option.opt.full_width = true; option.opt.height = 25;//250; optgroup->append_single_option_line(option); - -#if 0 - //page = add_options_page(L("Dependencies"), "advanced.png"); - // optgroup = page->new_optgroup(L("Profile dependencies")); - // create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { - // return compatible_widget_create(parent, m_compatible_printers); - // }); - // - // option = optgroup->get_option("compatible_printers_condition"); - // option.opt.full_width = true; - // optgroup->append_single_option_line(option); +#if 1 + page = add_options_page(L("Dependencies"), "custom-gcode_advanced"); + optgroup = page->new_optgroup(L("Profile dependencies")); - // build_preset_description_line(optgroup.get()); + create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { + return compatible_widget_create(parent, m_compatible_printers); + }); + + option = optgroup->get_option("compatible_printers_condition"); + option.opt.full_width = true; + optgroup->append_single_option_line(option); + + build_preset_description_line(optgroup.get()); #endif } @@ -2482,8 +2485,8 @@ void TabPrint::update() m_update_cnt--; if (m_update_cnt==0) { - toggle_options(); - + if (m_active_page && !(m_active_page->title() == "Dependencies")) + toggle_options(); // update() could be called during undo/redo execution // Update of objectList can cause a crash in this case (because m_objects doesn't match ObjectList) if (m_type != Preset::TYPE_MODEL && !wxGetApp().plater()->inside_snapshot_capture()) @@ -3531,26 +3534,26 @@ void TabFilament::build() option.opt.full_width = true; option.opt.height = notes_field_height;// 250; optgroup->append_single_option_line(option); -#if 0 - //page = add_options_page(L("Dependencies"), "advanced"); - // optgroup = page->new_optgroup(L("Profile dependencies")); - // create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { - // return compatible_widget_create(parent, m_compatible_printers); - // }); +#if 1 + page = add_options_page(L("Dependencies"), "advanced"); + optgroup = page->new_optgroup(L("Profile dependencies")); + create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { + return compatible_widget_create(parent, m_compatible_printers); + }); - // option = optgroup->get_option("compatible_printers_condition"); - // option.opt.full_width = true; - // optgroup->append_single_option_line(option); + option = optgroup->get_option("compatible_printers_condition"); + option.opt.full_width = true; + optgroup->append_single_option_line(option); - // create_line_with_widget(optgroup.get(), "compatible_prints", "", [this](wxWindow* parent) { - // return compatible_widget_create(parent, m_compatible_prints); - // }); + create_line_with_widget(optgroup.get(), "compatible_prints", "", [this](wxWindow* parent) { + return compatible_widget_create(parent, m_compatible_prints); + }); - // option = optgroup->get_option("compatible_prints_condition"); - // option.opt.full_width = true; - // optgroup->append_single_option_line(option); + option = optgroup->get_option("compatible_prints_condition"); + option.opt.full_width = true; + optgroup->append_single_option_line(option); - // build_preset_description_line(optgroup.get()); + //build_preset_description_line(optgroup.get()); #endif } @@ -5297,7 +5300,8 @@ void Tab::activate_selected_page(std::function throw_if_canceled) m_active_page->activate(m_mode, throw_if_canceled); update_changed_ui(); update_description_lines(); - toggle_options(); + if (m_active_page && !(m_active_page->title() == "Dependencies")) + toggle_options(); m_active_page->update_visibility(m_mode, true); // for taggle line } @@ -6270,8 +6274,8 @@ const ConfigOptionsGroupShp Page::get_optgroup(const wxString& title) const void TabSLAMaterial::build() { - //m_presets = &m_preset_bundle->sla_materials; - //load_initial_data(); + m_presets = &m_preset_bundle->sla_materials; + load_initial_data(); //auto page = add_options_page(L("Material"), ""); From 70579f9159514f71fa7cb85af2deeea13cb757da Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 15 Jan 2025 20:06:14 +0800 Subject: [PATCH 061/100] Fix "Too small ironing spacing" error in default config (#8053) --- src/libslic3r/PrintConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b420c5ae89..278cda17c6 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3082,7 +3082,7 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0)); + def->set_default_value(new ConfigOptionFloat(0.1)); def = this->add("ironing_inset", coFloat); def->label = L("Ironing inset"); From 2ea2ab08de921cce8dd8400a647f6772a7121a7f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 16 Jan 2025 00:17:38 +0800 Subject: [PATCH 062/100] Fix flatpak build (#8056) --- .github/workflows/build_all.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 6aa50095c0..0de48024fe 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -78,7 +78,7 @@ jobs: steps: - name: "Remove unneeded stuff to free disk space" run: - sudo rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" + rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" - uses: actions/checkout@v4 - name: Get the version and date run: | From 330ac879c1aee8b8c99e1d5e974326cd82ca1d79 Mon Sep 17 00:00:00 2001 From: Dima Buzdyk <46728448+buzzhuzz@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:34:03 +0600 Subject: [PATCH 063/100] gcode: keep line endins in post processing (#8092) Some portions of GCode (like BTT_TFT thumbnails) has to be CRLF in order to work correctly. However, gcode post processor was ignoring input line endings style emitting '\n' (LF) into post-processed output. --- src/libslic3r/GCode/GCodeProcessor.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index f1bae32ebc..6ba31ceea1 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -5018,9 +5018,18 @@ void GCodeProcessor::run_post_process() // End of line is indicated also if end of file was reached. eol |= eof && it_end == it_bufend; gcode_line.insert(gcode_line.end(), it, it_end); + + it = it_end; + // append EOL. + if (it != it_bufend && *it == '\r') { + gcode_line += *it++; + } + if (it != it_bufend && *it == '\n') { + gcode_line += *it++; + } + if (eol) { ++line_id; - gcode_line += "\n"; const unsigned int internal_g1_lines_counter = export_lines.update(gcode_line, line_id, g1_lines_counter); // replace placeholder lines bool processed = process_placeholders(gcode_line); @@ -5057,12 +5066,6 @@ void GCodeProcessor::run_post_process() export_lines.write(out, 1.1f * max_backtrace_time, m_result, out_path); gcode_line.clear(); } - // Skip EOL. - it = it_end; - if (it != it_bufend && *it == '\r') - ++it; - if (it != it_bufend && *it == '\n') - ++it; } if (eof) break; From 1bd197df3ad2996940d16dd0dd011706ab6e733e Mon Sep 17 00:00:00 2001 From: liberodark Date: Mon, 20 Jan 2025 13:42:51 +0100 Subject: [PATCH 064/100] Anker Fix Name (#8029) --- .../Anker/process/0.20mm Optimal 0.6 nozzle @Anker.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/Anker/process/0.20mm Optimal 0.6 nozzle @Anker.json b/resources/profiles/Anker/process/0.20mm Optimal 0.6 nozzle @Anker.json index aa40a4da6c..6cd5d373fd 100644 --- a/resources/profiles/Anker/process/0.20mm Optimal 0.6 nozzle @Anker.json +++ b/resources/profiles/Anker/process/0.20mm Optimal 0.6 nozzle @Anker.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP017", - "name": "0.20mm Optimal 0.6 nozzle @Anker.json", + "name": "0.20mm Optimal 0.6 nozzle @Anker", "from": "system", "inherits": "fdm_process_anker_common_0_6", "instantiation": "true", From 5ec8f51bd490c9700ae835ead4b57b91a18e8add Mon Sep 17 00:00:00 2001 From: Heiko Liebscher Date: Mon, 20 Jan 2025 13:44:30 +0100 Subject: [PATCH 065/100] fix little typo Customize (#8069) Customize --- src/libslic3r/PrintConfig.cpp | 2 +- src/libslic3r/PrintConfig.hpp | 2 +- src/slic3r/GUI/Tab.cpp | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 278cda17c6..726a4c3179 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -362,7 +362,7 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BedType) // BBS static const t_config_enum_values s_keys_map_LayerSeq = { { "Auto", flsAuto }, - { "Customize", flsCutomize }, + { "Customize", flsCustomize }, }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(LayerSeq) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 1f1650699a..0d68906cb3 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -266,7 +266,7 @@ enum BedType { // BBS enum LayerSeq { flsAuto, - flsCutomize + flsCustomize }; // BBS diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 27a85e0276..6ef7e30b34 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2638,14 +2638,14 @@ void TabPrintModel::update_model_config() } else { replace(m_all_keys.begin(), m_all_keys.end(), std::string("first_layer_print_sequence"), std::string("first_layer_sequence_choice")); - m_config->set_key_value("first_layer_sequence_choice", new ConfigOptionEnum(flsCutomize)); + m_config->set_key_value("first_layer_sequence_choice", new ConfigOptionEnum(flsCustomize)); } if (!plate_config.has("other_layers_print_sequence")) { m_config->set_key_value("other_layers_sequence_choice", new ConfigOptionEnum(flsAuto)); } else { replace(m_all_keys.begin(), m_all_keys.end(), std::string("other_layers_print_sequence"), std::string("other_layers_sequence_choice")); - m_config->set_key_value("other_layers_sequence_choice", new ConfigOptionEnum(flsCutomize)); + m_config->set_key_value("other_layers_sequence_choice", new ConfigOptionEnum(flsCustomize)); } notify_changed(plate_item.first); } @@ -2885,7 +2885,7 @@ void TabPrintPlate::on_value_change(const std::string& opt_key, const boost::any if (first_layer_seq_choice == LayerSeq::flsAuto) { plate->set_first_layer_print_sequence({}); } - else if (first_layer_seq_choice == LayerSeq::flsCutomize) { + else if (first_layer_seq_choice == LayerSeq::flsCustomize) { const DynamicPrintConfig& plate_config = plate_item.second->get(); if (!plate_config.has("first_layer_print_sequence")) { std::vector initial_sequence; @@ -2906,7 +2906,7 @@ void TabPrintPlate::on_value_change(const std::string& opt_key, const boost::any if (other_layer_seq_choice == LayerSeq::flsAuto) { plate->set_other_layers_print_sequence({}); } - else if (other_layer_seq_choice == LayerSeq::flsCutomize) { + else if (other_layer_seq_choice == LayerSeq::flsCustomize) { const DynamicPrintConfig& plate_config = plate_item.second->get(); if (!plate_config.has("other_layers_print_sequence")) { std::vector initial_sequence; From 105a8444e9fe1fe338ec3cd27d956c37bbe27e0b Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Mon, 20 Jan 2025 16:48:39 -0800 Subject: [PATCH 066/100] capitalize support names in the UI for consistency (#8089) Capitilize support labels for UI consistency --- src/libslic3r/PrintConfig.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 726a4c3179..afcdfc0d22 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4406,17 +4406,17 @@ void PrintConfigDef::init_fff_params() def = this->add("support_type", coEnum); def->label = L("Type"); def->category = L("Support"); - def->tooltip = L("normal(auto) and tree(auto) is used to generate support automatically. " - "If normal(manual) or tree(manual) is selected, only support enforcers are generated"); + def->tooltip = L("Normal (auto) and Tree (auto) is used to generate support automatically. " + "If Normal (manual) or Tree (manual) is selected, only support enforcers are generated"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("normal(auto)"); def->enum_values.push_back("tree(auto)"); def->enum_values.push_back("normal(manual)"); def->enum_values.push_back("tree(manual)"); - def->enum_labels.push_back(L("normal(auto)")); - def->enum_labels.push_back(L("tree(auto)")); - def->enum_labels.push_back(L("normal(manual)")); - def->enum_labels.push_back(L("tree(manual)")); + def->enum_labels.push_back(L("Normal (auto)")); + def->enum_labels.push_back(L("Tree (auto)")); + def->enum_labels.push_back(L("Normal (manual)")); + def->enum_labels.push_back(L("Tree (manual)")); def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(stNormalAuto)); From 10b9928506e6a2f74ef7ccf3b98ac94712e364c3 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 09:57:05 +0800 Subject: [PATCH 067/100] Fix issue that the support contact layer is printed in wrong filament (#7924) Fix issue that the contact layer is printed in wrong filament when interface layer number is set to 0 Cherry-picked from prusa3d/PrusaSlicer@ca5f6da08d38c75e0e00ea2604de9709b9caa8aa Co-authored-by: Vojtech Bubnik --- src/libslic3r/Support/SupportMaterial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index b022607bf7..46dd1d8ac9 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -4706,7 +4706,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( // Filler and its parameters filler_interface.get(), fill_params, // Extrusion parameters - erSupportMaterialInterface, interface_flow); + interface_as_base ? erSupportMaterial : erSupportMaterialInterface, interface_flow); } // Base interface layers under soluble interfaces From b488fdecec8acb32f384c72c2373eac5037911e0 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 09:57:28 +0800 Subject: [PATCH 068/100] Fix issue that `TIMELAPSE_TAKE_FRAME` is recognized as tool change command (#7926) Fix issue that `TIMELAPSE_TAKE_FRAME` is recognized as tool change command and triggers preheat (SoftFever/OrcaSlicer#7842) --- src/libslic3r/GCode/GCodeProcessor.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 6ba31ceea1..6f99ff55f4 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -4918,10 +4918,13 @@ void GCodeProcessor::run_post_process() // add lines M104 to exported gcode auto process_line_T = [this, &export_lines](const std::string& gcode_line, const size_t g1_lines_counter, const ExportLines::Backtrace& backtrace) { const std::string cmd = GCodeReader::GCodeLine::extract_cmd(gcode_line); + + int tool_number = -1; + if (!parse_number(std::string_view(cmd).substr(1), tool_number)){ + // invalid T command, such as the "TIMELAPSE_TAKE_FRAME" gcode, just ignore + return; + } if (cmd.size() >= 2) { - std::stringstream ss(cmd.substr(1)); - int tool_number = -1; - ss >> tool_number; if (tool_number != -1) { if (tool_number < 0 || (int)m_extruder_temps_config.size() <= tool_number) { // found an invalid value, clamp it to a valid one From a3de7cf0bde3a098165763c4e3fce5a2ec5bd0f2 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 09:58:15 +0800 Subject: [PATCH 069/100] Fix random crash when opening 3mf files that have bed size different than current (#7955) * Fix bed raycast id * Fix bed raycaster UAF crash due to bed resizing --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- src/slic3r/GUI/PartPlate.cpp | 3 +-- src/slic3r/GUI/PartPlate.hpp | 1 - src/slic3r/GUI/Plater.cpp | 2 ++ src/slic3r/GUI/SceneRaycaster.hpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 9724e8c241..9a3829f18b 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6767,7 +6767,7 @@ void GLCanvas3D::_picking_pass() case SceneRaycaster::EType::Bed: { // BBS: add plate picking logic - int plate_hover_id = PartPlate::PLATE_BASE_ID - hit.raycaster_id; + int plate_hover_id = hit.raycaster_id; if (plate_hover_id >= 0 && plate_hover_id < PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT) { wxGetApp().plater()->get_partplate_list().set_hover_id(plate_hover_id); m_hover_plate_idxs.emplace_back(plate_hover_id); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 1f052706c9..ebdcbc4d4c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1348,8 +1348,7 @@ void PartPlate::register_raycasters_for_picking(GLCanvas3D &canvas) int PartPlate::picking_id_component(int idx) const { - unsigned int id = PLATE_BASE_ID - this->m_plate_index * GRABBER_COUNT - idx; - return id; + return this->m_plate_index * GRABBER_COUNT + idx; } std::vector PartPlate::get_extruders(bool conside_custom_gcode) const diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index bfe73ab59a..fdc0fc18e3 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -198,7 +198,6 @@ private: int picking_id_component(int idx) const; public: - static const unsigned int PLATE_BASE_ID = 255 * 255 * 253; static const unsigned int PLATE_NAME_HOVER_ID = 6; static const unsigned int GRABBER_COUNT = 8; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index eb017db695..8e7b3941d4 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4396,7 +4396,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ cur_plate->translate_all_instance(new_origin - cur_origin); } + view3D->get_canvas3d()->remove_raycasters_for_picking(SceneRaycaster::EType::Bed); partplate_list.reset_size(current_width, current_depth, current_height, true, true); + partplate_list.register_raycasters_for_picking(*view3D->get_canvas3d()); } //BBS: add gcode loading logic in the end diff --git a/src/slic3r/GUI/SceneRaycaster.hpp b/src/slic3r/GUI/SceneRaycaster.hpp index 5b36efc0ea..3d4473197c 100644 --- a/src/slic3r/GUI/SceneRaycaster.hpp +++ b/src/slic3r/GUI/SceneRaycaster.hpp @@ -52,7 +52,7 @@ public: enum class EIdBase { Bed = 0, - Volume = 1000, + Volume = 1000, // Must be smaller than PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT Gizmo = 1000000, FallbackGizmo = 2000000 }; From 2253ab304aae93c5bbfec2ec1a2bf1e9c1cd83f4 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 09:58:34 +0800 Subject: [PATCH 070/100] Fix arachne wall ordering (#7959) * Revert "SPE-1950: Optimization of computation complexity of perimeter ordering for Arachne generator." This reverts commit 47ec9b9b0692d094f534ee891f30e00198be1338. * Revert "SPE-1963: Improve ordering of perimeters with Arachne perimeter generator" This reverts commit babb84c70ac855a037b9f6b20cacf0190a053aed. --- src/libslic3r/Arachne/PerimeterOrder.cpp | 280 ---- src/libslic3r/Arachne/PerimeterOrder.hpp | 51 - src/libslic3r/Arachne/WallToolPaths.cpp | 94 ++ src/libslic3r/Arachne/WallToolPaths.hpp | 10 + src/libslic3r/Arachne/utils/ExtrusionLine.cpp | 23 +- src/libslic3r/Arachne/utils/ExtrusionLine.hpp | 24 +- src/libslic3r/CMakeLists.txt | 2 - src/libslic3r/PerimeterGenerator.cpp | 1173 +++++++++-------- 8 files changed, 756 insertions(+), 901 deletions(-) delete mode 100644 src/libslic3r/Arachne/PerimeterOrder.cpp delete mode 100644 src/libslic3r/Arachne/PerimeterOrder.hpp diff --git a/src/libslic3r/Arachne/PerimeterOrder.cpp b/src/libslic3r/Arachne/PerimeterOrder.cpp deleted file mode 100644 index c6c2755a48..0000000000 --- a/src/libslic3r/Arachne/PerimeterOrder.cpp +++ /dev/null @@ -1,280 +0,0 @@ -#include -#include -#include - -#include "PerimeterOrder.hpp" -#include "libslic3r/Arachne/utils/ExtrusionJunction.hpp" -#include "libslic3r/Point.hpp" - -namespace Slic3r::Arachne::PerimeterOrder { - -using namespace Arachne; - -static size_t get_extrusion_lines_count(const Perimeters &perimeters) { - size_t extrusion_lines_count = 0; - for (const Perimeter &perimeter : perimeters) - extrusion_lines_count += perimeter.size(); - - return extrusion_lines_count; -} - -static PerimeterExtrusions get_sorted_perimeter_extrusions_by_area(const Perimeters &perimeters) { - PerimeterExtrusions sorted_perimeter_extrusions; - sorted_perimeter_extrusions.reserve(get_extrusion_lines_count(perimeters)); - - for (const Perimeter &perimeter : perimeters) { - for (const ExtrusionLine &extrusion_line : perimeter) { - if (extrusion_line.empty()) - continue; // This shouldn't ever happen. - - const BoundingBox bbox = get_extents(extrusion_line); - // Be aware that Arachne produces contours with clockwise orientation and holes with counterclockwise orientation. - const double area = std::abs(extrusion_line.area()); - const Polygon polygon = extrusion_line.is_closed ? to_polygon(extrusion_line) : Polygon{}; - - sorted_perimeter_extrusions.emplace_back(extrusion_line, area, polygon, bbox); - } - } - - // Open extrusions have an area equal to zero, so sorting based on the area ensures that open extrusions will always be before closed ones. - std::sort(sorted_perimeter_extrusions.begin(), sorted_perimeter_extrusions.end(), - [](const PerimeterExtrusion &l, const PerimeterExtrusion &r) { return l.area < r.area; }); - - return sorted_perimeter_extrusions; -} - -// Functions fill adjacent_perimeter_extrusions field for every PerimeterExtrusion by pointers to PerimeterExtrusions that contain or are inside this PerimeterExtrusion. -static void construct_perimeter_extrusions_adjacency_graph(PerimeterExtrusions &sorted_perimeter_extrusions) { - // Construct a graph (defined using adjacent_perimeter_extrusions field) where two PerimeterExtrusion are adjacent when one is inside the other. - std::vector root_candidates(sorted_perimeter_extrusions.size(), false); - for (PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { - const size_t perimeter_extrusion_idx = &perimeter_extrusion - sorted_perimeter_extrusions.data(); - - if (!perimeter_extrusion.is_closed()) { - root_candidates[perimeter_extrusion_idx] = true; - continue; - } - - for (PerimeterExtrusion &root_candidate : sorted_perimeter_extrusions) { - const size_t root_candidate_idx = &root_candidate - sorted_perimeter_extrusions.data(); - - if (!root_candidates[root_candidate_idx]) - continue; - - if (perimeter_extrusion.bbox.contains(root_candidate.bbox) && perimeter_extrusion.polygon.contains(root_candidate.extrusion.junctions.front().p)) { - perimeter_extrusion.adjacent_perimeter_extrusions.emplace_back(&root_candidate); - root_candidate.adjacent_perimeter_extrusions.emplace_back(&perimeter_extrusion); - root_candidates[root_candidate_idx] = false; - } - } - - root_candidates[perimeter_extrusion_idx] = true; - } -} - -// Perform the depth-first search to assign the nearest external perimeter for every PerimeterExtrusion. -// When some PerimeterExtrusion is achievable from more than one external perimeter, then we choose the -// one that comes from a contour. -static void assign_nearest_external_perimeter(PerimeterExtrusions &sorted_perimeter_extrusions) { - std::stack stack; - for (PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { - if (perimeter_extrusion.is_external_perimeter()) { - perimeter_extrusion.depth = 0; - perimeter_extrusion.nearest_external_perimeter = &perimeter_extrusion; - stack.push(&perimeter_extrusion); - } - } - - while (!stack.empty()) { - PerimeterExtrusion *current_extrusion = stack.top(); - stack.pop(); - - for (PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { - const size_t adjacent_extrusion_depth = current_extrusion->depth + 1; - // Update depth when the new depth is smaller or when we can achieve the same depth from a contour. - // This will ensure that the internal perimeter will be extruded before the outer external perimeter - // when there are two external perimeters and one internal. - if (adjacent_extrusion_depth < adjacent_extrusion->depth) { - adjacent_extrusion->nearest_external_perimeter = current_extrusion->nearest_external_perimeter; - adjacent_extrusion->depth = adjacent_extrusion_depth; - stack.push(adjacent_extrusion); - } else if (adjacent_extrusion_depth == adjacent_extrusion->depth && !adjacent_extrusion->nearest_external_perimeter->is_contour() && current_extrusion->is_contour()) { - adjacent_extrusion->nearest_external_perimeter = current_extrusion->nearest_external_perimeter; - stack.push(adjacent_extrusion); - } - } - } -} - -inline Point get_end_position(const ExtrusionLine &extrusion) { - if (extrusion.is_closed) - return extrusion.junctions[0].p; // We ended where we started. - else - return extrusion.junctions.back().p; // Pick the other end from where we started. -} - -// Returns ordered extrusions. -static std::vector ordered_perimeter_extrusions_to_minimize_distances(Point current_position, std::vector extrusions) { - // Ensure that open extrusions will be placed before the closed one. - std::sort(extrusions.begin(), extrusions.end(), - [](const PerimeterExtrusion *l, const PerimeterExtrusion *r) -> bool { return l->is_closed() < r->is_closed(); }); - - std::vector ordered_extrusions; - std::vector already_selected(extrusions.size(), false); - while (ordered_extrusions.size() < extrusions.size()) { - double nearest_distance_sqr = std::numeric_limits::max(); - size_t nearest_extrusion_idx = 0; - bool is_nearest_closed = false; - - for (size_t extrusion_idx = 0; extrusion_idx < extrusions.size(); ++extrusion_idx) { - if (already_selected[extrusion_idx]) - continue; - - const ExtrusionLine &extrusion_line = extrusions[extrusion_idx]->extrusion; - const Point &extrusion_start_position = extrusion_line.junctions.front().p; - const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); - if (distance_sqr < nearest_distance_sqr) { - if (extrusion_line.is_closed || (!extrusion_line.is_closed && nearest_distance_sqr == std::numeric_limits::max()) || (!extrusion_line.is_closed && !is_nearest_closed)) { - nearest_extrusion_idx = extrusion_idx; - nearest_distance_sqr = distance_sqr; - is_nearest_closed = extrusion_line.is_closed; - } - } - } - - already_selected[nearest_extrusion_idx] = true; - const PerimeterExtrusion *nearest_extrusion = extrusions[nearest_extrusion_idx]; - current_position = get_end_position(nearest_extrusion->extrusion); - ordered_extrusions.emplace_back(nearest_extrusion); - } - - return ordered_extrusions; -} - -struct GroupedPerimeterExtrusions -{ - GroupedPerimeterExtrusions() = delete; - explicit GroupedPerimeterExtrusions(const PerimeterExtrusion *external_perimeter_extrusion) - : external_perimeter_extrusion(external_perimeter_extrusion) {} - - std::vector extrusions; - const PerimeterExtrusion *external_perimeter_extrusion = nullptr; -}; - -// Returns vector of indexes that represent the order of grouped extrusions in grouped_extrusions. -static std::vector order_of_grouped_perimeter_extrusions_to_minimize_distances(Point current_position, std::vector grouped_extrusions) { - // Ensure that holes will be placed before contour and open extrusions before the closed one. - std::sort(grouped_extrusions.begin(), grouped_extrusions.end(), [](const GroupedPerimeterExtrusions &l, const GroupedPerimeterExtrusions &r) -> bool { - return (l.external_perimeter_extrusion->is_contour() < r.external_perimeter_extrusion->is_contour()) || - (l.external_perimeter_extrusion->is_contour() == r.external_perimeter_extrusion->is_contour() && l.external_perimeter_extrusion->is_closed() < r.external_perimeter_extrusion->is_closed()); - }); - - const size_t holes_cnt = std::count_if(grouped_extrusions.begin(), grouped_extrusions.end(), [](const GroupedPerimeterExtrusions &grouped_extrusions) { - return !grouped_extrusions.external_perimeter_extrusion->is_contour(); - }); - - std::vector grouped_extrusions_order; - std::vector already_selected(grouped_extrusions.size(), false); - while (grouped_extrusions_order.size() < grouped_extrusions.size()) { - double nearest_distance_sqr = std::numeric_limits::max(); - size_t nearest_grouped_extrusions_idx = 0; - bool is_nearest_closed = false; - - // First we order all holes and then we start ordering contours. - const size_t grouped_extrusion_end = grouped_extrusions_order.size() < holes_cnt ? holes_cnt: grouped_extrusions.size(); - for (size_t grouped_extrusion_idx = 0; grouped_extrusion_idx < grouped_extrusion_end; ++grouped_extrusion_idx) { - if (already_selected[grouped_extrusion_idx]) - continue; - - const ExtrusionLine &external_perimeter_extrusion_line = grouped_extrusions[grouped_extrusion_idx].external_perimeter_extrusion->extrusion; - const Point &extrusion_start_position = external_perimeter_extrusion_line.junctions.front().p; - const double distance_sqr = (current_position - extrusion_start_position).cast().squaredNorm(); - if (distance_sqr < nearest_distance_sqr) { - if (external_perimeter_extrusion_line.is_closed || (!external_perimeter_extrusion_line.is_closed && nearest_distance_sqr == std::numeric_limits::max()) || (!external_perimeter_extrusion_line.is_closed && !is_nearest_closed)) { - nearest_grouped_extrusions_idx = grouped_extrusion_idx; - nearest_distance_sqr = distance_sqr; - is_nearest_closed = external_perimeter_extrusion_line.is_closed; - } - } - } - - grouped_extrusions_order.emplace_back(nearest_grouped_extrusions_idx); - already_selected[nearest_grouped_extrusions_idx] = true; - const GroupedPerimeterExtrusions &nearest_grouped_extrusions = grouped_extrusions[nearest_grouped_extrusions_idx]; - const ExtrusionLine &last_extrusion_line = nearest_grouped_extrusions.extrusions.back()->extrusion; - current_position = get_end_position(last_extrusion_line); - } - - return grouped_extrusions_order; -} - -static PerimeterExtrusions extract_ordered_perimeter_extrusions(const PerimeterExtrusions &sorted_perimeter_extrusions, const bool external_perimeters_first) { - // Extrusions are ordered inside each group. - std::vector grouped_extrusions; - - std::stack stack; - std::vector visited(sorted_perimeter_extrusions.size(), false); - for (const PerimeterExtrusion &perimeter_extrusion : sorted_perimeter_extrusions) { - if (!perimeter_extrusion.is_external_perimeter()) - continue; - - stack.push(&perimeter_extrusion); - visited.assign(sorted_perimeter_extrusions.size(), false); - - grouped_extrusions.emplace_back(&perimeter_extrusion); - while (!stack.empty()) { - const PerimeterExtrusion *current_extrusion = stack.top(); - const size_t current_extrusion_idx = current_extrusion - sorted_perimeter_extrusions.data(); - - stack.pop(); - visited[current_extrusion_idx] = true; - - if (current_extrusion->nearest_external_perimeter == &perimeter_extrusion) { - grouped_extrusions.back().extrusions.emplace_back(current_extrusion); - } - - std::vector available_candidates; - for (const PerimeterExtrusion *adjacent_extrusion : current_extrusion->adjacent_perimeter_extrusions) { - const size_t adjacent_extrusion_idx = adjacent_extrusion - sorted_perimeter_extrusions.data(); - if (!visited[adjacent_extrusion_idx] && !adjacent_extrusion->is_external_perimeter() && adjacent_extrusion->nearest_external_perimeter == &perimeter_extrusion) { - available_candidates.emplace_back(adjacent_extrusion); - } - } - - if (available_candidates.size() == 1) { - stack.push(available_candidates.front()); - } else if (available_candidates.size() > 1) { - // When there is more than one available candidate, then order candidates to minimize distances between - // candidates and also to minimize the distance from the current_position. - std::vector adjacent_extrusions = ordered_perimeter_extrusions_to_minimize_distances(Point::Zero(), available_candidates); - for (auto extrusion_it = adjacent_extrusions.rbegin(); extrusion_it != adjacent_extrusions.rend(); ++extrusion_it) { - stack.push(*extrusion_it); - } - } - } - - if (!external_perimeters_first) - std::reverse(grouped_extrusions.back().extrusions.begin(), grouped_extrusions.back().extrusions.end()); - } - - const std::vector grouped_extrusion_order = order_of_grouped_perimeter_extrusions_to_minimize_distances(Point::Zero(), grouped_extrusions); - - PerimeterExtrusions ordered_extrusions; - for (size_t order_idx : grouped_extrusion_order) { - for (const PerimeterExtrusion *perimeter_extrusion : grouped_extrusions[order_idx].extrusions) - ordered_extrusions.emplace_back(*perimeter_extrusion); - } - - return ordered_extrusions; -} - -// FIXME: From the point of better patch planning, it should be better to do ordering when we have generated all extrusions (for now, when G-Code is exported). -// FIXME: It would be better to extract the adjacency graph of extrusions from the SkeletalTrapezoidation graph. -PerimeterExtrusions ordered_perimeter_extrusions(const Perimeters &perimeters, const bool external_perimeters_first) { - PerimeterExtrusions sorted_perimeter_extrusions = get_sorted_perimeter_extrusions_by_area(perimeters); - construct_perimeter_extrusions_adjacency_graph(sorted_perimeter_extrusions); - assign_nearest_external_perimeter(sorted_perimeter_extrusions); - return extract_ordered_perimeter_extrusions(sorted_perimeter_extrusions, external_perimeters_first); -} - -} // namespace Slic3r::Arachne::PerimeterOrder \ No newline at end of file diff --git a/src/libslic3r/Arachne/PerimeterOrder.hpp b/src/libslic3r/Arachne/PerimeterOrder.hpp deleted file mode 100644 index f8469d917f..0000000000 --- a/src/libslic3r/Arachne/PerimeterOrder.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef slic3r_GCode_PerimeterOrder_hpp_ -#define slic3r_GCode_PerimeterOrder_hpp_ - -#include -#include -#include -#include - -#include "libslic3r/Arachne/utils/ExtrusionLine.hpp" -#include "libslic3r/BoundingBox.hpp" -#include "libslic3r/Polygon.hpp" - -namespace Slic3r::Arachne::PerimeterOrder { - -// Data structure stores ExtrusionLine (closed and open) together with additional data. -struct PerimeterExtrusion -{ - explicit PerimeterExtrusion(const Arachne::ExtrusionLine &extrusion, const double area, const Polygon &polygon, const BoundingBox &bbox) - : extrusion(extrusion), area(area), polygon(polygon), bbox(bbox) {} - - Arachne::ExtrusionLine extrusion; - // Absolute value of the area of the polygon. The value is always non-negative, even for holes. - double area = 0; - - // Polygon is non-empty only for closed extrusions. - Polygon polygon; - BoundingBox bbox; - - std::vector adjacent_perimeter_extrusions; - - // How far is this perimeter from the nearest external perimeter. Contour is always preferred over holes. - size_t depth = std::numeric_limits::max(); - PerimeterExtrusion *nearest_external_perimeter = nullptr; - - // Returns if ExtrusionLine is a contour or a hole. - bool is_contour() const { return extrusion.is_contour(); } - - // Returns if ExtrusionLine is closed or opened. - bool is_closed() const { return extrusion.is_closed; } - - // Returns if ExtrusionLine is an external or an internal perimeter. - bool is_external_perimeter() const { return extrusion.is_external_perimeter(); } -}; - -using PerimeterExtrusions = std::vector; - -PerimeterExtrusions ordered_perimeter_extrusions(const Perimeters &perimeters, bool external_perimeters_first); - -} // namespace Slic3r::Arachne::PerimeterOrder - -#endif // slic3r_GCode_Travels_hpp_ diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index 8f2b04cf42..b5b3548371 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -782,4 +782,98 @@ bool WallToolPaths::removeEmptyToolPaths(std::vector &toolpa return toolpaths.empty(); } +/*! + * 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. + * + * Odd walls should always go after their enclosing wall polygons. + * + * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. + */ +WallToolPaths::ExtrusionLineSet WallToolPaths::getRegionOrder(const std::vector &input, const bool outer_to_inner) +{ + 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. + // + // We use a PointGrid rather than a LineGrid to save on computation time. + // In very rare cases two insets might lie next to each other without having neighboring vertices, e.g. + // \ . + // | / . + // | / . + // || . + // | \ . + // | \ . + // / . + // However, because of how Arachne works this will likely never be the case for two consecutive insets. + // On the other hand one could imagine that two consecutive insets of a very large circle + // could be simplify()ed such that the remaining vertices of the two insets don't align. + // In those cases the order requirement is not captured, + // which means that the PathOrderOptimizer *might* result in a violation of the user set path order. + // This problem is expected to be not so severe and happen very sparsely. + + coord_t max_line_w = 0u; + for (const ExtrusionLine *line : input) // compute max_line_w + for (const ExtrusionJunction &junction : *line) + max_line_w = std::max(max_line_w, junction.w); + if (max_line_w == 0u) + return order_requirements; + + struct LineLoc + { + ExtrusionJunction j; + const ExtrusionLine *line; + }; + struct Locator + { + Point operator()(const LineLoc &elem) { return elem.j.p; } + }; + + // How much farther two verts may be apart due to corners. + // This distance must be smaller than 2, because otherwise + // we could create an order requirement between e.g. + // wall 2 of one region and wall 3 of another region, + // while another wall 3 of the first region would lie in between those two walls. + // However, higher values are better against the limitations of using a PointGrid rather than a LineGrid. + constexpr float diagonal_extension = 1.9f; + const auto searching_radius = coord_t(max_line_w * diagonal_extension); + using GridT = SparsePointGrid; + GridT grid(searching_radius); + + for (const ExtrusionLine *line : input) + for (const ExtrusionJunction &junction : *line) grid.insert(LineLoc{junction, line}); + for (const std::pair &pair : grid) { + const LineLoc &lineloc_here = pair.second; + const ExtrusionLine *here = lineloc_here.line; + Point loc_here = pair.second.j.p; + std::vector nearby_verts = grid.getNearby(loc_here, searching_radius); + for (const LineLoc &lineloc_nearby : nearby_verts) { + const ExtrusionLine *nearby = lineloc_nearby.line; + if (nearby == here) + continue; + if (nearby->inset_idx == here->inset_idx) + continue; + if (nearby->inset_idx > here->inset_idx + 1) + continue; // not directly adjacent + if (here->inset_idx > nearby->inset_idx + 1) + continue; // not directly adjacent + if (!shorter_then(loc_here - lineloc_nearby.j.p, (lineloc_here.j.w + lineloc_nearby.j.w) / 2 * diagonal_extension)) + continue; // points are too far away from each other + if (here->is_odd || nearby->is_odd) { + if (here->is_odd && !nearby->is_odd && nearby->inset_idx < here->inset_idx) + order_requirements.emplace(std::make_pair(nearby, here)); + if (nearby->is_odd && !here->is_odd && here->inset_idx < nearby->inset_idx) + order_requirements.emplace(std::make_pair(here, nearby)); + } else if ((nearby->inset_idx < here->inset_idx) == outer_to_inner) { + order_requirements.emplace(std::make_pair(nearby, here)); + } else { + assert((nearby->inset_idx > here->inset_idx) == outer_to_inner); + order_requirements.emplace(std::make_pair(here, nearby)); + } + } + } + return order_requirements; +} + } // namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/WallToolPaths.hpp b/src/libslic3r/Arachne/WallToolPaths.hpp index 00652fc091..457f7e7149 100644 --- a/src/libslic3r/Arachne/WallToolPaths.hpp +++ b/src/libslic3r/Arachne/WallToolPaths.hpp @@ -90,6 +90,16 @@ public: 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. + * + * Odd walls should always go after their enclosing wall polygons. + * + * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. + */ + static ExtrusionLineSet getRegionOrder(const std::vector &input, bool outer_to_inner); + protected: /*! * Stitch the polylines together and form closed polygons. diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index 49449cc59d..0ee40b2b42 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -264,10 +264,9 @@ bool ExtrusionLine::is_contour() const return poly.is_clockwise(); } -double ExtrusionLine::area() const { - if (!this->is_closed) - return 0.; - +double ExtrusionLine::area() const +{ + assert(this->is_closed); double a = 0.; if (this->junctions.size() >= 3) { Vec2d p1 = this->junctions.back().p.cast(); @@ -277,25 +276,9 @@ double ExtrusionLine::area() const { p1 = p2; } } - return 0.5 * a; } -Points to_points(const ExtrusionLine &extrusion_line) { - Points points; - points.reserve(extrusion_line.junctions.size()); - for (const ExtrusionJunction &junction : extrusion_line.junctions) - points.emplace_back(junction.p); - return points; -} - -BoundingBox get_extents(const ExtrusionLine &extrusion_line) { - BoundingBox bbox; - for (const ExtrusionJunction &junction : extrusion_line.junctions) - bbox.merge(junction.p); - return bbox; -} - } // namespace Slic3r::Arachne namespace Slic3r { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index d8cad702ac..21791000f0 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -199,8 +199,6 @@ struct ExtrusionLine bool is_contour() const; double area() const; - - bool is_external_perimeter() const { return this->inset_idx == 0; } }; template @@ -227,7 +225,6 @@ static inline Slic3r::ThickPolyline to_thick_polyline(const PathType &path) static inline Polygon to_polygon(const ExtrusionLine &line) { Polygon out; - assert(line.is_closed); assert(line.junctions.size() >= 3); assert(line.junctions.front().p == line.junctions.back().p); out.points.reserve(line.junctions.size() - 1); @@ -236,11 +233,24 @@ static inline Polygon to_polygon(const ExtrusionLine &line) return out; } -Points to_points(const ExtrusionLine &extrusion_line); - -BoundingBox get_extents(const ExtrusionLine &extrusion_line); +static Points to_points(const ExtrusionLine &extrusion_line) +{ + Points points; + points.reserve(extrusion_line.junctions.size()); + for (const ExtrusionJunction &junction : extrusion_line.junctions) + points.emplace_back(junction.p); + return points; +} #if 0 +static BoundingBox get_extents(const ExtrusionLine &extrusion_line) +{ + BoundingBox bbox; + for (const ExtrusionJunction &junction : extrusion_line.junctions) + bbox.merge(junction.p); + return bbox; +} + static BoundingBox get_extents(const std::vector &extrusion_lines) { BoundingBox bbox; @@ -271,8 +281,6 @@ static std::vector to_points(const std::vector &e #endif using VariableWidthLines = std::vector; //; } // namespace Slic3r::Arachne diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 9dae196b32..ea08f39cfb 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -433,8 +433,6 @@ set(lisbslic3r_sources Arachne/utils/PolygonsSegmentIndex.hpp Arachne/utils/PolylineStitcher.hpp Arachne/utils/PolylineStitcher.cpp - Arachne/PerimeterOrder.hpp - Arachne/PerimeterOrder.cpp Arachne/SkeletalTrapezoidation.hpp Arachne/SkeletalTrapezoidation.cpp Arachne/SkeletalTrapezoidationEdge.hpp diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 5c142db471..624a710902 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -9,7 +9,6 @@ #include "VariableWidth.hpp" #include "CurveAnalyzer.hpp" #include "Clipper2Utils.hpp" -#include "Arachne/PerimeterOrder.hpp" #include "Arachne/WallToolPaths.hpp" #include "Geometry/ConvexHull.hpp" #include "ExPolygonCollection.hpp" @@ -567,7 +566,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime for (const auto & r : fuzzified_regions) { BoundingBox bbox = get_extents(perimeter_generator.slices->surfaces); bbox.offset(scale_(1.)); - ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, loop.is_contour() ? 0 : 1, loop.depth, i).c_str(), bbox); + ::Slic3r::SVG svg(debug_out_path("fuzzy_traverse_loops_%d_%d_%d_region_%d.svg", perimeter_generator.layer_id, loop.is_contour ? 0 : 1, loop.depth, i).c_str(), bbox); svg.draw_outline(perimeter_generator.slices->surfaces); svg.draw_outline(loop.polygon, "green"); svg.draw(r.second, "red", 0.5); @@ -877,6 +876,13 @@ static ClipperLib_Z::Paths clip_extrusion(const ClipperLib_Z::Path& subject, con return clipped_paths; } +struct PerimeterGeneratorArachneExtrusion +{ + Arachne::ExtrusionLine* extrusion = nullptr; + // Indicates if closed ExtrusionLine is a contour or a hole. Used it only when ExtrusionLine is a closed loop. + bool is_contour = false; +}; + static void smooth_overhang_level(ExtrusionPaths &paths) { @@ -961,7 +967,7 @@ static void smooth_overhang_level(ExtrusionPaths &paths) } } -static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, Arachne::PerimeterOrder::PerimeterExtrusions& pg_extrusions, +static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, std::vector& pg_extrusions, bool &steep_overhang_contour, bool &steep_overhang_hole) { // Detect steep overhangs @@ -969,34 +975,34 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p perimeter_generator.layer_id % 2 == 1; // Only calculate overhang degree on even (from GUI POV) layers ExtrusionEntityCollection extrusion_coll; - for (Arachne::PerimeterOrder::PerimeterExtrusion &pg_extrusion : pg_extrusions) { - Arachne::ExtrusionLine &extrusion = pg_extrusion.extrusion; - if (extrusion.empty()) + for (PerimeterGeneratorArachneExtrusion& pg_extrusion : pg_extrusions) { + Arachne::ExtrusionLine* extrusion = pg_extrusion.extrusion; + if (extrusion->empty()) continue; - const bool is_external = extrusion.inset_idx == 0; + const bool is_external = extrusion->inset_idx == 0; ExtrusionRole role = is_external ? erExternalPerimeter : erPerimeter; const auto& regions = perimeter_generator.regions_by_fuzzify; - const bool is_contour = !extrusion.is_closed || pg_extrusion.is_contour(); + const bool is_contour = !extrusion->is_closed || pg_extrusion.is_contour; if (regions.size() == 1) { // optimization const auto& config = regions.begin()->first; - const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion.inset_idx, is_contour); + const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion.junctions, config); + fuzzy_extrusion_line(extrusion->junctions, config); } else { // Find all affective regions std::vector> fuzzified_regions; fuzzified_regions.reserve(regions.size()); for (const auto& region : regions) { - if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion.inset_idx, is_contour)) { + if (should_fuzzify(region.first, perimeter_generator.layer_id, extrusion->inset_idx, is_contour)) { fuzzified_regions.emplace_back(region.first, region.second); } } if (!fuzzified_regions.empty()) { // Split the loops into lines with different config, and fuzzy them separately for (const auto& r : fuzzified_regions) { - const auto splitted = Algorithm::split_line(extrusion, r.second, false); + const auto splitted = Algorithm::split_line(*extrusion, r.second, false); if (splitted.empty()) { // No intersection, skip continue; @@ -1005,19 +1011,19 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion.junctions, r.first); + fuzzy_extrusion_line(extrusion->junctions, r.first); } else { - const auto current_ext = extrusion.junctions; + const auto current_ext = extrusion->junctions; std::vector segment; segment.reserve(current_ext.size()); - extrusion.junctions.clear(); + extrusion->junctions.clear(); - const auto fuzzy_current_segment = [&segment, &extrusion, &r]() { - extrusion.junctions.push_back(segment.front()); + const auto fuzzy_current_segment = [&segment, extrusion, &r]() { + extrusion->junctions.push_back(segment.front()); const auto back = segment.back(); fuzzy_extrusion_line(segment, r.first); - extrusion.junctions.insert(extrusion.junctions.end(), segment.begin(), segment.end()); - extrusion.junctions.push_back(back); + extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); + extrusion->junctions.push_back(back); segment.clear(); }; @@ -1034,7 +1040,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p segment.push_back(to_ex_junction(p)); } else { if (segment.empty()) { - extrusion.junctions.push_back(to_ex_junction(p)); + extrusion->junctions.push_back(to_ex_junction(p)); } else { segment.push_back(to_ex_junction(p)); fuzzy_current_segment(); @@ -1053,9 +1059,9 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // detect overhanging/bridging perimeters if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) { ClipperLib_Z::Path extrusion_path; - extrusion_path.reserve(extrusion.size()); + extrusion_path.reserve(extrusion->size()); BoundingBox extrusion_path_bbox; - for (const Arachne::ExtrusionJunction &ej : extrusion.junctions) { + for (const Arachne::ExtrusionJunction &ej : extrusion->junctions) { extrusion_path.emplace_back(ej.p.x(), ej.p.y(), ej.w); extrusion_path_bbox.merge(Point(ej.p.x(), ej.p.y())); } @@ -1085,7 +1091,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Always reverse extrusion if use fuzzy skin: https://github.com/SoftFever/OrcaSlicer/pull/2413#issuecomment-1769735357 if (overhangs_reverse && perimeter_generator.has_fuzzy_skin) { - if (pg_extrusion.is_contour()) { + if (pg_extrusion.is_contour) { steep_overhang_contour = true; } else if (perimeter_generator.has_fuzzy_hole) { steep_overhang_hole = true; @@ -1093,7 +1099,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p } // Detect steep overhang // Skip the check if we already found steep overhangs - bool found_steep_overhang = (pg_extrusion.is_contour() && steep_overhang_contour) || (!pg_extrusion.is_contour() && steep_overhang_hole); + bool found_steep_overhang = (pg_extrusion.is_contour && steep_overhang_contour) || (!pg_extrusion.is_contour && steep_overhang_hole); if (overhangs_reverse && !found_steep_overhang) { std::map recognization_paths; for (const ExtrusionPath &path : temp_paths) { @@ -1111,7 +1117,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p BoundingBox extrusion_bboxs = get_extents(be_clipped); - if (detect_steep_overhang(perimeter_generator.config, pg_extrusion.is_contour(), extrusion_bboxs, it.first, be_clipped, perimeter_generator.lower_slices, + if (detect_steep_overhang(perimeter_generator.config, pg_extrusion.is_contour, extrusion_bboxs, it.first, be_clipped, perimeter_generator.lower_slices, steep_overhang_contour, steep_overhang_hole)) { break; } @@ -1179,7 +1185,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Arachne sometimes creates extrusion with zero-length (just two same endpoints); if (!paths.empty()) { Point start_point = paths.front().first_point(); - if (!extrusion.is_closed) { + if (!extrusion->is_closed) { // Especially for open extrusion, we need to select a starting point that is at the start // or the end of the extrusions to make one continuous line. Also, we prefer a non-overhang // starting point. @@ -1219,7 +1225,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (overhangs_reverse) { for (const ExtrusionPath& path : paths) { if (path.role() == erOverhangPerimeter) { - if (pg_extrusion.is_contour()) + if (pg_extrusion.is_contour) steep_overhang_contour = true; else steep_overhang_hole = true; @@ -1236,13 +1242,13 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p steep_overhang_hole = true; } - extrusion_paths_append(paths, extrusion, role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); + extrusion_paths_append(paths, *extrusion, role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); } // Append paths to collection. if (!paths.empty()) { - if (extrusion.is_closed) { - ExtrusionLoop extrusion_loop(std::move(paths), pg_extrusion.is_contour() ? elrDefault : elrHole); + if (extrusion->is_closed) { + ExtrusionLoop extrusion_loop(std::move(paths), pg_extrusion.is_contour ? elrDefault : elrHole); extrusion_loop.make_counter_clockwise(); // TODO: it seems in practice that ExtrusionLoops occasionally have significantly disconnected paths, // triggering the asserts below. Is this a problem? @@ -1877,516 +1883,6 @@ static void group_region_by_fuzzify(PerimeterGenerator& g) } } - -// ORCA: -// Inner Outer Inner wall ordering mode perimeter order optimisation functions -/** - * @brief Finds all perimeters touching a given set of reference lines, given as indexes. - * - * @param entities The list of PerimeterGeneratorArachneExtrusion entities. - * @param referenceIndices A set of indices representing the reference points. - * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 - * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ - * @param considered_inset_idx What perimeter inset index are we searching for (eg. if we are searching for first internal perimeters proximate to the current reference perimeter, this value should be set to 1 etc). - * @return std::vector A vector of indices representing the touching perimeters. - */ -std::vector findAllTouchingPerimeters(const Arachne::PerimeterOrder::PerimeterExtrusions& entities, const std::unordered_set& referenceIndices, size_t threshold_external, size_t threshold_internal , size_t considered_inset_idx) { - std::unordered_set touchingIndices; - - for (const int refIdx : referenceIndices) { - const auto& referenceEntity = entities[refIdx]; - Points referencePoints = Arachne::to_points(referenceEntity.extrusion); - for (size_t i = 0; i < entities.size(); ++i) { - // Skip already considered references and the reference entity - if (referenceIndices.count(i) > 0) continue; - const auto& entity = entities[i]; - if (entity.extrusion.is_external_perimeter()) continue; // Ignore inset index 0 (external) perimeters from the re-ordering even if they are touching - - if (entity.extrusion.inset_idx != considered_inset_idx) { // Find Inset index perimeters that match the requested inset index - continue; // skip if they dont match - } - - Points points = Arachne::to_points(entity.extrusion); - double distance = MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(referencePoints, points); - // Add to touchingIndices if within threshold distance - size_t threshold=0; - if(referenceEntity.extrusion.is_external_perimeter()) - threshold = threshold_external; - else - threshold = threshold_internal; - if (distance <= threshold) { - touchingIndices.insert(i); - } - } - } - return std::vector(touchingIndices.begin(), touchingIndices.end()); -} - -/** - * @brief Reorders perimeters based on proximity to the reference perimeter - * - * This approach finds all perimeters touching the external perimeter first and then finds all perimeters touching these new ones until none are left - * It ensures a level-by-level traversal, similar to BFS in graph theory. - * - * @param entities The list of PerimeterGeneratorArachneExtrusion entities. - * @param referenceIndex The index of the reference perimeter. - * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 - * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ - * @return Arachne::PerimeterOrder::PerimeterExtrusions The reordered list of perimeters based on proximity. - */ -Arachne::PerimeterOrder::PerimeterExtrusions reorderPerimetersByProximity(Arachne::PerimeterOrder::PerimeterExtrusions entities, size_t threshold_external, size_t threshold_internal) { - Arachne::PerimeterOrder::PerimeterExtrusions reordered; - std::unordered_set includedIndices; - - // Function to reorder perimeters starting from a given reference index - auto reorderFromReference = [&](int referenceIndex) { - std::unordered_set firstLevelIndices; - firstLevelIndices.insert(referenceIndex); - - // Find first level touching perimeters - std::vector firstLevelTouchingIndices = findAllTouchingPerimeters(entities, firstLevelIndices, threshold_external, threshold_internal, 1); - // Bring the largest first level perimeter to the front - // The longest first neighbour is most likely the dominant proximate perimeter - // hence printing it immediately after the external perimeter should speed things up - if (!firstLevelTouchingIndices.empty()) { - auto maxIt = std::max_element(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end(), [&entities](int a, int b) { - return entities[a].extrusion.getLength() < entities[b].extrusion.getLength(); - }); - std::iter_swap(maxIt, firstLevelTouchingIndices.end() - 1); - } - // Insert first level perimeters into reordered list - reordered.push_back(entities[referenceIndex]); - includedIndices.insert(referenceIndex); - - for (int idx : firstLevelTouchingIndices) { - if (includedIndices.count(idx) == 0) { - reordered.push_back(entities[idx]); - includedIndices.insert(idx); - } - } - - // Loop through all inset indices above 1 - size_t currentInsetIndex = 2; - while (true) { - std::unordered_set currentLevelIndices(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end()); - std::vector currentLevelTouchingIndices = findAllTouchingPerimeters(entities, currentLevelIndices, threshold_external, threshold_internal, currentInsetIndex); - - // Break if no more touching perimeters are found - if (currentLevelTouchingIndices.empty()) { - break; - } - - // Exclude any already included indices from the current level touching indices - currentLevelTouchingIndices.erase( - std::remove_if(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), - [&](int idx) { return includedIndices.count(idx) > 0; }), - currentLevelTouchingIndices.end()); - - // Bring the largest current level perimeter to the end - if (!currentLevelTouchingIndices.empty()) { - auto maxIt = std::max_element(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), [&entities](int a, int b) { - return entities[a].extrusion.getLength() < entities[b].extrusion.getLength(); - }); - std::iter_swap(maxIt, currentLevelTouchingIndices.begin()); - } - - // Insert current level perimeters into reordered list - for (int idx : currentLevelTouchingIndices) { - if (includedIndices.count(idx) == 0) { - reordered.push_back(entities[idx]); - includedIndices.insert(idx); - } - } - - // Prepare for the next level - firstLevelTouchingIndices = currentLevelTouchingIndices; - currentInsetIndex++; - } - }; - - // Loop through all perimeters and reorder starting from each inset index 0 perimeter - for (size_t refIdx = 0; refIdx < entities.size(); ++refIdx) { - if (entities[refIdx].extrusion.is_external_perimeter() && includedIndices.count(refIdx) == 0) { - reorderFromReference(refIdx); - } - } - - // Append any remaining entities that were not included - for (size_t i = 0; i < entities.size(); ++i) { - if (includedIndices.count(i) == 0) { - reordered.push_back(entities[i]); - } - } - - return reordered; -} - -/** - * @brief Reorders the vector to bring external perimeter (i.e. paths with inset index 0) that are also contours (i.e. external facing lines) to the front. - * - * This function uses a stable partition to move all external perimeter contour elements to the front of the vector, - * while maintaining the relative order of non-contour elements. - * - * @param ordered_extrusions The vector of PerimeterGeneratorArachneExtrusion to reorder. - */ -void bringContoursToFront(Arachne::PerimeterOrder::PerimeterExtrusions& ordered_extrusions) { - std::stable_partition(ordered_extrusions.begin(), ordered_extrusions.end(), [](const Arachne::PerimeterOrder::PerimeterExtrusion& extrusion) { - return (extrusion.extrusion.is_contour() && extrusion.extrusion.is_external_perimeter()); - }); -} -// ORCA: -// Inner Outer Inner wall ordering mode perimeter order optimisation functions ended - -// Thanks, Cura developers, for implementing an algorithm for generating perimeters with variable width (Arachne) that is based on the paper -// "A framework for adaptive width control of dense contour-parallel toolpaths in fused deposition modeling" -void PerimeterGenerator::process_arachne() -{ - group_region_by_fuzzify(*this); - - // other perimeters - m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); - coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing(); - - // external perimeters - m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm(); - coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width(); - coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); - coord_t ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing())); - // overhang perimeters - m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); - - // solid infill - coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); - - // prepare grown lower layer slices for overhang detection - if (this->lower_slices != nullptr && this->config->detect_overhang_wall) { - // We consider overhang any part where the entire nozzle diameter is not supported by the - // lower layer, so we take lower slices and offset them by half the nozzle diameter used - // in the current layer - double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->wall_filament - 1); - m_lower_slices_polygons = offset(*this->lower_slices, float(scale_(+nozzle_diameter / 2))); - } - - Surfaces all_surfaces = this->slices->surfaces; - - process_no_bridge(all_surfaces, perimeter_spacing, ext_perimeter_width); - // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled - double surface_simplify_resolution = (print_config->enable_arc_fitting && !this->has_fuzzy_skin) ? 0.2 * m_scaled_resolution : m_scaled_resolution; - // we need to process each island separately because we might have different - // extra perimeters for each one - for (const Surface& surface : all_surfaces) { - 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 - int sparse_infill_density = this->config->sparse_infill_density.value; - if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase && sparse_infill_density > 0) // add alternating extra wall - loop_number++; - - // Set the bottommost layer to be one wall - const bool is_bottom_layer = (this->layer_id == object_config->raft_layers) ? true : false; - if (is_bottom_layer && this->config->only_one_wall_first_layer) - loop_number = 0; - - // Orca: set the topmost layer to be one wall according to the config - const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false; - if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top) - loop_number = 0; - - auto apply_precise_outer_wall = config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter; - // Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled. - ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), - apply_precise_outer_wall? -float(ext_perimeter_width - ext_perimeter_spacing ) - : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); - - Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config); - // Set params is_top_or_bottom_layer for adjusting short-wall removal sensitivity. - input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false; - - coord_t wall_0_inset = 0; - if (apply_precise_outer_wall) - wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2); - - //PS: One wall top surface for Arachne - ExPolygons top_expolygons; - // Calculate how many inner loops remain when TopSurfaces is selected. - const int inner_loop_number = (config->only_one_wall_top && upper_slices != nullptr) ? loop_number - 1 : -1; - - // Set one perimeter when TopSurfaces is selected. - if (config->only_one_wall_top) - loop_number = 0; - - Arachne::WallToolPathsParams input_params_tmp = input_params; - - Polygons last_p = to_polygons(last); - Arachne::WallToolPaths wall_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(loop_number + 1), - wall_0_inset, layer_height, input_params_tmp); - Arachne::Perimeters perimeters = wall_tool_paths.getToolPaths(); - ExPolygons infill_contour = union_ex(wall_tool_paths.getInnerContour()); - - // Check if there are some remaining perimeters to generate (the number of perimeters - // is greater than one together with enabled the single perimeter on top surface feature). - if (inner_loop_number >= 0) { - assert(upper_slices != nullptr); - - // Infill contour bounding box. - BoundingBox infill_contour_bbox = get_extents(infill_contour); - infill_contour_bbox.offset(SCALED_EPSILON); - - coord_t perimeter_width = this->perimeter_flow.scaled_width(); - - // Get top ExPolygons from current infill contour. - Polygons upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); - top_expolygons = diff_ex(infill_contour, upper_slices_clipped); - - if (!top_expolygons.empty()) { - if (lower_slices != nullptr) { - const float bridge_offset = float(std::max(ext_perimeter_spacing, perimeter_width)); - const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, infill_contour_bbox); - const ExPolygons current_slices_bridges = offset_ex(diff_ex(top_expolygons, lower_slices_clipped), bridge_offset); - - // Remove bridges from top surface polygons. - top_expolygons = diff_ex(top_expolygons, current_slices_bridges); - } - - // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. - // ORCA: skip if the top surface area is smaller than "min_width_top_surface" - const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); - // Shrink the polygon to remove the small areas, then expand it back out plus a maragin to hide the wall line a little. - // ORCA: Expand the polygon with half the perimeter width in addition to the contracted amount, - // not the full perimeter width as PS does, to enable thin lettering to print on the top surface without nozzle collisions - // due to thin lines being generated - top_expolygons = offset2_ex(top_expolygons, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); - - // Get the not-top ExPolygons (including bridges) from current slices and expanded real top ExPolygons (without bridges). - const ExPolygons not_top_expolygons = diff_ex(infill_contour, top_expolygons); - - // Get final top ExPolygons. - top_expolygons = intersection_ex(top_expolygons, infill_contour); - - const Polygons not_top_polygons = to_polygons(not_top_expolygons); - Arachne::WallToolPaths inner_wall_tool_paths(not_top_polygons, perimeter_spacing, perimeter_spacing, coord_t(inner_loop_number + 1), 0, layer_height, input_params_tmp); - Arachne::Perimeters inner_perimeters = inner_wall_tool_paths.getToolPaths(); - - // Recalculate indexes of inner perimeters before merging them. - if (!perimeters.empty()) { - for (Arachne::VariableWidthLines &inner_perimeter : inner_perimeters) { - if (inner_perimeter.empty()) - continue; - for (Arachne::ExtrusionLine &el : inner_perimeter) - ++el.inset_idx; - } - } - - perimeters.insert(perimeters.end(), inner_perimeters.begin(), inner_perimeters.end()); - infill_contour = union_ex(top_expolygons, inner_wall_tool_paths.getInnerContour()); - } else { - // There is no top surface ExPolygon, so we call Arachne again with parameters - // like when the single perimeter feature is disabled. - Arachne::WallToolPaths no_single_perimeter_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); - perimeters = no_single_perimeter_tool_paths.getToolPaths(); - infill_contour = union_ex(no_single_perimeter_tool_paths.getInnerContour()); - } - } - //PS - - loop_number = int(perimeters.size()) - 1; - -#ifdef ARACHNE_DEBUG - { - static int iRun = 0; - export_perimeters_to_svg(debug_out_path("arachne-perimeters-%d-%d.svg", params.layer_id, iRun++), to_polygons(last), perimeters, union_ex(wallToolPaths.getInnerContour())); - } -#endif - - // All closed ExtrusionLine should have the same the first and the last point. - // But in rare cases, Arachne produce ExtrusionLine marked as closed but without - // equal the first and the last point. - assert([&perimeters = std::as_const(perimeters)]() -> bool { - for (const Arachne::Perimeter& perimeter : perimeters) - for (const Arachne::ExtrusionLine& el : perimeter) - if (el.is_closed && el.junctions.front().p != el.junctions.back().p) - return false; - return true; - }()); - - bool is_outer_wall_first = - this->config->wall_sequence == WallSequence::OuterInner || - this->config->wall_sequence == WallSequence::InnerOuterInner; - - if (layer_id == 0){ // disable inner outer inner algorithm after the first layer - is_outer_wall_first = - this->config->wall_sequence == WallSequence::OuterInner; - } - Arachne::PerimeterOrder::PerimeterExtrusions ordered_extrusions = Arachne::PerimeterOrder::ordered_perimeter_extrusions(perimeters, is_outer_wall_first); - - // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer - if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer - if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering - int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. - int arr_i, arr_j = 0; // indexes to run through the walls in the for loops - int outer, first_internal, second_internal, max_internal, current_perimeter; // allocate index values - - // To address any remaining scenarios where the outer perimeter contour is not first on the list as arachne sometimes reorders the perimeters when clustering - // for OI mode that is used the basis for IOI - bringContoursToFront(ordered_extrusions); - Arachne::PerimeterOrder::PerimeterExtrusions reordered_extrusions; - - // Debug statement to print spacing values: - //printf("External threshold - Ext perimeter: %d Ext spacing: %d Int perimeter: %d Int spacing: %d\n", this->ext_perimeter_flow.scaled_width(),this->ext_perimeter_flow.scaled_spacing(),this->perimeter_flow.scaled_width(), this->perimeter_flow.scaled_spacing()); - - // Get searching thresholds. For an external perimeter we take the external perimeter spacing/2 plus the internal perimeter spacing/2 and expand by 3% to cover - // rounding errors - coord_t threshold_external = (this->ext_perimeter_flow.scaled_spacing()/2 + this->perimeter_flow.scaled_spacing()/2)*1.03; - - // For the intenal perimeter threshold, the distance is the internal perimeter spacing expanded by 3% to cover rounding errors. - coord_t threshold_internal = this->perimeter_flow.scaled_spacing() * 1.03; - - // Re-order extrusions based on distance - // Alorithm will aggresively optimise for the appearance of the outermost perimeter - ordered_extrusions = reorderPerimetersByProximity(ordered_extrusions,threshold_external,threshold_internal ); - reordered_extrusions = ordered_extrusions; // copy them into the reordered extrusions vector to allow for IOI operations to be performed below without altering the base ordered extrusions list. - - // Now start the sandwich mode wall re-ordering using the reordered_extrusions as the basis - // scan to find the external perimeter, first internal, second internal and last perimeter in the island. - // We then advance the position index to move to the second island and continue until there are no more - // perimeters left. - while (position < reordered_extrusions.size()) { - outer = first_internal = second_internal = current_perimeter = -1; // initialise all index values to -1 - max_internal = reordered_extrusions.size()-1; // initialise the maximum internal perimeter to the last perimeter on the extrusion list - // run through the walls to get the index values that need re-ordering until the first one for each - // is found. Start at "position" index to enable the for loop to iterate for multiple external - // perimeters in a single island - // printf("Reorder Loop. Position %d, extrusion list size: %d, Outer index %d, inner index %d, second inner index %d\n", position, reordered_extrusions.size(),outer,first_internal,second_internal); - for (arr_i = position; arr_i < reordered_extrusions.size(); ++arr_i) { - // printf("Perimeter: extrusion inset index %d, ordered extrusions array position %d\n",reordered_extrusions[arr_i].extrusion->inset_idx, arr_i); - switch (reordered_extrusions[arr_i].extrusion.inset_idx) { - case 0: // external perimeter - if (outer == -1) - outer = arr_i; - break; - case 1: // first internal wall - if (first_internal==-1 && arr_i>outer && outer!=-1){ - first_internal = arr_i; - } - break; - case 2: // second internal wall - if (second_internal == -1 && arr_i > first_internal && outer!=-1){ - second_internal = arr_i; - } - break; - } - if(outer >-1 && first_internal>-1 && reordered_extrusions[arr_i].extrusion.is_external_perimeter()){ // found a new external perimeter after we've found at least a first internal perimeter to re-order. - // This means we entered a new island. - arr_i=arr_i-1; //step back one perimeter - max_internal = arr_i; // new maximum internal perimeter is now this as we have found a new external perimeter, hence a new island. - break; // exit the for loop - } - } - - // printf("Layer ID %d, Outer index %d, inner index %d, second inner index %d, maximum internal perimeter %d \n",layer_id,outer,first_internal,second_internal, max_internal); - if (outer > -1 && first_internal > -1 && second_internal > -1) { // found all three perimeters to re-order? If not the perimeters will be processed outside in. - Arachne::PerimeterOrder::PerimeterExtrusions inner_outer_extrusions; // temporary array to hold extrusions for reordering - inner_outer_extrusions.resize(max_internal - position + 1, Arachne::PerimeterOrder::PerimeterExtrusion{{},0.0,{},{}}); // reserve array containing the number of perimeters before a new island. Variables are array indexes hence need to add +1 to convert to position allocations - // printf("Allocated array size %d, max_internal index %d, start position index %d \n",max_internal-position+1,max_internal,position); - - for (arr_j = max_internal; arr_j >=position; --arr_j){ // go inside out towards the external perimeter (perimeters in reverse order) and store all internal perimeters until the first one identified with inset index 2 - if(arr_j >= second_internal){ - //printf("Inside out loop: Mapped perimeter index %d to array position %d\n", arr_j, max_internal-arr_j); - inner_outer_extrusions[max_internal-arr_j] = reordered_extrusions[arr_j]; - current_perimeter++; - } - } - - for (arr_j = position; arr_j < second_internal; ++arr_j){ // go outside in and map the remaining perimeters (external and first internal wall(s)) using the outside in wall order - // printf("Outside in loop: Mapped perimeter index %d to array position %d\n", arr_j, current_perimeter+1); - inner_outer_extrusions[++current_perimeter] = reordered_extrusions[arr_j]; - } - - for(arr_j = position; arr_j <= max_internal; ++arr_j) // replace perimeter array with the new re-ordered array - ordered_extrusions[arr_j] = inner_outer_extrusions[arr_j-position]; - } - // go to the next perimeter from the current position to continue scanning for external walls in the same island - position = arr_i + 1; - } - } - } - - bool steep_overhang_contour = false; - bool steep_overhang_hole = false; - const WallDirection wall_direction = config->wall_direction; - if (wall_direction != WallDirection::Auto) { - // Skip steep overhang detection if wall direction is specified - steep_overhang_contour = true; - steep_overhang_hole = true; - } - if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions, steep_overhang_contour, steep_overhang_hole); !extrusion_coll.empty()) { - // All walls are counter-clockwise initially, so we don't need to reorient it if that's what we want - if (wall_direction != WallDirection::CounterClockwise) { - reorient_perimeters(extrusion_coll, steep_overhang_contour, steep_overhang_hole, - // Reverse internal only if the wall direction is auto - this->config->overhang_reverse_internal_only && wall_direction == WallDirection::Auto); - } - this->loops->append(extrusion_coll); - } - - const coord_t spacing = (perimeters.size() == 1) ? ext_perimeter_spacing2 : perimeter_spacing; - - if (offset_ex(infill_contour, -float(spacing / 2.)).empty()) - infill_contour.clear(); // Infill region is too small, so let's filter it out. - - // create one more offset to be used as boundary for fill - // we offset by half the perimeter spacing (to get to the actual infill boundary) - // and then we offset back and forth by half the infill spacing to only consider the - // non-collapsing regions - coord_t inset = - (loop_number < 0) ? 0 : - (loop_number == 0) ? - // one loop - ext_perimeter_spacing : - // two or more loops? - perimeter_spacing; - coord_t top_inset = inset; - - top_inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); - if(is_topmost_layer || is_bottom_layer) - inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); - else - inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); - - // simplify infill contours according to resolution - Polygons pp; - for (ExPolygon& ex : infill_contour) - ex.simplify_p(m_scaled_resolution, &pp); - ExPolygons not_filled_exp = union_ex(pp); - // collapse too narrow infill areas - const auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE)); - - ExPolygons infill_exp = offset2_ex( - not_filled_exp, - float(-min_perimeter_infill_spacing / 2.), - float(inset + min_perimeter_infill_spacing / 2.)); - // append infill areas to fill_surfaces - if (!top_expolygons.empty()) { - infill_exp = union_ex(infill_exp, offset_ex(top_expolygons, double(top_inset))); - } - this->fill_surfaces->append(infill_exp, stInternal); - - apply_extra_perimeters(infill_exp); - - // BBS: get the no-overlap infill expolygons - { - ExPolygons polyWithoutOverlap; - polyWithoutOverlap = offset2_ex( - not_filled_exp, - float(-min_perimeter_infill_spacing / 2.), - float(+min_perimeter_infill_spacing / 2.)); - if (!top_expolygons.empty()) - polyWithoutOverlap = union_ex(polyWithoutOverlap, top_expolygons); - this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); - } - } -} - void PerimeterGenerator::process_classic() { group_region_by_fuzzify(*this); @@ -3187,6 +2683,603 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim } } +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions +/** + * @brief Finds all perimeters touching a given set of reference lines, given as indexes. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndices A set of indices representing the reference points. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @param considered_inset_idx What perimeter inset index are we searching for (eg. if we are searching for first internal perimeters proximate to the current reference perimeter, this value should be set to 1 etc). + * @return std::vector A vector of indices representing the touching perimeters. + */ +std::vector findAllTouchingPerimeters(const std::vector& entities, const std::unordered_set& referenceIndices, size_t threshold_external, size_t threshold_internal , size_t considered_inset_idx) { + std::unordered_set touchingIndices; + + for (const int refIdx : referenceIndices) { + const auto& referenceEntity = entities[refIdx]; + Points referencePoints = Arachne::to_points(*referenceEntity.extrusion); + for (size_t i = 0; i < entities.size(); ++i) { + // Skip already considered references and the reference entity + if (referenceIndices.count(i) > 0) continue; + const auto& entity = entities[i]; + if (entity.extrusion->inset_idx == 0) continue; // Ignore inset index 0 (external) perimeters from the re-ordering even if they are touching + + if (entity.extrusion->inset_idx != considered_inset_idx) { // Find Inset index perimeters that match the requested inset index + continue; // skip if they dont match + } + + Points points = Arachne::to_points(*entity.extrusion); + double distance = MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(referencePoints, points); + // Add to touchingIndices if within threshold distance + size_t threshold=0; + if(referenceEntity.extrusion->inset_idx == 0) + threshold = threshold_external; + else + threshold = threshold_internal; + if (distance <= threshold) { + touchingIndices.insert(i); + } + } + } + return std::vector(touchingIndices.begin(), touchingIndices.end()); +} + +/** + * @brief Reorders perimeters based on proximity to the reference perimeter + * + * This approach finds all perimeters touching the external perimeter first and then finds all perimeters touching these new ones until none are left + * It ensures a level-by-level traversal, similar to BFS in graph theory. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndex The index of the reference perimeter. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @return std::vector The reordered list of perimeters based on proximity. + */ +std::vector reorderPerimetersByProximity(std::vector entities, size_t threshold_external, size_t threshold_internal) { + std::vector reordered; + std::unordered_set includedIndices; + + // Function to reorder perimeters starting from a given reference index + auto reorderFromReference = [&](int referenceIndex) { + std::unordered_set firstLevelIndices; + firstLevelIndices.insert(referenceIndex); + + // Find first level touching perimeters + std::vector firstLevelTouchingIndices = findAllTouchingPerimeters(entities, firstLevelIndices, threshold_external, threshold_internal, 1); + // Bring the largest first level perimeter to the front + // The longest first neighbour is most likely the dominant proximate perimeter + // hence printing it immediately after the external perimeter should speed things up + if (!firstLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); + }); + std::iter_swap(maxIt, firstLevelTouchingIndices.end() - 1); + } + // Insert first level perimeters into reordered list + reordered.push_back(entities[referenceIndex]); + includedIndices.insert(referenceIndex); + + for (int idx : firstLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Loop through all inset indices above 1 + size_t currentInsetIndex = 2; + while (true) { + std::unordered_set currentLevelIndices(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end()); + std::vector currentLevelTouchingIndices = findAllTouchingPerimeters(entities, currentLevelIndices, threshold_external, threshold_internal, currentInsetIndex); + + // Break if no more touching perimeters are found + if (currentLevelTouchingIndices.empty()) { + break; + } + + // Exclude any already included indices from the current level touching indices + currentLevelTouchingIndices.erase( + std::remove_if(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), + [&](int idx) { return includedIndices.count(idx) > 0; }), + currentLevelTouchingIndices.end()); + + // Bring the largest current level perimeter to the end + if (!currentLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); + }); + std::iter_swap(maxIt, currentLevelTouchingIndices.begin()); + } + + // Insert current level perimeters into reordered list + for (int idx : currentLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Prepare for the next level + firstLevelTouchingIndices = currentLevelTouchingIndices; + currentInsetIndex++; + } + }; + + // Loop through all perimeters and reorder starting from each inset index 0 perimeter + for (size_t refIdx = 0; refIdx < entities.size(); ++refIdx) { + if (entities[refIdx].extrusion->inset_idx == 0 && includedIndices.count(refIdx) == 0) { + reorderFromReference(refIdx); + } + } + + // Append any remaining entities that were not included + for (size_t i = 0; i < entities.size(); ++i) { + if (includedIndices.count(i) == 0) { + reordered.push_back(entities[i]); + } + } + + return reordered; +} + +/** + * @brief Reorders the vector to bring external perimeter (i.e. paths with inset index 0) that are also contours (i.e. external facing lines) to the front. + * + * This function uses a stable partition to move all external perimeter contour elements to the front of the vector, + * while maintaining the relative order of non-contour elements. + * + * @param ordered_extrusions The vector of PerimeterGeneratorArachneExtrusion to reorder. + */ +void bringContoursToFront(std::vector& ordered_extrusions) { + std::stable_partition(ordered_extrusions.begin(), ordered_extrusions.end(), [](const PerimeterGeneratorArachneExtrusion& extrusion) { + return (extrusion.extrusion->is_contour() && extrusion.extrusion->inset_idx==0); + }); +} +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions ended + + +// Thanks, Cura developers, for implementing an algorithm for generating perimeters with variable width (Arachne) that is based on the paper +// "A framework for adaptive width control of dense contour-parallel toolpaths in fused deposition modeling" +void PerimeterGenerator::process_arachne() +{ + group_region_by_fuzzify(*this); + + // other perimeters + m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); + coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing(); + + // external perimeters + m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm(); + coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width(); + coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); + coord_t ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing())); + // overhang perimeters + m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); + + // solid infill + coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); + + // prepare grown lower layer slices for overhang detection + if (this->lower_slices != nullptr && this->config->detect_overhang_wall) { + // We consider overhang any part where the entire nozzle diameter is not supported by the + // lower layer, so we take lower slices and offset them by half the nozzle diameter used + // in the current layer + double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->wall_filament - 1); + m_lower_slices_polygons = offset(*this->lower_slices, float(scale_(+nozzle_diameter / 2))); + } + + Surfaces all_surfaces = this->slices->surfaces; + + process_no_bridge(all_surfaces, perimeter_spacing, ext_perimeter_width); + // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled + double surface_simplify_resolution = (print_config->enable_arc_fitting && !this->has_fuzzy_skin) ? 0.2 * m_scaled_resolution : m_scaled_resolution; + // we need to process each island separately because we might have different + // extra perimeters for each one + for (const Surface& surface : all_surfaces) { + 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 + int sparse_infill_density = this->config->sparse_infill_density.value; + if (this->config->alternate_extra_wall && this->layer_id % 2 == 1 && !m_spiral_vase && sparse_infill_density > 0) // add alternating extra wall + loop_number++; + + // Set the bottommost layer to be one wall + const bool is_bottom_layer = (this->layer_id == object_config->raft_layers) ? true : false; + if (is_bottom_layer && this->config->only_one_wall_first_layer) + loop_number = 0; + + // Orca: set the topmost layer to be one wall according to the config + const bool is_topmost_layer = (this->upper_slices == nullptr) ? true : false; + if (is_topmost_layer && loop_number > 0 && config->only_one_wall_top) + loop_number = 0; + + auto apply_precise_outer_wall = config->precise_outer_wall && this->config->wall_sequence == WallSequence::InnerOuter; + // Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled. + ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), + apply_precise_outer_wall? -float(ext_perimeter_width - ext_perimeter_spacing ) + : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); + + Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config); + // Set params is_top_or_bottom_layer for adjusting short-wall removal sensitivity. + input_params.is_top_or_bottom_layer = (is_bottom_layer || is_topmost_layer) ? true : false; + + coord_t wall_0_inset = 0; + if (apply_precise_outer_wall) + wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2); + + //PS: One wall top surface for Arachne + ExPolygons top_expolygons; + // Calculate how many inner loops remain when TopSurfaces is selected. + const int inner_loop_number = (config->only_one_wall_top && upper_slices != nullptr) ? loop_number - 1 : -1; + + // Set one perimeter when TopSurfaces is selected. + if (config->only_one_wall_top) + loop_number = 0; + + Arachne::WallToolPathsParams input_params_tmp = input_params; + + Polygons last_p = to_polygons(last); + Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, perimeter_spacing, coord_t(loop_number + 1), + wall_0_inset, layer_height, input_params_tmp); + std::vector perimeters = wallToolPaths.getToolPaths(); + ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); + + // Check if there are some remaining perimeters to generate (the number of perimeters + // is greater than one together with enabled the single perimeter on top surface feature). + if (inner_loop_number >= 0) { + assert(upper_slices != nullptr); + + // Infill contour bounding box. + BoundingBox infill_contour_bbox = get_extents(infill_contour); + infill_contour_bbox.offset(SCALED_EPSILON); + + coord_t perimeter_width = this->perimeter_flow.scaled_width(); + + // Get top ExPolygons from current infill contour. + Polygons upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); + top_expolygons = diff_ex(infill_contour, upper_slices_clipped); + + if (!top_expolygons.empty()) { + if (lower_slices != nullptr) { + const float bridge_offset = float(std::max(ext_perimeter_spacing, perimeter_width)); + const Polygons lower_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*lower_slices, infill_contour_bbox); + const ExPolygons current_slices_bridges = offset_ex(diff_ex(top_expolygons, lower_slices_clipped), bridge_offset); + + // Remove bridges from top surface polygons. + top_expolygons = diff_ex(top_expolygons, current_slices_bridges); + } + + // Filter out areas that are too thin and expand top surface polygons a bit to hide the wall line. + // ORCA: skip if the top surface area is smaller than "min_width_top_surface" + const float top_surface_min_width = std::max(float(ext_perimeter_spacing) / 4.f + scaled(0.00001), float(scale_(config->min_width_top_surface.get_abs_value(unscale_(perimeter_width)))) / 4.f); + // Shrink the polygon to remove the small areas, then expand it back out plus a maragin to hide the wall line a little. + // ORCA: Expand the polygon with half the perimeter width in addition to the contracted amount, + // not the full perimeter width as PS does, to enable thin lettering to print on the top surface without nozzle collisions + // due to thin lines being generated + top_expolygons = offset2_ex(top_expolygons, -top_surface_min_width, top_surface_min_width + float(perimeter_width * 0.85)); + + // Get the not-top ExPolygons (including bridges) from current slices and expanded real top ExPolygons (without bridges). + const ExPolygons not_top_expolygons = diff_ex(infill_contour, top_expolygons); + + // Get final top ExPolygons. + top_expolygons = intersection_ex(top_expolygons, infill_contour); + + const Polygons not_top_polygons = to_polygons(not_top_expolygons); + Arachne::WallToolPaths inner_wall_tool_paths(not_top_polygons, perimeter_spacing, perimeter_spacing, coord_t(inner_loop_number + 1), 0, layer_height, input_params_tmp); + std::vector inner_perimeters = inner_wall_tool_paths.getToolPaths(); + + // Recalculate indexes of inner perimeters before merging them. + if (!perimeters.empty()) { + for (Arachne::VariableWidthLines &inner_perimeter : inner_perimeters) { + if (inner_perimeter.empty()) + continue; + for (Arachne::ExtrusionLine &el : inner_perimeter) + ++el.inset_idx; + } + } + + perimeters.insert(perimeters.end(), inner_perimeters.begin(), inner_perimeters.end()); + infill_contour = union_ex(top_expolygons, inner_wall_tool_paths.getInnerContour()); + } else { + // There is no top surface ExPolygon, so we call Arachne again with parameters + // like when the single perimeter feature is disabled. + Arachne::WallToolPaths no_single_perimeter_tool_paths(last_p, bead_width_0, perimeter_spacing, coord_t(inner_loop_number + 2), wall_0_inset, layer_height, input_params_tmp); + perimeters = no_single_perimeter_tool_paths.getToolPaths(); + infill_contour = union_ex(no_single_perimeter_tool_paths.getInnerContour()); + } + } + //PS + + loop_number = int(perimeters.size()) - 1; + + #ifdef ARACHNE_DEBUG + { + static int iRun = 0; + export_perimeters_to_svg(debug_out_path("arachne-perimeters-%d-%d.svg", layer_id, iRun++), to_polygons(last), perimeters, union_ex(wallToolPaths.getInnerContour())); + } +#endif + + // All closed ExtrusionLine should have the same the first and the last point. + // But in rare cases, Arachne produce ExtrusionLine marked as closed but without + // equal the first and the last point. + assert([&perimeters = std::as_const(perimeters)]() -> bool { + for (const Arachne::VariableWidthLines& perimeter : perimeters) + for (const Arachne::ExtrusionLine& el : perimeter) + if (el.is_closed && el.junctions.front().p != el.junctions.back().p) + return false; + return true; + }()); + + int start_perimeter = int(perimeters.size()) - 1; + int end_perimeter = -1; + int direction = -1; + + bool is_outer_wall_first = + this->config->wall_sequence == WallSequence::OuterInner || + this->config->wall_sequence == WallSequence::InnerOuterInner; + + if (layer_id == 0){ // disable inner outer inner algorithm after the first layer + is_outer_wall_first = + this->config->wall_sequence == WallSequence::OuterInner; + } + if (is_outer_wall_first) { + start_perimeter = 0; + end_perimeter = int(perimeters.size()); + direction = 1; + } + + std::vector all_extrusions; + for (int perimeter_idx = start_perimeter; perimeter_idx != end_perimeter; perimeter_idx += direction) { + if (perimeters[perimeter_idx].empty()) + continue; + for (Arachne::ExtrusionLine& wall : perimeters[perimeter_idx]) + all_extrusions.emplace_back(&wall); + } + + // Find topological order with constraints from extrusions_constrains. + std::vector blocked(all_extrusions.size(), 0); // Value indicating how many extrusions it is blocking (preceding extrusions) an extrusion. + std::vector> blocking(all_extrusions.size()); // Each extrusion contains a vector of extrusions that are blocked by this extrusion. + std::unordered_map map_extrusion_to_idx; + for (size_t idx = 0; idx < all_extrusions.size(); idx++) + map_extrusion_to_idx.emplace(all_extrusions[idx], idx); + + auto extrusions_constrains = Arachne::WallToolPaths::getRegionOrder(all_extrusions, is_outer_wall_first); + for (auto [before, after] : extrusions_constrains) { + auto after_it = map_extrusion_to_idx.find(after); + ++blocked[after_it->second]; + blocking[map_extrusion_to_idx.find(before)->second].emplace_back(after_it->second); + } + + std::vector processed(all_extrusions.size(), false); // Indicate that the extrusion was already processed. + Point current_position = all_extrusions.empty() ? Point::Zero() : all_extrusions.front()->junctions.front().p; // Some starting position. + std::vector ordered_extrusions; // To store our result in. At the end we'll std::swap. + ordered_extrusions.reserve(all_extrusions.size()); + + while (ordered_extrusions.size() < all_extrusions.size()) { + size_t best_candidate = 0; + double best_distance_sqr = std::numeric_limits::max(); + bool is_best_closed = false; + + std::vector available_candidates; + for (size_t candidate = 0; candidate < all_extrusions.size(); ++candidate) { + if (processed[candidate] || blocked[candidate]) + continue; // Not a valid candidate. + available_candidates.push_back(candidate); + } + + std::sort(available_candidates.begin(), available_candidates.end(), [&all_extrusions](const size_t a_idx, const size_t b_idx) -> bool { + return all_extrusions[a_idx]->is_closed < all_extrusions[b_idx]->is_closed; + }); + + for (const size_t candidate_path_idx : available_candidates) { + auto& path = all_extrusions[candidate_path_idx]; + + if (path->junctions.empty()) { // No vertices in the path. Can't find the start position then or really plan it in. Put that at the end. + if (best_distance_sqr == std::numeric_limits::max()) { + best_candidate = candidate_path_idx; + is_best_closed = path->is_closed; + } + continue; + } + + const Point candidate_position = path->junctions.front().p; + double distance_sqr = (current_position - candidate_position).cast().norm(); + if (distance_sqr < best_distance_sqr) { // Closer than the best candidate so far. + if (path->is_closed || (!path->is_closed && best_distance_sqr != std::numeric_limits::max()) || (!path->is_closed && !is_best_closed)) { + best_candidate = candidate_path_idx; + best_distance_sqr = distance_sqr; + is_best_closed = path->is_closed; + } + } + } + + auto& best_path = all_extrusions[best_candidate]; + ordered_extrusions.push_back({ best_path, best_path->is_contour() }); + processed[best_candidate] = true; + for (size_t unlocked_idx : blocking[best_candidate]) + blocked[unlocked_idx]--; + + if (!best_path->junctions.empty()) { //If all paths were empty, the best path is still empty. We don't upate the current position then. + if (best_path->is_closed) + current_position = best_path->junctions[0].p; //We end where we started. + else + current_position = best_path->junctions.back().p; //Pick the other end from where we started. + } + } + + // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer + if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer + if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering + int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. + int arr_i, arr_j = 0; // indexes to run through the walls in the for loops + int outer, first_internal, second_internal, max_internal, current_perimeter; // allocate index values + + // To address any remaining scenarios where the outer perimeter contour is not first on the list as arachne sometimes reorders the perimeters when clustering + // for OI mode that is used the basis for IOI + bringContoursToFront(ordered_extrusions); + std::vector reordered_extrusions; + + // Debug statement to print spacing values: + //printf("External threshold - Ext perimeter: %d Ext spacing: %d Int perimeter: %d Int spacing: %d\n", this->ext_perimeter_flow.scaled_width(),this->ext_perimeter_flow.scaled_spacing(),this->perimeter_flow.scaled_width(), this->perimeter_flow.scaled_spacing()); + + // Get searching thresholds. For an external perimeter we take the external perimeter spacing/2 plus the internal perimeter spacing/2 and expand by 3% to cover + // rounding errors + coord_t threshold_external = (this->ext_perimeter_flow.scaled_spacing()/2 + this->perimeter_flow.scaled_spacing()/2)*1.03; + + // For the intenal perimeter threshold, the distance is the internal perimeter spacing expanded by 3% to cover rounding errors. + coord_t threshold_internal = this->perimeter_flow.scaled_spacing() * 1.03; + + // Re-order extrusions based on distance + // Alorithm will aggresively optimise for the appearance of the outermost perimeter + ordered_extrusions = reorderPerimetersByProximity(ordered_extrusions,threshold_external,threshold_internal ); + reordered_extrusions = ordered_extrusions; // copy them into the reordered extrusions vector to allow for IOI operations to be performed below without altering the base ordered extrusions list. + + // Now start the sandwich mode wall re-ordering using the reordered_extrusions as the basis + // scan to find the external perimeter, first internal, second internal and last perimeter in the island. + // We then advance the position index to move to the second island and continue until there are no more + // perimeters left. + while (position < reordered_extrusions.size()) { + outer = first_internal = second_internal = current_perimeter = -1; // initialise all index values to -1 + max_internal = reordered_extrusions.size()-1; // initialise the maximum internal perimeter to the last perimeter on the extrusion list + // run through the walls to get the index values that need re-ordering until the first one for each + // is found. Start at "position" index to enable the for loop to iterate for multiple external + // perimeters in a single island + // printf("Reorder Loop. Position %d, extrusion list size: %d, Outer index %d, inner index %d, second inner index %d\n", position, reordered_extrusions.size(),outer,first_internal,second_internal); + for (arr_i = position; arr_i < reordered_extrusions.size(); ++arr_i) { + // printf("Perimeter: extrusion inset index %d, ordered extrusions array position %d\n",reordered_extrusions[arr_i].extrusion->inset_idx, arr_i); + switch (reordered_extrusions[arr_i].extrusion->inset_idx) { + case 0: // external perimeter + if (outer == -1) + outer = arr_i; + break; + case 1: // first internal wall + if (first_internal==-1 && arr_i>outer && outer!=-1){ + first_internal = arr_i; + } + break; + case 2: // second internal wall + if (second_internal == -1 && arr_i > first_internal && outer!=-1){ + second_internal = arr_i; + } + break; + } + if(outer >-1 && first_internal>-1 && reordered_extrusions[arr_i].extrusion->inset_idx == 0){ // found a new external perimeter after we've found at least a first internal perimeter to re-order. + // This means we entered a new island. + arr_i=arr_i-1; //step back one perimeter + max_internal = arr_i; // new maximum internal perimeter is now this as we have found a new external perimeter, hence a new island. + break; // exit the for loop + } + } + + // printf("Layer ID %d, Outer index %d, inner index %d, second inner index %d, maximum internal perimeter %d \n",layer_id,outer,first_internal,second_internal, max_internal); + if (outer > -1 && first_internal > -1 && second_internal > -1) { // found all three perimeters to re-order? If not the perimeters will be processed outside in. + std::vector inner_outer_extrusions; // temporary array to hold extrusions for reordering + inner_outer_extrusions.resize(max_internal - position + 1); // reserve array containing the number of perimeters before a new island. Variables are array indexes hence need to add +1 to convert to position allocations + // printf("Allocated array size %d, max_internal index %d, start position index %d \n",max_internal-position+1,max_internal,position); + + for (arr_j = max_internal; arr_j >=position; --arr_j){ // go inside out towards the external perimeter (perimeters in reverse order) and store all internal perimeters until the first one identified with inset index 2 + if(arr_j >= second_internal){ + //printf("Inside out loop: Mapped perimeter index %d to array position %d\n", arr_j, max_internal-arr_j); + inner_outer_extrusions[max_internal-arr_j] = reordered_extrusions[arr_j]; + current_perimeter++; + } + } + + for (arr_j = position; arr_j < second_internal; ++arr_j){ // go outside in and map the remaining perimeters (external and first internal wall(s)) using the outside in wall order + // printf("Outside in loop: Mapped perimeter index %d to array position %d\n", arr_j, current_perimeter+1); + inner_outer_extrusions[++current_perimeter] = reordered_extrusions[arr_j]; + } + + for(arr_j = position; arr_j <= max_internal; ++arr_j) // replace perimeter array with the new re-ordered array + ordered_extrusions[arr_j] = inner_outer_extrusions[arr_j-position]; + } + // go to the next perimeter from the current position to continue scanning for external walls in the same island + position = arr_i + 1; + } + } + } + + bool steep_overhang_contour = false; + bool steep_overhang_hole = false; + const WallDirection wall_direction = config->wall_direction; + if (wall_direction != WallDirection::Auto) { + // Skip steep overhang detection if wall direction is specified + steep_overhang_contour = true; + steep_overhang_hole = true; + } + if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions, steep_overhang_contour, steep_overhang_hole); !extrusion_coll.empty()) { + // All walls are counter-clockwise initially, so we don't need to reorient it if that's what we want + if (wall_direction != WallDirection::CounterClockwise) { + reorient_perimeters(extrusion_coll, steep_overhang_contour, steep_overhang_hole, + // Reverse internal only if the wall direction is auto + this->config->overhang_reverse_internal_only && wall_direction == WallDirection::Auto); + } + this->loops->append(extrusion_coll); + } + + const coord_t spacing = (perimeters.size() == 1) ? ext_perimeter_spacing2 : perimeter_spacing; + + if (offset_ex(infill_contour, -float(spacing / 2.)).empty()) + infill_contour.clear(); // Infill region is too small, so let's filter it out. + + // create one more offset to be used as boundary for fill + // we offset by half the perimeter spacing (to get to the actual infill boundary) + // and then we offset back and forth by half the infill spacing to only consider the + // non-collapsing regions + coord_t inset = + (loop_number < 0) ? 0 : + (loop_number == 0) ? + // one loop + ext_perimeter_spacing : + // two or more loops? + perimeter_spacing; + coord_t top_inset = inset; + + top_inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + if(is_topmost_layer || is_bottom_layer) + inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + else + inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); + + // simplify infill contours according to resolution + Polygons pp; + for (ExPolygon& ex : infill_contour) + ex.simplify_p(m_scaled_resolution, &pp); + ExPolygons not_filled_exp = union_ex(pp); + // collapse too narrow infill areas + const auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE)); + + ExPolygons infill_exp = offset2_ex( + not_filled_exp, + float(-min_perimeter_infill_spacing / 2.), + float(inset + min_perimeter_infill_spacing / 2.)); + // append infill areas to fill_surfaces + if (!top_expolygons.empty()) { + infill_exp = union_ex(infill_exp, offset_ex(top_expolygons, double(top_inset))); + } + this->fill_surfaces->append(infill_exp, stInternal); + + apply_extra_perimeters(infill_exp); + + // BBS: get the no-overlap infill expolygons + { + ExPolygons polyWithoutOverlap; + polyWithoutOverlap = offset2_ex( + not_filled_exp, + float(-min_perimeter_infill_spacing / 2.), + float(+min_perimeter_infill_spacing / 2.)); + if (!top_expolygons.empty()) + polyWithoutOverlap = union_ex(polyWithoutOverlap, top_expolygons); + this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); + } + } +} + bool PerimeterGeneratorLoop::is_internal_contour() const { // An internal contour is a contour containing no other contours From ec591dcef111462d0f678572ba387aadb84f1125 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:00:27 +0800 Subject: [PATCH 071/100] Fix per-object overhang slow down (#7976) * Make sure the `m_extrusion_quality_estimator.set_current_object()` is called after regional config has been applied (SoftFever/OrcaSlicer#7946) * Init `m_extrusion_quality_estimator` based on region config * Revert "Make sure the `m_extrusion_quality_estimator.set_current_object()` is called after regional config has been applied (SoftFever/OrcaSlicer#7946)" This reverts commit d13d4a47b78b6f80cdc4bff935ea8c3c52ff556b. * Call `m_extrusion_quality_estimator.set_current_object` regardless, because that doesn't hurt * Add a comment --- src/libslic3r/GCode.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 29769752da..c4bbf5ed19 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3823,10 +3823,16 @@ LayerResult GCode::process_layer( return next_extruder; }; - if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic) { - for (const auto &layer_to_print : layers) { - m_extrusion_quality_estimator.prepare_for_new_layer(layer_to_print.original_object, - layer_to_print.object_layer); + for (const auto &layer_to_print : layers) { + if (layer_to_print.object_layer) { + const auto& regions = layer_to_print.object_layer->regions(); + const bool enable_overhang_speed = std::any_of(regions.begin(), regions.end(), [](const LayerRegion* r) { + return r->has_extrusions() && r->region().config().enable_overhang_speed && !r->region().config().overhang_speed_classic; + }); + if (enable_overhang_speed) { + m_extrusion_quality_estimator.prepare_for_new_layer(layer_to_print.original_object, + layer_to_print.object_layer); + } } } @@ -4190,8 +4196,11 @@ LayerResult GCode::process_layer( } } - if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic) - m_extrusion_quality_estimator.set_current_object(&instance_to_print.print_object); + // Orca(#7946): set current obj regardless of the `enable_overhang_speed` value, because + // `enable_overhang_speed` is a PrintRegionConfig and here we don't have a region yet. + // And no side effect doing this even if `enable_overhang_speed` is off, so don't bother + // checking anything here. + m_extrusion_quality_estimator.set_current_object(&instance_to_print.print_object); // When starting a new object, use the external motion planner for the first travel move. const Point &offset = instance_to_print.print_object.instances()[instance_to_print.instance_id].shift; From f3fddcb225d02abc7696050cafe3428a7f1878bd Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:01:15 +0800 Subject: [PATCH 072/100] Fix issue that support surfaces get filtered out unexpectly (#7988) Fix issue that support surfaces get filtered out unexpectly (SoftFever/OrcaSlicer#7935) --- src/libslic3r/Support/SupportMaterial.cpp | 474 ++++++++-------------- src/libslic3r/Support/SupportMaterial.hpp | 170 ++------ 2 files changed, 204 insertions(+), 440 deletions(-) diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index 46dd1d8ac9..4d0aafcffb 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -4,7 +4,7 @@ #include "Layer.hpp" #include "Print.hpp" #include "SupportMaterial.hpp" -#include "Fill/FillBase.hpp" +#include "SupportCommon.hpp" #include "Geometry.hpp" #include "Point.hpp" #include "MutablePolygon.hpp" @@ -70,17 +70,17 @@ namespace Slic3r { static constexpr bool support_with_sheath = false; #ifdef SLIC3R_DEBUG -const char* support_surface_type_to_color_name(const PrintObjectSupportMaterial::SupporLayerType surface_type) +const char* support_surface_type_to_color_name(const SupporLayerType surface_type) { switch (surface_type) { - case PrintObjectSupportMaterial::sltTopContact: return "rgb(255,0,0)"; // "red"; - case PrintObjectSupportMaterial::sltTopInterface: return "rgb(0,255,0)"; // "green"; - case PrintObjectSupportMaterial::sltBase: return "rgb(0,0,255)"; // "blue"; - case PrintObjectSupportMaterial::sltBottomInterface:return "rgb(255,255,128)"; // yellow - case PrintObjectSupportMaterial::sltBottomContact: return "rgb(255,0,255)"; // magenta - case PrintObjectSupportMaterial::sltRaftInterface: return "rgb(0,255,255)"; - case PrintObjectSupportMaterial::sltRaftBase: return "rgb(128,128,128)"; - case PrintObjectSupportMaterial::sltUnknown: return "rgb(128,0,0)"; // maroon + case SupporLayerType::TopContact: return "rgb(255,0,0)"; // "red"; + case SupporLayerType::TopInterface: return "rgb(0,255,0)"; // "green"; + case SupporLayerType::Base: return "rgb(0,0,255)"; // "blue"; + case SupporLayerType::BottomInterface:return "rgb(255,255,128)"; // yellow + case SupporLayerType::BottomContact: return "rgb(255,0,255)"; // magenta + case SupporLayerType::RaftInterface: return "rgb(0,255,255)"; + case SupporLayerType::RaftBase: return "rgb(128,128,128)"; + case SupporLayerType::Unknown: return "rgb(128,0,0)"; // maroon default: return "rgb(64,64,64)"; }; } @@ -97,28 +97,28 @@ void export_support_surface_type_legend_to_svg(SVG &svg, const Point &pos) coord_t pos_x = pos_x0; coord_t pos_y = pos(1) + scale_(1.5); coord_t step_x = scale_(10.); - svg.draw_legend(Point(pos_x, pos_y), "top contact" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltTopContact)); + svg.draw_legend(Point(pos_x, pos_y), "top contact" , support_surface_type_to_color_name(SupporLayerType::TopContact)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "top iface" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltTopInterface)); + svg.draw_legend(Point(pos_x, pos_y), "top iface" , support_surface_type_to_color_name(SupporLayerType::TopInterface)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "base" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltBase)); + svg.draw_legend(Point(pos_x, pos_y), "base" , support_surface_type_to_color_name(SupporLayerType::Base)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "bottom iface" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltBottomInterface)); + svg.draw_legend(Point(pos_x, pos_y), "bottom iface" , support_surface_type_to_color_name(SupporLayerType::BottomInterface)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "bottom contact" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltBottomContact)); + svg.draw_legend(Point(pos_x, pos_y), "bottom contact" , support_surface_type_to_color_name(SupporLayerType::BottomContact)); // 2nd row pos_x = pos_x0; pos_y = pos(1)+scale_(2.8); - svg.draw_legend(Point(pos_x, pos_y), "raft interface" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltRaftInterface)); + svg.draw_legend(Point(pos_x, pos_y), "raft interface" , support_surface_type_to_color_name(SupporLayerType::RaftInterface)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "raft base" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltRaftBase)); + svg.draw_legend(Point(pos_x, pos_y), "raft base" , support_surface_type_to_color_name(SupporLayerType::RaftBase)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "unknown" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltUnknown)); + svg.draw_legend(Point(pos_x, pos_y), "unknown" , support_surface_type_to_color_name(SupporLayerType::Unknown)); pos_x += step_x; - svg.draw_legend(Point(pos_x, pos_y), "intermediate" , support_surface_type_to_color_name(PrintObjectSupportMaterial::sltIntermediate)); + svg.draw_legend(Point(pos_x, pos_y), "intermediate" , support_surface_type_to_color_name(SupporLayerType::Intermediate)); } -void export_print_z_polygons_to_svg(const char *path, PrintObjectSupportMaterial::MyLayer ** const layers, size_t n_layers) +void export_print_z_polygons_to_svg(const char *path, SupportGeneratorLayer ** const layers, size_t n_layers) { BoundingBox bbox; for (int i = 0; i < n_layers; ++ i) @@ -138,7 +138,7 @@ void export_print_z_polygons_to_svg(const char *path, PrintObjectSupportMaterial void export_print_z_polygons_and_extrusions_to_svg( const char *path, - PrintObjectSupportMaterial::MyLayer ** const layers, + SupportGeneratorLayer ** const layers, size_t n_layers, SupportLayer &support_layer) { @@ -426,36 +426,36 @@ PrintObjectSupportMaterial::PrintObjectSupportMaterial(const PrintObject *object } // Using the std::deque as an allocator. -inline PrintObjectSupportMaterial::MyLayer& layer_allocate( - std::deque &layer_storage, - PrintObjectSupportMaterial::SupporLayerType layer_type) +inline SupportGeneratorLayer& layer_allocate( + std::deque &layer_storage, + SupporLayerType layer_type) { - layer_storage.push_back(PrintObjectSupportMaterial::MyLayer()); + layer_storage.push_back(SupportGeneratorLayer()); layer_storage.back().layer_type = layer_type; return layer_storage.back(); } -inline PrintObjectSupportMaterial::MyLayer& layer_allocate( - std::deque &layer_storage, +inline SupportGeneratorLayer& layer_allocate( + std::deque &layer_storage, tbb::spin_mutex &layer_storage_mutex, - PrintObjectSupportMaterial::SupporLayerType layer_type) + SupporLayerType layer_type) { layer_storage_mutex.lock(); - layer_storage.push_back(PrintObjectSupportMaterial::MyLayer()); - PrintObjectSupportMaterial::MyLayer *layer_new = &layer_storage.back(); + layer_storage.push_back(SupportGeneratorLayer()); + SupportGeneratorLayer *layer_new = &layer_storage.back(); layer_storage_mutex.unlock(); layer_new->layer_type = layer_type; return *layer_new; } -inline void layers_append(PrintObjectSupportMaterial::MyLayersPtr &dst, const PrintObjectSupportMaterial::MyLayersPtr &src) +inline void layers_append(SupportGeneratorLayersPtr &dst, const SupportGeneratorLayersPtr &src) { dst.insert(dst.end(), src.begin(), src.end()); } // Support layer that is covered by some form of dense interface. -static constexpr const std::initializer_list support_types_interface { - PrintObjectSupportMaterial::sltRaftInterface, PrintObjectSupportMaterial::sltBottomContact, PrintObjectSupportMaterial::sltBottomInterface, PrintObjectSupportMaterial::sltTopContact, PrintObjectSupportMaterial::sltTopInterface +static constexpr const std::initializer_list support_types_interface { + SupporLayerType::RaftInterface, SupporLayerType::BottomContact, SupporLayerType::BottomInterface, SupporLayerType::TopContact, SupporLayerType::TopInterface }; void PrintObjectSupportMaterial::generate(PrintObject &object) @@ -468,7 +468,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // Layer instances will be allocated by std::deque and they will be kept until the end of this function call. // The layers will be referenced by various LayersPtr (of type std::vector) - MyLayerStorage layer_storage; + SupportGeneratorLayerStorage layer_storage; BOOST_LOG_TRIVIAL(info) << "Support generator - Creating top contacts"; @@ -481,7 +481,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // should the support material expose to the object in order to guarantee // that it will be effective, regardless of how it's built below. // If raft is to be generated, the 1st top_contact layer will contain the 1st object layer silhouette without holes. - MyLayersPtr top_contacts = this->top_contact_layers(object, buildplate_covered, layer_storage); + SupportGeneratorLayersPtr top_contacts = this->top_contact_layers(object, buildplate_covered, layer_storage); if (top_contacts.empty()) // Nothing is supported, no supports are generated. return; @@ -492,7 +492,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) #ifdef SLIC3R_DEBUG static int iRun = 0; iRun ++; - for (const MyLayer *layer : top_contacts) + for (const SupportGeneratorLayer *layer : top_contacts) Slic3r::SVG::export_expolygons( debug_out_path("support-top-contacts-%d-%lf.svg", iRun, layer->print_z), union_ex(layer->polygons)); @@ -505,7 +505,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // layer_support_areas contains the per object layer support areas. These per object layer support areas // may get merged and trimmed by this->generate_base_layers() if the support layers are not synchronized with object layers. std::vector layer_support_areas; - MyLayersPtr bottom_contacts = this->bottom_contact_layers_and_layer_support_areas( + SupportGeneratorLayersPtr bottom_contacts = this->bottom_contact_layers_and_layer_support_areas( object, top_contacts, buildplate_covered, layer_storage, layer_support_areas); @@ -526,13 +526,13 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // The layers may or may not be synchronized with the object layers, depending on the configuration. // For example, a single nozzle multi material printing will need to generate a waste tower, which in turn // wastes less material, if there are as little tool changes as possible. - MyLayersPtr intermediate_layers = this->raft_and_intermediate_support_layers( + SupportGeneratorLayersPtr intermediate_layers = this->raft_and_intermediate_support_layers( object, bottom_contacts, top_contacts, layer_storage); this->trim_support_layers_by_object(object, top_contacts, m_slicing_params.gap_support_object, m_slicing_params.gap_object_support, m_support_params.gap_xy); #ifdef SLIC3R_DEBUG - for (const MyLayer *layer : top_contacts) + for (const SupportGeneratorLayer *layer : top_contacts) Slic3r::SVG::export_expolygons( debug_out_path("support-top-contacts-trimmed-by-object-%d-%lf.svg", iRun, layer->print_z), union_ex(layer->polygons)); @@ -544,7 +544,7 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) this->generate_base_layers(object, bottom_contacts, top_contacts, intermediate_layers, layer_support_areas); #ifdef SLIC3R_DEBUG - for (MyLayersPtr::const_iterator it = intermediate_layers.begin(); it != intermediate_layers.end(); ++ it) + for (SupportGeneratorLayersPtr::const_iterator it = intermediate_layers.begin(); it != intermediate_layers.end(); ++ it) Slic3r::SVG::export_expolygons( debug_out_path("support-base-layers-%d-%lf.svg", iRun, (*it)->print_z), union_ex((*it)->polygons)); @@ -570,17 +570,17 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // If raft is to be generated, the 1st top_contact layer will contain the 1st object layer silhouette with holes filled. // There is also a 1st intermediate layer containing bases of support columns. // Inflate the bases of the support columns and create the raft base under the object. - MyLayersPtr raft_layers = this->generate_raft_base(object, top_contacts, interface_layers, base_interface_layers, intermediate_layers, layer_storage); + SupportGeneratorLayersPtr raft_layers = this->generate_raft_base(object, top_contacts, interface_layers, base_interface_layers, intermediate_layers, layer_storage); if (object.print()->canceled()) return; #ifdef SLIC3R_DEBUG - for (const MyLayer *l : interface_layers) + for (const SupportGeneratorLayer *l : interface_layers) Slic3r::SVG::export_expolygons( debug_out_path("support-interface-layers-%d-%lf.svg", iRun, l->print_z), union_ex(l->polygons)); - for (const MyLayer *l : base_interface_layers) + for (const SupportGeneratorLayer *l : base_interface_layers) Slic3r::SVG::export_expolygons( debug_out_path("support-base-interface-layers-%d-%lf.svg", iRun, l->print_z), union_ex(l->polygons)); @@ -603,94 +603,10 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) // intermediate_layers.clear(); // interface_layers.clear(); - // Install support layers into the object. - // A support layer installed on a PrintObject has a unique print_z. - MyLayersPtr layers_sorted; - layers_sorted.reserve(raft_layers.size() + bottom_contacts.size() + top_contacts.size() + intermediate_layers.size() + interface_layers.size() + base_interface_layers.size()); - layers_append(layers_sorted, raft_layers); - layers_append(layers_sorted, bottom_contacts); - layers_append(layers_sorted, top_contacts); - layers_append(layers_sorted, intermediate_layers); - layers_append(layers_sorted, interface_layers); - layers_append(layers_sorted, base_interface_layers); - // Sort the layers lexicographically by a raising print_z and a decreasing height. - std::sort(layers_sorted.begin(), layers_sorted.end(), [](auto *l1, auto *l2) { return *l1 < *l2; }); - - // BBS: MusangKing - erase mini layer heights (< 0.08mm) arised by top/bottom_z_distance & top_contacts under variable layer height - if (this->synchronize_layers() && !object.slicing_parameters().soluble_interface) { - auto thres = m_support_params.support_layer_height_min - EPSILON; - for (size_t i = 1; i < layers_sorted.size() - 1; ++i) { - auto& lowr = layers_sorted[i - 1]; - auto& curr = layers_sorted[i]; - auto& higr = layers_sorted[i + 1]; - // "Rounding" suspicious top/bottom contacts - if (curr->layer_type == sltTopContact || curr->layer_type == sltBottomContact) { - // Check adjacent-layer print_z diffs - coordf_t height_low = curr->print_z - lowr->print_z; - coordf_t height_high = higr->print_z - curr->print_z; - if (height_low < thres || height_high < thres) { - // Mark to-be-deleted layer as Unknown type - curr->layer_type = sltUnknown; - } - } - } - // Retains the order - layers_sorted.erase(std::remove_if(layers_sorted.begin(), layers_sorted.end(), [](MyLayer* l) {return l->layer_type == sltUnknown; }), layers_sorted.end()); - } - - int layer_id = 0; - int layer_id_interface = 0; - assert(object.support_layers().empty()); - for (size_t i = 0; i < layers_sorted.size();) { - // Find the last layer with roughly the same print_z, find the minimum layer height of all. - // Due to the floating point inaccuracies, the print_z may not be the same even if in theory they should. - size_t j = i + 1; - coordf_t zmax = layers_sorted[i]->print_z + EPSILON; - for (; j < layers_sorted.size() && layers_sorted[j]->print_z <= zmax; ++j) ; - // Assign an average print_z to the set of layers with nearly equal print_z. - coordf_t zavg = 0.5 * (layers_sorted[i]->print_z + layers_sorted[j - 1]->print_z); - coordf_t height_min = layers_sorted[i]->height; - bool empty = true; - // For snug supports, layers where the direction of the support interface shall change are accounted for. - size_t num_interfaces = 0; - size_t num_top_contacts = 0; - double top_contact_bottom_z = 0; - for (size_t u = i; u < j; ++u) { - MyLayer &layer = *layers_sorted[u]; - if (! layer.polygons.empty()) { - empty = false; - num_interfaces += one_of(layer.layer_type, support_types_interface); - if (layer.layer_type == sltTopContact) { - ++ num_top_contacts; - assert(num_top_contacts <= 1); - // All top contact layers sharing this print_z shall also share bottom_z. - //assert(num_top_contacts == 1 || (top_contact_bottom_z - layer.bottom_z) < EPSILON); - top_contact_bottom_z = layer.bottom_z; - } - } - layer.print_z = zavg; - height_min = std::min(height_min, layer.height); - } - if (! empty) { - // Here the upper_layer and lower_layer pointers are left to null at the support layers, - // as they are never used. These pointers are candidates for removal. - bool this_layer_contacts_only = num_top_contacts > 0 && num_top_contacts == num_interfaces; - size_t this_layer_id_interface = layer_id_interface; - if (this_layer_contacts_only) { - // Find a supporting layer for its interface ID. - for (auto it = object.support_layers().rbegin(); it != object.support_layers().rend(); ++ it) - if (const SupportLayer &other_layer = **it; std::abs(other_layer.print_z - top_contact_bottom_z) < EPSILON) { - // other_layer supports this top contact layer. Assign a different support interface direction to this layer - // from the layer that supports it. - this_layer_id_interface = other_layer.interface_id() + 1; - } - } - object.add_support_layer(layer_id ++, this_layer_id_interface, height_min, zavg); - if (num_interfaces && ! this_layer_contacts_only) - ++ layer_id_interface; - } - i = j; - } +#ifdef SLIC3R_DEBUG + SupportGeneratorLayersPtr layers_sorted = +#endif // SLIC3R_DEBUG + generate_support_layers(object, raft_layers, bottom_contacts, top_contacts, intermediate_layers, interface_layers, base_interface_layers); BOOST_LOG_TRIVIAL(info) << "Support generator - Generating tool paths"; @@ -1841,17 +1757,16 @@ static inline std::tuple detect_contacts( // Allocate one, possibly two support contact layers. // For "thick" overhangs, one support layer will be generated to support normal extrusions, the other to support the "thick" extrusions. -static inline std::pair new_contact_layer( +static inline std::pair new_contact_layer( const PrintConfig &print_config, const PrintObjectConfig &object_config, const SlicingParameters &slicing_params, const coordf_t support_layer_height_min, const Layer &layer, - std::deque &layer_storage, - tbb::spin_mutex &layer_storage_mutex) + SupportGeneratorLayerStorage &layer_storage) { double print_z, bottom_z, height; - PrintObjectSupportMaterial::MyLayer* bridging_layer = nullptr; + SupportGeneratorLayer* bridging_layer = nullptr; assert(layer.id() >= slicing_params.raft_layers()); size_t layer_id = layer.id() - slicing_params.raft_layers(); @@ -1877,7 +1792,7 @@ static inline std::pair(nullptr, nullptr); + return std::pair(nullptr, nullptr); } const bool has_raft = slicing_params.raft_layers() > 1; const coordf_t min_print_z = has_raft ? slicing_params.raft_contact_top_z : slicing_params.first_print_layer_height; @@ -1911,7 +1826,7 @@ static inline std::pairidx_object_layer_above = layer_id; bridging_layer->print_z = bridging_print_z; if (bridging_print_z == slicing_params.first_print_layer_height) { @@ -1929,7 +1844,7 @@ static inline std::pairprint_z < l2->print_z; }); + std::sort(layers.begin(), layers.end(), [](const SupportGeneratorLayer *l1, const SupportGeneratorLayer *l2) { return l1->print_z < l2->print_z; }); int i = 0; int k = 0; @@ -2103,7 +2018,7 @@ static void merge_contact_layers(const SlicingParameters &slicing_params, double for (; j < (int)layers.size() && layers[j]->print_z < slicing_params.first_print_layer_height + support_layer_height_min - EPSILON; ++ j); if (j > 0) { // Merge the layers layers (0) to (j - 1) into the layers[0]. - PrintObjectSupportMaterial::MyLayer &dst = *layers.front(); + SupportGeneratorLayer &dst = *layers.front(); for (int u = 1; u < j; ++ u) dst.merge(std::move(*layers[u])); // Snap the first layer to the 1st layer height. @@ -2121,7 +2036,7 @@ static void merge_contact_layers(const SlicingParameters &slicing_params, double for (; j < (int)layers.size() && layers[j]->print_z < zmax; ++ j) ; if (i + 1 < j) { // Merge the layers layers (i + 1) to (j - 1) into the layers[i]. - PrintObjectSupportMaterial::MyLayer &dst = *layers[i]; + SupportGeneratorLayer &dst = *layers[i]; for (int u = i + 1; u < j; ++ u) dst.merge(std::move(*layers[u])); } @@ -2205,8 +2120,8 @@ static OverhangCluster* add_overhang(std::vector& clusters, ExP // Generate top contact layers supporting overhangs. // For a soluble interface material synchronize the layer heights with the object, otherwise leave the layer height undefined. // If supports over bed surface only are requested, don't generate contact layers over an object. -PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_layers( - const PrintObject &object, const std::vector &buildplate_covered, MyLayerStorage &layer_storage) const +SupportGeneratorLayersPtr PrintObjectSupportMaterial::top_contact_layers( + const PrintObject &object, const std::vector &buildplate_covered, SupportGeneratorLayerStorage &layer_storage) const { #ifdef SLIC3R_DEBUG static int iRun = 0; @@ -2217,14 +2132,14 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // BBS: tree support is selected so normal supports need not be generated. // Note we still need to go through the following steps if support is disabled but raft is enabled. if (m_object_config->enable_support.value && (m_object_config->support_type.value != stNormalAuto && m_object_config->support_type.value != stNormal)) { - return MyLayersPtr(); + return SupportGeneratorLayersPtr(); } // Slice support enforcers / support blockers. SupportAnnotations annotations(object, buildplate_covered); // Output layers, sorted by top Z. - MyLayersPtr contact_out; + SupportGeneratorLayersPtr contact_out; BOOST_LOG_TRIVIAL(debug) << "PrintObjectSupportMaterial::top_contact_layers() in parallel - start"; // Determine top contact areas. @@ -2236,7 +2151,6 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // For each overhang layer, two supporting layers may be generated: One for the overhangs extruded with a bridging flow, // and the other for the overhangs extruded with a normal flow. contact_out.assign(num_layers * 2, nullptr); - tbb::spin_mutex layer_storage_mutex; std::vector overhangs_per_layers(num_layers); size_t layer_id_start = this->has_raft() ? 0 : 1; @@ -2260,7 +2174,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ ); // end tbb::parallel_for if (object.print()->canceled()) - return MyLayersPtr(); + return SupportGeneratorLayersPtr(); // check if the sharp tails should be extended higher bool detect_first_sharp_tail_only = false; @@ -2349,7 +2263,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ } if (object.print()->canceled()) - return MyLayersPtr(); + return SupportGeneratorLayersPtr(); // BBS group overhang clusters const bool config_remove_small_overhangs = m_object_config->support_remove_small_overhang.value; @@ -2423,7 +2337,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ } if (object.print()->canceled()) - return MyLayersPtr(); + return SupportGeneratorLayersPtr(); for (size_t layer_id = layer_id_start; layer_id < num_layers; layer_id++) { const Layer& layer = *object.layers()[layer_id]; @@ -2441,7 +2355,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // Now apply the contact areas to the layer where they need to be made. if (!contact_polygons.empty() || !overhang_polygons.empty()) { // Allocate the two empty layers. - auto [new_layer, bridging_layer] = new_contact_layer(*m_print_config, *m_object_config, m_slicing_params, m_support_params.support_layer_height_min, layer, layer_storage, layer_storage_mutex); + auto [new_layer, bridging_layer] = new_contact_layer(*m_print_config, *m_object_config, m_slicing_params, m_support_params.support_layer_height_min, layer, layer_storage); if (new_layer) { // Fill the non-bridging layer with polygons. fill_contact_layer(*new_layer, layer_id, m_slicing_params, @@ -2480,17 +2394,17 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ } // Find the bottom contact layers above the top surfaces of this layer. -static inline PrintObjectSupportMaterial::MyLayer* detect_bottom_contacts( +static inline SupportGeneratorLayer* detect_bottom_contacts( const SlicingParameters &slicing_params, const PrintObjectSupportMaterial::SupportParams &support_params, const PrintObject &object, const Layer &layer, // Existing top contact layers, to which this newly created bottom contact layer will be snapped to guarantee a minimum layer height. - const PrintObjectSupportMaterial::MyLayersPtr &top_contacts, + const SupportGeneratorLayersPtr &top_contacts, // First top contact layer index overlapping with this new bottom interface layer. size_t contact_idx, // To allocate a new layer from. - std::deque &layer_storage, + SupportGeneratorLayerStorage &layer_storage, // To trim the support areas above this bottom interface layer with this newly created bottom interface layer. std::vector &layer_support_areas, // Support areas projected from top to bottom, starting with top support interfaces. @@ -2525,7 +2439,7 @@ static inline PrintObjectSupportMaterial::MyLayer* detect_bottom_contacts( size_t layer_id = layer.id() - slicing_params.raft_layers(); // Allocate a new bottom contact layer. - PrintObjectSupportMaterial::MyLayer &layer_new = layer_allocate(layer_storage, PrintObjectSupportMaterial::sltBottomContact); + SupportGeneratorLayer &layer_new = layer_storage.allocate_unguarded(SupporLayerType::BottomContact); // Grow top surfaces so that interface and support generation are generated // with some spacing from object - it looks we don't need the actual // top shapes so this can be done here @@ -2693,12 +2607,12 @@ static inline std::pair project_support_to_grid(const Layer // Generate bottom contact layers supporting the top contact layers. // For a soluble interface material synchronize the layer heights with the object, // otherwise set the layer height to a bridging flow of a support interface nozzle. -PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_contact_layers_and_layer_support_areas( - const PrintObject &object, const MyLayersPtr &top_contacts, std::vector &buildplate_covered, - MyLayerStorage &layer_storage, std::vector &layer_support_areas) const +SupportGeneratorLayersPtr PrintObjectSupportMaterial::bottom_contact_layers_and_layer_support_areas( + const PrintObject &object, const SupportGeneratorLayersPtr &top_contacts, std::vector &buildplate_covered, + SupportGeneratorLayerStorage &layer_storage, std::vector &layer_support_areas) const { if (top_contacts.empty()) - return MyLayersPtr(); + return SupportGeneratorLayersPtr(); #ifdef SLIC3R_DEBUG static size_t s_iRun = 0; @@ -2715,7 +2629,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_conta // find object top surfaces // we'll use them to clip our support and detect where does it stick - MyLayersPtr bottom_contacts; + SupportGeneratorLayersPtr bottom_contacts; // There is some support to be built, if there are non-empty top surfaces detected. // Sum of unsupported contact areas above the current layer.print_z. @@ -2734,7 +2648,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_conta Polygons enforcers_new; #endif // SLIC3R_DEBUG for (; contact_idx >= 0 && top_contacts[contact_idx]->print_z > layer.print_z - EPSILON; -- contact_idx) { - MyLayer &top_contact = *top_contacts[contact_idx]; + SupportGeneratorLayer &top_contact = *top_contacts[contact_idx]; #ifndef SLIC3R_DEBUG Polygons polygons_new; Polygons enforcers_new; @@ -2776,7 +2690,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_conta #endif // SLIC3R_DEBUG ] { // Find the bottom contact layers above the top surfaces of this layer. - MyLayer *layer_new = detect_bottom_contacts( + SupportGeneratorLayer *layer_new = detect_bottom_contacts( m_slicing_params, m_support_params, object, layer, top_contacts, contact_idx, layer_storage, layer_support_areas, overhangs_for_bottom_contacts #ifdef SLIC3R_DEBUG , iRun, polygons_new @@ -2835,64 +2749,21 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::bottom_conta return bottom_contacts; } -template -IndexType idx_higher_or_equal(const std::vector& vec, IndexType idx, FN_HIGHER_EQUAL fn_higher_equal) -{ - return Layer::idx_higher_or_equal(vec.begin(), vec.end(), idx, fn_higher_equal); -} - -// FN_LOWER_EQUAL: the provided object pointer has a Z value <= of an internal threshold. -// Find the first item with Z value <= of an internal threshold of fn_lower_equal. -// If no vec item with Z value <= of an internal threshold of fn_lower_equal is found, return -1. -// If the initial idx is < -1, then use binary search. -// Otherwise search linearly downwards. -template -int idx_lower_or_equal(IT begin, IT end, int idx, FN_LOWER_EQUAL fn_lower_equal) -{ - auto size = int(end - begin); - if (size == 0) { - idx = -1; - } else if (idx < -1) { - // First of the batch of layers per thread pool invocation. Use binary search. - int idx_low = 0; - int idx_high = std::max(0, size - 1); - while (idx_low + 1 < idx_high) { - int idx_mid = (idx_low + idx_high) / 2; - if (fn_lower_equal(begin[idx_mid])) - idx_low = idx_mid; - else - idx_high = idx_mid; - } - idx = fn_lower_equal(begin[idx_high]) ? idx_high : - (fn_lower_equal(begin[idx_low ]) ? idx_low : -1); - } else { - // For the other layers of this batch of layers, search incrementally, which is cheaper than the binary search. - while (idx >= 0 && ! fn_lower_equal(begin[idx])) - -- idx; - } - return idx; -} -template -int idx_lower_or_equal(const std::vector &vec, int idx, FN_LOWER_EQUAL fn_lower_equal) -{ - return idx_lower_or_equal(vec.begin(), vec.end(), idx, fn_lower_equal); -} - // Trim the top_contacts layers with the bottom_contacts layers if they overlap, so there would not be enough vertical space for both of them. void PrintObjectSupportMaterial::trim_top_contacts_by_bottom_contacts( - const PrintObject &object, const MyLayersPtr &bottom_contacts, MyLayersPtr &top_contacts) const + const PrintObject &object, const SupportGeneratorLayersPtr &bottom_contacts, SupportGeneratorLayersPtr &top_contacts) const { tbb::parallel_for(tbb::blocked_range(0, int(top_contacts.size())), [&bottom_contacts, &top_contacts](const tbb::blocked_range& range) { int idx_bottom_overlapping_first = -2; // For all top contact layers, counting downwards due to the way idx_higher_or_equal caches the last index to avoid repeated binary search. for (int idx_top = range.end() - 1; idx_top >= range.begin(); -- idx_top) { - MyLayer &layer_top = *top_contacts[idx_top]; + SupportGeneratorLayer &layer_top = *top_contacts[idx_top]; // Find the first bottom layer overlapping with layer_top. - idx_bottom_overlapping_first = idx_lower_or_equal(bottom_contacts, idx_bottom_overlapping_first, [&layer_top](const MyLayer *layer_bottom){ return layer_bottom->bottom_print_z() - EPSILON <= layer_top.bottom_z; }); + idx_bottom_overlapping_first = idx_lower_or_equal(bottom_contacts, idx_bottom_overlapping_first, [&layer_top](const SupportGeneratorLayer *layer_bottom){ return layer_bottom->bottom_print_z() - EPSILON <= layer_top.bottom_z; }); // For all top contact layers overlapping with the thick bottom contact layer: for (int idx_bottom_overlapping = idx_bottom_overlapping_first; idx_bottom_overlapping >= 0; -- idx_bottom_overlapping) { - const MyLayer &layer_bottom = *bottom_contacts[idx_bottom_overlapping]; + const SupportGeneratorLayer &layer_bottom = *bottom_contacts[idx_bottom_overlapping]; assert(layer_bottom.bottom_print_z() - EPSILON <= layer_top.bottom_z); if (layer_top.print_z < layer_bottom.print_z + EPSILON) { // Layers overlap. Trim layer_top with layer_bottom. @@ -2904,16 +2775,16 @@ void PrintObjectSupportMaterial::trim_top_contacts_by_bottom_contacts( }); } -PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_intermediate_support_layers( +SupportGeneratorLayersPtr PrintObjectSupportMaterial::raft_and_intermediate_support_layers( const PrintObject &object, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayerStorage &layer_storage) const + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayerStorage &layer_storage) const { - MyLayersPtr intermediate_layers; + SupportGeneratorLayersPtr intermediate_layers; // Collect and sort the extremes (bottoms of the top contacts and tops of the bottom contacts). - MyLayersPtr extremes; + SupportGeneratorLayersPtr extremes; extremes.reserve(top_contacts.size() + bottom_contacts.size()); for (size_t i = 0; i < top_contacts.size(); ++ i) // Bottoms of the top contact layers. In case of non-soluble supports, @@ -2925,18 +2796,18 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int if (extremes.empty()) return intermediate_layers; - auto layer_extreme_lower = [](const MyLayer *l1, const MyLayer *l2) { + auto layer_extreme_lower = [](const SupportGeneratorLayer *l1, const SupportGeneratorLayer *l2) { coordf_t z1 = l1->extreme_z(); coordf_t z2 = l2->extreme_z(); // If the layers are aligned, return the top contact surface first. - return z1 < z2 || (z1 == z2 && l1->layer_type == PrintObjectSupportMaterial::sltTopContact && l2->layer_type == PrintObjectSupportMaterial::sltBottomContact); + return z1 < z2 || (z1 == z2 && l1->layer_type == SupporLayerType::TopContact && l2->layer_type == SupporLayerType::BottomContact); }; std::sort(extremes.begin(), extremes.end(), layer_extreme_lower); assert(extremes.empty() || (extremes.front()->extreme_z() > m_slicing_params.raft_interface_top_z - EPSILON && (m_slicing_params.raft_layers() == 1 || // only raft contact layer - extremes.front()->layer_type == sltTopContact || // first extreme is a top contact layer + extremes.front()->layer_type == SupporLayerType::TopContact || // first extreme is a top contact layer extremes.front()->extreme_z() > m_slicing_params.first_print_layer_height - EPSILON))); bool synchronize = this->synchronize_layers(); @@ -2948,7 +2819,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int extremes[i]->extreme_z() - extremes[i-1]->extreme_z() > m_support_params.support_layer_height_min - EPSILON); assert(extremes[i]->extreme_z() - extremes[i-1]->extreme_z() > 0. || extremes[i]->layer_type == extremes[i-1]->layer_type || - (extremes[i]->layer_type == sltBottomContact && extremes[i - 1]->layer_type == sltTopContact)); + (extremes[i]->layer_type == SupporLayerType::BottomContact && extremes[i - 1]->layer_type == SupporLayerType::TopContact)); } #endif @@ -2961,19 +2832,19 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int if (! extremes.empty() && std::abs(extremes.front()->extreme_z() - m_slicing_params.raft_interface_top_z) < EPSILON) { // This is a raft contact layer, its height has been decided in this->top_contact_layers(). // Ignore this layer when calculating the intermediate support layers. - assert(extremes.front()->layer_type == sltTopContact); + assert(extremes.front()->layer_type == SupporLayerType::TopContact); ++ idx_extreme_first; } for (size_t idx_extreme = idx_extreme_first; idx_extreme < extremes.size(); ++ idx_extreme) { - MyLayer *extr2 = extremes[idx_extreme]; + SupportGeneratorLayer *extr2 = extremes[idx_extreme]; coordf_t extr2z = extr2->extreme_z(); if (std::abs(extr2z - m_slicing_params.first_print_layer_height) < EPSILON) { // This is a bottom of a synchronized (or soluble) top contact layer, its height has been decided in this->top_contact_layers(). - assert(extr2->layer_type == sltTopContact); + assert(extr2->layer_type == SupporLayerType::TopContact); assert(std::abs(extr2->bottom_z - m_slicing_params.first_print_layer_height) < EPSILON); assert(extr2->print_z >= m_slicing_params.first_print_layer_height + m_support_params.support_layer_height_min - EPSILON); if (intermediate_layers.empty() || intermediate_layers.back()->print_z < m_slicing_params.first_print_layer_height) { - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); layer_new.bottom_z = 0.; layer_new.print_z = m_slicing_params.first_print_layer_height; layer_new.height = m_slicing_params.first_print_layer_height; @@ -2983,11 +2854,11 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int } assert(extr2z >= m_slicing_params.raft_interface_top_z + EPSILON); assert(extr2z >= m_slicing_params.first_print_layer_height + EPSILON); - MyLayer *extr1 = (idx_extreme == idx_extreme_first) ? nullptr : extremes[idx_extreme - 1]; + SupportGeneratorLayer *extr1 = (idx_extreme == idx_extreme_first) ? nullptr : extremes[idx_extreme - 1]; // Fuse a support layer firmly to the raft top interface (not to the raft contacts). coordf_t extr1z = (extr1 == nullptr) ? m_slicing_params.raft_interface_top_z : extr1->extreme_z(); assert(extr2z >= extr1z); - assert(extr2z > extr1z || (extr1 != nullptr && extr2->layer_type == sltBottomContact)); + assert(extr2z > extr1z || (extr1 != nullptr && extr2->layer_type == SupporLayerType::BottomContact)); if (std::abs(extr1z) < EPSILON) { // This layer interval starts with the 1st layer. Print the 1st layer using the prescribed 1st layer thickness. // assert(! m_slicing_params.has_raft()); RaftingEdition: unclear where the issue is: assert fails with 1-layer raft & base supports @@ -2995,7 +2866,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int // At this point only layers above first_print_layer_heigth + EPSILON are expected as the other cases were captured earlier. assert(extr2z >= m_slicing_params.first_print_layer_height + EPSILON); // Generate a new intermediate layer. - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); layer_new.bottom_z = 0.; layer_new.print_z = extr1z = m_slicing_params.first_print_layer_height; layer_new.height = extr1z; @@ -3015,7 +2886,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int ++ idx_layer_object; if (idx_layer_object == 0 && extr1z == m_slicing_params.raft_interface_top_z) { // Insert one base support layer below the object. - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); layer_new.print_z = m_slicing_params.object_print_z_min; layer_new.bottom_z = m_slicing_params.raft_interface_top_z; layer_new.height = layer_new.print_z - layer_new.bottom_z; @@ -3023,7 +2894,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int } // Emit all intermediate support layers synchronized with object layers up to extr2z. for (; idx_layer_object < object.layers().size() && object.layers()[idx_layer_object]->print_z < extr2z + EPSILON; ++ idx_layer_object) { - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); layer_new.print_z = object.layers()[idx_layer_object]->print_z; layer_new.height = object.layers()[idx_layer_object]->height; layer_new.bottom_z = (idx_layer_object > 0) ? object.layers()[idx_layer_object - 1]->print_z : (layer_new.print_z - layer_new.height); @@ -3035,13 +2906,13 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int size_t n_layers_extra = size_t(ceil(dist / m_slicing_params.max_suport_layer_height)); assert(n_layers_extra > 0); coordf_t step = dist / coordf_t(n_layers_extra); - if (extr1 != nullptr && extr1->layer_type == sltTopContact && + if (extr1 != nullptr && extr1->layer_type == SupporLayerType::TopContact && extr1->print_z + m_support_params.support_layer_height_min > extr1->bottom_z + step) { // The bottom extreme is a bottom of a top surface. Ensure that the gap // between the 1st intermediate layer print_z and extr1->print_z is not too small. assert(extr1->bottom_z + m_support_params.support_layer_height_min < extr1->print_z + EPSILON); // Generate the first intermediate layer. - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); layer_new.bottom_z = extr1->bottom_z; layer_new.print_z = extr1z = extr1->print_z; layer_new.height = extr1->height; @@ -3053,7 +2924,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int // Continue printing the other layers up to extr2z. step = dist / coordf_t(n_layers_extra); } - if (! m_slicing_params.soluble_interface && extr2->layer_type == sltTopContact) { + if (! m_slicing_params.soluble_interface && extr2->layer_type == SupporLayerType::TopContact) { // This is a top interface layer, which does not have a height assigned yet. Do it now. assert(extr2->height == 0.); assert(extr1z > m_slicing_params.first_print_layer_height - EPSILON); @@ -3065,7 +2936,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int coordf_t extr2z_large_steps = extr2z; // Take the largest allowed step in the Z axis until extr2z_large_steps is reached. for (size_t i = 0; i < n_layers_extra; ++ i) { - MyLayer &layer_new = layer_allocate(layer_storage, sltIntermediate); + SupportGeneratorLayer &layer_new = layer_storage.allocate(SupporLayerType::Intermediate); if (i + 1 == n_layers_extra) { // Last intermediate layer added. Align the last entered layer with extr2z_large_steps exactly. layer_new.bottom_z = (i == 0) ? extr1z : intermediate_layers.back()->print_z; @@ -3126,9 +2997,9 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int // Also the bottom/top_contacts shall have a layer thickness assigned already. void PrintObjectSupportMaterial::generate_base_layers( const PrintObject &object, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayersPtr &intermediate_layers, + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayersPtr &intermediate_layers, const std::vector &layer_support_areas) const { #ifdef SLIC3R_DEBUG @@ -3152,7 +3023,7 @@ void PrintObjectSupportMaterial::generate_base_layers( { BOOST_LOG_TRIVIAL(trace) << "Support generator - generate_base_layers - creating layer " << idx_intermediate << " of " << intermediate_layers.size(); - MyLayer &layer_intermediate = *intermediate_layers[idx_intermediate]; + SupportGeneratorLayer &layer_intermediate = *intermediate_layers[idx_intermediate]; // Layers must be sorted by print_z. assert(idx_intermediate == 0 || layer_intermediate.print_z >= intermediate_layers[idx_intermediate - 1]->print_z); @@ -3175,10 +3046,10 @@ void PrintObjectSupportMaterial::generate_base_layers( // 4) base.print_z > top.bottom_z && base.bottom_z < top.bottom_z -> Base overlaps with top.bottom_z. This must not happen. // 5) base.print_z <= top.print_z && base.bottom_z >= top.bottom_z -> Base is fully inside top. Trim base by top. idx_top_contact_above = idx_lower_or_equal(top_contacts, idx_top_contact_above, - [&layer_intermediate](const MyLayer *layer){ return layer->bottom_z <= layer_intermediate.print_z - EPSILON; }); + [&layer_intermediate](const SupportGeneratorLayer *layer){ return layer->bottom_z <= layer_intermediate.print_z - EPSILON; }); // Collect all the top_contact layer intersecting with this layer. for (int idx_top_contact_overlapping = idx_top_contact_above; idx_top_contact_overlapping >= 0; -- idx_top_contact_overlapping) { - MyLayer &layer_top_overlapping = *top_contacts[idx_top_contact_overlapping]; + SupportGeneratorLayer &layer_top_overlapping = *top_contacts[idx_top_contact_overlapping]; if (layer_top_overlapping.print_z < layer_intermediate.bottom_z + EPSILON) break; // Base must not overlap with top.bottom_z. @@ -3195,7 +3066,7 @@ void PrintObjectSupportMaterial::generate_base_layers( polygons_new = layer_support_areas.front(); double first_layer_z = object.layers().front()->print_z; for (int i = idx_top_contact_above + 1; i < int(top_contacts.size()); ++ i) { - MyLayer &contacts = *top_contacts[i]; + SupportGeneratorLayer &contacts = *top_contacts[i]; if (contacts.print_z > first_layer_z + EPSILON) break; assert(contacts.bottom_z > layer_intermediate.print_z - EPSILON); @@ -3212,10 +3083,10 @@ void PrintObjectSupportMaterial::generate_base_layers( // 4) base.print_z > bottom.print_z && base.bottom_z >= bottom.print_z -> Base overlaps with bottom.print_z. This must not happen. // 5) base.print_z <= bottom.print_z && base.bottom_z >= bottom.bottom_z -> Base is fully inside top. Trim base by top. idx_bottom_contact_overlapping = idx_lower_or_equal(bottom_contacts, idx_bottom_contact_overlapping, - [&layer_intermediate](const MyLayer *layer){ return layer->bottom_print_z() <= layer_intermediate.print_z - EPSILON; }); + [&layer_intermediate](const SupportGeneratorLayer *layer){ return layer->bottom_print_z() <= layer_intermediate.print_z - EPSILON; }); // Collect all the bottom_contacts layer intersecting with this layer. for (int i = idx_bottom_contact_overlapping; i >= 0; -- i) { - MyLayer &layer_bottom_overlapping = *bottom_contacts[i]; + SupportGeneratorLayer &layer_bottom_overlapping = *bottom_contacts[i]; if (layer_bottom_overlapping.print_z < layer_intermediate.bottom_print_z() + EPSILON) break; // Base must not overlap with bottom.top_z. @@ -3245,7 +3116,7 @@ void PrintObjectSupportMaterial::generate_base_layers( polygons_new, polygons_trimming, ApplySafetyOffset::Yes); // safety offset to merge the touching source polygons - layer_intermediate.layer_type = sltBase; + layer_intermediate.layer_type = SupporLayerType::Base; #if 0 // coordf_t fillet_radius_scaled = scale_(m_object_config->support_base_pattern_spacing); @@ -3267,7 +3138,7 @@ void PrintObjectSupportMaterial::generate_base_layers( BOOST_LOG_TRIVIAL(debug) << "PrintObjectSupportMaterial::generate_base_layers() in parallel - end"; #ifdef SLIC3R_DEBUG - for (MyLayersPtr::const_iterator it = intermediate_layers.begin(); it != intermediate_layers.end(); ++it) + for (SupportGeneratorLayersPtr::const_iterator it = intermediate_layers.begin(); it != intermediate_layers.end(); ++it) ::Slic3r::SVG::export_expolygons( debug_out_path("support-intermediate-layers-untrimmed-%d-%lf.svg", iRun, (*it)->print_z), union_ex((*it)->polygons)); @@ -3279,7 +3150,7 @@ void PrintObjectSupportMaterial::generate_base_layers( void PrintObjectSupportMaterial::trim_support_layers_by_object( const PrintObject &object, - MyLayersPtr &support_layers, + SupportGeneratorLayersPtr &support_layers, const coordf_t gap_extra_above, const coordf_t gap_extra_below, const coordf_t gap_xy) const @@ -3288,10 +3159,10 @@ void PrintObjectSupportMaterial::trim_support_layers_by_object( // Collect non-empty layers to be processed in parallel. // This is a good idea as pulling a thread from a thread pool for an empty task is expensive. - MyLayersPtr nonempty_layers; + SupportGeneratorLayersPtr nonempty_layers; nonempty_layers.reserve(support_layers.size()); for (size_t idx_layer = 0; idx_layer < support_layers.size(); ++ idx_layer) { - MyLayer *support_layer = support_layers[idx_layer]; + SupportGeneratorLayer *support_layer = support_layers[idx_layer]; if (! support_layer->polygons.empty() && support_layer->print_z >= m_slicing_params.raft_contact_top_z + EPSILON) // Non-empty support layer and not a raft layer. nonempty_layers.push_back(support_layer); @@ -3304,7 +3175,7 @@ void PrintObjectSupportMaterial::trim_support_layers_by_object( [this, &object, &nonempty_layers, gap_extra_above, gap_extra_below, gap_xy_scaled](const tbb::blocked_range& range) { size_t idx_object_layer_overlapping = size_t(-1); - auto is_layers_overlap = [](const MyLayer& support_layer, const Layer& object_layer, coordf_t bridging_height = 0.f) -> bool { + auto is_layers_overlap = [](const SupportGeneratorLayer& support_layer, const Layer& object_layer, coordf_t bridging_height = 0.f) -> bool { if (std::abs(support_layer.print_z - object_layer.print_z) < EPSILON) return true; @@ -3318,7 +3189,7 @@ void PrintObjectSupportMaterial::trim_support_layers_by_object( return false; }; for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) { - MyLayer &support_layer = *nonempty_layers[idx_layer]; + SupportGeneratorLayer &support_layer = *nonempty_layers[idx_layer]; // BOOST_LOG_TRIVIAL(trace) << "Support generator - trim_support_layers_by_object - trimmming non-empty layer " << idx_layer << " of " << nonempty_layers.size(); assert(! support_layer.polygons.empty() && support_layer.print_z >= m_slicing_params.raft_contact_top_z + EPSILON); // Find the overlapping object layers including the extra above / below gap. @@ -3378,13 +3249,13 @@ void PrintObjectSupportMaterial::trim_support_layers_by_object( BOOST_LOG_TRIVIAL(debug) << "PrintObjectSupportMaterial::trim_support_layers_by_object() in parallel - end"; } -PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raft_base( +SupportGeneratorLayersPtr PrintObjectSupportMaterial::generate_raft_base( const PrintObject &object, - const MyLayersPtr &top_contacts, - const MyLayersPtr &interface_layers, - const MyLayersPtr &base_interface_layers, - const MyLayersPtr &base_layers, - MyLayerStorage &layer_storage) const + const SupportGeneratorLayersPtr &top_contacts, + const SupportGeneratorLayersPtr &interface_layers, + const SupportGeneratorLayersPtr &base_interface_layers, + const SupportGeneratorLayersPtr &base_layers, + SupportGeneratorLayerStorage &layer_storage) const { // If there is brim to be generated, calculate the trimming regions. Polygons brim; @@ -3420,10 +3291,10 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf // How much to inflate the support columns to be stable. This also applies to the 1st layer, if no raft layers are to be printed. const float inflate_factor_fine = float(scale_((m_slicing_params.raft_layers() > 1) ? 0.5 : EPSILON)); const float inflate_factor_1st_layer = std::max(0.f, float(scale_(object.config().raft_first_layer_expansion)) - inflate_factor_fine); - MyLayer *contacts = top_contacts .empty() ? nullptr : top_contacts .front(); - MyLayer *interfaces = interface_layers .empty() ? nullptr : interface_layers .front(); - MyLayer *base_interfaces = base_interface_layers.empty() ? nullptr : base_interface_layers.front(); - MyLayer *columns_base = base_layers .empty() ? nullptr : base_layers .front(); + SupportGeneratorLayer *contacts = top_contacts .empty() ? nullptr : top_contacts .front(); + SupportGeneratorLayer *interfaces = interface_layers .empty() ? nullptr : interface_layers .front(); + SupportGeneratorLayer *base_interfaces = base_interface_layers.empty() ? nullptr : base_interface_layers.front(); + SupportGeneratorLayer *columns_base = base_layers .empty() ? nullptr : base_layers .front(); if (contacts != nullptr && contacts->print_z > std::max(m_slicing_params.first_print_layer_height, m_slicing_params.raft_contact_top_z) + EPSILON) // This is not the raft contact layer. contacts = nullptr; @@ -3446,7 +3317,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf polygons_append(interface_polygons, expand(base_interfaces->polygons, inflate_factor_fine, SUPPORT_SURFACES_OFFSET_PARAMETERS)); // Output vector. - MyLayersPtr raft_layers; + SupportGeneratorLayersPtr raft_layers; if (m_slicing_params.raft_layers() > 1) { Polygons base; @@ -3465,7 +3336,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf // Do not add the raft contact layer, only add the raft layers below the contact layer. // Insert the 1st layer. { - MyLayer &new_layer = layer_allocate(layer_storage, (m_slicing_params.base_raft_layers > 0) ? sltRaftBase : sltRaftInterface); + SupportGeneratorLayer &new_layer = layer_storage.allocate((m_slicing_params.base_raft_layers > 0) ? SupporLayerType::RaftBase : SupporLayerType::RaftInterface); raft_layers.push_back(&new_layer); new_layer.print_z = m_slicing_params.first_print_layer_height; new_layer.height = m_slicing_params.first_print_layer_height; @@ -3475,7 +3346,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf // Insert the base layers. for (size_t i = 1; i < m_slicing_params.base_raft_layers; ++ i) { coordf_t print_z = raft_layers.back()->print_z; - MyLayer &new_layer = layer_allocate(layer_storage, sltRaftBase); + SupportGeneratorLayer &new_layer = layer_storage.allocate(SupporLayerType::RaftBase); raft_layers.push_back(&new_layer); new_layer.print_z = print_z + m_slicing_params.base_raft_layer_height; new_layer.height = m_slicing_params.base_raft_layer_height; @@ -3485,7 +3356,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf // Insert the interface layers. for (size_t i = 1; i < m_slicing_params.interface_raft_layers; ++ i) { coordf_t print_z = raft_layers.back()->print_z; - MyLayer &new_layer = layer_allocate(layer_storage, sltRaftInterface); + SupportGeneratorLayer &new_layer = layer_storage.allocate(SupporLayerType::RaftInterface); raft_layers.push_back(&new_layer); new_layer.print_z = print_z + m_slicing_params.interface_raft_layer_height; new_layer.height = m_slicing_params.interface_raft_layer_height; @@ -3531,17 +3402,17 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::generate_raf } // Convert some of the intermediate layers into top/bottom interface layers as well as base interface layers. -std::pair PrintObjectSupportMaterial::generate_interface_layers( - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayersPtr &intermediate_layers, - MyLayerStorage &layer_storage) const +std::pair PrintObjectSupportMaterial::generate_interface_layers( + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayersPtr &intermediate_layers, + SupportGeneratorLayerStorage &layer_storage) const { // my $area_threshold = $self->interface_flow->scaled_spacing ** 2; - std::pair base_and_interface_layers; - MyLayersPtr &interface_layers = base_and_interface_layers.first; - MyLayersPtr &base_interface_layers = base_and_interface_layers.second; + std::pair base_and_interface_layers; + SupportGeneratorLayersPtr &interface_layers = base_and_interface_layers.first; + SupportGeneratorLayersPtr &base_interface_layers = base_and_interface_layers.second; // distinguish between interface and base interface layers // Contact layer is considered an interface layer, therefore run the following block only if support_interface_top_layers > 1. @@ -3577,10 +3448,9 @@ std::pair(m_object_config->support_closing_radius.value); - tbb::spin_mutex layer_storage_mutex; // Insert a new layer into base_interface_layers, if intersection with base exists. - auto insert_layer = [&layer_storage, &layer_storage_mutex, snug_supports, closing_distance, smoothing_distance, minimum_island_radius]( - MyLayer &intermediate_layer, Polygons &bottom, Polygons &&top, const Polygons *subtract, SupporLayerType type) -> MyLayer* { + auto insert_layer = [&layer_storage, snug_supports, closing_distance, smoothing_distance, minimum_island_radius]( + SupportGeneratorLayer &intermediate_layer, Polygons &bottom, Polygons &&top, const Polygons *subtract, SupporLayerType type) -> SupportGeneratorLayer* { assert(! bottom.empty() || ! top.empty()); // Merge top into bottom, unite them with a safety offset. append(bottom, std::move(top)); @@ -3594,7 +3464,7 @@ std::pair::max() : intermediate_layers[std::min(num_intermediate - 1, idx_intermediate_layer + num_interface_layers_only_top - 1)]->print_z; // Move idx_top_contact_first up until above the current print_z. - idx_top_contact_first = idx_higher_or_equal(top_contacts, idx_top_contact_first, [&intermediate_layer](const MyLayer *layer){ return layer->print_z >= intermediate_layer.print_z; }); // - EPSILON + idx_top_contact_first = idx_higher_or_equal(top_contacts, idx_top_contact_first, [&intermediate_layer](const SupportGeneratorLayer *layer){ return layer->print_z >= intermediate_layer.print_z; }); // - EPSILON // Collect the top contact areas above this intermediate layer, below top_z. for (int idx_top_contact = idx_top_contact_first; idx_top_contact < int(top_contacts.size()); ++ idx_top_contact) { - const MyLayer &top_contact_layer = *top_contacts[idx_top_contact]; + const SupportGeneratorLayer &top_contact_layer = *top_contacts[idx_top_contact]; //FIXME maybe this adds one interface layer in excess? if (top_contact_layer.bottom_z - EPSILON > top_z) break; @@ -3664,26 +3534,26 @@ std::pair::max() : intermediate_layers[std::max(0, idx_intermediate_layer - num_interface_layers_only_bottom)]->bottom_z; // Move idx_bottom_contact_first up until touching bottom_z. - idx_bottom_contact_first = idx_higher_or_equal(bottom_contacts, idx_bottom_contact_first, [bottom_z](const MyLayer *layer){ return layer->print_z >= bottom_z - EPSILON; }); + idx_bottom_contact_first = idx_higher_or_equal(bottom_contacts, idx_bottom_contact_first, [bottom_z](const SupportGeneratorLayer *layer){ return layer->print_z >= bottom_z - EPSILON; }); // Collect the top contact areas above this intermediate layer, below top_z. for (int idx_bottom_contact = idx_bottom_contact_first; idx_bottom_contact < int(bottom_contacts.size()); ++ idx_bottom_contact) { - const MyLayer &bottom_contact_layer = *bottom_contacts[idx_bottom_contact]; + const SupportGeneratorLayer &bottom_contact_layer = *bottom_contacts[idx_bottom_contact]; if (bottom_contact_layer.print_z - EPSILON > intermediate_layer.bottom_z) break; polygons_append(bottom_contact_layer.print_z - EPSILON > bottom_interface_z ? polygons_bottom_contact_projected_interface : polygons_bottom_contact_projected_base, bottom_contact_layer.polygons); } } - MyLayer *interface_layer = nullptr; + SupportGeneratorLayer *interface_layer = nullptr; if (! polygons_bottom_contact_projected_interface.empty() || ! polygons_top_contact_projected_interface.empty()) { interface_layer = insert_layer( intermediate_layer, polygons_bottom_contact_projected_interface, std::move(polygons_top_contact_projected_interface), nullptr, - polygons_top_contact_projected_interface.empty() ? sltBottomInterface : sltTopInterface); + polygons_top_contact_projected_interface.empty() ? SupporLayerType::BottomInterface : SupporLayerType::TopInterface); interface_layers[idx_intermediate_layer] = interface_layer; } if (! polygons_bottom_contact_projected_base.empty() || ! polygons_top_contact_projected_base.empty()) base_interface_layers[idx_intermediate_layer] = insert_layer( intermediate_layer, polygons_bottom_contact_projected_base, std::move(polygons_top_contact_projected_base), - interface_layer ? &interface_layer->polygons : nullptr, sltBase); + interface_layer ? &interface_layer->polygons : nullptr, SupporLayerType::Base); } }); @@ -3859,7 +3729,7 @@ struct MyLayerExtruded } // The source layer. It carries the height and extrusion type (bridging / non bridging, extrusion height). - PrintObjectSupportMaterial::MyLayer *layer { nullptr }; + SupportGeneratorLayer *layer { nullptr }; // Collect extrusions. They will be exported sorted by the bottom height. ExtrusionEntitiesPtr extrusions; @@ -4127,9 +3997,9 @@ static std::string dbg_index_to_color(int idx) void modulate_extrusion_by_overlapping_layers( // Extrusions generated for this_layer. ExtrusionEntitiesPtr &extrusions_in_out, - const PrintObjectSupportMaterial::MyLayer &this_layer, + const SupportGeneratorLayer &this_layer, // Multiple layers overlapping with this_layer, sorted bottom up. - const PrintObjectSupportMaterial::MyLayersPtr &overlapping_layers) + const SupportGeneratorLayersPtr &overlapping_layers) { size_t n_overlapping_layers = overlapping_layers.size(); if (n_overlapping_layers == 0 || extrusions_in_out.empty()) @@ -4166,7 +4036,7 @@ void modulate_extrusion_by_overlapping_layers( ++ iRun; BoundingBox bbox; for (size_t i_overlapping_layer = 0; i_overlapping_layer < n_overlapping_layers; ++ i_overlapping_layer) { - const PrintObjectSupportMaterial::MyLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; + const SupportGeneratorLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; bbox.merge(get_extents(overlapping_layer.polygons)); } for (ExtrusionEntitiesPtr::const_iterator it = extrusions_in_out.begin(); it != extrusions_in_out.end(); ++ it) { @@ -4179,13 +4049,13 @@ void modulate_extrusion_by_overlapping_layers( // Filled polygons for the overlapping regions. svg.draw(union_ex(this_layer.polygons), dbg_index_to_color(-1), transparency); for (size_t i_overlapping_layer = 0; i_overlapping_layer < n_overlapping_layers; ++ i_overlapping_layer) { - const PrintObjectSupportMaterial::MyLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; + const SupportGeneratorLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; svg.draw(union_ex(overlapping_layer.polygons), dbg_index_to_color(int(i_overlapping_layer)), transparency); } // Contours of the overlapping regions. svg.draw(to_polylines(this_layer.polygons), dbg_index_to_color(-1), scale_(0.2)); for (size_t i_overlapping_layer = 0; i_overlapping_layer < n_overlapping_layers; ++ i_overlapping_layer) { - const PrintObjectSupportMaterial::MyLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; + const SupportGeneratorLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; svg.draw(to_polylines(overlapping_layer.polygons), dbg_index_to_color(int(i_overlapping_layer)), scale_(0.1)); } // Fill extrusion, the source. @@ -4226,7 +4096,7 @@ void modulate_extrusion_by_overlapping_layers( // Fragment the path segments by overlapping layers. The overlapping layers are sorted by an increasing print_z. // Trim by the highest overlapping layer first. for (int i_overlapping_layer = int(n_overlapping_layers) - 1; i_overlapping_layer >= 0; -- i_overlapping_layer) { - const PrintObjectSupportMaterial::MyLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; + const SupportGeneratorLayer &overlapping_layer = *overlapping_layers[i_overlapping_layer]; ExtrusionPathFragment &frag = path_fragments[i_overlapping_layer]; Polygons polygons_trimming = offset(union_ex(overlapping_layer.polygons), float(scale_(0.5*extrusion_width))); frag.polylines = intersection_pl(path_fragments.back().polylines, polygons_trimming); @@ -4317,7 +4187,7 @@ void modulate_extrusion_by_overlapping_layers( ExtrusionPath *path = multipath.paths.empty() ? nullptr : &multipath.paths.back(); if (path != nullptr) { // Verify whether the path is compatible with the current fragment. - assert(this_layer.layer_type == PrintObjectSupportMaterial::sltBottomContact || path->height != frag.height || path->mm3_per_mm != frag.mm3_per_mm); + assert(this_layer.layer_type == SupporLayerType::BottomContact || path->height != frag.height || path->mm3_per_mm != frag.mm3_per_mm); if (path->height != frag.height || path->mm3_per_mm != frag.mm3_per_mm) { path = nullptr; } @@ -4366,12 +4236,12 @@ void modulate_extrusion_by_overlapping_layers( void PrintObjectSupportMaterial::generate_toolpaths( SupportLayerPtrs &support_layers, - const MyLayersPtr &raft_layers, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - const MyLayersPtr &intermediate_layers, - const MyLayersPtr &interface_layers, - const MyLayersPtr &base_interface_layers) const + const SupportGeneratorLayersPtr &raft_layers, + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + const SupportGeneratorLayersPtr &intermediate_layers, + const SupportGeneratorLayersPtr &interface_layers, + const SupportGeneratorLayersPtr &base_interface_layers) const { // loop_interface_processor with a given circle radius. LoopInterfaceProcessor loop_interface_processor(1.5 * m_support_params.support_material_interface_flow.scaled_width()); @@ -4424,7 +4294,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( assert(support_layer_id < raft_layers.size()); SupportLayer &support_layer = *support_layers[support_layer_id]; assert(support_layer.support_fills.entities.empty()); - MyLayer &raft_layer = *raft_layers[support_layer_id]; + SupportGeneratorLayer &raft_layer = *raft_layers[support_layer_id]; std::unique_ptr filler_interface = std::unique_ptr(Fill::new_from_type(m_support_params.interface_fill_pattern)); std::unique_ptr filler_support = std::unique_ptr(Fill::new_from_type(m_support_params.base_fill_pattern)); @@ -4493,7 +4363,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( struct LayerCacheItem { LayerCacheItem(MyLayerExtruded *layer_extruded = nullptr) : layer_extruded(layer_extruded) {} MyLayerExtruded *layer_extruded; - std::vector overlapping; + std::vector overlapping; }; struct LayerCache { MyLayerExtruded bottom_contact_layer; @@ -4556,7 +4426,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( MyLayerExtruded &base_interface_layer = layer_cache.base_interface_layer; // Increment the layer indices to find a layer at support_layer.print_z. { - auto fun = [&support_layer](const MyLayer *l){ return l->print_z >= support_layer.print_z - EPSILON; }; + auto fun = [&support_layer](const SupportGeneratorLayer *l){ return l->print_z >= support_layer.print_z - EPSILON; }; idx_layer_bottom_contact = idx_higher_or_equal(bottom_contacts, idx_layer_bottom_contact, fun); idx_layer_top_contact = idx_higher_or_equal(top_contacts, idx_layer_top_contact, fun); idx_layer_intermediate = idx_higher_or_equal(intermediate_layers, idx_layer_intermediate, fun); @@ -4798,12 +4668,12 @@ void PrintObjectSupportMaterial::generate_toolpaths( // Collect overlapping top/bottom surfaces. layer_cache_item.overlapping.reserve(20); coordf_t bottom_z = layer_cache_item.layer_extruded->layer->bottom_print_z() + EPSILON; - auto add_overlapping = [&layer_cache_item, bottom_z](const MyLayersPtr &layers, size_t idx_top) { + auto add_overlapping = [&layer_cache_item, bottom_z](const SupportGeneratorLayersPtr &layers, size_t idx_top) { for (int i = int(idx_top) - 1; i >= 0 && layers[i]->print_z > bottom_z; -- i) layer_cache_item.overlapping.push_back(layers[i]); }; add_overlapping(top_contacts, idx_layer_top_contact); - if (layer_cache_item.layer_extruded->layer->layer_type == sltBottomContact) { + if (layer_cache_item.layer_extruded->layer->layer_type == SupporLayerType::BottomContact) { // Bottom contact layer may overlap with a base layer, which may be changed to interface layer. add_overlapping(intermediate_layers, idx_layer_intermediate); add_overlapping(interface_layers, idx_layer_interface); diff --git a/src/libslic3r/Support/SupportMaterial.hpp b/src/libslic3r/Support/SupportMaterial.hpp index 861126fcbd..809f9b1611 100644 --- a/src/libslic3r/Support/SupportMaterial.hpp +++ b/src/libslic3r/Support/SupportMaterial.hpp @@ -4,7 +4,8 @@ #include "Flow.hpp" #include "PrintConfig.hpp" #include "Slicing.hpp" - +#include "Fill/FillBase.hpp" +#include "SupportLayer.hpp" namespace Slic3r { class PrintObject; @@ -18,107 +19,6 @@ class PrintObjectConfig; class PrintObjectSupportMaterial { public: - // Support layer type to be used by MyLayer. This type carries a much more detailed information - // about the support layer type than the final support layers stored in a PrintObject. - enum SupporLayerType { - sltUnknown = 0, - // Ratft base layer, to be printed with the support material. - sltRaftBase, - // Raft interface layer, to be printed with the support interface material. - sltRaftInterface, - // Bottom contact layer placed over a top surface of an object. To be printed with a support interface material. - sltBottomContact, - // Dense interface layer, to be printed with the support interface material. - // This layer is separated from an object by an sltBottomContact layer. - sltBottomInterface, - // Sparse base support layer, to be printed with a support material. - sltBase, - // Dense interface layer, to be printed with the support interface material. - // This layer is separated from an object with sltTopContact layer. - sltTopInterface, - // Top contact layer directly supporting an overhang. To be printed with a support interface material. - sltTopContact, - // Some undecided type yet. It will turn into sltBase first, then it may turn into sltBottomInterface or sltTopInterface. - sltIntermediate, - }; - - // A support layer type used internally by the SupportMaterial class. This class carries a much more detailed - // information about the support layer than the layers stored in the PrintObject, mainly - // the MyLayer is aware of the bridging flow and the interface gaps between the object and the support. - class MyLayer - { - public: - void reset() { - *this = MyLayer(); - } - - bool operator==(const MyLayer &layer2) const { - return print_z == layer2.print_z && height == layer2.height && bridging == layer2.bridging; - } - - // Order the layers by lexicographically by an increasing print_z and a decreasing layer height. - bool operator<(const MyLayer &layer2) const { - if (print_z < layer2.print_z) { - return true; - } else if (print_z == layer2.print_z) { - if (height > layer2.height) - return true; - else if (height == layer2.height) { - // Bridging layers first. - return bridging && ! layer2.bridging; - } else - return false; - } else - return false; - } - - void merge(MyLayer &&rhs) { - // The union_() does not support move semantic yet, but maybe one day it will. - this->polygons = union_(this->polygons, std::move(rhs.polygons)); - auto merge = [](std::unique_ptr &dst, std::unique_ptr &src) { - if (! dst || dst->empty()) - dst = std::move(src); - else if (src && ! src->empty()) - *dst = union_(*dst, std::move(*src)); - }; - merge(this->contact_polygons, rhs.contact_polygons); - merge(this->overhang_polygons, rhs.overhang_polygons); - merge(this->enforcer_polygons, rhs.enforcer_polygons); - rhs.reset(); - } - - // For the bridging flow, bottom_print_z will be above bottom_z to account for the vertical separation. - // For the non-bridging flow, bottom_print_z will be equal to bottom_z. - coordf_t bottom_print_z() const { return print_z - height; } - - // To sort the extremes of top / bottom interface layers. - coordf_t extreme_z() const { return (this->layer_type == sltTopContact) ? this->bottom_z : this->print_z; } - - SupporLayerType layer_type { sltUnknown }; - // Z used for printing, in unscaled coordinates. - coordf_t print_z { 0 }; - // Bottom Z of this layer. For soluble layers, bottom_z + height = print_z, - // otherwise bottom_z + gap + height = print_z. - coordf_t bottom_z { 0 }; - // Layer height in unscaled coordinates. - coordf_t height { 0 }; - // Index of a PrintObject layer_id supported by this layer. This will be set for top contact layers. - // If this is not a contact layer, it will be set to size_t(-1). - size_t idx_object_layer_above { size_t(-1) }; - // Index of a PrintObject layer_id, which supports this layer. This will be set for bottom contact layers. - // If this is not a contact layer, it will be set to size_t(-1). - size_t idx_object_layer_below { size_t(-1) }; - // Use a bridging flow when printing this support layer. - bool bridging { false }; - - // Polygons to be filled by the support pattern. - Polygons polygons; - // Currently for the contact layers only. - std::unique_ptr contact_polygons; - std::unique_ptr overhang_polygons; - // Enforcers need to be propagated independently in case the "support on build plate only" option is enabled. - std::unique_ptr enforcer_polygons; - }; struct SupportParams { Flow first_layer_flow; @@ -147,12 +47,6 @@ public: bool with_sheath; }; - // Layers are allocated and owned by a deque. Once a layer is allocated, it is maintained - // up to the end of a generate() method. The layer storage may be replaced by an allocator class in the future, - // which would allocate layers by multiple chunks. - typedef std::deque MyLayerStorage; - typedef std::vector MyLayersPtr; - public: PrintObjectSupportMaterial(const PrintObject *object, const SlicingParameters &slicing_params); @@ -176,58 +70,58 @@ private: // Generate top contact layers supporting overhangs. // For a soluble interface material synchronize the layer heights with the object, otherwise leave the layer height undefined. // If supports over bed surface only are requested, don't generate contact layers over an object. - MyLayersPtr top_contact_layers(const PrintObject &object, const std::vector &buildplate_covered, MyLayerStorage &layer_storage) const; + SupportGeneratorLayersPtr top_contact_layers(const PrintObject &object, const std::vector &buildplate_covered, SupportGeneratorLayerStorage &layer_storage) const; // Generate bottom contact layers supporting the top contact layers. // For a soluble interface material synchronize the layer heights with the object, // otherwise set the layer height to a bridging flow of a support interface nozzle. - MyLayersPtr bottom_contact_layers_and_layer_support_areas( - const PrintObject &object, const MyLayersPtr &top_contacts, std::vector &buildplate_covered, - MyLayerStorage &layer_storage, std::vector &layer_support_areas) const; + SupportGeneratorLayersPtr bottom_contact_layers_and_layer_support_areas( + const PrintObject &object, const SupportGeneratorLayersPtr &top_contacts, std::vector &buildplate_covered, + SupportGeneratorLayerStorage &layer_storage, std::vector &layer_support_areas) const; // Trim the top_contacts layers with the bottom_contacts layers if they overlap, so there would not be enough vertical space for both of them. - void trim_top_contacts_by_bottom_contacts(const PrintObject &object, const MyLayersPtr &bottom_contacts, MyLayersPtr &top_contacts) const; + void trim_top_contacts_by_bottom_contacts(const PrintObject &object, const SupportGeneratorLayersPtr &bottom_contacts, SupportGeneratorLayersPtr &top_contacts) const; // Generate raft layers and the intermediate support layers between the bottom contact and top contact surfaces. - MyLayersPtr raft_and_intermediate_support_layers( + SupportGeneratorLayersPtr raft_and_intermediate_support_layers( const PrintObject &object, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayerStorage &layer_storage) const; + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayerStorage &layer_storage) const; // Fill in the base layers with polygons. void generate_base_layers( const PrintObject &object, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayersPtr &intermediate_layers, + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayersPtr &intermediate_layers, const std::vector &layer_support_areas) const; // Generate raft layers, also expand the 1st support layer // in case there is no raft layer to improve support adhesion. - MyLayersPtr generate_raft_base( + SupportGeneratorLayersPtr generate_raft_base( const PrintObject &object, - const MyLayersPtr &top_contacts, - const MyLayersPtr &interface_layers, - const MyLayersPtr &base_interface_layers, - const MyLayersPtr &base_layers, - MyLayerStorage &layer_storage) const; + const SupportGeneratorLayersPtr &top_contacts, + const SupportGeneratorLayersPtr &interface_layers, + const SupportGeneratorLayersPtr &base_interface_layers, + const SupportGeneratorLayersPtr &base_layers, + SupportGeneratorLayerStorage &layer_storage) const; // Turn some of the base layers into base interface layers. // For soluble interfaces with non-soluble bases, print maximum two first interface layers with the base // extruder to improve adhesion of the soluble filament to the base. - std::pair generate_interface_layers( - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - MyLayersPtr &intermediate_layers, - MyLayerStorage &layer_storage) const; + std::pair generate_interface_layers( + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + SupportGeneratorLayersPtr &intermediate_layers, + SupportGeneratorLayerStorage &layer_storage) const; // Trim support layers by an object to leave a defined gap between // the support volume and the object. void trim_support_layers_by_object( const PrintObject &object, - MyLayersPtr &support_layers, + SupportGeneratorLayersPtr &support_layers, const coordf_t gap_extra_above, const coordf_t gap_extra_below, const coordf_t gap_xy) const; @@ -240,12 +134,12 @@ private: // Produce the actual G-code. void generate_toolpaths( SupportLayerPtrs &support_layers, - const MyLayersPtr &raft_layers, - const MyLayersPtr &bottom_contacts, - const MyLayersPtr &top_contacts, - const MyLayersPtr &intermediate_layers, - const MyLayersPtr &interface_layers, - const MyLayersPtr &base_interface_layers) const; + const SupportGeneratorLayersPtr &raft_layers, + const SupportGeneratorLayersPtr &bottom_contacts, + const SupportGeneratorLayersPtr &top_contacts, + const SupportGeneratorLayersPtr &intermediate_layers, + const SupportGeneratorLayersPtr &interface_layers, + const SupportGeneratorLayersPtr &base_interface_layers) const; // Following objects are not owned by SupportMaterial class. const PrintObject *m_object; From c68e640d03e49f5e311032098b52bc5ffac4d22e Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:01:30 +0800 Subject: [PATCH 073/100] Fix crash on macOS that you could set extruder number to 0 (#8009) Field: SpinCtrl: Removed code that was relevant for wxSpinCtrl, but not for the new SpinCtrl. (fix for SPE-2050) (cherry picked from commit 555193f6ec477d4107f8998c7a3c441cde72382c) Co-authored-by: YuSanka --- src/slic3r/GUI/Field.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 7846949071..6c4ff935bd 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1064,16 +1064,7 @@ void SpinCtrl::BUILD() { break; } - const int min_val = m_opt.min == INT_MIN -#ifdef __WXOSX__ - // We will forcibly set the input value for SpinControl, since the value - // inserted from the keyboard is not updated under OSX. - // So, we can't set min control value bigger then 0. - // Otherwise, it couldn't be possible to input from keyboard value - // less then min_val. - || m_opt.min > 0 -#endif - ? 0 : m_opt.min; + const int min_val = m_opt.min == INT_MIN ? 0 : m_opt.min; const int max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647; static Builder builder; @@ -1170,14 +1161,6 @@ void SpinCtrl::propagate_value() if (!m_value.empty()) // BBS: null value on_kill_focus(); } else { -#ifdef __WXOSX__ - // check input value for minimum - if (m_opt.min > 0 && tmp_value < m_opt.min) { - SpinInput* spin = static_cast(window); - spin->SetValue(m_opt.min); - // spin->GetText()->SetInsertionPointEnd(); // BBS - } -#endif auto ctrl = dynamic_cast(window); if (m_value.empty() ? !ctrl->GetTextCtrl()->GetLabel().IsEmpty() From 22dc0b1212c170fc947268fd25a82d39d73123b8 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:01:54 +0800 Subject: [PATCH 074/100] Update Emboss font preview alignment (#8013) * Fix style preview size per resolution (cherry picked from commit b67c4785f0d300b5615126ea1df1d518dd6d00b0) * Align font preview to left. (closer to font name) (cherry picked from commit eb9b8c0c2b112f0f7649e58f4f6d7977380b8442) --------- Co-authored-by: Filip Sykala - NTB T15p --- src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp | 6 +++--- src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp | 5 +++-- src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index 2f101b09e3..03077677a2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -3598,7 +3598,7 @@ GuiCfg create_gui_configuration() float space = line_height_with_spacing - line_height; const ImGuiStyle &style = ImGui::GetStyle(); - cfg.max_style_name_width = ImGui::CalcTextSize("Maximal font name, extended").x; + cfg.max_style_name_width = ImGui::CalcTextSize("Maximal style name..").x; cfg.icon_width = static_cast(std::ceil(line_height)); // make size pair number @@ -3692,11 +3692,11 @@ GuiCfg create_gui_configuration() // "Text is to object" + radio buttons cfg.height_of_volume_type_selector = separator_height + line_height_with_spacing + input_height; - int max_style_image_width = static_cast(std::round(cfg.max_style_name_width/2 - 2 * style.FramePadding.x)); + int max_style_image_width = static_cast(std::round(cfg.max_style_name_width - 2 * style.FramePadding.x)); int max_style_image_height = static_cast(std::round(input_height)); cfg.max_style_image_size = Vec2i32(max_style_image_width, line_height); cfg.face_name_size = Vec2i32(cfg.input_width, line_height_with_spacing); - cfg.face_name_texture_offset_x = cfg.face_name_size.x() + space; + cfg.face_name_texture_offset_x = cfg.face_name_size.x() + style.WindowPadding.x + space; cfg.max_tooltip_width = ImGui::GetFontSize() * 20.0f; diff --git a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp index 417eb0ea4c..c452018a7f 100644 --- a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp +++ b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp @@ -142,8 +142,9 @@ void CreateFontImageJob::finalize(bool canceled, std::exception_ptr &) glsafe(::glBindTexture(target, m_input.texture_id)); GLsizei w = m_tex_size.x(), h = m_tex_size.y(); - GLint xoffset = m_input.size.x() - m_tex_size.x(), // arrange right - yoffset = m_input.size.y() * m_input.index; + GLint xoffset = 0; // align to left + // GLint xoffset = m_input.size.x() - m_tex_size.x(); // align right + GLint yoffset = m_input.size.y() * m_input.index; glsafe(::glTexSubImage2D(target, m_input.level, xoffset, yoffset, w, h, m_input.format, m_input.type, m_result.data())); diff --git a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp index 8b25b183dc..f988f622ce 100644 --- a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp +++ b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp @@ -42,12 +42,12 @@ void CreateFontStyleImagesJob::process(Ctl &ctl) // create image description StyleManager::StyleImage &image = m_images[index]; BoundingBox &bounding_box = image.bounding_box; - for (ExPolygon &shape : shapes) + for (const ExPolygon &shape : shapes) bounding_box.merge(BoundingBox(shape.contour.points)); for (ExPolygon &shape : shapes) shape.translate(-bounding_box.min); // calculate conversion from FontPoint to screen pixels by size of font - double scale = get_text_shape_scale(item.prop, *item.font.font_file); + double scale = get_text_shape_scale(item.prop, *item.font.font_file) * m_input.ppm; scales[index] = scale; //double scale = font_prop.size_in_mm * SCALING_FACTOR; From 64153c7968f0681ec71223994003225355364bd6 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:02:07 +0800 Subject: [PATCH 075/100] Fix flow dynamics calib crash when last bed type is selected (#8014) Fix flow dynamics calib crash when last bed type is selected (SoftFever/OrcaSlicer#7857) --- src/slic3r/Utils/CalibUtils.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index b0c397cd08..8182482f0e 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -24,12 +24,14 @@ static const std::string temp_gcode_path = temp_dir + "/temp.gcode"; static const std::string path = temp_dir + "/test.3mf"; static const std::string config_3mf_path = temp_dir + "/test_config.3mf"; -static std::string MachineBedTypeString[5] = { +static std::string MachineBedTypeString[7] = { "auto", + "suprtack", "pc", "ep", "pei", - "pte" + "pte", + "pct", }; From fab7eaab495e7129e3a20283317efa0b15d23dd0 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:02:22 +0800 Subject: [PATCH 076/100] Fix wrong custom gcode layer caused by rounding error (#8017) Compare the custom gcode z to `0.5*(layer_z[n] + layer_z[n+1])` instead of `EPSILON` to compensate float rounding error during gcode processing (SoftFever/OrcaSlicer#7834) --- src/libslic3r/GCode/ToolOrdering.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 535adb8491..675942b39b 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -1005,13 +1005,17 @@ void ToolOrdering::assign_custom_gcodes(const Print &print) bool tool_changes_as_color_changes = mode == CustomGCode::SingleExtruder && model_mode == CustomGCode::MultiAsSingle; // From the last layer to the first one: + coordf_t print_z_above = std::numeric_limits::lowest(); for (auto it_lt = m_layer_tools.rbegin(); it_lt != m_layer_tools.rend(); ++ it_lt) { LayerTools < = *it_lt; // Add the extruders of the current layer to the set of extruders printing at and above this print_z. for (unsigned int i : lt.extruders) extruder_printing_above[i] = true; // Skip all custom G-codes above this layer and skip all extruder switches. - for (; custom_gcode_it != custom_gcode_per_print_z.gcodes.rend() && (custom_gcode_it->print_z > lt.print_z + EPSILON || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it); + for (; custom_gcode_it != custom_gcode_per_print_z.gcodes.rend() && ( + (print_z_above > lt.print_z && custom_gcode_it->print_z > 0.5 * (lt.print_z + print_z_above)) + || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it); + print_z_above = lt.print_z; if (custom_gcode_it == custom_gcode_per_print_z.gcodes.rend()) // Custom G-codes were processed. break; @@ -1021,7 +1025,7 @@ void ToolOrdering::assign_custom_gcodes(const Print &print) coordf_t print_z_below = 0.; if (auto it_lt_below = it_lt; ++ it_lt_below != m_layer_tools.rend()) print_z_below = it_lt_below->print_z; - if (custom_gcode.print_z > print_z_below + 0.5 * EPSILON) { + if (custom_gcode.print_z > 0.5 * (print_z_below + lt.print_z)) { // The custom G-code applies to the current layer. bool color_change = custom_gcode.type == CustomGCode::ColorChange; bool tool_change = custom_gcode.type == CustomGCode::ToolChange; From 61331ce1132ed77a510785c2c697d4177c873089 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:02:57 +0800 Subject: [PATCH 077/100] Fix extruder number issue when SEMM is not enabled (#8027) * Revert ac80575b28901a46468920cf1707213de4c86d22 * Fix issue that extruder number is not initialized properly when SEMM is not enabled --- src/libslic3r/Preset.cpp | 24 +++++++++++++++++------- src/slic3r/GUI/Tab.cpp | 5 ++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1906013cbd..cfc777c8cc 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -318,17 +318,27 @@ std::string Preset::remove_suffix_modified(const std::string &name) // Update new extruder fields at the printer profile. void Preset::normalize(DynamicPrintConfig &config) { - // BBS - auto* filament_diameter = dynamic_cast(config.option("filament_diameter")); - if (filament_diameter != nullptr) - // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. - config.set_num_filaments((unsigned int)filament_diameter->values.size()); + size_t n = 1; + if (config.option("single_extruder_multi_material") == nullptr || config.opt_bool("single_extruder_multi_material")) { + // BBS + auto* filament_diameter = dynamic_cast(config.option("filament_diameter")); + if (filament_diameter != nullptr) { + n = filament_diameter->values.size(); + // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. + config.set_num_filaments((unsigned int) n); + } + } else { + auto* nozzle_diameter = dynamic_cast(config.option("nozzle_diameter")); + if (nozzle_diameter != nullptr) { + n = nozzle_diameter->values.size(); + // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. + config.set_num_extruders((unsigned int) n); + } + } if (config.option("filament_diameter") != nullptr) { // This config contains single or multiple filament presets. // Ensure that the filament preset vector options contain the correct number of values. - // BBS - size_t n = (filament_diameter == nullptr) ? 1 : filament_diameter->values.size(); const auto &defaults = FullPrintConfig::defaults(); for (const std::string &key : Preset::filament_options()) { if (key == "compatible_prints" || key == "compatible_printers") diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6ef7e30b34..7ec6d1b976 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5118,13 +5118,12 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, apply_config_from_cache(); // Orca: update presets for the selected printer - load_current_preset(); - if (m_type == Preset::TYPE_PRINTER && wxGetApp().app_config->get_bool("remember_printer_config")) { m_preset_bundle->update_selections(*wxGetApp().app_config); wxGetApp().plater()->sidebar().on_filaments_change(m_preset_bundle->filament_presets.size()); } - + load_current_preset(); + if (delete_third_printer) { wxGetApp().CallAfter([filament_presets, process_presets]() { From a66fc86e203572f84a0761d607fc7e0170e3afd7 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:03:08 +0800 Subject: [PATCH 078/100] Fix issue that flatten gizmo faces not updated after reload from disk (#8036) Fix issue that flatten gizmo faces not updated after reload from disk (SoftFever/OrcaSlicer#7791) --- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 2b55fb6a6a..87ad6be44c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -375,6 +375,9 @@ void GLGizmosManager::update_data() : CommonGizmosDataID(0)); if (m_current != Undefined) m_gizmos[m_current]->data_changed(m_serializing); + // Orca: hack: Fix issue that flatten gizmo faces not updated after reload from disk + if (m_current != Flatten && !m_gizmos.empty()) m_gizmos[Flatten]->data_changed(m_serializing); + //BBS: GUI refactor: add object manipulation in gizmo m_object_manipulation.update_ui_from_settings(); m_object_manipulation.UpdateAndShow(true); From cef15842bb0c83064b731a56d3c5be7dc186b4d9 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:03:21 +0800 Subject: [PATCH 079/100] Fix arrange when print-by-object and have object off-plate (#8038) * Fix arrange when print-by-object and have object off-plate (SoftFever/OrcaSlicer#7745) Partly revert 0b6a1d36360448c5e6818001b9d8ea99a57567a7 * Fix issue that fill bed with instance ignores print-by-object clearance (SoftFever/OrcaSlicer#5153) --- src/libslic3r/Arrange.cpp | 4 +++- src/libslic3r/Arrange.hpp | 1 - src/slic3r/GUI/Jobs/ArrangeJob.cpp | 1 - src/slic3r/GUI/Jobs/FillBedJob.cpp | 2 -- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 917ea14c84..8bf246591d 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -103,8 +103,10 @@ void update_selected_items_inflation(ArrangePolygons& selected, const DynamicPri BoundingBox bedbb = Polygon(bedpts).bounding_box(); // set obj distance for auto seq_print if (params.is_seq_print) { - if (params.all_objects_are_short) + bool all_objects_are_short = std::all_of(selected.begin(), selected.end(), [&](ArrangePolygon& ap) { return ap.height < params.nozzle_height; }); + if (all_objects_are_short) { params.min_obj_distance = std::max(params.min_obj_distance, scaled(std::max(MAX_OUTER_NOZZLE_DIAMETER/2.f, params.object_skirt_offset*2)+0.001)); + } else params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.clearance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error } diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index 8781477bcb..ad125aee7d 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -135,7 +135,6 @@ struct ArrangeParams { float clearance_radius = 0; float object_skirt_offset = 0; float nozzle_height = 0; - bool all_objects_are_short = false; float printable_height = 256.0; Vec2d align_center{ 0.5,0.5 }; diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 7215a71127..1cac3b51e9 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -775,7 +775,6 @@ arrangement::ArrangeParams init_arrange_params(Plater *p) params.printable_height = print_config.printable_height.value; params.allow_rotations = settings.enable_rotation; params.nozzle_height = print_config.nozzle_height.value; - params.all_objects_are_short = print.is_all_objects_are_short(); params.align_center = print_config.best_object_pos.value; params.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; params.avoid_extrusion_cali_region = settings.avoid_extrusion_cali_region; diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index e594f98ae1..b4aa69c4e9 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -56,7 +56,6 @@ void FillBedJob::prepare() ArrangePolygon ap = get_instance_arrange_poly(mo->instances[inst_idx], global_config); BoundingBox ap_bb = ap.transformed_poly().contour.bounding_box(); - ap.height = 1; ap.name = mo->name; if (selected) @@ -173,7 +172,6 @@ void FillBedJob::prepare() ArrangePolygon ap = template_ap; ap.poly = m_selected.front().poly; ap.bed_idx = PartPlateList::MAX_PLATES_COUNT; - ap.height = 1; ap.itemid = -1; ap.setter = [this, mi](const ArrangePolygon &p) { ModelObject *mo = m_plater->model().objects[m_object_idx]; From 6cdede8e1095da66fa394276a01a408910686a96 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:03:32 +0800 Subject: [PATCH 080/100] Fix reload step modifiers/parts (#8083) * FIX: reload step file not work JIRA:STUDIO-7282 GITHUB:#4247 fix commit ed34eaa Change-Id: Ib73654052d8f0b6b917f86a910b4f91a0198f2d4 (cherry picked from commit 387ff008c85588f8ab378ffa283f428b2ff2ec8c) (cherry picked from commit 539dea08854673045db779332fd1c2a0d994beda) * FIX:reload stl from disk,transformation is error jira: STUDIO-8391 Change-Id: Ic006973fe0f2b0c0208c391d064ab373fd15a772 (cherry picked from commit b5d18d4ae7a5b1c40e728ac93a96d36dabe83d42) --------- Co-authored-by: Mack Co-authored-by: zhou.xu --- src/slic3r/GUI/Plater.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8e7b3941d4..589a18aaa7 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5974,6 +5974,11 @@ void Plater::priv::reload_from_disk() } } if (found) break; + // BBS: step model,object loaded as a volume. GUI_ObfectList.cpp load_modifier() + if (obj->name == old_volume->name) { + new_object_idx = (int) o; + break; + } } } @@ -5982,22 +5987,30 @@ void Plater::priv::reload_from_disk() continue; } ModelObject *new_model_object = new_model.objects[new_object_idx]; - if (new_volume_idx < 0 || int(new_model_object->volumes.size()) <= new_volume_idx) { + if (int(new_model_object->volumes.size()) <= new_volume_idx) { fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); continue; } - old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]); - ModelVolume *new_volume = old_model_object->volumes.back(); + ModelVolume *new_volume = nullptr; + // BBS: step model + if (new_volume_idx < 0 && new_object_idx >= 0) { + TriangleMesh mesh = new_model_object->mesh(); + new_volume = old_model_object->add_volume(std::move(mesh)); + new_volume->name = new_model_object->name; + new_volume->source.input_file = new_model_object->input_file; + }else { + new_volume = old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]); + // new_volume = old_model_object->volumes.back(); + } + new_volume->set_new_unique_id(); new_volume->config.apply(old_volume->config); new_volume->set_type(old_volume->type()); new_volume->set_material_id(old_volume->material_id()); - Transform3d transform = Transform3d::Identity(); - transform.translate(new_volume->source.mesh_offset - old_volume->source.mesh_offset); - new_volume->set_transformation(old_volume->get_transformation().get_matrix() * old_volume->source.transform.get_matrix_no_offset() * - transform * new_volume->source.transform.get_matrix_no_offset().inverse()); + new_volume->source.mesh_offset = old_volume->source.mesh_offset; + new_volume->set_transformation(old_volume->get_transformation()); new_volume->source.object_idx = old_volume->source.object_idx; new_volume->source.volume_idx = old_volume->source.volume_idx; From 16340fd6b6b3fbb6dc806da0e061dc33b768b576 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:03:43 +0800 Subject: [PATCH 081/100] FIX: step model split COMPOUND and COMPOUNSOLID type (#8084) JIRA:STUDIO-5632 GITHUB: #3153 Change-Id: I1b9b49321cc0da8bdd79e2beb4009283cfada287 (cherry picked from commit 6191a66441549b1cee8be8d7f740c2d466557691) (cherry picked from commit 90f325792dc4910b80d69c9d6a5677f24b8fa259) Co-authored-by: Mack --- src/libslic3r/Format/STEP.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index b705641d6e..45e938d1b6 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -197,15 +197,19 @@ static void getNamedSolids(const TopLoc_Location& location, const std::string& p } } else { TopoDS_Shape shape; + TopExp_Explorer explorer; shapeTool->GetShape(referredLabel, shape); TopAbs_ShapeEnum shape_type = shape.ShapeType(); BRepBuilderAPI_Transform transform(shape, localLocation, Standard_True); + int i = 0; switch (shape_type) { case TopAbs_COMPOUND: - namedSolids.emplace_back(TopoDS::Compound(transform.Shape()), fullName); - break; case TopAbs_COMPSOLID: - namedSolids.emplace_back(TopoDS::CompSolid(transform.Shape()), fullName); + for (explorer.Init(transform.Shape(), TopAbs_SOLID); explorer.More(); explorer.Next()) { + i++; + const TopoDS_Shape& currentShape = explorer.Current(); + namedSolids.emplace_back(TopoDS::Solid(currentShape), fullName + "-SOLID-" + std::to_string(i)); + } break; case TopAbs_SOLID: namedSolids.emplace_back(TopoDS::Solid(transform.Shape()), fullName); From 68997f260fda7994ae0f9772fdb66489e18e305c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:03:53 +0800 Subject: [PATCH 082/100] Fix auto-hide taskbar overlapping issue when maximized (#8118) Fix auto-hide taskbar overlapping issue when maximized (SoftFever/OrcaSlicer#8085) --- src/slic3r/GUI/MainFrame.cpp | 65 +++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 123939efb0..945e8b493e 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -66,6 +66,7 @@ #ifdef _WIN32 #include #include +#include #endif // _WIN32 #include @@ -634,8 +635,64 @@ void MainFrame::bind_diff_dialog() #ifdef __WIN32__ +// Orca: Fix maximized window overlaps taskbar when taskbar auto hide is enabled (#8085) +// Adopted from https://gist.github.com/MortenChristiansen/6463580 +static void AdjustWorkingAreaForAutoHide(const HWND hWnd, MINMAXINFO* mmi) +{ + const auto taskbarHwnd = FindWindowA("Shell_TrayWnd", nullptr); + if (!taskbarHwnd) { + return; + } + const auto monitorContainingApplication = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONULL); + const auto monitorWithTaskbarOnIt = MonitorFromWindow(taskbarHwnd, MONITOR_DEFAULTTONULL); + if (monitorContainingApplication != monitorWithTaskbarOnIt) { + return; + } + APPBARDATA abd; + abd.cbSize = sizeof(APPBARDATA); + abd.hWnd = taskbarHwnd; + + // Find if task bar has auto-hide enabled + const auto uState = (UINT) SHAppBarMessage(ABM_GETSTATE, &abd); + if ((uState & ABS_AUTOHIDE) != ABS_AUTOHIDE) { + return; + } + + RECT borderThickness; + SetRectEmpty(&borderThickness); + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_CAPTION, FALSE, 0); + + // Determine taskbar position + SHAppBarMessage(ABM_GETTASKBARPOS, &abd); + const auto& rc = abd.rc; + if (rc.top == rc.left && rc.bottom > rc.right) { + // Left + const auto offset = borderThickness.left + 2; + mmi->ptMaxPosition.x += offset; + mmi->ptMaxTrackSize.x -= offset; + mmi->ptMaxSize.x -= offset; + } else if (rc.top == rc.left && rc.bottom < rc.right) { + // Top + const auto offset = borderThickness.top + 2; + mmi->ptMaxPosition.y += offset; + mmi->ptMaxTrackSize.y -= offset; + mmi->ptMaxSize.y -= offset; + } else if (rc.top > rc.left) { + // Bottom + const auto offset = borderThickness.bottom + 2; + mmi->ptMaxSize.y -= offset; + mmi->ptMaxTrackSize.y -= offset; + } else { + // Right + const auto offset = borderThickness.right + 2; + mmi->ptMaxSize.x -= offset; + mmi->ptMaxTrackSize.x -= offset; + } +} + WXLRESULT MainFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { + HWND hWnd = GetHandle(); /* When we have a custom titlebar in the window, we don't need the non-client area of a normal window * to be painted. In order to achieve this, we handle the "WM_NCCALCSIZE" which is responsible for the * size of non-client area of a window and set the return value to 0. Also we have to tell the @@ -654,7 +711,6 @@ WXLRESULT MainFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam its wParam value is TRUE and the return value is 0 */ case WM_NCCALCSIZE: if (wParam) { - HWND hWnd = GetHandle(); /* Detect whether window is maximized or not. We don't need to change the resize border when win is * maximized because all resize borders are gone automatically */ WINDOWPLACEMENT wPos; @@ -677,6 +733,13 @@ WXLRESULT MainFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam } } break; + + case WM_GETMINMAXINFO: { + auto mmi = (MINMAXINFO*) lParam; + HandleGetMinMaxInfo(mmi); + AdjustWorkingAreaForAutoHide(hWnd, mmi); + return 0; + } } return wxFrame::MSWWindowProc(nMsg, wParam, lParam); } From 74cf73690378a7f3355a0447ef399834917d2f31 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:04:03 +0800 Subject: [PATCH 083/100] Fix issue that `is_infill_first` doesn't work correctly on regions (#8126) Fix issue that `is_infill_first` doesn't work correctly on regions (SoftFever/OrcaSlicer#8111) --- src/libslic3r/GCode.cpp | 38 ++++++++++++-------------------------- src/libslic3r/GCode.hpp | 2 +- src/libslic3r/Layer.cpp | 2 ++ 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index c4bbf5ed19..8ff4519e8a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4273,7 +4273,6 @@ LayerResult GCode::process_layer( m_last_obj_copy = this_object_copy; this->set_origin(unscale(offset)); //FIXME the following code prints regions in the order they are defined, the path is not optimized in any way. - bool is_infill_first =m_config.is_infill_first; auto has_infill = [](const std::vector &by_region) { for (auto region : by_region) { @@ -4282,10 +4281,9 @@ LayerResult GCode::process_layer( } return false; }; - - //BBS: for first layer, we always print wall firstly to get better bed adhesive force - //This behaviour is same with cura - if (is_infill_first && !first_layer) { + { + // Print perimeters of regions that has is_infill_first == false + gcode += this->extrude_perimeters(print, by_region_specific, first_layer, false); if (!has_wipe_tower && need_insert_timelapse_gcode_for_traditional && !has_insert_timelapse_gcode && has_infill(by_region_specific)) { gcode += this->retract(false, false, LiftType::NormalLift); @@ -4302,27 +4300,10 @@ LayerResult GCode::process_layer( has_insert_timelapse_gcode = true; } + // Then print infill gcode += this->extrude_infill(print, by_region_specific, false); - gcode += this->extrude_perimeters(print, by_region_specific); - } else { - gcode += this->extrude_perimeters(print, by_region_specific); - if (!has_wipe_tower && need_insert_timelapse_gcode_for_traditional && !has_insert_timelapse_gcode && has_infill(by_region_specific)) { - gcode += this->retract(false, false, LiftType::NormalLift); - - std::string timepals_gcode = insert_timelapse_gcode(); - gcode += timepals_gcode; - m_writer.set_current_position_clear(false); - //BBS: check whether custom gcode changes the z position. Update if changed - double temp_z_after_timepals_gcode; - if (GCodeProcessor::get_last_z_from_gcode(timepals_gcode, temp_z_after_timepals_gcode)) { - Vec3d pos = m_writer.get_position(); - pos(2) = temp_z_after_timepals_gcode; - m_writer.set_position(pos); - } - - has_insert_timelapse_gcode = true; - } - gcode += this->extrude_infill(print,by_region_specific, false); + // Then print perimeters of regions that has is_infill_first == true + gcode += this->extrude_perimeters(print, by_region_specific, first_layer, true); } // ironing gcode += this->extrude_infill(print,by_region_specific, true); @@ -4920,12 +4901,17 @@ std::string GCode::extrude_path(ExtrusionPath path, std::string description, dou } // Extrude perimeters: Decide where to put seams (hide or align seams). -std::string GCode::extrude_perimeters(const Print &print, const std::vector &by_region) +std::string GCode::extrude_perimeters(const Print &print, const std::vector &by_region, bool is_first_layer, bool is_infill_first) { std::string gcode; for (const ObjectByExtruder::Island::Region ®ion : by_region) if (! region.perimeters.empty()) { m_config.apply(print.get_print_region(®ion - &by_region.front()).config()); + // BBS: for first layer, we always print wall firstly to get better bed adhesive force + // This behaviour is same with cura + const bool should_print = is_first_layer ? !is_infill_first + : (m_config.is_infill_first == is_infill_first); + if (!should_print) continue; for (const ExtrusionEntity* ee : region.perimeters) gcode += this->extrude_entity(*ee, "perimeter", -1., region.perimeters); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 5f92fd6237..cb39342d94 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -445,7 +445,7 @@ private: // For sequential print, the instance of the object to be printing has to be defined. const size_t single_object_instance_idx); - std::string extrude_perimeters(const Print& print, const std::vector& by_region); + std::string extrude_perimeters(const Print& print, const std::vector& by_region, bool is_first_layer, bool is_infill_first); std::string extrude_infill(const Print& print, const std::vector& by_region, bool ironing); std::string extrude_support(const ExtrusionEntityCollection& support_fills); diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index cb98c6e6b5..ad494aeac7 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -168,6 +168,8 @@ void Layer::make_perimeters() const PrintRegionConfig &other_config = other_layerm->region().config(); if (config.wall_filament == other_config.wall_filament && config.wall_loops == other_config.wall_loops + && config.wall_sequence == other_config.wall_sequence + && config.is_infill_first == other_config.is_infill_first && config.inner_wall_speed == other_config.inner_wall_speed && config.outer_wall_speed == other_config.outer_wall_speed && config.small_perimeter_speed == other_config.small_perimeter_speed From 880081226ab99ef7a815701b0fb17c6d54f1a81d Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:05:38 +0800 Subject: [PATCH 084/100] Fix first layer tool ordering in print-by-object mode (#6664) Fix first layer tool ordering in print-by-object mode (SoftFever/OrcaSlicer#6615) --- src/libslic3r/GCode/ToolOrdering.cpp | 73 +++++++++++++--------------- src/libslic3r/GCode/ToolOrdering.hpp | 1 + 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 675942b39b..daa6e9d8a9 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -206,6 +206,7 @@ static double calc_max_layer_height(const PrintConfig &config, double max_object ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { m_is_BBL_printer = object.print()->is_BBL_printer(); + m_print_full_config = &object.print()->full_print_config(); m_print_object_ptr = &object; if (object.layers().empty()) return; @@ -250,6 +251,7 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { m_is_BBL_printer = print.is_BBL_printer(); + m_print_full_config = &print.full_print_config(); m_print_config_ptr = &print.config(); // Initialize the print layers for all objects and all layers. @@ -315,6 +317,24 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool this->mark_skirt_layers(print.config(), max_layer_height); } +static void apply_first_layer_order(const DynamicPrintConfig* config, std::vector& tool_order) { + const ConfigOptionInts* first_layer_print_sequence_op = config->option("first_layer_print_sequence"); + if (first_layer_print_sequence_op) { + const std::vector& print_sequence_1st = first_layer_print_sequence_op->values; + if (print_sequence_1st.size() >= tool_order.size()) { + std::sort(tool_order.begin(), tool_order.end(), [&print_sequence_1st](int lh, int rh) { + auto lh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), lh); + auto rh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), rh); + + if (lh_it == print_sequence_1st.end() || rh_it == print_sequence_1st.end()) + return false; + + return lh_it < rh_it; + }); + } + } +} + // BBS std::vector ToolOrdering::generate_first_layer_tool_order(const Print& print) { @@ -359,21 +379,7 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr tool_order.insert(iter, ape.first); } - const ConfigOptionInts* first_layer_print_sequence_op = print.full_print_config().option("first_layer_print_sequence"); - if (first_layer_print_sequence_op) { - const std::vector& print_sequence_1st = first_layer_print_sequence_op->values; - if (print_sequence_1st.size() >= tool_order.size()) { - std::sort(tool_order.begin(), tool_order.end(), [&print_sequence_1st](int lh, int rh) { - auto lh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), lh); - auto rh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), rh); - - if (lh_it == print_sequence_1st.end() || rh_it == print_sequence_1st.end()) - return false; - - return lh_it < rh_it; - }); - } - } + apply_first_layer_order(m_print_full_config, tool_order); return tool_order; } @@ -417,21 +423,7 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr tool_order.insert(iter, ape.first); } - const ConfigOptionInts* first_layer_print_sequence_op = object.print()->full_print_config().option("first_layer_print_sequence"); - if (first_layer_print_sequence_op) { - const std::vector& print_sequence_1st = first_layer_print_sequence_op->values; - if (print_sequence_1st.size() >= tool_order.size()) { - std::sort(tool_order.begin(), tool_order.end(), [&print_sequence_1st](int lh, int rh) { - auto lh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), lh); - auto rh_it = std::find(print_sequence_1st.begin(), print_sequence_1st.end(), rh); - - if (lh_it == print_sequence_1st.end() || rh_it == print_sequence_1st.end()) - return false; - - return lh_it < rh_it; - }); - } - } + apply_first_layer_order(m_print_full_config, tool_order); return tool_order; } @@ -606,14 +598,19 @@ void ToolOrdering::reorder_extruders(unsigned int last_extruder_id) break; } - // On first layer with wipe tower, prefer a soluble extruder - // at the beginning, so it is not wiped on the first layer. - if (lt == m_layer_tools[0] && m_print_config_ptr && m_print_config_ptr->enable_prime_tower) { - for (size_t i = 0; ifilament_soluble.get_at(lt.extruders[i]-1)) { // 1-based... - std::swap(lt.extruders[i], lt.extruders.front()); - break; - } + if (lt == m_layer_tools[0]) { + // On first layer with wipe tower, prefer a soluble extruder + // at the beginning, so it is not wiped on the first layer. + if (m_print_config_ptr && m_print_config_ptr->enable_prime_tower) { + for (size_t i = 0; ifilament_soluble.get_at(lt.extruders[i]-1)) { // 1-based... + std::swap(lt.extruders[i], lt.extruders.front()); + break; + } + } + + // Then, if we specified the tool order, apply it now + apply_first_layer_order(m_print_full_config, lt.extruders); } } last_extruder_id = lt.extruders.back(); diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index d9a93131a7..0a28544be0 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -210,6 +210,7 @@ private: // All extruders, which extrude some material over m_layer_tools. std::vector m_all_printing_extruders; std::unordered_map> m_tool_order_cache; + const DynamicPrintConfig* m_print_full_config = nullptr; const PrintConfig* m_print_config_ptr = nullptr; const PrintObject* m_print_object_ptr = nullptr; bool m_is_BBL_printer = false; From 302b40af22f04138e90c750f4da30ebaa5afe60f Mon Sep 17 00:00:00 2001 From: Patrick Carnahan Date: Wed, 22 Jan 2025 01:22:22 -0500 Subject: [PATCH 085/100] Port Quartercubic infill pattern (#7243) * Ported Quarter Cubic infill pattern from Cura * Code reformat --- resources/images/param_quartercubic.svg | 108 ++++++++++++++++++++++++ src/libslic3r/Fill/FillBase.cpp | 1 + src/libslic3r/Fill/FillRectilinear.cpp | 34 ++++++++ src/libslic3r/Fill/FillRectilinear.hpp | 14 +++ src/libslic3r/PrintConfig.cpp | 5 +- src/libslic3r/PrintConfig.hpp | 2 +- 6 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 resources/images/param_quartercubic.svg diff --git a/resources/images/param_quartercubic.svg b/resources/images/param_quartercubic.svg new file mode 100644 index 0000000000..21008d7b11 --- /dev/null +++ b/resources/images/param_quartercubic.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 6225987486..d5ce03d3b4 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -50,6 +50,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipTriangles: return new FillTriangles(); case ipStars: return new FillStars(); case ipCubic: return new FillCubic(); + case ipQuarterCubic: return new FillQuarterCubic(); case ipArchimedeanChords: return new FillArchimedeanChords(); case ipHilbertCurve: return new FillHilbertCurve(); case ipOctagramSpiral: return new FillOctagramSpiral(); diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index dc9595eac4..6b1ba2f924 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "../ClipperUtils.hpp" #include "../ExPolygon.hpp" @@ -3035,6 +3036,39 @@ Polylines FillCubic::fill_surface(const Surface *surface, const FillParams ¶ return polylines_out; } +Polylines FillQuarterCubic::fill_surface(const Surface* surface, const FillParams& params) +{ + using namespace boost::math::float_constants; + + Polylines polylines_out; + + coord_t line_width = coord_t(scale_(this->spacing)); + coord_t period = coord_t(scale_(this->spacing) / params.density) * 4; + + // First half tetrahedral fill + double pattern_z_shift = 0.0; + coord_t shift = coord_t(one_div_root_two * (scale_(z) + pattern_z_shift * period * 2)) % period; + shift = std::min(shift, period - shift); // symmetry due to the fact that we are applying the shift in both directions + shift = std::min(shift, period / 2 - line_width / 2); // don't put lines too close to each other + shift = std::max(shift, line_width / 2); // don't put lines too close to each other + float dx1 = unscale_(shift); + + // Second half tetrahedral fill + pattern_z_shift = 0.5; + shift = coord_t(one_div_root_two * (scale_(z) + pattern_z_shift * period * 2)) % period; + shift = std::min(shift, period - shift); // symmetry due to the fact that we are applying the shift in both directions + shift = std::min(shift, period / 2 - line_width / 2); // don't put lines too close to each other + shift = std::max(shift, line_width / 2); // don't put lines too close to each other + float dx2 = unscale_(shift); + if (!this->fill_surface_by_multilines( + surface, params, + {{0.f, dx1}, {0.f, -dx1}, {float(M_PI / 2.), dx2}, {float(M_PI / 2.), -dx2}}, + polylines_out)) + BOOST_LOG_TRIVIAL(error) << "FillQuarterCubic::fill_surface() failed to fill a region."; + + return polylines_out; +} + Polylines FillSupportBase::fill_surface(const Surface *surface, const FillParams ¶ms) { assert(! params.full_infill()); diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp index f85dce07e8..c835607ce7 100644 --- a/src/libslic3r/Fill/FillRectilinear.hpp +++ b/src/libslic3r/Fill/FillRectilinear.hpp @@ -107,6 +107,20 @@ protected: float _layer_angle(size_t idx) const override { return 0.f; } }; +// Added QuarterCubic pattern from Cura +class FillQuarterCubic : public FillRectilinear +{ +public: + Fill* clone() const override { return new FillQuarterCubic(*this); } + ~FillQuarterCubic() override = default; + Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; + +protected: + // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. + float _layer_angle(size_t idx) const override { return 0.f; } +}; + + class FillSupportBase : public FillRectilinear { public: diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index afcdfc0d22..0fd8c91b78 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -143,7 +143,8 @@ static t_config_enum_values s_keys_map_InfillPattern { { "octagramspiral", ipOctagramSpiral }, { "supportcubic", ipSupportCubic }, { "lightning", ipLightning }, - { "crosshatch", ipCrossHatch} + { "crosshatch", ipCrossHatch}, + { "quartercubic", ipQuarterCubic} }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern) @@ -2272,6 +2273,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("supportcubic"); def->enum_values.push_back("lightning"); def->enum_values.push_back("crosshatch"); + def->enum_values.push_back("quartercubic"); def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Grid")); @@ -2290,6 +2292,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Support Cubic")); def->enum_labels.push_back(L("Lightning")); def->enum_labels.push_back(L("Cross Hatch")); + def->enum_labels.push_back(L("Quarter Cubic")); def->set_default_value(new ConfigOptionEnum(ipCrossHatch)); auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 0d68906cb3..dc222603b8 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -52,7 +52,7 @@ enum AuthorizationType { enum InfillPattern : int { ipConcentric, ipRectilinear, ipGrid, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip3DHoneycomb, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal, - ipLightning, ipCrossHatch, + ipLightning, ipCrossHatch, ipQuarterCubic, ipCount, }; From 893b8cba1615c26407286f65442a871e28b415f9 Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 22 Jan 2025 00:24:11 -0600 Subject: [PATCH 086/100] Update build_deps.yml (check for existing directory tree and skips creation if exists) (#7337) * Update build_deps.yml Fixes "Build on Windows" so an error isn't thrown if the working directories already exist. * Update build_deps.yml * Update build_deps.yml --- .github/workflows/build_deps.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index 6c0dc9479c..e9ce9a8563 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -66,8 +66,11 @@ jobs: working-directory: ${{ github.workspace }} run: | choco install strawberryperl - mkdir ${{ github.workspace }}/deps/build - mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep + $Folder = ${{ github.workspace }}/deps/build + if (!(Test-Path -Path $Folder)) { + mkdir ${{ github.workspace }}/deps/build + mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep + } .\build_release_vs2022.bat deps .\build_release_vs2022.bat pack cd ${{ github.workspace }}/deps/build From c51f6edc54c56cac27f95739c09bbce763876730 Mon Sep 17 00:00:00 2001 From: Evan McBeth <64177332+AtomicRobotMan0101@users.noreply.github.com> Date: Wed, 22 Jan 2025 17:33:35 +1100 Subject: [PATCH 087/100] Update README.md (#7806) A trivial amendment to the initial graphics location to correct it from that of another fork, plus some trivial text edits to smooth reading. Added a small text to encourage others to report spammy sites to the engines to have them eventually culled. --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4db8501db4..47d8bc51cf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -

Orca Slicer

+

Orca Slicer

[![Build all](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_all.yml/badge.svg?branch=main)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_all.yml)
Orca Slicer is an open source slicer for FDM printers. @@ -10,12 +10,16 @@ Join our Discord community here:

🚨🚨🚨Important Security Alert🚨🚨🚨

-Please be aware that "**orcaslicer.net**" or "**orcaslicer.info**" are NOT an official website for OrcaSlicer and may be potentially malicious. This site appears to use AI-generated content, lacking genuine context, and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised. +Please be aware that "**orcaslicer.net**" or "**orcaslicer.info**" are NOT an official website for OrcaSlicer and may be potentially malicious. These sites appear to use AI-generated content, lacking genuine context and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised. + +If you see the above sites in your searches, report them as spam or unsafe to the search engine. This small action will assist everyone. The only official platforms for OrcaSlicer are our GitHub project page and the
official Discord channel . We deeply value our OrcaSlicer community and appreciate all the social groups that support us. However, it is crucial to address the risk posed by any group that falsely claims to be official or misleads its members. If you encounter such a group or are part of one, please assist by encouraging the group owner to add a clear disclaimer or by alerting its members. + + Thank you for your vigilance and support in keeping our community safe! # Main features @@ -129,7 +133,7 @@ resolution: 0.1 ``` # Supports -**Orca Slicer** is an open-source project, and I'm deeply grateful to all my sponsors and backers. +**Orca Slicer** is an open-source project and I'm deeply grateful to all my sponsors and backers. Their generous support enables me to purchase filaments and other essential 3D printing materials for the project. Thank you! :) From f2e65f9d004cb87d07c2df9f547cf62f8f3f57c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:36:57 +0800 Subject: [PATCH 088/100] Bump WebFreak001/deploy-nightly from 3.1.0 to 3.2.0 (#7958) Bumps [WebFreak001/deploy-nightly](https://github.com/webfreak001/deploy-nightly) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/webfreak001/deploy-nightly/releases) - [Commits](https://github.com/webfreak001/deploy-nightly/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: WebFreak001/deploy-nightly dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build_all.yml | 2 +- .github/workflows/build_orca.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 0de48024fe..6e422f0702 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -99,7 +99,7 @@ jobs: cache: true - name: Deploy Flatpak to nightly release if: ${{github.ref == 'refs/heads/main'}} - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index b31fdbcd70..87aacd8862 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -143,7 +143,7 @@ jobs: - name: Deploy Mac release if: github.ref == 'refs/heads/main' && inputs.os == 'macos-14' - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 @@ -212,7 +212,7 @@ jobs: - name: Deploy Windows release portable if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 @@ -223,7 +223,7 @@ jobs: - name: Deploy Windows release installer if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 @@ -290,7 +290,7 @@ jobs: if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} env: ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 @@ -301,7 +301,7 @@ jobs: - name: Deploy orca_custom_preset_tests if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' }} - uses: WebFreak001/deploy-nightly@v3.1.0 + uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} release_id: 137995723 From 9718d13c21ad56300cf621028d2a5952e3e6ebf2 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 22 Jan 2025 07:37:42 +0100 Subject: [PATCH 089/100] Adding Creality Hi printer (#7964) * Adding Creality Hi files * Added Creality Hi profiles * Fixed profile issues * Fixed profile * Fixed profile * Fixed build plate position * Fixed build plate position * Various fixes and optimizations. * Add ASA and PETG -CF filaments. * Various fixes/improvements * Changed default flow for PLA HS * Various fixes and optimisations. * Disabled filament ramming --- resources/profiles/Creality.json | 88 +++++++++++ .../profiles/Creality/Creality Hi_cover.png | Bin 0 -> 100974 bytes .../Creality/creality_hi_buildplate_model.stl | Bin 0 -> 28684 bytes .../creality_hi_buildplate_texture.png | Bin 0 -> 13432 bytes .../Creality Generic ABS @Hi-all.json | 14 ++ .../Creality Generic ASA @Hi-all.json | 14 ++ .../Creality Generic ASA-CF @Hi-all.json | 14 ++ .../Creality Generic PETG @Hi-all.json | 24 +++ .../Creality Generic PETG-CF @Hi-all.json | 14 ++ .../Creality Generic PLA @Hi-all.json | 93 +++++++++++ ...eality Generic PLA High Speed @Hi-all.json | 18 +++ .../Creality Generic PLA Matte @Hi-all.json | 15 ++ .../Creality Generic PLA Silk @Hi-all.json | 18 +++ .../Creality Generic PLA-CF @Hi-all.json | 15 ++ .../Creality Generic TPU @Hi-all.json | 36 +++++ .../machine/Creality Hi 0.4 nozzle.json | 145 ++++++++++++++++++ .../machine/Creality Hi 0.6 nozzle.json | 145 ++++++++++++++++++ .../Creality/machine/Creality Hi.json | 13 ++ ...m SuperDetail @Creality Hi 0.4 nozzle.json | 117 ++++++++++++++ .../0.12mm Fine @Creality Hi 0.4 nozzle.json | 126 +++++++++++++++ ....16mm Optimal @Creality Hi 0.4 nozzle.json | 119 ++++++++++++++ ...20mm Standard @Creality Hi 0.4 nozzle.json | 126 +++++++++++++++ .../0.24mm Draft @Creality Hi 0.4 nozzle.json | 126 +++++++++++++++ ....24mm Optimal @Creality Hi 0.6 nozzle.json | 125 +++++++++++++++ ...30mm Standard @Creality Hi 0.6 nozzle.json | 125 +++++++++++++++ .../0.36mm Draft @Creality Hi 0.6 nozzle.json | 125 +++++++++++++++ 26 files changed, 1655 insertions(+) create mode 100644 resources/profiles/Creality/Creality Hi_cover.png create mode 100644 resources/profiles/Creality/creality_hi_buildplate_model.stl create mode 100644 resources/profiles/Creality/creality_hi_buildplate_texture.png create mode 100644 resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json create mode 100644 resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json create mode 100644 resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json create mode 100644 resources/profiles/Creality/machine/Creality Hi.json create mode 100644 resources/profiles/Creality/process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/process/0.12mm Fine @Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/process/0.16mm Optimal @Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/process/0.20mm Standard @Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/process/0.24mm Draft @Creality Hi 0.4 nozzle.json create mode 100644 resources/profiles/Creality/process/0.24mm Optimal @Creality Hi 0.6 nozzle.json create mode 100644 resources/profiles/Creality/process/0.30mm Standard @Creality Hi 0.6 nozzle.json create mode 100644 resources/profiles/Creality/process/0.36mm Draft @Creality Hi 0.6 nozzle.json diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 28f4a90e21..23ce3e784a 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -119,6 +119,10 @@ { "name": "Creality K2 Plus", "sub_path": "machine/Creality K2 Plus.json" + }, + { + "name": "Creality Hi", + "sub_path": "machine/Creality Hi.json" } ], "process_list": [ @@ -266,6 +270,10 @@ "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json" }, + { + "name": "0.08mm SuperDetail @Creality Hi", + "sub_path": "process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json" + }, { "name": "0.10mm HighDetail @Creality CR-6 0.4.json", "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" @@ -422,6 +430,10 @@ "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", "sub_path": "process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json" }, + { + "name": "0.12mm Fine @Creality Hi", + "sub_path": "process/0.12mm Fine @Creality Hi 0.4 nozzle.json" + }, { "name": "0.16mm Optimal @Creality CR10V2", "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" @@ -586,6 +598,10 @@ "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", "sub_path": "process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json" }, + { + "name": "0.16mm Optimal @Creality Hi", + "sub_path": "process/0.16mm Optimal @Creality Hi 0.4 nozzle.json" + }, { "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", "sub_path": "process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json" @@ -782,6 +798,10 @@ "name": "0.20mm Fast @Creality K1 SE 0.4", "sub_path": "process/0.20mm Fast @Creality K1 SE 0.4.json" }, + { + "name": "0.20mm Standard @Creality Hi", + "sub_path": "process/0.20mm Standard @Creality Hi 0.4 nozzle.json" + }, { "name": "0.24mm Draft @Creality Ender3 0.2", "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" @@ -914,6 +934,14 @@ "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", "sub_path": "process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json" }, + { + "name": "0.24mm Draft @Creality Hi", + "sub_path": "process/0.24mm Draft @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.24mm Optimal @Creality Hi", + "sub_path": "process/0.24mm Optimal @Creality Hi 0.6 nozzle.json" + }, { "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", "sub_path": "process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json" @@ -1082,6 +1110,10 @@ "name": "0.30mm Standard @Creality K1C", "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @Creality Hi", + "sub_path": "process/0.30mm Standard @Creality Hi 0.6 nozzle.json" + }, { "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" @@ -1106,6 +1138,10 @@ "name": "0.36mm Draft @Creality K1C", "sub_path": "process/0.36mm Draft @Creality K1C 0.6 nozzle.json" }, + { + "name": "0.36mm Draft @Creality Hi", + "sub_path": "process/0.36mm Draft @Creality Hi 0.6 nozzle.json" + }, { "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", "sub_path": "process/0.36mm Draft @Creality K1Max (0.6 nozzle).json" @@ -1327,6 +1363,50 @@ { "name": "Creality Generic PA-CF @K2-all", "sub_path": "filament/Creality Generic PA-CF @K2-all.json" + }, + { + "name": "Creality Generic ABS @Hi-all", + "sub_path": "filament/Creality Generic ABS @Hi-all.json" + }, + { + "name": "Creality Generic ASA @Hi-all", + "sub_path": "filament/Creality Generic ASA @Hi-all.json" + }, + { + "name": "Creality Generic ASA-CF @Hi-all", + "sub_path": "filament/Creality Generic ASA-CF @Hi-all.json" + }, + { + "name": "Creality Generic PETG @Hi-all", + "sub_path": "filament/Creality Generic PETG @Hi-all.json" + }, + { + "name": "Creality Generic PETG-CF @Hi-all", + "sub_path": "filament/Creality Generic PETG-CF @Hi-all.json" + }, + { + "name": "Creality Generic PLA @Hi-all", + "sub_path": "filament/Creality Generic PLA @Hi-all.json" + }, + { + "name": "Creality Generic PLA High Speed @Hi-all", + "sub_path": "filament/Creality Generic PLA High Speed @Hi-all.json" + }, + { + "name": "Creality Generic PLA Matte @Hi-all", + "sub_path": "filament/Creality Generic PLA Matte @Hi-all.json" + }, + { + "name": "Creality Generic PLA Silk @Hi-all", + "sub_path": "filament/Creality Generic PLA Silk @Hi-all.json" + }, + { + "name": "Creality Generic PLA-CF @Hi-all", + "sub_path": "filament/Creality Generic PLA-CF @Hi-all.json" + }, + { + "name": "Creality Generic TPU @Hi-all", + "sub_path": "filament/Creality Generic TPU @Hi-all.json" } ], "machine_list": [ @@ -1609,6 +1689,14 @@ { "name": "Creality K2 Plus 0.8 nozzle", "sub_path": "machine/Creality K2 Plus 0.8 nozzle.json" + }, + { + "name": "Creality Hi 0.4 nozzle", + "sub_path": "machine/Creality Hi 0.4 nozzle.json" + }, + { + "name": "Creality Hi 0.6 nozzle", + "sub_path": "machine/Creality Hi 0.6 nozzle.json" } ] } \ No newline at end of file diff --git a/resources/profiles/Creality/Creality Hi_cover.png b/resources/profiles/Creality/Creality Hi_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..442bc3714e672991b6ff76d8ad285f6565e69a1a GIT binary patch literal 100974 zcmc$E^;cBg`}PbCB8`ADlyoD~UD6GLNFyNK49(CT64HW*(jZa;L#M#d-6fsUHSo^k z=ZWus@XlJy53?5M?6c3cuek3!N<&TlG0syQ008hkkV9`O9xmaz6kV z&8H|UrQ>D1zc?6AVoB1w8tCCMJp$(rL0jwUhSKt6Lit?w_@H#ZF=E;DIM2-|WM5;D zaZZFq0Y3)I8Xgm(d}srVclx=5bv^oe`JhE>-bn)9T&ro-f=my*$h-W1{{&pGt`$lI zULwL^4+{%Q35zYB=XZ+|4_7Ojlgr}$ZNS)*SHP8?4YnhrhO_asG%m!|0pi)TgrfRl z>-pu>xd~SQulLz>Tu4@H;KkWc?Ex-2#2Itt>}^)Uvc$ts?~!9}-%Zr6pqR&j7+P+J!WlK=kHV0XQ<{A{B2 z^2lE>mztqiJ2o?=JFf#I2}RX-S8IE!HSJ;PV++3gJ(TY-<~dNHZeHvMlNK{{cv5dz9ga3DdZ^ebleS1;9n(mf9 zC5~CUy3mB^6qXlnCUwJ6+JqGVbDp{%*EKV*MNhv3IHorEZ@oT0*UNPpRDWUvdtujY z@GW_VT?S~nh9^1g;ax1u)7P_kMk7{ZP^&9M|MHUf(vtok#ntcUQj%+Nagi@6kF9szr6>7?$Kvo8Ip6B$gHfo;e3@|*BiF-T zA^#^UW+9PPkNtBN+adV#BjHGMk3w0ty zCc8fu+P<~ly-Peda9#}|D2+C$;F`C@Y8 zJMMAYs%YhL-IER_DJgs#%Q)>CZ@jI*N^B}vxOs_8w?G1s{|HLJ6cpL})_^WCVhLu!pRRt;m`!ntSdz zu$L5fB&kHzcEU7JlKKs{9`i+n)=-^kV{m%QMh>al7Z0ogeMFd8520ZyxXI zOc@Tk(4^FJ1b3xINBt ztPA1zOYqT0I~iVg=8r693^btxPZzLhL!lL&^WMb9?GgP+G?W9Ynu&44G)}uqH$ShJ zsT)qHi24ej4aNGs0Uw_bM!v|En7iJ=EIcxXm{9}~Ck!|Fi@LtPS&HBKt+?fFXa62+ z*xy$~4c~A#D^jki^de%FEB_%*g8WeCyoGvY?ESNzaH{pNIglXuXu$9&!^pz1*;fF)nRk0W`(n@S1P@Svmp+3?}F&mcmi5{s?)4}y9LSNbHF#!K;m^+w^m z$5_55b5Ze!YAWZRX14>i?^{RX;ilC67yDA`>iDsvgv@vm6$+ST8G`VB>%3654`Ctp zL!lP)$6lggToI%}NLUH{1uH}7z(bzF>(}8^&p0A{gl{yAjq!9R0lh#$yqFt00(Mj{ zU`Yi^K9;WbXD?DoO#sl@;Zd+&5WVxyou@P>%xF!)n5+Fto~URui37?28F_%DWfV2{ zWBoUeOZ$~$wwS5NfST<5)>~DKIv5Ic``JN!q+xhoX6&4FItD0$jP~OYwi5zne}#8r zD-49u(~qPGPV}*nn~MRK#-a^3Lwkc3B6W2a5Sb5nHT|R8j4Bw*nX<{4x~*cci)P>j z0JF}rqwc``d2(=xb(^>SFEA1ge0HU$poIH6_ z<-92H5O{IO@G6-@@%UzW9~zht`7;(?)>K(BuZu9xv?9o&pnV+kDss^N&13VA)spsa zBaMcw=w+W*nT^Igc{wuDiGq#xjK7GFN zqgyw0)B=a)QEUqPV9S&BEs?`}%W`(LS?eJfeJBB)3qEaVVs9*|jO^zKb4#T)lW+<; z6b>S_U186x$FS1J>^=mY4Ar7WK@PLCfC0R4HqHv;ygu3^ihe2*a?J2S2BTcbRoB~W zdtc_~Y4eW?c-y=Ku4B!gW9?tQ-Nrp>t0qfec@dl-+Thi%7RU7Vc%o|dXvP8j%SHe6 zFT5)($Y9Y5LPgfOO<#``e1~Y^#B`$=xod=fgt8UU#FtcC3O*eUM4I_J3E4-8ne9J)K)#x3~fJyqvM10HkGWZnMvCfn`dLGrH zPG8jpLsHtG7qMbhtS>b&dmEXH%?{*yX#>(qC-TzdmT`N7o5DL>CfOou&6%lwnNjo1OIa}Ay zf9L{|*NObF-ZuS7p$8=NTyN8*ppl{iM+z5l$BM8YjiBAG;?S>~ODZ-!LLNw>OXU7L z=w%`_emZ)knPL|~gg;U0Y*H7pdSpAd?RnkchPsm<)xo@*=GAiEsfdZG8J@6imN?*d2wSpVN^bpByrgpwy+Z=6)#_9NnU zOVs;!HX&+u>EL9|sSyqX+2MjvSg9D7ag(HMUfZTEZ#m&^MPp>J43#`R3;m2kUFjLT?YI82G<@;z*M;Lu=5Q;{Z2?SRq!jq1FL_k=xWG;hrsjDsM+ zHAxr8jzt1OXJB!I`WwfSJJ30ZY$5T6CjdksucbT5r;iq-h z8GS(aAn_4WTK>Q@SOg?3KyJNA1eX6OR*Fw`a<_(Vr^x-zGws;|E+xO7UK5>ERcr~0 zM!)1PiD_e@Fmp=w&Mlfs?NKHXyN@gyIAkqFi-tkLKqfgDhfX^Wr?_)*M^9P*q9CBJ z8T0Z@!Kc&HTj;Y{_TQZUQq(5^i2~kXJWs9L{>!REG6(QHp)Nr>@%s^BH5wfj2Gd>o zagT8?`12ARoXs$C28|L|tii1CXVi<)4*O>1br25Xyc{ZP7^3+Okn>8Zi*2ircHj zVcBtac+0j+6Tj8rS_Nrg%90vmc{v)@VIBl)jTL4j12l5ByY}Ub^ET-_a5X%;h&49u z2?irwwCoy{G*&x2xy0PCdUmv7gyTsfnv>YvvzIKVf&ky50LHfn(6PF6p)duVz=nCY99Vy8v`$Y^{ zkv1Ll&`KnYW#;C6EtyQm3dK>Nqdi_ra;dhc!Np0-0{Jh?xF~VDvjl~}R4v?21gU%) z)3SGl)aIWS9+5W2i&_zB^{Rgo&zM@D(I+U4p@`vKOC(W}0>Wvn={=zIl6_zE6oEfG zA(I6yOdNV=))^Hh_TG9(bnO4d;tHA0ZDAQwTMlYPvS^gtOrK3D4}OsGvPMX=wcF?r z7p+@n4_KfXqAyfs6V}UYWdwKTNAQfZ&|r9X4UQI=#wSpKdzC-qK3As_TRZJdm`Noh z1}Oi>RN>?2pnMcaQHT&Zy#?J$K6!r-IaX@zmwI}tueO(6(NfAIi=do&i8U1FD?yd> zT`mha3ERjel9CHjclPURaT#rbY1I$dE=6VzyqzzpBoKuXt4tEt*xHltZ z_{lw>N>i*q8=9=rPRiSB)P`2yMabi9uvX#rVmW=Ij&a?X0Mj{|1P47SB#z!?1W&2Q z(11vSj@y6g(<-Y*TaPpaZ>(=WbfdkQ_i(9oAQ2M|BKQw&0==ZND?>ZjIrKGxhInVQ zZ}9NAE+T`nARbVU6&&S_zEh^`GWE80Whr6wuZwzZpY=bxwq;|mq0@&vHTB{jL3*E1)29rIkbrJv^mNGLHCa3GYQ zOjr8h`tH~-Vl5asghxIe#b{hVwMX~FX`x9)&#_xILPGYB4bUi@tP)8DWJ;pT3OdW{ zc!fb=)RX;s4rL{I5TR7hm1yill7+cOG$r=OVAPeID*a znv{|9X52<1jrIA+SD3Gf0%~lU0B|GmpY(_h1*PF#$?NcS2auIM zk8_wI-X*Ybq^Dc6Ee0epoTJr$rV>(x`))WrwehvvxA7k<|L%!CXBs_-Cj=3ImiC4I z`rN`^dMcp2KT%GHTR2?zPs_8=x3J>9tDrxbET3h7$t_87iNME2ne8EeBc61(%m@WeLA zek6Tj=o_I}idgaUL=x8?oIEj-++0ojfE_K*CUT?ckl-RJ+g)XrB38lk``zdamxkGq z+;WQV|Cy-cyX#YY>V;PIT%zK=ZCiSU384cb_o$RPKaq<8bob&4Jza$f3xl(~;P>XE z=OdSqNcDc2oFdl>Ns$zOFX1KU`@}|Zdg}c$i0G`K-+WXC!5VeH0mW2QD%mreJujH} zf_-DGh)7C$^7g+6Gb1NMmd9&m>A81{uP+!AY!MpGltE;OGAm&7YHL zEwf8j`^r6={yx~HOH?~!6{Xk&`F2$qcpx<`N8~9TvTZ&q%0 z`SZ7C;ksw_#_6!cR^WZL1On?SRDe0xuVdqTZ?w5N2`_wqWOsC;Eyw&dDsR~k>ZZO( zp;1~nPE%3Vr*nD|>8yCQkQX5*s(9lKn&3bXU=l>H)u zwYo3@Y5GItejhH0Jv1Hp4h;=4H#qMfMBVoJba!vKP3=v(EtyYW&bv^$n3y@Hqy?P{ zA5O)Km%BK-!5yB$KsVp1)7M`+qbis_U(3VdpY9D&wPPbxDy?)nEn;QXoo0B?cfFX8 zsR}>8?hxI)_~&+1VmJFDw}_96jxtJ7)2{KPCCSOeN)+A~`#TYrhl>w{P9v8HNj4Xj zhLyvz*K8FeNDU;_0qB=c(R5hBRu4~xKD#q~UXjj!u9zdMO-H+e!5HbDNE9m~teeCL z|9tdOlI^pL9G_I$cY~uAQ_S}{M+TKwaMuR=^J~;gss+rp^p;EW18C>TFOp@O)y=EL zWyIq0!>Po>Y2do0&DarQ=?HPYd{e&cGn9sOu74tY>^ih1@Im~j`I18`?TS^2Q`GMY zA_88zM;%NE*jax#WeU{96WQUM5Ol0(-X3rUm|?8t={R5-*$^nM;8^J-wPlBn6~Abt z{ea*i!(r<+to2&&{#pVyw?EW6b$=#FcVe#8ZL_pxT zk`4U(75pXN;}u{h_k=_yH0tjp(;kCbwaHKj)tVJ@s+hvQ9aRPuS|aKOc##7*Tx@mDb(D1Ekz)2s|d9}&?hRLS9#0?=Av7h5VL2l)6CuWGd_S;*XE7pZ0Q;%JW(FNQw>VSVxP@wYi>pdG99;PMJ+D%kzZ^LmP z3t}^m7p}o4u+~b4PHVL3N*3v$*@e4%FF z9@plzW+#8NMIv4qT|z?fyJH#GAwxsML@iqhtd_UE!?_ZH30eR6%z}cid$3IC(WP%o zv^hFq@wB+#6;-jxi$l!t1IZ#S$d-m>qJ*lX|*ew6P}Mha0$uLED; z-8%L3;zgl)?#U0o@P8LlWc!A5Iy*c2gVwMfEo*Js?c`?kfn#q@_wM&`_5&}<=%KCY zn}U$YI&UeHH(&BPf|vn{q&hZCFArXh<|(!VtG{$1yBlnZ{BXX*p9|4H5=}KwUj+KjT<$y&(H{%9GN5dQ)NT|HG=*cys~UbDOL# zvGF^(S2W-(ootv3xUB;GN%oABD_7p#TINE#~B$P(knQGp0k>2z_(>>ay*MDnra!P%=jfYSo45`1-_z zB+!Xq2Y5hk=JgrRHc)@0>53!|Q8B}rIMbfhO!mrpd9El0JDITJxF6@we9VZZ;UX3+ z)8H%sc3NnO>*am3@btMde-?bwGlZ197ih>+{c(cHN<*nw@wUDdaWE$#zSXqC_>UZI ze(Z612e(jVTz-}F{7`NBs{xVg);?Y#_=twXhAiSBfacPF(UOxPd4k!BJRBzV?GsES zPvOH;sMc}g6Cj+>E&VM|u!5ML^;(Z?I~sg+&&X;=ONiag&{D(R26 zh^7>kG@?@7;pW>*@2mEUm@9zlfXrHef3Mh<;a1v!B?7)kEbvcSaaQjXoG|bpy;c%A z?BuTd)x34KzaJwg#+v$Jf~VqR5og z3Y^OWg}_Zqske6jpe0pH^)wHU)#vVrL<+uX{VT}u;b&DNtcAJ`tGGq#qCLcoYN0g& zsn>9BT#o>ZTSUuL{Z{r~JPhXc{BH(E<7G<7SaiHhRkq~MV$<3sj{sIn^UHvKsN0d1 zTB`0EZJaBXgrtwsntG-vSOk|quoN0vX^Em2W;9(@0B94tX>aWPn>EgJ=Sf$jz`+*KP3*@ zv?i~UGsT14fZB%q_P5^A4X2Dbths^r*qg@04-QlSg>O0)eizq;ette_!Q(*AJcuC8 ziiMfS56J%e-#+TN;W2DJ2!gR-aR#kjsg$I*Yn(a`5mXR+jLbHvAbQuC@=BbM9xMn7 z9^P7X5kOj+fKZYJU6v@t#>h#M=WtnKE5Lx(GK|r(#t=MF`|~sCogKEKwr@jV)u!dd zZ>wsdt$$(VO*xIMFAjRj^ld=X8iWpevWnCEM^MsE~ z!?~jzxu0zUXIzjG0(5CcZrgg9oSfXae&2nS{p=rq0p*PkOY8IH%)rPXwqK%;LIzJj zC!6Lxbe5p&OO1mgo(m?%;2~9HmiprW z7sUMUesj4T-8auAHz&RRWFDUJg%uFFtvR+xq#bY^LOmg?Q;zv!Ovw@#J;a6bH;UY6 z63i4eVF1yhyM!t;%}|qtTJT2nkHsJg{dR=qyF5uMO((Jj&5V$}?4KggM~<#nqR80Q zNT;%{Mfm}ZF%mn6$@zO{Z8XgE(Cab4vRNO=?i9S|54GH$kyyNVTPzF);EcwLnDxwm z#fJUKz(9h;efp8#rARDHjM#!R^|z2_tEZ^Yo9VRYh^t< zb(6?KC59S9K23-0+mR`i)x*k*q+yCn=?(Ge)-1EbCN=*S7ILUi5*nov&jQ-Qu~rd| zeuF2M-tqM*(%$Mt=E@$8~GFHDd=bWKI44Nb$i*GMB(&$Dx||K*eJ z!M&?UR>4*RutZG=nxKe?Z^yqcq)h(?1*sZB<1~kmbTA^Ys1r-$*xyfA|h z4YnM!q_pv3lz2)Nd0x{8-#7vPO^&%M?gz$QCt-;t3S_85pu@dUH}>=^r_=rwO|ylq z+S;j@hFD78#D>%8FY?~MIge(xK(B=8p;`&ijUR3p@CrDC*c`)STz}sY)i(?+0A-D5 zRn@mepR7vaavulZE~I|5S>GcuTq%k-o)?9fyR8{p+y~%PtejdqcJ%duFpdDsLvL%z zI6=~~UdJo#>J9(8L2lf=mLqO9Ki!hzS0QAbKwQdgUBbMhkK4cJwF|3)K$|t)d`OF` zra6((0IE$qtHUcS&mEj*fx70@6;RHBZQ%~$truckT%6?m{)nob>CsEX$A1BW^yu4- zRJ^xOqpamwKt{{s;EaF<$G%#+p_eAp=Vu5MQKY;Z{c3VaUM?u7=E zHjyatFr!zyra&KIOz>4!x(HzMvXV`tHt@!x;v8zAfq`yaxE`zmy-L8#9g0mris7#C z0K@H!|cfXCd19E4+}-B-V;iJ|1>MBFy+2<7TEL+AtTUp&V#^4rs}IKgr1Kj-5*54fHY%OhG+X+ ztM8gO^#V5Z1cjPI#+$4Bt(Mg-`HZF~7jKZ+_Cfw%4APP*m-G*k^CI0G9}uzKiGRKQ z1%Ky8+aB`biRiPvao(P-!t~n-VXe0;u|m6)&68)fidP;O-Lcb|f$t4ua{8J|mwUp~ zk)?H3Ot-9DqfWpkQNE1>Ob>-->qAV;<7LEQmgf@j^^7(aFT)NRx6gjMw5FD#YkT7p~Db(F6qRk zD+VwHO(0=^)=f)VaO6;5fb!VjT`Ik?T>RcP;fmmAr_IJw&+H)K6%6vnbWzF4q-2Ze zx&9X{-``2tyYvWLGzZ?Cv49U3R`2ezOG``B)|nRS{&9&u{#qsrXP5U&tq&1x%hz$O zCwkO4je43o@2+;#125{2mcpLK~U~qniZyJBy!Bk0`&qigU8e8t3VyBq%+>bY<$(^puSYS{{jOpWoT4{KG}y zG4+F9;K{zNAv;p1qyQ{{;ZG8`1d?(DqsWkyd)Gsa7^Ox;9Ns@eZYj9_77_3m*DvFr zRX6)?nfywY*b2cHM_Y|_g$prS-63-zcH6SqNu)&}*75ZHM&O3Y!_mX>@cn3W>&-AN zN0s9SD^{MG+*29yBTizLSAGJ?_e8%vU%FHnMSKoaa8s!PdmMa+gS>43o5c4b!S29*JCax zEoPkbYUf^0J>2y}v6jrhgogxVBXT1L+2f=weu0Z>V%1=bu&5bo9_<9ij zY-(!QN!DRi_|ijwo7d|rzGxBZ`)6!zqMYbBE5g&Y!+ZyB2mX({gH%2jxp@30q2+=) z{Eha|?B#5)xmpbgJm5#8;mU{I$_M2pxn&Qs*SMR$D!6rNdixa>ZMa_EEkMmO@3Ov$nhTzVMR75` zy^?uG;O2|PZ!Q^A9^as3vT>OBM~MTQ*>B1I7GGz1SzAA1cn+#rKpiu$^QE_g2pwb` zD}8;oD7HSSvwS~wYh^(t{2Z&a{Y{32cj&LE`6vJA_MxKOm0bF4aJ_4b@K-J1<#p3! z?yzLe=7F1Fq!3+)ETQ$9k9+wGZGd(G{mobvyV8q|adq*K?%kxnZa=Eah%`&3qpv+A z0a@|pk#4dC#sfJ5St4~%-?*5VM~92BUTtwp{yUli0pb_ZAux2EkDM)hnLc(SG_?iej`c*1@%1rWEa-90ZiTr{{SoJw}zV!0t*}%p}CnUgS z|MUi0_Mq6r@yyBNpDv&i3c;hOiFV(x92mB@DZ$9xR^WDm0i#4U zTTe6;e{pUctv5)azXAJXX0=U?E~PWgWxu)=>|Ow(GCFgjW4y zB!wI7n2fU9)Ul{Z=v-<627=+10Z~M!j=~4xP^rDD_`Y-TLpKpc>z0I&NYid_kV{*} zo1ColPNS=p_N4LiOoXRAOE{^c$v^v=^R_UP(+d=)g_Fv>o9C#JpwbmT;7|by>&dt_ zoW3_Ohqw^4Mn^(IJVE@iGvd?2V03~%|6Qzttm0&!b~yRhBL|~+ELH0{Njb6 z)SyKWkJH{A!I*d_;FM+V^lA1BRo|@Ep^OHLdHAqI7@2zR@0B~M^+Jg+<1ha!BX@o` zL8aGScvShE4lX(05Lq`IT0fd{VHFQkF$+e;au|{d{jvCgfM!yQghzya(Hy11RB1zJ zmold{bDP)1N#_tfTh9wNwO|L(XIm}iG;L0|U8v{cKNs0`^c`||L>tPSisZTP)Zrd! zL<1X1^GQo%TZ@BsE0mg;Im9mSmNa`86M7DAJZqj#O_|X!j+5{Dh4`8|V%oq{`ZF>> zsVmF}MKK)p9Dk2XeBZu3@T`BH=4uyqQqtJk;>IN$7eisy)1|Qm?a8^Wer7lQC<@gr z9xHBiWm8gG&N;d6RiSgn(W6KiB3hf)jepD57q^I6pW3zA@j^f1GV*Sm)DYO@d%iu6 z0;)}|wBYm_H`L@#AG=fXgR4xCd)9!_M8@D&B-`Ow56$MwQ-7cfD`Cb|1Ji$J1>X17 zIUpdufx27O$e|)2xgOa%OOPZag!?-JZMf?lUP@}}Im@YPV%jplxU?v=-K#ivlwd7a zr2qapUR%lcQ;-lz-sGY-UOD~N;(f#UFGIW5;6V)8(1K#B+P(V!#K8uW=4b{#@Z%+6{FpktiuX zw1;Dd=({zykKS#cTb`v{EI9pB5Hq9f^;q^;5E5D6bM@<+HZ$$EHO1g(`n`l=Ei8ap ze~}?2A~CWjA?l$M#$ORcDQ+j<>345dngwx>{P_|CK0kx|YWp^ARJ+G;dUc`YZ<&{7 zVes%DPUkgAgFWyX3TSUhrbqEseasW7`Q>YDA7ASR2A*Agy5Hs9hfdws4)2i)hb5hU zj@u|l;%56V5|h%6$@riH{6h5Eb!nv4=>3*QS^h1T^2}nn(Vjhjn)8o5A`1*#oNwEj ziZNQ=G1CmcrJG+7;AwBtn0}Qc1jyDhY*sSlqJCB*?NY|WB((` z27k^*On+pfl3cKItLdCq0C+Z8pFfxFXL0iN!PzEC{17^LnaP6n{w?N;F@R;E@$V-K z_FbF0J`t>Pw7?W;f)syhGFV@NQlwINlJh3-@f~6?U)>qXLarAU3Vnqlv50dLEQK?H z4n`qEu(SVEg`2H!@JcQc%ZbT%ORx$#zvs;Yfv}M<9=b&-Dff2+^^jhkaT7Z4LIM9w z(v!!%JT0Y|fdz;E(Ryt&7J!0}hv5bKbpMBa%vY=>Dz2k*JyeF6IN z7Du?5m%9S&EISG{LFO5?aR8#FrRI z$hV0pI1E9e;E^Lm_;G;hlJK&_wsviQKLw#r^w&xJUmumlauf`rJBc|9HaU61Stp76 zy;8^ih!X-opvZVDGqjoZqF9|Lix>>Y6FHko@*443np$x*l_cCu<6$u_QtB&$lxX$; z6pUwo@_)`Z4V`6!AsyXaYlI8Ui$H1vlac*-#a5#aGSfyOt79(75ewBIQyN$2m==$gCrG^N@Bhy z(4uY4^=sC3xZVC$d66!m{f+%0`M4L4Gr`WTFhsVaYu<}9VYC1W#8_^;B=|vH!Gex# zr74s|V!;*z2LB?^nZKq`O|2AVuUO&D;m8)2K8v!WY^!-341|~=nHG8qZm(eaeVG2J z=AB92U`XV|ZxtH?H*SK)kK5XBU`#5Q-3pn=LKQmr=u_YyM*ed_ZrsksBVWdFWO;65 zAr{Mt;fDY?T7YbV3U5oGL@1x*;5DZis~bu4Vy$W#L`VdDl7G1X3= zPTxd#v(8WH5Os1bcYihaRHDR=Owc{5?<-`G;Uxe?f5>#CSgVZEK&He^ma;1j20n7} z;45oT{l|z>-ycWBWDn%0)6%`yvdW{A|IMhUmu0fS@o`||d37+^`ffMr{GucsaKa)V zRZ#=iQfnGk^J}q?2Zt`j+!UokGOpp$7h{gIfeg>%KnaBqVE^)XXZAH^ENdDH#8&vs zh0KkWP{G*~B}T3{pmhsr&I}zqt^cLq{0JDSAZlrNezJ^*gp{h3@cOK$;<4Fhi%4!eZRzT~1CCs){Bbtob;eDBBK~_4t-%~ zG1c+3{E%ec007vZe3P?VkhGh1uw}$HwZWm0qE+K9pxKIjivO~>9 zS2Vn?$E;5TAkucY>tn%%i5V#Y%08AVJHA1h8a-sJ!|GlfOXpQ24Sl{DX3@`6y6PBH zS?gp$nRF#|{TiS{6op2Y=LSh6NMum~V5$%he{Y!fb-@J6wZ&loofRAeK&TnL=_2Tu zVM*V-J=)AZ3RMEb5q&&@~gWDN}1ETvkjn?R(JJ|R3Y z@%l^`?Aup|YzLidw?Z(F#*2S!6B$igyuKYjU1<-=b^UAj;LpesR3x*}UR6{FKhqDcZX`RGw34gVB_6S?Im{(E=S^|iC8y2I3YhNf?=oeGa~PADHINeo-wC$qgMv$vbmpO@ zqdn;qOonc~)@l#{hJ zx(sNov`FjHrWb%Radx_~P%p@5Kiqs9hWSRzOLQKiR)g zG+)KW2>G0-!E7q`TQu$iUZF)bwVA&`Z-bycxL`8a9s`dlhWJA7t>lhn_q{o$uONto z6C>|=){pt8*Q@oreY`_8C8Nh~Qo=1lf75K&y!K*_-DX`>o1j%= zi*>VsW^~myS#8a?6zM(+(p3jTQ|FoZFj|p1wwWPjxrRABLkFDn{E9Ld)e~vgZ53K= z8ACI68nHg#84-J&+ZbS3$Y|9dR!F<~;Ks(20lep4JU@+PR1){UM>s-WK26vBp&czr zNFVYGWfmV~c@rR~#lX<5O5TfG5jOuyLWi$Ida4o<$-Su}uLqv_tKBT_ zdnTlwD^?zL+Y;+;(=MK%Fec`-x*hN`tQ$KsPEOeDtKA{H`fQ4HZqCLDn%|1O|Io=9 z3H@r)E}<48f&C1DJ-`**{C!_9yE;7Z1PdoS1^xaChh%KU%aeHpy=c{oh2ukEe4k{H zIr@)UK2QB*O09a?G|)gmkV1PIH!in<@t={PKe|do*A&;V?uZ;cncCxf9ousB=8Ub! zr6A>G!{hJ)-xrKxrKh?1_|C**sKLK}Db4-D9~Ffji1tQK!wQYiS$5%-JcyLk(wXXsgws-q>mnSo-cedC-&8`STWm1FXg8{_8?hVx($*aNrS23Bm4XgT zk$!Q)ROb?K@L5_YGJe`;is&&kg0$?C&13O zkRL#txy=q|1A_H_#tqT|n-if;ZJ`=-NC7a%rMnYct|e-XRT|mFapUHtV!1$hddT$_ zC@f+hlf+C)t@Kj%hG^kP;}DDxR;<(MM9-POt~3bCZ1kC!oa(&jiU@k8s`|L)cJb&; zPxot;0c^<49(bc%y55M5BV-;{%jLI>ha3_uVNhZ^D{Ii<*2FJnI za~)m&OS2o3Qn%=o=sn#@4n@if)a{vB;MpztPj`#U%yLP*?fKED^Wh4qnWco*`(J!l z6DB4ha=LDs(%2lcoY{4EI(LZad!U&KHqQo-2ftedSnS2{BPsyrn6Fr=<{R;Z&$=y{ z22p$x$;{`VJZ?ykJ>Ca_0yV$At1Qtvtc2PWsMUHgsdE6_8n)3Ph1`l5DJQRDA zYG8GimGt|(jjxZ>mtQ_2t%#Y#mxwFngyAgT?Mrlqge;bG{5;3LEJ#=_kdcJk`#@MQS- zRiu18KUr+6SM(otcHWBCC&yC5W6NvQ1|KhgI>fueycy?K;Zt;o2%^2`A4TEm(H!0 z)16AwtvUzjfpz`rRNyUsQ{!)4!@xa(-wmzzBrkFnp@@szyt>A41N-0+dG<|dthmTT zW9*1$7O^hQ*0DUBw*k_2VUdYR9YR46272B3RfVX7w{_-4S}b{_)>_I>GA)3=_0bE$ zDTpKiU(ss-DXyCRc*ur-n}CdrQl2z~bzavIg-)kPp-IEEw1lPY99q3s?Upu;xE&O*7quDv@hkS5&3LOb z!sFS){+R#=cBj@_PuBfGw+@}ZU!aMTo4@}es^)y67HxBDw2m$&oxX$~q6=0=g~D=eJjat8gv?sSz^!X7hE5`&UVG2LF=HA75>yktS%PBlEdmu48TS{`kTIQpGsFGr`))~A>(#~X0jn`$eD*kktP(QYET zc1f0xM+38*wDj+A2|>(-t)=)M(zjA|#AOQ_%;s*s1Bhb0zowJPux1o2S}4yFHNt$e zTxO60feG#*w|MGo#H3@koeq$ofB#6)|U0=>5Oq`u#`CbjiRFGIX~JNOyyD4Bc^${{Htqmk)fL2hMrlz1LcMtvy^|$b`jdhfGixnzIlc zy3U>T@2^qGtlSFUNSd0Pj(%}gnq9LGG}HMXb^20+CGS=VB)o1NC2vwUPN|Mp>$9VN z!z#@lqE9Qb9{SY$iPs^ZzJ@j6ke8PmR2Q}^sJUuPr)- zX5Mwvw!|yP>%ynL?bcZDesOh%ggr~uYmY}(Y?B_-A9EVHB^o8(A{N8~GUw@|(BkM( zgb>c;c#Fl?)p_o#X<0Jywu*mq3D#G2x0I~7Jzj2Y)@L)K(^KCM9=2 zf!+dl6*ysA8?NxiS<~V?h9Ls>43N%|9xhxC-chP)zvD~Cg(La^e# zT-_zKxwozRJZgMWjM7{wsBOKE(9sddLG7$SbK7KObI*-5@jt()v^4f4j&)w+*&F_| zYX=?sb|j|AuoEKJ&2BCR{HOK5fL}N=a-0p?y2a*tDW$MdX=hV9vGIuffSSd-OYHtSH4`46ALi`hGws%Z|615>}#Ev!$G!xeMJL2qUI4pyy!4{e+QVP0FX!=f3KjUxH3w zDfN>+uK%2grGbf#PEFNWjkbh2qb4dm(-V4Sdiis2&Udb<%6}_kR_<%~V@wvsh5YUqD{}ONd@Djo3R|p+1bzYTq&W zW0E=wKRp`!83X@CNlh~qO~BivyKmrxY#UxXjpV~vERC$8t)nqc`>CNUKE!(33Ww&- z;UV~G<-U`2WfH-!V}1P3|F^*M^CZ@Z?~PVb_xGxUk?iz)jb#);n>4z$>$%PCbgjns zS3g`?-I1@PRr}uT<3!KEZMAHD*OSVS{(w58^yTtu%gCkGyVk;DypaAs3Pl>z3*QsL z><;c~D60Mb<&8N)aG8(4aQs^T{Oru^e4uhAeJi_r6K`)BcLh~gGU4~{H{N5{9Kn-m zPtcS4GU76;Jx_J%v$wmwfrs!9)A}zbDDB|B5z=9kxioB}!-X}ByO!&|FpVm!e0bv2 zcu?o)+;9|U`s)@=mW$W1*-NtCW@=#%q~w3&T-kbtN_Y2TlJ06nLGnJ{>waU|;{TNt z6=tHh(?u)s0iTFQDEYBSQCye?zBI(Ld%p)uN~PsBfB|Xi{ZXu zrK#T!MM6=f4M1}0@&;=0zqeFYUcUR|9q+`lQ)(CqBjx9CbJlP1B!{-f7vQ$w>O@Tw zEn{OJCoE*o+PeI_w$*tgldf&xsQ*K-Q&UTIxfK=JDISBHF_92TOm|F5<@5qUg^_~~ zVHU{u>4E!dyy+PTglK3>ptE81^v)6==}Ft-1EwQBa9Tnknrcs zwLfydnx6D)yQWsObV4rOtNDWk>`gnr?$lHwt9LvAXyzY~ba=SC9#-INhNuUVRKatl zbv*H;giyvjMn*=0A07fJ+*O&0(!{L=-(GMv&WNOhCbB^7U<@=^3L*uN3z$xn`-!RJh_j<3 z*Bkqc8(V5jpw#|%gAUBtpzzRO7%AR9#?9i ziqKDRuZtJuu+n??_j1@&g3eNoj*fu~r6De9-ItVw@Cw8Jb|Zkj;1bjS1q8{;Fwa=OCUySs4<_JQV7P?ZCC?mZc) zrhQL40i<+1{J1~lmywY{56Ol4SOP$xks3z0UKR{))MP+MSB~tlpgp+;YbTe`FU?P5 zD1FgI(>!JtcRHQo`azDpy}Q#lQL5$ocz;Amfm)9Qj{MMtpw4&mWN3s(B zEXqbMZ#!`KRC)6>@jO5hsQA-1`;muy7Ml+!;XLG)Ts%-HRAlYg+w*v>SM8;K)k=Cn zJz6w~CGg}+&Pp(-Z^>`ou|A*~aMg`M*syhvy}!n9eC!WT1LY>B3~ymo^0*`RuV1)ITSusL*?XhYgTm+im7u))F%|CK`iG57Oyqrs*{JN_Fa3eAQ1S5W zgzfmY#j2E|F|GR!nBit{%q_f44WWWH^YiE_ zI|5vOpe#R_R~<- zpm-(eeAAdY;>da84qvuzPYqNvPL1E_G{%&^w1*Yk?$~ggk*pXR800tNx-+=+lIoS; zPn1ZU9~Llm@b&fFEt-MK4DjD}) zy(T|8uMDEex!<=Q9i9D%+zwfOxTtS9#(0%m+$3TL%l%mq^=_>e-HS@7^nD4VE^@!e zMcr@AnGq#qxIPC1ChCt)bvtR>r1S|=uX!?N=EdSmOC^Ol$#rdGZoH%wj5bHm_m9ga zPw?zTzvmDXO-OKO3<~Sa54p`pi=$mmmg$Y-H~vio(xSW2vIz90U5)2FKmsgcVJ&|? zt7OM;yhHd-H?zg=&r~x}Y7g!1>{K%hTvXAjQWWmqC$79{Hhl9CEsEi#qWpI0^iAjV z-PfI~jF9HJc@AQ=o@&cm&xxr?^T`Brn99H0L~NWRrpeDlhJ}Tp3C=8G!H_~O@V03wb1#5R;k^4mb{cl%YYxD->?qr`m>-`mi)(| zx7#o#g#Z`2#Yp5ju?alKvRwKSw3S|qGhx?4S;BB{k42FMH$F1cEK7c8%Um6wEfz`US#l%g5Wj++|P-b!bouU|JD#2j*~SSe|7 zzKnk9FQKO64igAFy%%e{+q1lRpvU}{H4H!3_z|>QTCyF4g=pN$rbG%zyQ5h50C@0( z-(6UyQ`1fv-R(?2o7CfRLJ;IFD4gXJ$kT>9ZTmu>W0>heX3Nb73NO)O2ecS;>uevg z-;$SN?@oPu7yj}Z)B1bzVzr!jOB^@j)J=^vVPP95r@mjwoYi)d94%Yoh@IAr6ho_? z^(wK?TC`mUY&kPR z#nGbT^4KIXXxhwcHjCr&*$)zT^8{@XiYz%r8#KQ{eV#Ei3T3E>B{iZx&ujEWqhpEtDMoN#&% zV>}S4ka0^ppENbH+$JsE{O7`Hi>Ey$!F z{j3x5N!=ZSKKeoOOIcW#%kRAG7h+C1e10ZvU5T2}zZHD$I$M@TisVY`m*97!?+iEatGH8#bP%&O5g`*cq}?)6u9eNkF@DV0 zGKTN@!8YI2^Bq2BMehHZf$h-fK~;>dOnVU-XQJMeo|l82YN7 zCWpT;eW{VZa8zlSeH>^IrTg!i_Zkn6*eOU;GD#iV*&VyJxPIGSkB$j;WNy zi#*9xIR?`XM=L!C7(d!=Y!ijbc=jWK9Q)QHl~Ul; z^P7;lpq+u)lyCcweYImlRqt33c`WEF@Q>KmoOG4Di@b(m6w8G}lWzC&CJoHp?Sfz| zl>&;q@|~RHv!Ou^5B7@1pMSh}Q+%$~a4zZGo1s(26R@euCdVZJm;THVCS(Lh>S=>+ zYMS9TfSvj%lIr(o=VfRsFFo>gqU7Dogk zvJbPJ8sc%L`MN#wiYU(851-@1+&SWmBoxT;D`c9Vr_}36*`l%ksmfvsBm82flRla% zBNqGXHfF#xTiilAF0if9C>~4_umq<)ws<3rScEHLii9iYwbq1oO+!;nyY~C69PI5o z4^zneR{{|Ihf|Ab;+8A{i>}7d2GI(wwx>kZ#3soB_oLHK>zCD9Pgh6cBEauoQRXx7 zFA|W3$+E8q5uG*gwQgCt~vrbfr-We{ALp{V}i zajSmNQJEE|3f-eeM;>J}dH0x`wR5j~&#pc1aH@NB} zl1fj;$G&JJ1XQaR27|`Jd6nm@NaBUBKDf{co6$(aWt@1^;mPWv8m@m}ie9wohXs7ksv|W~w}CQn)0a8E0j=gVJ^m<-PQ#*{B$V1(68KlI&l9ObN%E z=D@X;3dK~ACk?>kp!AW?!8=c~i zI&(@ewg|ciL{)pGW;zgmvigbO{zCM*y=m{zt4BiggEPa`-j!5kHj)?$9#qN#VtO{` z)++uL-5zygW0_0|pNbg$7lJd<>tH+VFC>tIFxZ|DKq1_5b%GbU zoUgux)9ZBygd6iCbjP&khlfsc4<_t#^$HK-Q;}@au;;l2C>0I+ysD1b;dN~p?=O&|%}G76GbRGTIih}<+5Pcp!KO zoHHDl?1Y(Sig}ItgG@&O*kx^W^gR7M+A<*(!86TkgP1Uxv6m%E3hW^7q|tS@LeUBt z#1KT&H|H#H1+4P=a<ItS|OiDEXUQ-RH!A*heyRdh-lelI3&v8}lt?In8BW-QWbw zG`fk_f}VelLd8G4SbNWng(8rGf?~`+$Jpywzc_`Pi$_dpIatI&VEN*B>9UnvI+qab z%9{fVMgmES{Fc{AL-bUb;=>R7yNGdDwv~=cm2WUu0iGtU&mZ&omoj<%=+B8o*eD>% zv+Af(=Auq>OLH<*3ks(AZsqkr)aR{L$Sa17|f&8abJxTbfY)O0ZH#Lio#)p_&(6R_0cH zUQ&E@`uFWCP5S1b? zn;Jy>XUTN9__g77W2N`}{D``#8p31lZ09Wd#mrHq!%F?1Z{mj=2@&e*c1Z}V0EhWH zt|ph3;g&#TVp_{VG@zK_#fkpW#HiM%-ucD9_VZ5_(l@k7&G#R*(Fz>!iQ}I)WJ*(s zX}ILPa(;>CStBm2!`R#;GCKA>ljEq*6IRQo-}>e3;o^dRfCqPDVM%Ep5 zY8I$Khj`n&PGVi%iFU;@F=zpP8;tc(ytX zr(iOa?Qnm3~D=Yu2(T0bDWP~^~uH?@>5kz7|s^=3r&&|Oof5!iCK)u z(K!$BU;L;Ni_Mr;dH&_6s+yYG7oWu>AE)7PN3SZ6{sm|5$nBPbg3zU$Yf3a1V))Lq z5|>20<#K)2x`mupQAwNm-pHWVU)G+!@;O% zUUbrg@~goieiAtaiLM*TdJl^Vk|)#4I?77Z9sx+m@_ET03S1HbsAkmAW_l%XB@jsR zdZ0gz;G|i^?Q{lh5azOEE23J$M0v-;y))3{F_`Qk2>2LX{|!#l#wEB@3p;kKa_RS# zy806F&)k2W#^{-KZ@zB0n6qb~ud*C=$}qF(Vou3wz}3nurhoe>cjRRe{EH?qXS;1i zWM5}CAKok(x8LW~r%OdIHXA;LkgTz{K-KeFTk!z-iX`N;k(%fyGju$e#QilPZCyt6 zGh-{+FV2RqXBO?c4&91(mn{Ob_N<38YJuhP3=Xf9VTSdG9sqV1c3tm_E6Kn<(Ioz! zIduCKn)IDC5PLU%T|IZ$sz$r@G9YKEx%9{UHCK1rH1$s4>0U0!?QuU{!X>~`OeNDU z>DWf^vV!iHJX*zDbD~-D=Tm604-@I%!@vdpOY#m0c^wrKfuVjmOr>!@;n)HefBV8f z3Kyy+?sINkQ23ArKYnCN=&Esi(PKar3L8TaK%A_Gm;9Flf+#v>(D+T7&4Nrt)6B&2 z6A0v6ocB?vsl!lDL$F>8aB*>wunaNxj&dBjFF2x{?a#U$`D($=Ly6Evnh%=>;QHdx zK5m;Ma%L5hF<=HshsNHU8<8ZxhuJMiDOu1Dhp96d5QMDP(YSK9%K%I3vhS+(&(+$S zgIUgNSl3)9wDp+M71a?fN#CcR%+YGW5E*>dzcYy62(4C!;gGkPq1>P&3CAWZj1{TS z#mdjh=`Y;1z2wPzz^!?6{oE?^aXQ`9emv2W3)-f_?wBJQ<}+_4!zJV4;odG>;+esk z<4?4C-F8}6-+DmKsaN5TE`@=g_+*Z9mrCSyEiK2yL^e6cZ4eH0f2;C>c!36K6_ZX< zz~Oo(KuNoYu$5r=6kGCsM-6lg>RWJN!RVvd)m9XTs$;7&u!-5@j@=rt3i}^4Ghovn z$@souH?|w!Io$miEVE^vn>awOB?JX&eO$8RXneGcX5$unxLSASnOqY=qU)1b_%Og# zBeU&Ttf|7qR}8Zw4c?$Q%OiM5Zd<*5wSst9_OP+H55$tC@EW zvY*J-u?O$2Jy%IoF8<+H1wc z0n($npWoedrbPHObMvq@YRi64sXar`*N#B{v)!`c z>j8q6#|!K1Kwn>e(Aa*)vvWVKgu8Jyak*q)QVwX7p57}@0saX@(@Gak(84%0jG{9*n2`=>jhb9z|ds?w1cx~ zJCKic!#{l zjzhvEgAT8^K)M5OM2?B|TKAv`q$9GIMv$-=vM~<%1c?j%2{JJ8TOGiW!*VFJ9?KW# zHL0U#{20dV--f18!Wg`T-Y?n7GkG=*1drQqx3$#7J)%m#Py1ynNH1!yv73$eEF3!7 zRf0?lq?|XATl)REv%S|!Yl;Qc9Pbw%Zx{54j<3k}6V&;UM1Lt!N1lK`5(U$4%)+ZG z#oqGtF;iH&7}qBaSb>%t)aye%i}@8)u-R~X)0l=;8zxv#xyf$V^{1EGj*Bx}mL4AH zGRe{rnRegFb!M%H)8ll?bXOm4ACO?~BvNhwtnnHWnD$5Sa6rmI8VRu+7)O#o%3alK zznM((YFVe5<}8XHc#ZMb}W zNMQ1|{&1)&Tur1_p?Q`hZd%!1M?!vyPFjW9gJL~e)KV2oN>(P+2G}w@(}BkrzFepM zc0+|=>E-Zh9vPvP&Fd{0us;%}!LWgJw^=N-GfrnxAO;o5u--vhH4m`~q?zZql@|U1&f4oO%N#4#5 zx0ykY>E@d}?Bi_T=5H|AmRJ^j%PMa2MQSucJGtJUzyD|fFC8Tr5Aj+ma&A3K)ygap zBVZysMdz@1868Fq$6v+xMUBd~QSg+!qVLI@)QXq~P1-i>?wh%$Wpl~4t0L~#jelUN zVl4r;b+2;#Pn1TL<=~5t0hdb(RDp72zzXV{pvR*K{;-Jv^Ttj>Q$QrXU*;Ty@?K^> zcxS*lAd!ItrH*}1e6Wv2J@-569OsuG?oPRlE@93=w>YmB&Jd4c>Xd2Y%gcJkfWcIM z5G37Bq>RRf|3~8_1_|6kX0Wp=WA7*V;<*b6(5K8|rBT(p@Tqy5?&>DuBU0Vcdr^%C}VnA4k+nc zg7aR$Io?^Qp%q#!c1Ra}AN8;(4H8;AMDLg?b`A2LmEZWN7>91efIFS& z;HuI4>6G(Ka7j)ex;Y{JC)IGThqd26NJ4PBg+Eiys4kD^fXv1_d$1J%c2JI3XK(0}Cv4JS9rFh3FBb-gux9ByQ&X0R4}yg%k*moZ zFh{fi@5<7;h*br1L`1$QSFP6&fD|hyGvg8*4tNn~ceC{z_;4#c`Rr+7z$BTs6&d=1|s?75X zP&?RL`1%@j!a?Z9b^J_R144mcv`FJlR-EEBJIz!@PE?U|E8FRuUR<=#LBI8H!%sdXd`r7dJ-ygd&R|>ezn=|zqhDiX4>qDm!$a(Rwj2Q z`P?ePC@ss-R_t=&l&AH?d+oTNAxuidt_G_+@4z?0PuKwC-}Jb;+PUqW64gQkU=35_ z%9kZiswo-v$7H(N1Z-YQR89@61y;SpcCFic2i@U#d!L4_R&{&KFk@eNiXt6PsVrUW zv31lRI>|AnO99?;-t-qb3q$d+%`N!TN598=@0CuB(aG5;VD8l6x+p`tRMf}ZN8#2< zfeJ^TSYpUW#>2C1SLFe#HGgkCVt!%&fzDL`BY#H_&lexG@52mVqFQCl~}#rVG(FsG{d4Nd0EECGX)8~+|B#Z+3~;Q zy#tKJUn`S>b4yC7%qh%r`GWzlg$%Dd?6NIs#pl%h8e$|EV3loEjMjP1}1@YcrbxoJ9~{6WCSM%y1|)q*^yY)i6~brw=m7H3*~_^8>B+uH92oKf}T zutJSL{CxiSu=%R}ncF5;?sLXadI;jyebCAcuKG?z1xFWVKwA5IcF%5o4SmN58e5hmtDmAl{d-7cUZ$2&sdy+Wg35U-dh@afi<6P)8E7Ixn)ke= z3DJe>s-xfe%he@@;-jiMI(R>oS-306Y-xTTm*r*Y@EqCLwzi@#5zPz|# z{G^E0csTmR^t4vT z{NkK)-tg5E7Up7P1zS1$TJmT)hxs;|nytZ)v#z8#mebWv45PS7s@C~)8WZ#!p5R`x*H*~-W&A~WPO75)CqTC#O&AF?Y)Ou2q6B$JN40c>J{P35DfL3QLXQ?YY`LLHgu!h;-g! z_&Jk82&iZRyNGRt;q50Q0-4mV@W+;esdj@ZGvwOdG#-V_tE<3ZDyOR{AB~Lw@OpGJ zF^9m|eep?K^3Y1*(_Fxr!R4Mt1K+3pnO*1f#SB8J5U2T3a!zBc5<@zTV?4y#pPPH z=wZwH?nX&@Y!}sQCkJQe66Jls0(0r4>aVIoso6mB>r`xH7bK0zP6LGlA{9=mi7$Ib zW(mC}M{?rOM&iJhZR;hlDHa!CmArFv1`5y>0;>1hwdji#$sc%DL48I%efgfDA-dQG zW#5ZvdnH&?pK2^UR)9p}MrU-a%IPtUsB84S)P~2Rp%8l%BeqaxDxW6Edo(Ruj52U|Po~@uj=6>T_X+;UG$8u~MxdOcmL|TzcJq-K_x|3=e z7}l70``oxN9Z~el|HUTbmjk}l`=<>Rp>Ds0G5D+oa~tui^>In7M_)ONQF_+Y6H1Z& zCr-ZDeSUBeigernDROY3v-bS(!ZK0cs;pcqBSWzBYAJ5{(Trp_It)c@hd#A{>*V-T zg8!MXDu*g2_F-hNm?AqpGHx(ElKR{9;@aD8p4{BP<6iRh!)AoMwKePgAm?{bMvuXX ziucv3+EY^)hv-o|JEA+czkNm2f4tLe~_5rlj6ns#aS+|vG{JE@gm7R`N-(qc>sz-vZC%}=#;qm4=REr8mx0f^9w& z)>2=02bvBfQ+2YDcj3pP!BY$wecUJ(v!@LFI690wm07{o(t3xB2hD_ z{~#NwDWS@_x?+`#{|O1IQ0@rBM^^KV6edk{S?OI)E{xK2m+5yo;U_7QzoyVN2$14KEs7+vCYK}X75{y77~Jncx~8f)jSKRs|r68^ov z@pOSY?GuJOGo*@j^??{&?BM(rt|F;Y*#TMkQ`+qs7r@4`T9m3=(CYCDCRh_N4;%r0 z*&K4QlkEbaXV+|Z4PORaNmnJrU_7eMo4FyLt?DN_YeT{?&-e1~ZBOi8v^x%YwxWy1XdMcO$KPQu(4PoV>Kxzei^fg~edmwY zP(@WiQtv%`)qX871@j|4-5Rc^;v2$->IJUIcf@`mWgX z3}{ZbX*}xMwqD{15>$(ei#Cpqa)dW$*ZNIo-UdF~wBv|CKsL{BYomP%BZ+k9*$zdj z=mm}}kVQ(PaLrF4V#2WH!auN5G3dsf&qr-i%gD=fjkPe~#zeD``xHkd$e8(aW>^j$ z!x47rW#rOnoaUZJrfI8>E&Gk(?cB4wxAwRtJlcddvJT#+E#4rMWrb4h!uQOV@cQvT z6O(18{5sb@-rZD7io_;d3<9m$W61P`|2qh$HKV8#=?a3fX+8*`8W#Hz!1KIw6c$Oj@e?`h3jS($r zEEs*XND-W9rS$$7NPmQ2(k5L`F%T@hMMcrT( zK5pWrHc(-lW|T&x%zigS`Aog@!8%v?5jJN zADz*bCI;5H@^d}&0rFYlmw<3Ya%2f2c*@QUCIwsa{%Z!E9*dfUbJ5KlrZ-Owf-xBg z2AYoR=A0t3u6zeA+~DX$PPkNp4#Bfr$#rcBe@=u+aOC)hzkZ5wviM*L9!2_tS!QG_ zYcw40K>qPeI8XYH{;|U7#6;xy8&Oh}5Q7ie-?jx<{=@Yuhy(B4oh=PR z!-RlOHzThaIZ5&N%xQXNsBt~*4s4fYi19-^BGwyzY@GmOe4&F0EkvhAFy}!E%8Hq3 zp$n42IMJuu&%+zrdo1M&RBn0tg9=n24MSCcY`rn6i``TeJMLL8=8z;F&n%Hq##(+ru^rv2^K^C)ljnRr}_unyRahpEt-6BfeMDg(<;LEI`N%HZ?3lPJ;_m znCp~ycqrM^5vs)rEJZI3;E{9heEn_{hpbe+oeS*lb|>wt%sO%OugGx#&MWf$34IJ; zYW!>apRHXVV1@Du8Y+IQIDGl%yS7{y;b#M@lWP<^J9{vaC=WXbR?7tOem&4{S7d8p z$Bb+Fez=Tn5F;;v{!8A{d86Cb>PD(*{;;~99ytf+xFQR2F;P4Ie4TSaR4IsCx9eTk zzZx;sMGGV`5t^m}s7Ml~us`BK$)Fx-p%Nmi%sV8gvJpx|(r{XXe09=4So5btTDV_-gJ9?J<>?0Of8C=;z9 z^odOlG?(9R4=m5^p(kaX1$AYE`!t$t5Xydh&-J)h%1BxTxwT8$a`&28c1JZ&p@ib% z;te+ibhlor2C6nvV5!~Jpk*60`}TohyF7XttdUDu1@fqOXpjldG0x)GS#L6V(np-S zZi&iGTCuZJWm&%DZO9pV)~}>nXLkZ$YJ>APoAWO&K#A;4gu>l&1SVOqO(tZ2!i7_}{_6OZ_D%1AZpnbs(dn=<1-R{hrU9Ef}mTMq84&)oU@){k5XJCy8CF z&dbBg5~v!Hq3P@31lK|O3Y^c19VY>F*I;Dj>u=@dJ%j0dwx&q^uC}a`o5k$g`};t$ zSM2zLAaENM(G3Jz8~U?A#kG`6O_qJ2h}WT?ep=ZKUA*Iv3;6K~EV1icxro})U)T%B zr(r;*jMR6dVi7edal<(L?Ndc6rH4>%F3u(*^nO z{z>Fiq6=4Lsn-gLeVKv~x*s-G(50YIi>AFrdxsqho3EGq7_Ce25goRSUzC^U0$;6N zcpfLC(U}@A(_9{|tYJeC8Z3CkkqlPcu{d5^ukxMbXo!!vxX@M2k)Q#78g9J+&v)jM z`)a$n1BIoLt2L0wJoxT1qP&{c!`9$+d6xSpHT;}YfpT}xuw%w%brDxVxkoGky64$Y z5d$Pdp)EKJiHe0IQ*+_kykS#yQ*QxeeRT`+{O<)fe~*<$en{)yP1dwoY^CZ2kD3gQ z`s5|{1C!M$^LMc_&9Ei_JBWRXM6dnLJOoNt9eXlaI$q469i0-pf3O!vE0f6wGpOBV zq>iIl*L~LK{ZoL&Do~CHD86hmmDMM*VVx==^VMt4m$UB4^NZWN&bi{bR}GmvY3*r<@oNF*0=Axb{6p(%?~56Wc(MKYe8$& zB}qF7&S&}+dD6d1kL$-J;O#_HvzjFUMp`sBRu3JJR90XlN}KQJ7C!`0>ogGNCWn*x z77|Kqf1z&P{okm7p<>$d z?*;g4eC;)+o4-FOU;2da>+APag9Adb|MtR&057gzy*DfL{@bZ}VTZ)*u%jsyc4okPFE-pAPa_&nMZq?uqutXC;^?Ee{2P0-e|at8+vG=26M>R} z=XxwF_H}BZ<=JgN#d)J>yiDHWMPp{PXx8-PbU|G)Sr`~OevdwNC=c*e0c9!cZpJd9 z73a41zlc-0#Frg~YW*r0k-9Pif47@4os=YnXrjQ9!ndYOHv{8vgX+SpuDUUG8sj}13PW@4f1!Y>7G*yqNJ#@Zf;?QQ)# zATwed85IjM0WyXa!S+Q5$2=A55;wmiz`r`(N|C}W(aXX<4Or#LpuwcYe_s33qF$p| zy~%7t{z6L(h8XO8zXh<=e$59H+Mef(7VYF1!NG*VNhtAD>dvCCJ@HY5#$+V)de}?8 zMq|+45hr02K0$`Kj5IZ83BL0MKb*0 zq4V!-*u+i9agL0pUt%Z~l$K%v-62gfNP-K`R?;mD{LypQ(cZq<<#cnXWcBgCR{i+2 zo&w|2#*(@y2@gSXQv4>XiBtg(D4b;F1h000bIk-iUgNiaEq(RF;s`N6&_{5almf76 ztV|cyg!x}Bk;1eM6-~m{c(bnG+qrldfW7be-A-2d*_urksTbwC(g=Rb%h&2U=9ts2 z1#K5)68Agy8EPUsg|9F2H87>W02eZ#2$2c}G4T9TXlU1Vr$svV&4j?QbKHog3dAjP zJl-JurMeVvv!14Nv*xdGZ|c`+g&^9!CPQVE5tOH^LPv$N9Lf1gP^-lYG)~vOZf~E1PdmW0`C`%y1iTF(Or1tX z@n)R|R{LT{AHUxq&3dv3-G`^wke7;>hrG$M-RiCYdb!i-!FnkXJz8p5;Q7VLL! zZ-G2e7xXO|(Xhnn{(I}3fT;wK^uNz*KqQ58P(@_WuKGN~xTMFtm{hJo1>Omqc3|xL z1tLf0?h+l%3w!Gm6sk2oTqqO4bZ2={m|mx=J;5oqb*ZxPMV!^qJl6i&78q zk9T}-uf0v{+;_$VRZ0GZ7>m!AhElhU*hfbA@#n+UJOOwrG}R@hg8wF^*zQ}Yw`NZD zmXEs=3z6rlO-Dso%7`*9&e3f?z;$ST(dZ2r)(rmQO;BVn4J+1v(d9~$_On#K*6v&` z?Zv;D`oem}la>9F4da%&=;lRGvfsj6(pX?2MqX_#DIOjk$xOg<#9os|qH@u=Z7jq! zp}E85LlV|;0SQ(#;5=eKbXuf&rE_WH!DK-8VKS!drSGucl7}M&l#rO_U(Z#F>y8GE z$0x?Jph^Hf4FH;Jo0sTF4(6U7%-83vG&xa!p&;gYKqHPE+ij*;`!emn<{Z;2c90E) z=g0Je^IR7C@Ti76p7#EucD(8P-Izdfz~ahLMVe*;%7;>L8k&pJ{{&E+;W6Yd^jC~s zI?=RO#jgK+DSd4PNSq{detv#`hgJ7$K@VF&v~7TiY#GB0gN2EVwlw4I^)DSDD{|H@ z5*keb2e2jU!Jo;)3McJp?E(Pt18%V)p?mjcC)GsHP=h6-U2)aYjS4)-l*V* z;pQap>bL$jfQRO|{~wyp!6DE0{rg$VHkNH0%WhfA*0ODLVcE5`xNO_D?N)bqu6@40 zr$1oZweIV@kMoV!0lH|e`N{1-3=~vmHaFt{OZ#m=431zO(AA7OsjbVkqkxIAil{9! zX3-^Ukj!IKrF59aGDgMe{WbJCo8OJ9gAOGTs1i5YEM)^WGC-=@LwFiatu=vUuVQsj zk^RD`J3mDX1x`3rCnu%~y_r{I#)g+!WSw?<*X^-6Vf5mCSV;0bj3f6Rpg#~scWGB; z_X$v3v=RUNv$EjGRx~>EI6_npNkup!nCJtd#p_=8r}JI3Epd2W>Mk!YmuQPE57L2h zNb_=%DsVCrhk{)A^c{Nr#M!d#2UH?IhN^sg-3am+Es+?(^9?}*egYW**dkQ9m7*DU zll)gp0q=?o*o86`I%*z6hZDMrHn!F}DF62)?$4kZ;IFB!uBKEGp+j*Ji#V1xGN9Gj z2o6hOLjX;DJ7-Z}w>h(3qn}&2_f(Sw@HHu~=muUV2cMi6jQ?E@SZPC$EX>RDvA98v zs8WJWMtxy67?J(@ToNlHX5lGGaX`0)1?!pSd@7yQW-&TFrRBGMcmc6Hv}=Udx>Tu@ zHOl(Z7W;s9y@jjoMr$MMOZ%T3IXhj(HeKxP2%~?(ysaySR0Pt+kYzl-ZnOP{%#Fu- z7%y->;c~U0*k$Bz`_a%{#>foybpCXFg;#o}B!OwP`f_BR8~CRL!7!FQ=$`>84h+PD za7Dy+gtL!7(dg}~&tP~?>wvgTwsjDHBV~w@WpFFfE#{`+RH0E*ZmH0dLKat5cTr!; z>?V|T@(O>^wen$wd&eEWpK^hE?ANlqhN#unOm2Gt7;aq7wqgdlPf` z;S!pbO68S2`(SU+?gG&Glcb#ZWUuMKyIash%LkU^BWhma*wHqu5Mrz2db{VHEFs#z zu1THmV>q4DU+0Ddh#@Aoy9w?wK!>O1bv~3Y`<+Hh)-R2rUcPG|1o|p3D<46=mZ{lk zoJe@k!7LMI#Xsk}sLvZf#X;MaVQ?Qp#FTJjAF! zx3*@pg>pguO{fN*{gmbMKMiggKMp}0VMaC!JT{^C^?I}|U{Lv%G`JB4nsv=YR&*10 zan0v`j|;CD^8xLLEG0j0Y8)ED?!}B>%@xSt7{m$Y#X7>mx%^l(p3tOT?L+jG2z2

8%ux`#LETxJqgB;Jl0i#8uxYug9#u5NeFzxvPt$ztpkOA#W4- z895_NlI$WQO;uFFik24Ckeu^$uzx@;e9FTLM_bUuRHi)R1k}Zcj0*nuxj62tF9_c7 zIY=L9E8zmq+pbQDisL9sF)3fRi5C%?lH^KqxEyDnHL5E#zmkOytTlqf}-sM!r-X zfDXn1SHMYglbL0KGkNx@M%x4G(}3ZRDrHM_paPOBMn#a~1V~{F6{dW%`I|dr!4+rX z@l@k;Gxtqu0h#SR*(zWfqZ*y@9t*x4fNpCj-m`&XXDm#UXmJ3cPZE*h&ipWkR8Sw@3mZx?hw~E3AA0T1nn?()d2llAL3TJp1?cyupi@x zAXBki7W0bGQ<7nnQ2fNVm>a&!7@{8kZc7m)WVp38MUH#2j$1~-Ofk1pOz4P(0xr^wZ zeYyGAB$-4)*TJ~yi#w0gQOK|Ojgk{)msO<-)iQRT@C(7=?_8ODL-u6{7VECHxNtF7awlEC{2D6;1fngyfw@e%Ry(0H}HUVd(W7S3E@Y1l)Uny+Q_5@dTyw9Y?h- zj#hv8k=E!u65?~DK;+eteBs4iBw7l5mM4P?vhGzzt8H@pX}!F?5~pS+E3bXGs%JXdn`>~|blvw38f)60mb#uN!iwd72oQyh z%23h2fcqfs#nE5N+Q@UMtE)GdRGhWV7hpm4^lOi0|EHl+hCQ`?61-hvEJv9LlUId< zLokP9C9CUd+5P^+ztwir3f^^p#M$Vo)#<~_xU~FZLRnhmeVHdn57|Sy>;>Z(DmJ(1X3jrrB`UivL z*d_MXs?Nq%Uo$a4{PWt~uLnF)&d*U?3@^P!_Z+BHp2xVZmh}!G zVlCWeHa5tt`SojFbtm?OT2=zB>GbAiRA;9>MN$s@G%tl3D-CA=@PQtvP9sX^^rnja zN*5QQ8U+(l0A>-+L2m58AIH%bx|m69B12YwdMOR7RwCasUp_G-(OX8HF*tu%4!qM$ zv9xNLtnQZr{d-RH3k!uMCFbQT#jckpHNtz9xYY6}R%$9PKf&yWaOHtIdnL)=`OP4UU(w^@*yt;?I>TNSU!APob5SR|UdV5^CM^t=J-uNT8b=(*ZdK+VM|hs9_E2f&hflw>**VzF0Mq z?$I~H;BLA1;Ns$<`QtICtp@s}Bum!&t3tSH6hs=y-}(6SaIy|bu4GYncN98wRv-<==+$+l)A3TA$*u3PqXFi= zTWh3aLt6wEYFKQ$KopmNA@l~=M#o<=Q7buoOMU^mM7lHuKTF(yuWlh~@xt^+?_z{y z3_XHTT*{1!k(iOHbfekWVi#Acb!J|(6p+1l!DB!d9PkOX%qC;K+S_g+y!rXX z2Air2{7bh^=q86PKej>W|7wl+UVjg{SGky%*SxzNXjHIkIgw+6!tzc#OMw0mh8A5B zDgZ^|3~ZswBoP%|b=A{hnsWL{qc^7_h8V^!V>E=76jVQr0CYj^R|BC)Lq6>W@Q9Iq zrc4+!1HS(*WLf`Z{rv9MK6>OT4Y`i^cVtBhpo$^p7ZrPCsB=P6>6N+xCkf4&@+%xv zMUX}oT4w+<=IjWCxgvm=HPnNaYC)AHWeBCgl7lDIkcXTE8o9#P-OQt%hLw=-ZKdL8 zsB~X3mqSq-?vH^U;^A)kz`sGOMPEuz-cpZ}l69)ER?&`0^>eCh&x1hg7JFYHSREj0 z{Rra-$}^RO{w${Kjag*ky-4|4HnhRE$TQY*MbHPhuJyk?Z7DTR@w~~mKkUi@j6xS_ zmHx@>wK}UeH(RYPG(d=>G5C0yn+Q|-K~AhB#zS00z5@~>N*GWEdj)lE#jsC#5FujBHh&wMWDJ1Xbm<9gIgO$%%bJY{e|HhKZ#jYeyNR^bHzf4p zG@i~HtwR71moTSk|5B^ToDMV>IMWvQ?hJ6`r4nnLXyg}&HlqaC>EcPCsHqZwttg?(`Z4emEPrhWrWy%)sw8r5PhnkeDbSiR(z(9Kq zxuU{jsxN>uiiU{wZ@N*|w%MU-;Oc&Eod6X0&Ycy>;6_KXH92_ew8j-9vma4 z02yn&8}g*Uo1PwMU~1N*Cp;*j zUS*XBeFQw?b(Y4b0{hv9(S@Z2oC(vzmJD`Ltf#=hoAr>$f9E^)gOx_S*&JoyP6Lmr z9S*t1q~6pW>yG2V24LwqdK-*GJ?T&+Hy~0NLttYbIKt}m1)-Aa1WMb5If98A2B#r^ zM)!W}6Mhx!1RRmf#UJc9fExCxt7Y#fLOx>-tY$_^K^!6<>Xyj!{;1VyXzKmb$J?E* z(+ZYS3?D-F1R5L7vAGeW#5VTkE40;6N2;oyHT#s+Wew{dPyO`*_o^Tejtl*L0zL2 zh*kPa;uteflH{n}8G7>1EyuAW5_Nv9$Bh7kUM+4{``r@Nd2T4BTwEXJ551tR*B5S% zz@|TcGJ?Dr4p*CCTbSPP%bNXOS!oXvt6REoOibN&H!eNrccF_@?6NWp=wg@p&HvNU z=V~Qu%03awVy2X#=pew+9_v{lSuI_Mb@%rY4k5`>X70n|gAvlQpi_qVHxR~j-c@Vh z$C2k@0(i9OicB2_K|j1np*zHX{2Y2E!B8FjhQ;A%hRJppve_}pJQE(qE<_YRkXaF( z8Y*Atm%AU^fSJXa`b6*eL2^0ZzwSlQbhR28`srwn@7j8w@q*h(k9Ccza6CaQ=FUdW z%a?2-pj#`w_{&;x3I}atXD64Jfci!si;E+}xBn!zD$Aj--u7X={r$5iE+t)Exm@bM z#fqJ1Xs}j+Y#W36ittD1+4bwGh0~yRX$I)lkzUUQdu^sY4@OQ&KO(On#8{xaU=G`4 z5T4cc%>IkP0n0Xy(_)6j&WsdE&zA2_G|$?2Cx$9xi(dOTj zo|syGqd&6*3pJx$`7B|TRVwZ^eYC?uqPH9dlK_!sXEJ-6XTfz@=mp_`?5ed16P(>6 z_f45pcSdL~`;D+?=OdAT#Ud$O7|c!s-v{-E^VJ6JI()N+ycBCsv=zU#Z zwmfzi*o>Lco;8)dgRpB(yA7eoC-?zJUdO|(+jRhlIC4x8IOX|iTL>`QF&mGhCEELh z@iLM0?KLV#8VV4t%4!^%F>Ed@HlE(f^h@xi@c&I!d!uc|gVTi!oXGvsHqC2D>E}zB zRM;g(Dg%O0G!5=#f=vY>OPG{*}@kO(l|OkgU| z7ly-pkH;T(qv)rk$h7;_;;SL}z-YcrKu#H*f~=ipK$}4X#4mV!Y#Y-3XQYBS8G6Vl z!Y?#wOxjVTh-BcH6Ep8qNrGZB?2 zlFR!f{R;xB}iTA#E$-Ac@FFhR=uDI&DH#1)TWy#r4UCpScmNjn1PY9(SoVJ>0n zAW@pa@@QeBs;aE2yl1kBOWw|2GQ%ldw}+zvl184T*(gSJ#1v+^tsn-^#a^g>0vF}K z><49Xq)?2AH7cbf@)bh3CMpyY6($uCbpzJvH&PLQcM>l?@5GY}@$Jf;9{n`U^+IQ( zE@W5;@c}wIu<0nG1}}LgV0>^^xt2SoeSlQx{^KA_Bxpo^`96oyZToG-DLOF%+T(O! z!ejqtL95*bZ}au?)6F^tL0!Eszxe`#h(stEfOiIP=PLMcbrwoEz(w!4BUCivWUh4Y z0k{x>=B5Nf`$AQ&FGMAPrw|%6Z#x*yn5!DMOs~ zQS$}|`yr<*TgmTX(PHC0DXqAZ{2+yNbzuxvC6mD*JgqKg_U{9TsA?X2Sf$&EB-JHc zVa9dR7XoqQ<(XScOVMAg@f#Muz5!i*h*w&Ar9UWpal&${aPru(3JQu1C;_twM!2dT zKU8O_^`=VeSosb|2DMFD?O@ zt{|5`f>Kl)8ge`p5pEh?7d)Peaq0?(pi3ZdIzdQqbiYMpc6aNUB)3}q1m2G^XfS={ zv$?S*T<28oLHT=-TJM7xbvv6}rtandOxZGrkLcMa(CcX8Zcc?3ni*SsgjtmD>q!mt zbd*z1uksG*N~)#79CQFao6I9vh$t@N+xYB&p|0*4L=4J*!f8L6ZWqya2akFi{;}hq zm&phiNU-kK{P4X2Vpr2d6l0KW3^o~PpYgvNrfPZ_Y(14nX{)P8CTlVbkxvN(B^mac zX?7x&*TU3vwnJ{%;kh_m^o*fgh7f}Ff(6uLs}F&HQp^d|Y78Hn)Q{utx>0C(+wu!$ z$sPK~L)+XWUL{kPjm*g*rm-{B6ot#g)$QFG61)^!`OvS={UOto=G~Y(Vk!XYoVXcQ zP&E55v{1rk>#=B7IRM8ghSJ`$XDI3 zL|Z?{nyX03sg9<9;t_euRQ%=XiDOM*eSIeNjuWZM88VyB>n@Z@kafMh7rz%Z#$5WC z@s%$0GENZ+l9K0e9Sgk)o#K;kj zzIc95v8|9QS%!mygG^YtcL2u_VnI{vC{0n|ZEZn$%_P0RynxGAthho-b%7L3h|w^kN- z`|>{tn0 zxb)m4d*g*CE7x4kC$Py*F z@dMem?)ZhwuwY11B0Rp?K-DOnnsEzSK6l5W|Go$>O|Vh-uK5rG*ng4egd!~Vk6xZ9 z$!)4W2NO65@Mg=BCy(?x>9G^GDT2tJ*VQ#7r?Pu~@;cW7A-9`tNR(Z*B_DjluJ=lh zNvInjtpKccf$4oxVIo%Q0fKjCt{baJT6MRWKBsEAJw)!Wh(J6?$UGwo1f-FU1+zwl zIt*~>@X=^ZBl==zuAEV!Fn?0-eF1F2yG4LSko>6vmJZf^OMTe9-t`}}9LRz<=s!sd z7O4*JTrl7&MvHew7gPnT#Ck!=a<|#ou6y1lD`9 zWoUnDefh$Q(2j}_&?}Lb5(PEyDRKC=I|C+6`=#invj#v!r zqaPVGRf78tSW(hR%oVI#4ir)RYmwJ~2b}Gfaby)PI6^l!Hs^GtqwisB!$dS&xvRR{%~iJG+ZH2#nRnMH9oT zH_{(Z<44Xksj>|S<4Kfq*YO{Jg+f8e)(B(HeD^FA@LdB-Qo*8ojZTc z=(=n@a|AZhN5oAkx?})*23U<9eGpN{R;Hn3~oC>)`Qsqz=valDT{dW#KZ#}`_n{DqO-w2$y(1b|E9MEpwpqQmx(J7)ENRky>Y*ADo>FvE-{SzdT>$D2J z_>?G1<&DV%mRb>|q;4<5e*S0pB=H=}#+(YhI0{jPhjC7Pzgs+0_3=xWx z;+1J(1L9fJ0o{Hv-`_z-MlM70h?PtNJ{;mdf#4&zgBg6TuwquoP~F$?N~V<{NfBa2 z3jz*4uy%wl`qL>Q1YO}>-dJ6s%GVaz$xFF9o>F)mU9 z8EUc)ij#-R3f&Lit(VC;{e`z;{xc|0r&q4-Sycry_rBm!=h4r}xJi0j$1Nm)X?`#` zI5^o;yN)|F$ebGWmew8}iLugTm&KsfGJV+TCuo_LREu*)uvx|F zc6X+SGUzSp9<&BMq#MD&NTgx)Ft`ezo$erU)W3=Q+n_*nn+taTCL;+2fsS3j?cmoV z!CTpNr?}8WH;BVH08x*YS6HYPHIQ`w_)u;ebj6N}?AZ3zx=0F(W$>C135=_dmO*>C zT$$-^Wif9+pr6a-R?kzX-kg)}k9~8|x!v#P?Q4uRra1`d58dO7Gpzk&sgfeoSLhVw z{Ry89uH_=>jXOi z3x4C{<2So(_awc&_k+wd^koj*JLtH=pVoQ~XH9^FK+am@p5Qr;ATO$`>p@R3m<-M= zpoTsUQLyx0lVN~PW_j2JuG)-JBoA~a&0$8q`b4+C`}h@A&!34k-F~J0B)$b;+By9~ zamFVn7m4chnlirPf|2!{EM_JkN#4VBlfUDoIWOc#r}s^GY@Va08S@_{s$DMir^y|q|B!^~~#wv%tUMiB`klH)cbk-Tif;uv|^ zul#OQM@Z04ApjQf{;qU{yTf;mjg;;m-ju)$<^7W~vmo$j#G3-Nt#gErw}ThQc#KA# z$7IlLI^a_`zHK%SZw3Vi2j8{u^VoWN-u-%1xR8zc^Oa~IF$EU3d=3C!Bu&O4TWvMK z{|@}cy^ucoUfbPg8XqLhY0>5-&&rfrIz>lF!@EnU?Bv4qz47Vcp)b$4hn(}pkx&9= z7IRn;h?bemvE={{QbUP%RaL$tkR@2DkfYxkMR9c9hXN~l_`p~-;r9BlE;TwL#Lrbk zU&D9GqW%2J_uNPFPFkAnh7a$(4YDMC7>0mMijz$fX!e@0_O`{(?f5<*o58vFP21>7 z>8|0&z$O<1%Yv!PHEX5eWuBrCW5u4hAEb5&qq$ zw*q-m9-fA7f>q_M1az}4lar^*OC~RDxndpgg73nD1qPw%v?vO-5 zGtU0Rx`}if0U2Qe2G8a|&p8!Tcw(zjB_Gt2ZmD?5UGILhaQ3l5fZAy8TumZd^PG4W zpHh7(bKgFd;arwl_zU(1W(2m!;$`s8j&A7k0&;eJ7BOhjIhd{N7Uv#O z+V^H)VRn9=qKdIkc!^v@p-!2PN+kG%HvWJ^r5bM>S<-?IVBJ9 z6W8FJcV`tBQ)|7K+#SgTKy zbCCWoc%@_eGL7HYF1nKLm|H{?c@HpGT3zW8VLVn@{hb&Qh1cbFH5;bvY%TZO{Z5L1 z>?br~udLR&O6Nev16<6;D#le>2a63^m-t#aG0@2zbVJ6)aTD%Zw;Sx4}QWnAo?1;9H0+_E} z7oLj&iwS;ZC zyjYcXN=aNM>IXvZk)cDCL`TH`p@5EbVu*DrPbwA6avk+B@w_*|Pj4j|LKC=L*T9XW zja4lWGP|Wl=-wUDC&h zz_g`ITBQ=0VA$reVg-&9G8485F!ub`kv}W-`ds;3ubqh@rI&~=Oj6%_sd`uA(t5fCZE1$v*ztQde5j1(=vLirLVb`DTc+` zablPB?Rhk=53Z!U)1_nG-*OMljw%wrBuAPsORXo;HB{y28+2T>5IYn5GJp_}k&)wo zgI&TX;`c3uXgHA@u3)qvzgylZKu8t5mO%U^)A6MkOeCCh!vI%Ds+!wT!M26$( zue)i_3lTWv4mJ7eLkH#&Y_Q%q)=@vaFo>E&ib28w=Z0Q7IBt!|Wt(eTtN`1a*5yZ_M05N5p_W{~ z0{!2H4a!?7BG>t(AB$C>2veuVb1p)wr4qK}d9s9?Uq^v9?01MyF=DGL^eGKzPHKr# z;AjGGDu@u1f2OrGYrso?%3*~hfmhz!uXlE=bxxV8d=nCjq5;AE-@|vS!B4PBqqYOF zIYh8bC73%_4~D3)_GD5qo@%c{J@hieoaK{Ut{ zGF~9ICx_;<5duV4k{fe?RQB&se6K^3OGr2-Xpw!<#X6EKt&Xdd&6GYi_=Ro}|IDY3 z<6yl$=lF(XpK1+>SlR`Iio|Z8T26sWT!JE^*rYr^T2<7{LEgK`_1cZn#;x06LaA%#?S7xkBtUTp% zOgIWj={yJ+1Y{Yi3NpATUKIRFJ&mY)sLV8_%Elmp(C+~~GUhPWvjK-%1k(IR5ng|s zh!vvo$`g64W--TEO*8T_$&i?`je`{}SVB$JvTMlDLnbMtQx#Tu44Z9N#%)On*0@FJ z`uM$AJ00;Y=h@Ef^kpG1(p)PB7d{1&er#1Aa9urPDz2Ct;xM}>=N z$UOZb6@M73lHIKQrKFTr2#bU2M8C8%dr;4kfDke&-3b{ng35F0#ss52PK0m(k`0~Z z7$5a##ng?O3D(v2m{4eNusF-KFewJ`yH8G)4s2;CGEh96e%~X>{q42;uFUSk6a)f&uWjluTUYvr@c3jYh1Y3Ux9rS@zo?l{8q<+6q_=Jt`aZfmN(*p*w zjQsA>{QRSLj)g#%GWJZK0rO*f&<%oto|^8Q?z5mt8?)bb=rXWuBt~yf1vf2;;s&U> zdVfkuLK;!f(bYBFO^2S!WA<<(jJq02$gVQzC|R^$6L_K?jKa!o#X=l8b|$onnC`@QZNTz*``nt_lHC)?g(?_01wq-S$j_XSpH|AJyK1K>v8^s=wKZ0}tXfVWkVZg2a#@vMfP z(XjJ1CYFGE5-3BZo5_65e)xMIZlo2i*NZqDRe&z*s5`YY4rKU=Ejn}s*P5TS6#YQ92qFuFC5_a) ztzI?xQvP-P$oj~`7_s>RRR6_F3F0#>I-zud8wTkhsj{0Nk(~@Eks$)=eeq8Rj)5J1 z0-{Hi$5gbRa^fK3H>Mr@B7al+zbAHfY$k^sg=}}f?Jxp+kMIWul20{E56=hR!^#HP1kNIja+|*TQNRrTR{3o; zL{n~&-WBdKep$G*mR75obQVpGkW4%VZ2=QRDi@2QT*!|&mcp7rQ&0ybqRPgz+~u5P zcjaIwDBW~*j7^GQ;>)M_IT^7zp63>Kf2yX$VhZoQb?O4`2D95z=V=*N)+D8&QgdtW zYzTad1kI$-A30bCJwAJAqo=0_%^fy8SxNh~@n6l=LBxEQXOYt2)QOWk2-<7m_0(-| ze`KOv(u}zz>jXq&$Qb+AUnoN#k;DUN%p z%=NON-!?*?Fl3kO`&TLWi1CNE-3~g_VZ>8BVPgXAP{0TL60Ohz3rmOxx~9Yjzl?*P z&ohkD9UQ_4}&OQBwSms1=bqAd@VZ3wbo_@ zE~>}lnHl z0zr1{!H<4hPvo*B5Pup}>)|HoGPy8bNC%tPy@7+9dyFL4D=N&aTr1?Y!kP=iL>H+4!{Ky7 zc6I!d>0SRsyh=QRt+}1IAQlmY!CvpKE*w8LH2CMFYjP*FT+za7s#gDbTsiAJz(=sjg;FDS><3#8v<|=#qjs7G(eZglJBlxmY!?pU~u#hpsXxU(zI3w0j``KF29V zA4|E$tusND&6*33@-$In``~Fv1&TZY)FHUWnoARj-*C0mTp0el9WV{&{-8+)TU#Fc zQ^R(C1Yh}gHa0$+wXM$W!iriR$!-Ct)p()zztE4HpO4B|Vc019?O1@@*8lGGr22bl zz*-v|C<1LJkxYbXU~J0y|RSHaM6}4J8a-9sH5}1@Htn!)TC44pZP(r}2So zQd-)fIcnXn9}V3?HT4<=$?!kNJ0NrMJXp9s!xXS?vr)n07hgvYZSfJ)edE+|Lw~h@ zLCTnSW_?+IcRc3B7`h4tH-ZhHAJTKUvh z3zcMFtooMP;7U<)QV~s7CwqWBV%Sp~Sx}1`rUEaSw9mqWy11MYsiw;yqup$;Z?Kp^ z{?!M2idz?cY{ep5VfOv}R$W84L+4jwFh?|lt;-l=b3%l}dM)uFu{7V5jnU7Etmff* zxgVp+N(^QHcx@3q-DNQ~No{Pp_g1ugu5UXZ56pi&G=V{J;>B)MHvu z*Us;*b%@v@^rk$78}7A3EQ$}GBRij)%C`=+2x!FZcQ4d= zRE}(W99J$n%GLVaUwvz<0vn8p?$-=6vb*M)8!_|D`T?+)UJ)t8JfwaB(|^b>wpp&K ziOH+q=^f#sav?-+#>*Zkg{ z+c7#0V;>r4R~Ej7N=1!hC}kD&-ZB>X6q?*@Q~&L5yG?oc)pg{1)oAKlXS+Jj z1OOvV6DpAM_O)34N(N3MJ(TU@v0xeji5`FN?<2{iY13omJgH&n_@-*1eh|W zM#@2mNnn%wuPnR=4Qkq)%jB$xz;#D0A-h*j@~Ny6N4J>m*(KsMn+Z30Dazu|2CrX` zp;8{|$w&w>7URpkF=TqYD49+AP}10PGNR|Y8m%F(iA0&pVCmN|Ri1u~ZjW8oV9;JR z##1|?^ho>R)e}O>d6|pc)D3q!yL;2Rg{CF3|Le{CjS8~pFz?4Kgz>A}tK<6B#fA}5 z)MtECb~j{hOET({)5{=Hl-()k&+xH90CQ==eamgl&H+7<-_*GGf3pCy&(0@zn^o2Z zA6br{1kgG&N|Encv-lkv^+UC=B07(hDVA_vCTx_Gz@pAt>oY-N5ufRB&o(JZ(8BlV`j{6uk6qE}QFGz?cDMMo}1v&1$l@lo;q;^a7 zV@a4LxW+&m$37ig*^N8yZbl+Yq+TV5QhOE!mJKC9H8(p1!VsCL;X7Y6F6p4V#{c|& zT22~$-_GoRslDEJge=wbWcvKujO`)M>igfF@Uc*bmgzyGUujc5kM*~8@qXj79dQ=j z*8U%P0*}ikTG<6Zx@yp$^1GYN<$9aE)&VdL5hy{R+a!h;<#SvPg_7DkQh21yHH*6? zqNf#;BTUO6E_Z%uYsJ^FFhkdEzqh;bQr!uRBcGk$?SuND7*nc+mLUjCxncxQ#jr!? z&lKGvm{|9ESi4LDLpCvkGnhQo@CIYgF^E11=@qIoy9eywdJ=jUc1rZ4y9WP1S zB#XKLJ!bUo({$dP&8Gdx34m)A@?2`$Vgw8kv%w#$tzkZ>xrE;9brhF28a0Wr7tD!Y z{XalkIK!R5^`-s*Fdc&hEZOlX57^QxZuwIk95>7L3Mb>XwzlZ)?AWC@sdXvD@;b(ZHwoGH0 z#{0f#r}Ci9?|*FSVoqDa{!^i?irz$RrsRSE2|{{Q>7m(P@_aSRKHA^Sp> zsC-fE6%RD&w$)2laT8m-&^Zsx45{u$Vyqjj@$tLe*Eh$PFD&*BDHe^;oQz&`5Pu; zQ{HPiGvNp8qxuaS&co#`%|FSd489&Ie9$_0udVIB-c9}>dEX9y<^O(s{)eqmStO4= z7G=VxkY0-F%|6v6aNfl4?vKhrR+KfVMZ$v*eeK(5I3yA@`_I?23h~cv5c*i5zidX5 zD5;qY1kgNz!RDX5M@rgOVWBxY=?$X$9mdEtJawm?*|sb5WJi)`F}Ew_x7pYEkuPDB z8+SGWC;qJ~0qP5zxf`m=R6$ZSVGr@i+kA9wR=- z(wrifJAvV%5L0~8{NH2lh(mw)o#76m#9xSuO*y$+ZPA~b1iNhcP#uBZ14h>$vFAm5 z7cxl`P<)TYhyLv=^pJhTCnO{k;H}-+2AilxN&3y7bH($JPXAomkXM(Fw*Rx=z?s;l z1OW+V{#^+b*@Qp>Z^LJD5BYaAD7E2g94s%f#ry)_YHJ?(ir%2*XLdAx`+CX~Bn1VybcrUkaW&IuBhERn+ceqYLgD?65G}i#M^rK4m2moHCO* z3=?l}9~$B2i%%;YDTB(+lY5Cf%PGtKlI`8e|3sacPepIVv1~`vE4R~E#3?u$g3MAY zQRTvap3PyZ{0`YQN6(l%s{V!hlPuo7t z=runwWGB5Qc<&oP2Hju_dvSsq$o#vGx^GY5qJ9@SITy35d;_N&&7{rzcirx8k0^8O zCJ$sVqMB2DUdMZA`%#{Gt!_zvp|A_?sNHQl*Q}!EPsO}^PNrY9ZJ9B4# zSr|FSROu0ih{}4(0fmne7_)@G%6v0)FuJ?y&go@(tZ9+3u&_tfj*k6;n~+t!mkaV7 z*Rln-MepL!dEZalJ)Jo>wxOo4_+o;$^JDRx^I!teUj%?f<{^IupC5o7srjSKMGPtH z0{>K)L+(zM9KV@{tvsxuMEL_e1 z+@*t_WuVTamEKXW{zwiCHZSODmlz~Z#Wwa=($J=|q*MnU$I0FCTOCdU-2RkgR~uYV zK;|BcsWP3~2ec@f*}lx~9vsvb|1{j8AK{Oor|@dGtL(em&Dqx;p2Di|!;P;qE%c%* zb6Zq0F)!aUmRjrTME~_D1;ZZ+@vOqw2BE$@Pr7%KyKj1ya&R{fH+McORQi5oFb=yo z{-1?ix*38jZggQRqszc8zXkl3~W<>Bx1o@J9 zjm7L6Fo*Vv1Uet&1?!O36f_G)6`U6No~v^zAZ(9?{NMLOifDic;UkpF|KsT_*s5x~ zt__mX%?6R~Zs`(`?(ULCx?39QZlt9p1nKVBba!{druml7{T|;xfVHn{t~KWz;~Y3O zpct%9fZl=i008jF-MOWs6Jmv}cr0s(?Y6Hg_Sp%P`3*|hkLeCeES62tUF?@bo8ZWU zw`ZE{ZS6~nTL*|alnJGp*AgxWIEqKwAgcp5!dLOJ4k+tFrtM6{H`UzxPheYC1}Mds z$J^ty7YPBw^#x*GaOYI?hh@>a>mXMHntexxM8?2ZPS7Iu7Xth(cDQ zt)A*6`|cS^at*mkV*Wd+NGxx_tkfX9BTC>{iw&X`)y{hvpnhZl)2hH=@wU8e$nRaQ z<(WnfTr(vUslR*U*%ZL^`$1syVDZ&uGmf&9SUaM5@_A{oTea!ovvwff2|+T54nvJF zWn^k*j#3bi*#0f8nIw$T$4W*>T1n9I7L^9lm|#7hBL;T-WY_G71s^sLgh>ZjbST%K z`#)#h8c1H}%;W^hMmG4qisq@+>nu{OF!JR6 zO+TH|mYP-iY5VlX2*1s)3D=nv8Myi4q0G**8*grG2%MoQu-BD9RKePeMSW>#>7LU34&D_Yu&*USA3NHzjuu#y|$airru-}Bm>!M43M{?OujIh&nzzw2uX3Ysv#!jW+T?IRj9U zc$;Ds2QlKwHn1g1N-jT@yho7H!QxQKm3{XO^gA8qW+UwbY3og~t{Ht@e~m`gjWJPo z!BEXRtW&HY$!Q+c++IQ2WRc%w5qYqHh$1HC$xdQ6qgm%6g6X#lM9_U2#=!nOh;m;m zQ*dw7-d`6*BTOcO(n?*kwQXkd`pi+mI|tnqy4k%IJ7&5r_X|kk84o=0

    9weOgC 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/Creality/creality_hi_buildplate_model.stl b/resources/profiles/Creality/creality_hi_buildplate_model.stl new file mode 100644 index 0000000000000000000000000000000000000000..262c3279e5dc0ff1d538e171a91124efd3e36467 GIT binary patch literal 28684 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 Z^vLjg5U+XssO=4$(Au6nK)yQ>@&8vo-qrvB literal 0 HcmV?d00001 diff --git a/resources/profiles/Creality/creality_hi_buildplate_texture.png b/resources/profiles/Creality/creality_hi_buildplate_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..d08316d5ec9ff3c1d6185d9ee0b9dd9fa2d040a9 GIT binary patch literal 13432 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 Date: Wed, 22 Jan 2025 07:42:38 +0100 Subject: [PATCH 090/100] Update Spanish translation (#8024) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update OrcaSlicer_es.po * some changes * Some fixes * More fixes * More fixes and improves * More fixes * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Traducción español Beta 2.1.0 * Update text.js * Update OrcaSlicer_es.po Cambiado punto por coma * Minor fix PR * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update Spanish Language * Updated strings * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Fixed Spanish Strings in English Fixed a lot of string whose are translations were english to english. * Some spanish strings improved * Update Spanish Strings in RC * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Some fixes * More fixes and improves * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po Cambiado punto por coma * Update Spanish Language * Some spanish strings improved * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Some fixes to PR * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Traducción español Beta 2.1.0 * Update text.js * Minor fix PR * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Some fixes to PR * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Some fixes * More fixes and improves * Some spanish strings improved * some changes * Some fixes * More fixes * More fixes and improves * Update OrcaSlicer_es.po * Fixed Spanish Strings in English Fixed a lot of string whose are translations were english to english. * Some spanish strings improved * Update Spanish Strings in RC * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Revert "Some Spanish Translation Fixes (#6115)" This reverts commit c37a871dd2d1cc4bd75cab5dc1fd00b5a3dbfcb3. * Calibration: retraction test * Fix a regression: Generic filament profiles conflicts #981 * support full_fan_speed_layer * Support interface fan speed * profile cover image reorg * Traducción español Beta 2.1.0 * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Some fixes to PR * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Revert "profile cover image reorg" This reverts commit 041d41fa9f8bf2d927fa32a557e2427dddb1c849. * Revert "Support interface fan speed" This reverts commit a657d851218c95356771f4a839fdeea537e9919c. * Revert "support full_fan_speed_layer" This reverts commit ac6dcadeb034a2e74365c6268ef9ed7162fc59af. * Revert "Fix a regression: Generic filament profiles conflicts #981" This reverts commit 97118f8e9401f895f585053ded1b40ad3a71ef78. * Revert "Calibration: retraction test" This reverts commit b210c294346c077385f4c1f8dab70f8596067dc5. * Update OrcaSlicer_es.po * More fixes * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Final fixes * Update OrcaSlicer_es.po * Update Spanish Strings * update * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update text.js * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Merge remote-tracking branch 'upstream/main' into spanish_translation * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po * Small Spanish string fixes * Update OrcaSlicer_es.po * Update OrcaSlicer_es.po --------- Co-authored-by: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Co-authored-by: SoftFever Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com> --- localization/i18n/es/OrcaSlicer_es.po | 105 +++++++++++++++----------- 1 file changed, 59 insertions(+), 46 deletions(-) diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 92f5362e01..4959cf9cd3 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -1318,7 +1318,7 @@ msgid "Esc" msgstr "Esc" msgid "Cancel a feature until exit" -msgstr "" +msgstr "Cancelar una característica hasta salir" msgid "Measure" msgstr "Medir" @@ -1326,16 +1326,18 @@ msgstr "Medir" msgid "" "Please confirm explosion ratio = 1,and please select at least one object" msgstr "" +"Por favor, confirma que el ratio de explosión = 1, por favor seleccione al " +"menos un objeto" msgid "Please select at least one object." -msgstr "" +msgstr "Por favor seleccione al menos un objeto." msgid "Edit to scale" msgstr "Editar a escala" msgctxt "Verb" msgid "Scale all" -msgstr "" +msgstr "Escalar todo" msgid "None" msgstr "Ninguno" @@ -1350,40 +1352,47 @@ msgid "Selection" msgstr "Selección" msgid " (Moving)" -msgstr "" +msgstr "(Moviendo)" msgid "" "Select 2 faces on objects and \n" " make objects assemble together." msgstr "" +"Selecciona 2 caras en un objeto y \n" +"haz que los objetos se ensamblen juntos." msgid "" "Select 2 points or circles on objects and \n" " specify distance between them." msgstr "" +"Selecciona 2 puntos o círculos en un objeto y \n" +"especifica la distancia entre ellos." msgid "Face" -msgstr "" +msgstr "Cara" msgid " (Fixed)" -msgstr "" +msgstr "(Solucionado)" msgid "Point" -msgstr "" +msgstr "Punto" msgid "" "Feature 1 has been reset, \n" "feature 2 has been feature 1" msgstr "" +"Característica 1 se ha reiniciado.\n" +"característica 2 ha sido característica 1" msgid "Warning:please select Plane's feature." -msgstr "" +msgstr "Advertencia: por favor selecciona la característica del Plano." msgid "Warning:please select Point's or Circle's feature." msgstr "" +"Advertencia: por favor selecciona la característica del Punto o Círculo" msgid "Warning:please select two different mesh." -msgstr "" +msgstr "Advertencia: por favor selecciona dos malla distintas" msgid "Copy to clipboard" msgstr "Copiar al portapapeles" @@ -1401,25 +1410,25 @@ msgid "Distance XYZ" msgstr "Distancia XYZ" msgid "Parallel" -msgstr "" +msgstr "Paralelo" msgid "Center coincidence" -msgstr "" +msgstr "Centrar coincidencía" msgid "Featue 1" -msgstr "" +msgstr "Característica 1" msgid "Reverse rotation" -msgstr "" +msgstr "Revertir Rotación" msgid "Rotate around center:" -msgstr "" +msgstr "Rotar alrededor del centro:" msgid "Parallel distance:" -msgstr "" +msgstr "Distancia paralela:" msgid "Flip by Face 2" -msgstr "" +msgstr "Voltear por la cara 2" msgid "Ctrl+" msgstr "Ctrl+" @@ -3720,9 +3729,9 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe " -"temperature,it may result in material softening and clogging.The maximum " -"safe temperature for the material is %d" +"Current chamber temperature is higher than the material's safe temperature," +"it may result in material softening and clogging.The maximum safe " +"temperature for the material is %d" msgstr "" "La temperatura actual de la cámara es superior a la temperatura de seguridad " "del material, puede provocar que el material se ablande y se atasque. La " @@ -8007,12 +8016,14 @@ msgid "Nozzle temperature when printing" msgstr "Temperatura de la boquilla al imprimir" msgid "Cool Plate (SuperTack)" -msgstr "" +msgstr "Bandeja Fría (SuperTack)" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate SuperTack" msgstr "" +"Temperatura de cama cuando la bandeja fría está instalada. Valor 0 significa " +"que el filamento no es compatible para imprimir en la bandeja fría SuperTack" msgid "Cool Plate" msgstr "Bandeja Fría" @@ -8250,7 +8261,7 @@ msgid "Layer height limits" msgstr "Límites de altura de la capa" msgid "Z-Hop" -msgstr "" +msgstr "Salto en Z" msgid "Retraction when switching material" msgstr "Retracción al cambiar de material" @@ -9834,8 +9845,8 @@ msgstr "" "contener el nombre de host, la dirección IP o la URL de la instancia de la " "impresora. Se puede acceder a la impresora detrás de un proxy con la " "autenticación básica activada por un nombre de usuario y contraseña en la " -"URL en el siguiente formato: https://" -"nombredeusuario:contraseña@tudirecciondeoctopi/" +"URL en el siguiente formato: https://nombredeusuario:" +"contraseña@tudirecciondeoctopi/" msgid "Device UI" msgstr "IU de dispositivo" @@ -9982,6 +9993,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate SuperTack" msgstr "" +"Temperatura de cama de la capa inicial. Valor 0 significa que el filamento " +"no es compatible para imprimir en la Bandeja Fría SuperTack" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -11930,8 +11943,8 @@ msgid "mm/s² or %" msgstr "mm/s² o %" 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." +"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 "" "Aceleración del relleno de baja densidad. Si el valor se expresa en " "porcentaje (por ejemplo 100%), se calculará basándose en la aceleración por " @@ -12065,8 +12078,8 @@ msgid "" "Can only be overridden by disable_fan_first_layers." msgstr "" "Esta velocidad de ventilador se fuerza cuando se imprimen todas las " -"interfaces de soporte, con el objetivo de debilitar la unión con la " -"pieza.Sólo puede ser anulado por disable_fan_first_layers." +"interfaces de soporte, con el objetivo de debilitar la unión con la pieza." +"Sólo puede ser anulado por disable_fan_first_layers." msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " @@ -13279,7 +13292,7 @@ msgstr "" "cambio de filamento" msgid "Z-hop height" -msgstr "" +msgstr "Altura de Salto en Z" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13312,7 +13325,7 @@ msgstr "" "parámetro \"Límite inferior de salto Z\" y por debajo de este valor" msgid "Z-hop type" -msgstr "" +msgstr "Tipo de Salto en Z" msgid "Z hop type" msgstr "Tipo de salto Z" @@ -14742,9 +14755,9 @@ msgid "Idle temperature" msgstr "Temperatura de Espera" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool " -"setups.This is only used when 'Ooze prevention' is active in Print Settings. " -"Set to 0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool setups." +"This is only used when 'Ooze prevention' is active in Print Settings. Set to " +"0 to disable." msgstr "" "Temperatura de la boquilla cuando el cabezal no se está utilizando en " "configuraciones multicabezal. Este parámetro sólo es utilizado cuando la " @@ -14823,8 +14836,8 @@ msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " "following format: \"XxY, XxY, ...\"" msgstr "" -"Los tamaños de las imágenes para almacenar en archivos .gcode " -"y .sl1 / .sl1s, en el siguiente formato: \"XxY, XxY, ...\"" +"Los tamaños de las imágenes para almacenar en archivos .gcode y .sl1 / ." +"sl1s, en el siguiente formato: \"XxY, XxY, ...\"" msgid "Format of G-code thumbnails" msgstr "Formato de las miniaturas de G-Code" @@ -15473,8 +15486,8 @@ msgstr "Soporte: propagando ramas en la capa %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Formato de archivo desconocido: el archivo de entrada debe tener " -"extensión .stl, .obj o .amf (.xml)." +"Formato de archivo desconocido: el archivo de entrada debe tener extensión ." +"stl, .obj o .amf (.xml)." msgid "Loading of a model file failed." msgstr "Error en la carga del fichero de modelo." @@ -15484,8 +15497,8 @@ msgstr "El archivo proporcionado no puede ser leído debido a que está vacío" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Formato de archivo desconocido: el archivo de entrada debe tener extensión " -".3mf o .zip.amf." +"Formato de archivo desconocido: el archivo de entrada debe tener " +"extensión .3mf o .zip.amf." msgid "Canceled" msgstr "Cancelado" @@ -18782,10 +18795,10 @@ msgstr "" #~ "geometría." #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" " -#~ "option.Some extruders work better with this option unchecked (absolute " -#~ "extrusion mode). Wipe tower is only compatible with relative mode. It is " -#~ "always enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" option." +#~ "Some extruders work better with this option unchecked (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 " @@ -19242,11 +19255,11 @@ msgstr "" #~ msgstr "Nivel de depuración" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " -#~ "5:trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +#~ "trace\n" #~ msgstr "" -#~ "Ajusta el nivel de registro de depuración. 0:fatal, 1:error, " -#~ "2:advertencia, 3:información, 4:depuración, 5:rastreo\n" +#~ "Ajusta el nivel de registro de depuración. 0:fatal, 1:error, 2:" +#~ "advertencia, 3:información, 4:depuración, 5:rastreo\n" #, boost-format #~ msgid "The selected preset: %1% is not found." From 3064973b1546f1a06bfe4872ee63dde906154635 Mon Sep 17 00:00:00 2001 From: Shuwn Hsu <20023822+shuwn@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:43:31 +0800 Subject: [PATCH 091/100] Comprehensive Update in Traditional Chinese (#8034) --- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 4818 +++++++------------ 1 file changed, 1840 insertions(+), 2978 deletions(-) diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index c439d5bdfa..0540cb89e9 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -1,23 +1,23 @@ # Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST Translator Jiang Yue , 2019. -# REVISED Victor Lin, 2024. -# REVISED Shuwn Hsu, 2024. +# REVISED lin-ycv , 2024. +# REVISED Shuwn Hsu, 2024. # msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-04 17:35+0100\n" -"PO-Revision-Date: 2024-12-31 23:58+0800\n" -"Last-Translator: lin-ycv \n" +"PO-Revision-Date: 2025-01-11 10:54+0800\n" +"Last-Translator: Shuwn Hsu\n" "Language-Team: \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "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.5\n" msgid "Supports Painting" msgstr "支撐筆刷" @@ -94,7 +94,7 @@ msgstr "填充" msgid "Gap Fill" msgstr "縫隙填充" -#, boost-format +#, possible-boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "僅允許在由以下條件選擇的平面上進行繪製:%1%" @@ -113,11 +113,12 @@ msgstr "Gizmo-放置在臉上" msgid "Lay on face" msgstr "選擇底面" -#, boost-format +#, possible-boost-format msgid "" "Filament count exceeds the maximum number that painting tool supports. only " "the first %1% filaments will be available in painting tool." -msgstr "線材數量超過上色工具支援的最大值,僅前 %1% 個線材可在上色工具中使用。" +msgstr "" +"線材數量超過上色工具支援的最大值,僅前 %1% 個線材可在上色工具中使用。" msgid "Color Painting" msgstr "顏色筆刷" @@ -156,7 +157,7 @@ msgid "Height range" msgstr "高度範圍" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "顯示/隱藏線框" @@ -179,9 +180,9 @@ msgstr "水平" msgid "Remove painted color" msgstr "移除已繪製的顏色" -#, boost-format +#, possible-boost-format msgid "Painted using: Filament %1%" -msgstr "上色:線材 %1% " +msgstr "上色:線材 %1%" msgid "Move" msgstr "移動" @@ -228,7 +229,6 @@ msgstr "旋轉" msgid "Scale ratios" msgstr "縮放比例" -#, fuzzy msgid "Object Operations" msgstr "物件操作" @@ -239,7 +239,7 @@ msgid "Translate" msgstr "平移" msgid "Group Operations" -msgstr "裙組操作" +msgstr "群組操作" msgid "Set Position" msgstr "設定位置" @@ -257,10 +257,10 @@ msgid "Reset Rotation" msgstr "重設旋轉" msgid "World coordinates" -msgstr "世界坐標" +msgstr "世界座標" msgid "Object coordinates" -msgstr "物件坐標" +msgstr "物件座標" msgid "°" msgstr "°" @@ -294,7 +294,7 @@ msgid "Dowel" msgstr "銷釘" msgid "Snap" -msgstr "" +msgstr "卡扣" msgid "Prism" msgstr "錐體" @@ -336,7 +336,7 @@ msgid "Depth" msgstr "深度" msgid "Groove" -msgstr "溝槽" +msgstr "凹槽" msgid "Width" msgstr "寬度" @@ -364,7 +364,10 @@ 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 "點擊翻轉切割面拖曳移動切割面右鍵點擊零件切換為另一側" +msgstr "" +"點擊翻轉切割平面\n" +"拖曳移動切割平面\n" +"右鍵點擊部件以將其分配到對側" msgid "Move cut plane" msgstr "移動切割面" @@ -418,16 +421,16 @@ msgid "Remove connectors" msgstr "刪除所有連接件" msgid "Bulge" -msgstr "" +msgstr "凸起" msgid "Bulge proportion related to radius" -msgstr "" +msgstr "與半徑相關的凸起比例" msgid "Space" msgstr "空格鍵" msgid "Space proportion related to radius" -msgstr "" +msgstr "與半徑相關的空間佔比" msgid "Confirm connectors" msgstr "確認" @@ -442,7 +445,7 @@ msgid "Flip cut plane" msgstr "翻轉切割面" msgid "Groove change" -msgstr "" +msgstr "凹槽調整" msgid "Reset" msgstr "重設" @@ -499,12 +502,12 @@ 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[0] "有 %1$d 個連接件超出切割範圍" #, 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連接件在物件外" +msgstr[0] "有 %1$d 個連接件不在物體範圍內" msgid "Some connectors are overlapped" msgstr "存在連接件相互重疊" @@ -516,7 +519,7 @@ msgid "Cut plane is placed out of object" msgstr "切割面在物件外" msgid "Cut plane with groove is invalid" -msgstr "" +msgstr "帶有凹槽的切割平面無效" msgid "Connector" msgstr "連接件" @@ -537,7 +540,7 @@ msgid "Delete connector" msgstr "刪除連接件" msgid "Mesh name" -msgstr "Mesh名" +msgstr "Mesh 名稱" msgid "Detail level" msgstr "細節等級" @@ -545,11 +548,12 @@ msgstr "細節等級" msgid "Decimate ratio" msgstr "簡化率" -#, boost-format +#, possible-boost-format msgid "" "Processing model '%1%' with more than 1M triangles could be slow. It is " "highly recommended to simplify the model." -msgstr "處理超過具有 1M 個三角形的模型 '%1%' 可能會很慢。強烈建議簡化模型。" +msgstr "" +"處理超過具有 1M 個三角形的模型 '%1%' 可能會很慢。強烈建議簡化模型。" msgid "Simplify model" msgstr "簡化模型" @@ -578,14 +582,14 @@ msgstr "低" msgid "Extra low" msgstr "非常低" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "%d triangles" msgstr "%d 個三角形" msgid "Show wireframe" msgstr "顯示線框" -#, boost-format +#, possible-boost-format msgid "%1%" msgstr "%1%" @@ -607,28 +611,26 @@ msgstr "筆刷尺寸" msgid "Brush shape" msgstr "筆刷形狀" -#, fuzzy msgid "Enforce seam" -msgstr "新增Z縫產生區" +msgstr "新增 Z 縫產生區" -#, fuzzy msgid "Block seam" -msgstr "不產生Z縫區" +msgstr "不產生 Z 縫區" msgid "Seam painting" -msgstr "Z縫筆刷" +msgstr "Z 縫筆刷" msgid "Remove selection" msgstr "移除繪製" msgid "Entering Seam painting" -msgstr "" +msgstr "進入 Z 縫繪製模式" msgid "Leaving Seam painting" -msgstr "" +msgstr "退出 Z 縫繪製模式" msgid "Paint-on seam editing" -msgstr "" +msgstr "Z 縫筆刷編輯" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -682,13 +684,13 @@ msgid "Embossed text" msgstr "浮雕文字" msgid "Enter emboss gizmo" -msgstr "" +msgstr "進入浮雕工具" msgid "Leave emboss gizmo" -msgstr "" +msgstr "退出浮雕工具" msgid "Embossing actions" -msgstr "" +msgstr "浮雕操作" msgid "Emboss" msgstr "浮雕" @@ -703,13 +705,13 @@ msgid "ITALIC" msgstr "斜體" msgid "SWISS" -msgstr "" +msgstr "SWISS" msgid "MODERN" -msgstr "" +msgstr "MODERN" msgid "First font" -msgstr "" +msgstr "First font" msgid "Default font" msgstr "預設字型" @@ -720,7 +722,8 @@ msgstr "高級" msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." -msgstr "文字與字型不相容,請選擇其他的字型" +msgstr "" +"文字與字型不相容,請選擇其他的字型。" msgid "Embossed text cannot contain only white spaces." msgstr "浮雕文字不能僅包含空白字元。" @@ -728,29 +731,28 @@ msgstr "浮雕文字不能僅包含空白字元。" msgid "Text contains character glyph (represented by '?') unknown by font." msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" - msgid "Text input doesn't show font skew." -msgstr "" +msgstr "文字輸入未呈現字體的傾斜效果。" msgid "Text input doesn't show font boldness." -msgstr "" +msgstr "文字輸入呈現示字體的粗體效果。" msgid "Text input doesn't show gap between lines." -msgstr "" +msgstr "文字輸入未呈現行距效果。" msgid "Too tall, diminished font height inside text input." -msgstr "" +msgstr "過高,已縮小文字輸入框內的字體高度。" msgid "Too small, enlarged font height inside text input." -msgstr "" +msgstr "太小,已增大文字輸入框內的字體高度。" msgid "Text doesn't show current horizontal alignment." -msgstr "" +msgstr "文字未呈現當前的水平對齊狀態。" msgid "Revert font changes." -msgstr "" +msgstr "還原字體設定變更。" -#, boost-format +#, possible-boost-format msgid "Font \"%1%\" can't be selected." msgstr "字型 \"%1%\" 無法選擇。" @@ -777,102 +779,104 @@ msgid "Modifier" msgstr "修改器" msgid "Click to change part type into modifier." -msgstr "點擊將零件類型變更為修改器" +msgstr "點擊將零件類型變更為修改器。" msgid "Change Text Type" msgstr "更改文字類型" -#, boost-format +#, possible-boost-format msgid "Rename style(%1%) for embossing text" msgstr "重新命名浮雕文字樣式 (%1%)" - msgid "Name can't be empty." -msgstr "名稱不可空白" +msgstr "名稱不可空白。" msgid "Name has to be unique." -msgstr "名稱必須是獨特的" +msgstr "名稱必須是獨特的。" msgid "OK" msgstr "確認" msgid "Rename style" -msgstr "" +msgstr "更改樣式名稱" msgid "Rename current style." -msgstr "" +msgstr "更改目前樣式名稱。" msgid "Can't rename temporary style." -msgstr "" +msgstr "無法更改臨時樣式名稱。" msgid "First Add style to list." -msgstr "" +msgstr "首先將樣式添加到列表中。" -#, boost-format +#, possible-boost-format msgid "Save %1% style" -msgstr "" +msgstr "儲存 %1% 的樣式" msgid "No changes to save." -msgstr "" +msgstr "無需保存,因為沒有變更。" msgid "New name of style" -msgstr "" +msgstr "新樣式名稱" msgid "Save as new style" -msgstr "" +msgstr "儲存為新的樣式" msgid "Only valid font can be added to style." -msgstr "" +msgstr "只有有效字體才能加入樣式。" msgid "Add style to my list." -msgstr "" +msgstr "把樣式加入我的列表。" msgid "Save as new style." -msgstr "" +msgstr "儲存為全新的樣式。" msgid "Remove style" -msgstr "" +msgstr "刪除樣式" msgid "Can't remove the last existing style." -msgstr "" +msgstr "無法刪除僅存的樣式。" -#, boost-format +#, possible-boost-format msgid "Are you sure you want to permanently remove the \"%1%\" style?" -msgstr "" +msgstr "你確定要永久移除「%1%」樣式嗎?" -#, boost-format +#, possible-boost-format msgid "Delete \"%1%\" style." -msgstr "" +msgstr "刪除「%1%」樣式。" -#, boost-format +#, possible-boost-format msgid "Can't delete \"%1%\". It is last style." -msgstr "" +msgstr "無法刪除「%1%」,因為它是僅存的樣式。" -#, boost-format +#, possible-boost-format msgid "Can't delete temporary style \"%1%\"." -msgstr "" +msgstr "無法刪除臨時樣式「%1%」。" -#, boost-format +#, possible-boost-format msgid "Modified style \"%1%\"" -msgstr "" +msgstr "已修改樣式「%1%」" -#, boost-format +#, possible-boost-format msgid "Current style is \"%1%\"" -msgstr "" +msgstr "當前樣式為「%1%」" -#, boost-format +#, possible-boost-format msgid "" "Changing style to \"%1%\" will discard current style modification.\n" "\n" "Would you like to continue anyway?" msgstr "" +"將樣式更改為「%1%」會捨棄當前的樣式修改。\n" +"\n" +"你確定要繼續嗎?" msgid "Not valid style." -msgstr "" +msgstr "無效的樣式。" -#, boost-format +#, possible-boost-format msgid "Style \"%1%\" can't be used and will be removed from a list." -msgstr "" +msgstr "樣式「%1%」無法使用,將從列表中移除。" msgid "Unset italic" msgstr "取消斜體" @@ -887,10 +891,10 @@ msgid "Set bold" msgstr "粗體" msgid "Revert text size." -msgstr "恢復文字大小" +msgstr "恢復文字大小。" msgid "Revert embossed depth." -msgstr "恢復浮雕深度" +msgstr "恢復浮雕深度。" msgid "" "Advanced options cannot be changed for the selected font.\n" @@ -900,16 +904,16 @@ msgstr "" "請選擇其他字型。" msgid "Revert using of model surface." -msgstr "" +msgstr "還原模型表面的應用設定。" msgid "Revert Transformation per glyph." -msgstr "" +msgstr "重置每個字形的變更設定。" msgid "Set global orientation for whole text." -msgstr "" +msgstr "設定整段文字的全域座標。" msgid "Set position and orientation per glyph." -msgstr "" +msgstr "設定每個字形的位置和方向。" msgctxt "Alignment" msgid "Left" @@ -936,11 +940,11 @@ msgid "Bottom" msgstr "底部" msgid "Revert alignment." -msgstr "恢復對齊" +msgstr "恢復對。" #. TRN EmbossGizmo: font units msgid "points" -msgstr "pt" +msgstr "點" msgid "Revert gap between characters" msgstr "恢復字元間距" @@ -958,25 +962,25 @@ msgid "Undo boldness" msgstr "恢復粗體" msgid "Tiny / Wide glyphs" -msgstr "" +msgstr "細小 / 寬大字形」" msgid "Undo letter's skew" msgstr "恢復文字變形" msgid "Italic strength ratio" -msgstr "" +msgstr "斜體效果的強度比例" msgid "Undo translation" msgstr "恢復移動" msgid "Distance of the center of the text to the model surface." -msgstr "文字中心到模型表面的距離" +msgstr "文字中心到模型表面的距離。" msgid "Undo rotation" msgstr "恢復旋轉" msgid "Rotate text Clock-wise." -msgstr "文字順時針旋轉" +msgstr "文字順時針旋轉。" msgid "Unlock the text's rotation when moving text along the object's surface." msgstr "在沿物體表面移動文字時解鎖文字旋轉。" @@ -993,16 +997,15 @@ msgstr "將文字面對相機" msgid "Orient the text towards the camera." msgstr "將文字朝向相機定向。" -#, boost-format +#, possible-boost-format msgid "" "Can't load exactly same font(\"%1%\"). Application selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" -"無法載入完全相同的字型(\"%1%\")。應用程式選擇了相似的字型(\"%2%\")。必須" -"指定字型才能啟用文字編輯。" +"無法加載完全相同的字體 (\"%1%\")。已自動選擇相似的字體 (\"%2%\")。若要啟用文字編輯,請指定字體。" msgid "No symbol" -msgstr "" +msgstr "沒有任何字符" msgid "Loading" msgstr "載入中" @@ -1042,12 +1045,12 @@ msgstr "行間距" #. TRN - Input label. Be short as possible msgid "Boldness" -msgstr "" +msgstr "粗細" #. TRN - Input label. Be short as possible #. Like Font italic msgid "Skew ratio" -msgstr "" +msgstr "傾斜比率" #. TRN - Input label. Be short as possible #. Distance from model surface to be able @@ -1060,39 +1063,39 @@ 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 "" +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 "" +msgstr "字集" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "SVG旋轉" +msgstr "SVG 旋轉" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "SVG移動" +msgstr "SVG 移動" msgid "Enter SVG gizmo" -msgstr "" +msgstr "進入 SVG 工具" msgid "Leave SVG gizmo" -msgstr "" +msgstr "退出 SVG 工具" msgid "SVG actions" -msgstr "" +msgstr "SVG 操作" msgid "SVG" -msgstr "" +msgstr "SVG" -#, boost-format +#, possible-boost-format msgid "Opacity (%1%)" msgstr "不透明度 (%1%)" -#, boost-format +#, possible-boost-format msgid "Color gradient (%1%)" msgstr "顏色漸層 (%1%)" @@ -1106,35 +1109,36 @@ msgid "Radial gradient" msgstr "徑向漸層" msgid "Open filled path" -msgstr "" +msgstr "打開填充路徑" msgid "Undefined stroke type" -msgstr "" +msgstr "未定義的筆劃類型" msgid "Path can't be healed from self-intersection and multiple points." -msgstr "" +msgstr "無法修復具有自交錯和多點的路徑。" msgid "" "Final shape contains self-intersection or multiple points with same " "coordinate." -msgstr "最終形狀包含自相交或多個具有相同座標的點。" +msgstr "" +"最終形狀包含自相交或多個具有相同座標的點。" -#, boost-format +#, possible-boost-format msgid "Shape is marked as invisible (%1%)." msgstr "形狀被標記為隱形 (%1%)。" #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. -#, boost-format +#, possible-boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "形狀 (%1%) 的填充包含不支援的內容:%2%。" -#, boost-format +#, possible-boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "" +msgstr "形狀 (%1%) 的筆劃過細(最小寬度為 %2% 毫米)" -#, boost-format +#, possible-boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "形狀 (%1%) 的筆劃包含不支援的內容:%2%。" msgid "Face the camera" msgstr "面向相機" @@ -1143,7 +1147,7 @@ msgstr "面向相機" msgid "Unknown filename" msgstr "未知的檔案名稱" -#, boost-format +#, possible-boost-format msgid "SVG file path is \"%1%\"" msgstr "SVG 檔案路徑為 \"%1%\"" @@ -1163,14 +1167,16 @@ msgid "" "Do NOT save local path to 3MF file.\n" "Also disables 'reload from disk' option." msgstr "" +"不要將本地路徑保存到 3MF 文件中。\n" +"同時禁用「從磁碟重新載入」選項。" #. TRN: An menu option to convert the SVG into an unmodifiable model part. msgid "Bake" -msgstr "" +msgstr "固化" #. TRN: Tooltip for the menu item. msgid "Bake into model as uneditable part" -msgstr "" +msgstr "固化至模型中作為不可編輯部分" msgid "Save as" msgstr "儲存為" @@ -1182,18 +1188,18 @@ msgid "Save as '.svg' file" msgstr "儲存為 '.svg' 檔案" msgid "Size in emboss direction." -msgstr "" +msgstr "浮雕方向的尺寸。" #. TRN: The placeholder contains a number. -#, boost-format +#, possible-boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "" +msgstr "縮放同時會改變曲線取樣數量(%1%)。" msgid "Width of SVG." -msgstr "SVG寬" +msgstr "SVG 寬。" msgid "Height of SVG." -msgstr "SVG高" +msgstr "SVG 高。" msgid "Lock/unlock the aspect ratio of the SVG." msgstr "鎖定/解鎖 SVG 的長寬比。" @@ -1205,13 +1211,13 @@ msgid "Distance of the center of the SVG to the model surface." msgstr "SVG 中心到模型表面的距離。" msgid "Reset distance" -msgstr "" +msgstr "重置距離" msgid "Reset rotation" msgstr "重置旋轉" msgid "Lock/unlock rotation angle when dragging above the surface." -msgstr "" +msgstr "拖曳於表面時,鎖定/解鎖旋轉角度。" msgid "Mirror vertically" msgstr "垂直鏡像" @@ -1230,19 +1236,19 @@ msgstr "鏡像" msgid "Choose SVG file for emboss:" msgstr "選擇用於浮雕的 SVG 檔案:" -#, boost-format +#, possible-boost-format msgid "File does NOT exist (%1%)." msgstr "檔案不存在(%1%)。" -#, boost-format +#, possible-boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "副檔名必須為 \".svg\" ,但選擇的是 %1%。" +msgstr "副檔名必須為 \".svg\" ,但選擇的是 %1%" -#, boost-format +#, possible-boost-format msgid "Nano SVG parser can't load from file (%1%)." msgstr "Nano SVG 解析器無法載入文件 (%1%)。" -#, boost-format +#, possible-boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." msgstr "SVG 文件無要浮雕的路徑 (%1%)。" @@ -1280,30 +1286,30 @@ msgid "Delete" msgstr "刪除" msgid "Restart selection" -msgstr "" +msgstr "重新開始選取" msgid "Esc" msgstr "Esc" msgid "Cancel a feature until exit" -msgstr "" +msgstr "在退出前取消功能" msgid "Measure" msgstr "測量" msgid "" "Please confirm explosion ratio = 1,and please select at least one object" -msgstr "" +msgstr "請確認爆炸比例設為 1,並至少選擇一個物件" msgid "Please select at least one object." -msgstr "" +msgstr "請選擇至少一個物件。" msgid "Edit to scale" -msgstr "" +msgstr "編輯比例" msgctxt "Verb" msgid "Scale all" -msgstr "" +msgstr "全部縮放" msgid "None" msgstr "無" @@ -1318,40 +1324,42 @@ msgid "Selection" msgstr "所選項目" msgid " (Moving)" -msgstr "" +msgstr " (移動)" msgid "" "Select 2 faces on objects and \n" " make objects assemble together." -msgstr "" +msgstr "選擇物件上的兩個面,使物件組裝在一起。" msgid "" "Select 2 points or circles on objects and \n" " specify distance between them." -msgstr "" +msgstr "選擇物件上的兩個點或圓,指定它們之間的距離。" msgid "Face" -msgstr "" +msgstr "面" msgid " (Fixed)" -msgstr "" +msgstr " (固定)" msgid "Point" -msgstr "" +msgstr "點" msgid "" "Feature 1 has been reset, \n" "feature 2 has been feature 1" msgstr "" +"特徵 1 已重設,\n" +"特徵 2 已變為特徵 1" msgid "Warning:please select Plane's feature." -msgstr "" +msgstr "警告:請選擇平面的特徵。" msgid "Warning:please select Point's or Circle's feature." -msgstr "" +msgstr "警告:請選擇點或圓的特徵。" msgid "Warning:please select two different mesh." -msgstr "" +msgstr "警告:請選擇兩個不同的網格。" msgid "Copy to clipboard" msgstr "複製到剪貼簿" @@ -1363,31 +1371,31 @@ msgid "Distance" msgstr "距離" msgid "Direct distance" -msgstr "" +msgstr "直接距離" msgid "Distance XYZ" -msgstr "XYZ距離" +msgstr "XYZ 距離" msgid "Parallel" -msgstr "" +msgstr "平行" msgid "Center coincidence" -msgstr "" +msgstr "中心重合" msgid "Featue 1" -msgstr "" +msgstr "特徵 1" msgid "Reverse rotation" -msgstr "" +msgstr "反向旋轉" msgid "Rotate around center:" -msgstr "" +msgstr "圍繞中心旋轉:" msgid "Parallel distance:" -msgstr "" +msgstr "平行距離:" msgid "Flip by Face 2" -msgstr "" +msgstr "通過面 2 翻轉" msgid "Ctrl+" msgstr "Ctrl+" @@ -1398,12 +1406,12 @@ msgstr "通知" msgid "Undefined" msgstr "未定義" -#, boost-format +#, possible-boost-format msgid "%1% was replaced with %2%" msgstr "%1% 已被 %2% 替換" msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "此設定可能是新版本的 Orca Slicer 所產生" +msgstr "此設定可能是新版本的 Orca Slicer 所產生。" msgid "Some values have been replaced. Please check them:" msgstr "部分數值已被更換,請檢查:" @@ -1420,17 +1428,17 @@ msgstr "列印設備" msgid "Configuration package was loaded, but some values were not recognized." msgstr "設定檔已被載入,但部分數值無法識別。" -#, boost-format +#, possible-boost-format msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." -msgstr "設定檔 \"%1%\" 已被載入,但部分數值無法識別。" +msgstr "" +"設定檔 \"%1%\" 已被載入,但部分數值無法識別。" msgid "" "OrcaSlicer will terminate because of running out of memory.It may be a bug. " "It will be appreciated if you report the issue to our team." msgstr "" -"系統記憶體耗盡,Orca Slicer 即將停止並且結束。這可能是個錯誤,希望你可以回報" -"此問題,我們非常感激。" +"系統記憶體耗盡,Orca Slicer 即將停止並且結束。這可能是個錯誤,希望你可以回報此問題,我們非常感激。" msgid "Fatal error" msgstr "致命錯誤" @@ -1439,13 +1447,12 @@ msgid "" "OrcaSlicer will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" -"遇到語系本地化錯誤,Orca Slicer 即將停止並且結束。希望你可以回報發生此問題的" -"具體狀況,我們非常感激。" +"遇到語系本地化錯誤,Orca Slicer 即將停止並且結束。希望你可以回報發生此問題的具體狀況,我們非常感激。" msgid "Critical error" msgstr "嚴重錯誤" -#, boost-format +#, possible-boost-format msgid "OrcaSlicer got an unhandled exception: %1%" msgstr "Orca Slicer 遭遇到一個未處理的例外:%1%" @@ -1470,8 +1477,7 @@ msgid "" "features.\n" "Click Yes to install it now." msgstr "" -"Orca Slicer 需要 Microsoft WebView2 Runtime 才能操作某些功能,請點擊 Yes 進行" -"安裝。" +"Orca Slicer 需要 Microsoft WebView2 Runtime 才能操作某些功能,請點擊 Yes 進行安裝。" msgid "WebView2 Runtime" msgstr "WebView2 Runtime" @@ -1495,7 +1501,7 @@ msgid "Click to download new version in default browser: %s" msgstr "在預設瀏覽器中開啟頁面下載最新版本: %s" msgid "The Orca Slicer needs an upgrade" -msgstr " Orca Slicer 需要進行升級" +msgstr "Orca Slicer 需要進行升級" msgid "This is the newest version." msgstr "已經是最新版本。" @@ -1509,14 +1515,13 @@ msgid "" "Please note, application settings will be lost, but printer profiles will " "not be affected." msgstr "" -"OrcaSlicer 設定檔可能已損壞,無法解析。\n" -"OrcaSlicer 嘗試重新創建設定檔。\n" -"請注意,應用程式設定將會丟失,但機臺設定檔案不會受到影響。" +"OrcaSlicer 的組態檔案可能已損壞,無法解析。\n" +"OrcaSlicer 已嘗試重新創建組態檔案。\n" +"請注意,應用程式設定將會丟失,但機臺組態設定不會受到影響。" msgid "Rebuild" msgstr "重新建構" -#, fuzzy msgid "Loading current presets" msgstr "載入目前預設" @@ -1544,7 +1549,8 @@ msgstr "部分預設已被修改。" msgid "" "You can keep the modified presets to the new project, discard or save " "changes as new presets." -msgstr "你可以保留尚未儲存修改的預設應用到新項目中,或者選擇忽略。" +msgstr "" +"你可以保留尚未儲存修改的預設應用到新項目中,或者選擇忽略。" msgid "User logged out" msgstr "使用者登出" @@ -1558,7 +1564,8 @@ msgstr "打開專案項目" msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " "version before it can be used normally" -msgstr " Orca Slicer 版本過舊,需要更新到最新版本才能正常使用" +msgstr "" +"Orca Slicer 版本過舊,需要更新到最新版本才能正常使用" msgid "Privacy Policy Update" msgstr "隱私協議更新" @@ -1566,7 +1573,8 @@ 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 "同步用戶預設" @@ -1601,7 +1609,8 @@ msgstr "選擇一個 G-code 檔案:" msgid "" "Could not start URL download. Destination folder is not set. Please choose " "destination folder in Configuration Wizard." -msgstr "無法開始 URL 下載。未設置目標資料夾。請在設定精靈中選擇目標資料夾。" +msgstr "" +"無法開始 URL 下載。未設置目標資料夾。請在設定精靈中選擇目標資料夾。" msgid "Import File" msgstr "匯入檔案" @@ -1619,9 +1628,9 @@ msgid "Rename" msgstr "重新命名" msgid "Orca Slicer GUI initialization failed" -msgstr " Orca Slicer 圖形界面初始化失敗" +msgstr "Orca Slicer 圖形界面初始化失敗" -#, boost-format +#, possible-boost-format msgid "Fatal error, exception caught: %1%" msgstr "致命錯誤,遭遇到異常:%1%" @@ -1767,9 +1776,7 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"這個模型在頂部表面具有文字浮雕效果。為了達到最佳效果,建議將「One Wall " -"Threshold(min_width_top_surface)」設為 0,以便「僅在頂部表面用一層牆壁」能" -"夠最佳運作。\n" +"這個模型在頂部表面具有文字浮雕效果。為了達到最佳效果,建議將「One Wall Threshold(min_width_top_surface)」設為 0,以便「僅在頂部表面用一層牆壁」能夠最佳運作。\n" "是 - 自動更改這些設定\n" "否 - 不為我更改這些設定" @@ -1785,11 +1792,9 @@ msgstr "新增設定" msgid "Change type" msgstr "更改類型" -#, fuzzy msgid "Set as an individual object" msgstr "設定為獨立物件" -#, fuzzy msgid "Set as individual objects" msgstr "設定為獨立物件" @@ -1836,7 +1841,6 @@ msgstr "預設" msgid "Filament %d" msgstr "線材 %d" -#, fuzzy msgid "current" msgstr "目前" @@ -1846,7 +1850,6 @@ msgstr "縮放到列印空間範圍大小" msgid "Scale an object to fit the build volume" msgstr "縮放物件以適應列印空間範圍大小" -#, fuzzy msgid "Flush Options" msgstr "換料沖刷選項" @@ -1883,11 +1886,9 @@ msgstr "組合所選物件為一個多零件物件" msgid "Assemble the selected objects to an object with single part" msgstr "組合所選物件為一個單零件物件" -#, fuzzy msgid "Mesh boolean" msgstr "網格布林操作" -#, fuzzy msgid "Mesh boolean operations including union and subtraction" msgstr "包括併集和差集的網格布林運算" @@ -2009,7 +2010,7 @@ msgid "Center" msgstr "居中" msgid "Drop" -msgstr "" +msgstr "Drop" msgid "Edit Process Settings" msgstr "編輯列印參數" @@ -2036,17 +2037,17 @@ msgid "Name" msgstr "名稱" msgid "Fila." -msgstr "線材" +msgstr "線材。" #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" -msgstr[0] "%1$d 個錯誤被修復" +msgstr[0] "%1$d 個錯誤已修復" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "錯誤:%1$d 非流形邊." +msgstr[0] "%1$d 個非流形邊緣。" msgid "Remaining errors" msgstr "剩餘錯誤" @@ -2054,7 +2055,7 @@ msgstr "剩餘錯誤" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d 非流形邊" +msgstr[0] "%1$d 個非流形邊緣" msgid "Right click the icon to fix model object" msgstr "滑鼠右鍵點擊此圖示修復物件模型" @@ -2065,23 +2066,18 @@ msgstr "滑鼠右鍵點擊此圖示以放棄物件的列印設定" msgid "Click the icon to reset all settings of the object" msgstr "滑鼠左鍵點擊此圖示可重設物件的所有列印設定" -#, fuzzy msgid "Right button click the icon to drop the object printable property" msgstr "滑鼠右鍵點擊此圖示以捨棄物件的可列印屬性" -#, fuzzy msgid "Click the icon to toggle printable property of the object" msgstr "滑鼠左點擊此圖示可切換這個物件的可列印屬性" -#, fuzzy msgid "Click the icon to edit support painting of the object" msgstr "滑鼠左鍵點擊此圖示可編輯這個物件的支撐繪製" -#, fuzzy msgid "Click the icon to edit color painting of the object" msgstr "滑鼠左鍵點擊此圖示可編輯這個物件的顏色繪製" -#, fuzzy msgid "Click the icon to shift this object to the bed" msgstr "滑鼠左鍵點擊這個圖示可將物件移動到列印板上" @@ -2106,7 +2102,8 @@ msgstr "切換到各個物件設定模式以編輯修改器的設定參數。" msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." -msgstr "切換到物件設定模式編輯所選物件的列印參數" +msgstr "" +"切換到物件設定模式編輯所選物件的列印參數。" msgid "Delete connector from object which is a part of cut" msgstr "刪除的連接件屬於切割物件的一部分" @@ -2120,9 +2117,9 @@ msgstr "刪除的負體積屬於切割物件的一部分" msgid "" "To save cut correspondence you can delete all connectors from all related " "objects." -msgstr "為保證切割關係,你可以將所有關聯物件的連接件一起刪除。" +msgstr "" +"為保證切割關係,你可以將所有關聯物件的連接件一起刪除。" -#, fuzzy msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed .\n" @@ -2130,7 +2127,8 @@ msgid "" "To manipulate with solid parts or negative volumes you have to invalidate " "cut information first." msgstr "" -"該行為將破壞切割關係,在此之後將無法保證模型一致性。\n" +"此操作將打破切割對應關係。\n" +"模型一致性可能無法再保證。\n" "\n" "如果要操作子零件或者負體積,需要先解除切割關係。" @@ -2153,7 +2151,7 @@ msgid "Object manipulation" msgstr "物件操作" msgid "Group manipulation" -msgstr "裙組操作" +msgstr "群組操作" msgid "Object Settings to modify" msgstr "要修改的物件設定" @@ -2184,12 +2182,14 @@ msgstr "選擇衝突" msgid "" "If first selected item is an object, the second one should also be object." -msgstr "如果第一個選擇的是物件,那麼第二個選擇的也必須是物件。" +msgstr "" +"如果第一個選擇的是物件,那麼第二個選擇的也必須是物件。" msgid "" "If first selected item is a part, the second one should be part in the same " "object." -msgstr "如果第一個選擇的是零件,那麼第二個選擇的也必須是同一個物件中的零件。" +msgstr "" +"如果第一個選擇的是零件,那麼第二個選擇的也必須是同一個物件中的零件。" msgid "The type of the last solid object part is not to be changed." msgstr "不允許修改物件中最後一個實體零件的類型。" @@ -2250,7 +2250,6 @@ msgstr "一個單元格僅能被複製到同一列的一個或多個單元格" msgid "multiple cells copy is not supported" msgstr "不支援多個單元格的複製" -#, fuzzy msgid "Outside" msgstr "列印板外" @@ -2264,7 +2263,7 @@ msgid "Infill density(%)" msgstr "填充密度(%)" msgid "Auto Brim" -msgstr "自動Brim(裙邊)" +msgstr "自動" msgid "Mouse ear" msgstr "圓盤" @@ -2279,7 +2278,7 @@ msgid "Outer and inner brim" msgstr "內側和外側" msgid "No-brim" -msgstr "無側裙(brim)" +msgstr "無 Brim" msgid "Outer wall speed" msgstr "外牆速度" @@ -2288,7 +2287,7 @@ msgid "Plate" msgstr "列印板" msgid "Brim" -msgstr "側裙(Brim)" +msgstr "Brim" msgid "Object/Part Setting" msgstr "物件/零件 設定" @@ -2306,10 +2305,10 @@ msgid "More" msgstr "詳情" msgid "Open Preferences." -msgstr "偏好設定" +msgstr "偏好設定。" msgid "Open next tip." -msgstr "打開下一條提示" +msgstr "打開下一條提示。" msgid "Open Documentation in web browser." msgstr "在網頁瀏覽器中打開檔案。" @@ -2327,7 +2326,7 @@ msgid "Custom" msgstr "自訂" msgid "Pause:" -msgstr "暫停" +msgstr "暫停:" msgid "Custom Template:" msgstr "自訂模板:" @@ -2395,12 +2394,11 @@ msgstr "..." msgid "Failed to connect to the server" msgstr "無法連接伺服器" -#, fuzzy msgid "Check the status of current system services" msgstr "請檢查目前系統服務狀態" msgid "code" -msgstr "" +msgstr "code" msgid "Failed to connect to cloud service" msgstr "無法連接到雲端服務" @@ -2415,16 +2413,16 @@ msgid "Connection to printer failed" msgstr "連接列印設備失敗" msgid "Please check the network connection of the printer and Orca." -msgstr "請檢查列印設備與 Orca Slicer 的網路連線" +msgstr "請檢查列印設備與 Orca Slicer 的網路連線。" msgid "Connecting..." msgstr "連線中..." msgid "?" -msgstr "" +msgstr "?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "空" @@ -2501,7 +2499,8 @@ msgstr "咬入線材" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filaments." -msgstr "選擇一個 AMS 槽,然後按下「上料」或「退料」按鈕來自動加載或卸載耗材。" +msgstr "" +"選擇一個 AMS 槽,然後按下『上料』或『退料』按鈕來自動加載或卸載耗材。" msgid "Edit" msgstr "編輯" @@ -2510,8 +2509,8 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"所有選中的物件都處於被鎖定的列印板上,\n" -"無法對這些物件做自動擺放。" +"選定的物件都位於鎖定的列印板上,\n" +"無法對其進行自動排列。" msgid "No arrangeable objects are selected." msgstr "未選擇欲排列的物件象。" @@ -2519,7 +2518,7 @@ msgstr "未選擇欲排列的物件象。" msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." -msgstr "該列印板處於鎖定狀態,無法對其進行自動擺放。" +msgstr "該列印板處於鎖定狀態,無法執行自動排列。" msgid "Arranging..." msgstr "自動擺放中..." @@ -2532,16 +2531,18 @@ msgstr "已取消自動擺放。" msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." -msgstr "已完成自動擺放,但是有未被擺到列印板內的物件,可縮小物件間距後再重試。" +msgstr "" +"已完成自動擺放,但是有未被擺到列印板內的物件,可縮小物件間距後再重試。" msgid "Arranging done." msgstr "已完成自動擺放。" msgid "" "Arrange failed. Found some exceptions when processing object geometries." -msgstr "自動擺放失敗,處理物件位置時遇到異常。" +msgstr "" +"自動擺放失敗,處理物件位置時遇到異常。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Arrangement ignored the following objects which can't fit into a single " "bed:\n" @@ -2568,7 +2569,7 @@ msgid "Orienting..." msgstr "自動旋轉方向..." msgid "Orienting" -msgstr "自動旋轉方向..." +msgstr "自動旋轉方向" msgid "Orienting canceled." msgstr "自動轉向已取消。" @@ -2601,7 +2602,7 @@ msgid "Please check the printer network connection." msgstr "請檢查列印設備的網路連線。" msgid "Abnormal print file data. Please slice again." -msgstr "列印檔案資料異常,請重新切片" +msgstr "列印檔案資料異常,請重新切片。" msgid "Task canceled." msgstr "任務已取消。" @@ -2610,7 +2611,7 @@ msgid "Upload task timed out. Please check the network status and try again." msgstr "上傳任務逾時,請排查網路狀態後重試。" msgid "Cloud service connection failed. Please try again." -msgstr "雲端服務連接失敗,請重試" +msgstr "雲端服務連接失敗,請重試。" msgid "Print file not found. please slice again." msgstr "未找到列印檔案,請重新切片。" @@ -2618,7 +2619,8 @@ msgstr "未找到列印檔案,請重新切片。" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " "model and slice again." -msgstr "列印檔案超過最大允許大小(1GB),請簡化模型後重新切片。" +msgstr "" +"列印檔案超過最大允許大小(1GB),請簡化模型後重新切片。" msgid "Failed to send the print job. Please try again." msgstr "無法傳送列印作業,請重試。" @@ -2628,12 +2630,14 @@ msgstr "上傳檔案至 FTP 失敗,請重試。" msgid "" "Check the current status of the bambu server by clicking on the link above." -msgstr "點擊上方的連結檢查 Bambu 伺服器的即時狀態。" +msgstr "" +"點擊上方的連結檢查 Bambu 伺服器的即時狀態。" msgid "" "The size of the print file is too large. Please adjust the file size and try " "again." -msgstr "列印檔案過大,請調整檔案大小後重試。" +msgstr "" +"列印檔案過大,請調整檔案大小後重試。" msgid "Print file not found, Please slice it again and send it for printing." msgstr "未找到列印檔案,請重新切片後再傳送列印。" @@ -2641,7 +2645,8 @@ msgstr "未找到列印檔案,請重新切片後再傳送列印。" msgid "" "Failed to upload print file to FTP. Please check the network status and try " "again." -msgstr "無法將列印檔案上傳至 FTP。請檢查網路狀態並重試。" +msgstr "" +"無法將列印檔案上傳至 FTP。請檢查網路狀態並重試。" msgid "Sending print job over LAN" msgstr "正在通過區域網路傳送列印作業" @@ -2650,13 +2655,13 @@ msgid "Sending print job through cloud service" msgstr "正在通過雲端服務傳送列印作業" msgid "Print task sending times out." -msgstr "連線逾時" +msgstr "連線逾時。" msgid "Service Unavailable" msgstr "暫停服務" msgid "Unknown Error." -msgstr "未知錯誤" +msgstr "未知錯誤。" msgid "Sending print configuration" msgstr "正在傳送列印設定" @@ -2667,7 +2672,7 @@ msgstr "已傳送完成,即將自動轉換到設備頁面(%s秒)" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" -msgstr "已成功傳送。將自動轉換到 %ss 中的下一頁。" +msgstr "已成功傳送。將自動轉換到 %ss 中的下一頁" msgid "An SD card needs to be inserted before printing via LAN." msgstr "透過區域網路列印之前需要插入 SD 記憶卡。" @@ -2692,8 +2697,7 @@ msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 列印設備預" -"設。" +"SLA 存檔不包含任何預設。在匯入該 SLA 存檔之前,請先啟用一些 SLA 列印設備預設。" msgid "Importing canceled." msgstr "匯入已取消。" @@ -2701,11 +2705,11 @@ msgstr "匯入已取消。" msgid "Importing done." msgstr "匯入完成。" -#, fuzzy msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." -msgstr "匯入的 SLA 存檔不包含任何預設。目前的 SLA 預設被用作備用選項。" +msgstr "" +"匯入的 SLA 存檔不包含任何預設。目前的 SLA 預設被用作備用選項。" msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "你無法在列印板上載入包含多部分物件的 SLA 項目" @@ -2744,7 +2748,7 @@ msgid "License" msgstr "憑證" msgid "Orca Slicer is licensed under " -msgstr " Orca Slicer 授權於" +msgstr "Orca Slicer 授權於" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero 通用公共許可證,版本 3" @@ -2753,22 +2757,23 @@ msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "Orca Slicer 基於 PrusaSlicer 與 BambuStudio" msgid "Libraries" -msgstr "庫" +msgstr "Libraries" msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" -msgstr "本軟體使用開源組件,其版權和其他所有權屬於各自的所有者" +msgstr "" +"本軟體採用了開源組件,其版權及相關專有權歸屬於各自的所有者" #, c-format, boost-format msgid "About %s" msgstr "關於 %s" msgid "Orca Slicer" -msgstr "" +msgstr "Orca Slicer" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "Orca Slicer 是基於 BambuStudio, PrusaSlicer, 與 SuperSlicer 的開發" +msgstr "Orca Slicer 是基於 BambuStudio, PrusaSlicer, 與 SuperSlicer 的開發。" msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "BambuStudio 最初是基於 PrusaResearch 的 PrusaSlicer。" @@ -2779,7 +2784,8 @@ msgstr "PrusaSlicer 最初是基於 Alessandro Ranellucci 的 Slic3r。" msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." -msgstr "Slic3r 由 Alessandro Ranellucci 在其他眾多貢獻者的幫助下創建。" +msgstr "" +"Slic3r 由 Alessandro Ranellucci 在其他眾多貢獻者的幫助下創建。" msgid "Version" msgstr "版本" @@ -2799,7 +2805,9 @@ msgstr "顏色" msgid "" "Nozzle\n" "Temperature" -msgstr "噴嘴溫度" +msgstr "" +"噴嘴\n" +"溫度" msgid "max" msgstr "最大" @@ -2807,7 +2815,7 @@ msgstr "最大" msgid "min" msgstr "最小" -#, boost-format +#, possible-boost-format msgid "The input value should be greater than %1% and less than %2%" msgstr "輸入的範圍在 %1% 和 %2% 之間" @@ -2821,7 +2829,7 @@ msgid "Factors of Flow Dynamics Calibration" msgstr "動態流量係數校準" msgid "PA Profile" -msgstr "PA 配置檔" +msgstr "PA 設定檔" msgid "Factor K" msgstr "係數 K" @@ -2860,8 +2868,7 @@ msgid "" "results. Please fill in the same values as the actual printing. They can be " "auto-filled by selecting a filament preset." msgstr "" -"噴嘴溫度和最大體積速度會影響到校準結果,請填寫與實際列印相同的數值。可通過選" -"擇已有的材料預設來自動填寫。" +"噴嘴溫度和最大體積速度會影響到校準結果,請填寫與實際列印相同的數值。可通過選擇已有的材料預設來自動填寫。" msgid "Nozzle Diameter" msgstr "噴嘴直徑" @@ -2879,7 +2886,7 @@ msgid "Max volumetric speed" msgstr "最大體積速度" msgid "℃" -msgstr "" +msgstr "℃" msgid "Bed temperature" msgstr "床溫" @@ -2898,8 +2905,7 @@ msgid "" "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"校準完成。如下圖中的範例,請在你的熱床上找到最均勻完整的擠出線,並將其左側的" -"數值填入係數 K 欄位。" +"校準完成。如下圖中的範例,請在你的熱床上找到最均勻完整的擠出線,並將其左側的數值填入係數 K 欄位。" msgid "Save" msgstr "儲存" @@ -2932,7 +2938,8 @@ msgstr "AMS 槽內線材" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." -msgstr "僅允許選擇放入同種材質線材的 AMS 槽位" +msgstr "" +"注意:僅能選擇裝有相同材料類型的 AMS 插槽。" msgid "Enable AMS" msgstr "使用 AMS" @@ -2955,12 +2962,12 @@ msgid "" "desiccant pack is changed. it take hours to absorb the moisture, low " "temperatures also slow down the process." msgstr "" -"當濕度太高時,請更換乾燥劑。在以下情況濕度指標可能會不準確:開子打開時 或 乾" -"燥劑剛換,乾燥劑需數小時才能有效吸收濕氣低溫也會降低吸收速度" +"當乾燥劑過濕時,請更換乾燥劑。在以下情況下,指示器可能無法準確顯示:當蓋子打開或更換乾燥劑包時。吸收濕氣需要數小時,低溫會進一步減緩此過程。" msgid "" "Config which AMS slot should be used for a filament used in the print job" -msgstr "設定列印作業中所使用的線材應使用哪個 AMS 槽" +msgstr "" +"設定列印作業中所使用的線材應使用哪個 AMS 槽" msgid "Filament used in this print job" msgstr "目前列印作業中使用的線材" @@ -2986,17 +2993,19 @@ msgstr "使用掛在機箱背部的線材列印" msgid "" "When the current material run out, the printer will continue to print in the " "following order." -msgstr "當目前線材用完時,列印設備將按照以下順序繼續列印。" +msgstr "" +"當目前線材用完時,列印設備將按照以下順序繼續列印。" msgid "Group" msgstr "組" msgid "The printer does not currently support auto refill." -msgstr "此列印設備目前不支援自動切換備用線材。" +msgstr "此列印設備目前不支援自動補料功能。" msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." -msgstr "AMS 備用線材自動切換未啟用,請在 AMS 設定中啟用。" +msgstr "" +"AMS 線材備份功能尚未啟用,請在 AMS 設定中開啟。" msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -3023,20 +3032,20 @@ msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"當插入新的 Bambu Lab 官方線材的時候,AMS 會自動讀取線材資訊。這個過程大約需要" -"20秒。" +"當插入新的 Bambu Lab 官方線材的時候,AMS 會自動讀取線材資訊。這個過程大約需要20秒。" msgid "" "Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." -msgstr "備註: 若在列印過程中插入新的線材,AMS會等到列印完成才會讀取線材資訊" +msgstr "" +"備註: 若在列印過程中插入新的線材,AMS會等到列印完成才會讀取線材資訊。" + msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" -"在插入一卷新線材時,AMS 將不會自動讀取線材資訊,預留一個空的線材資訊等待你手" -"動輸入。" +"在插入一卷新線材時,AMS 將不會自動讀取線材資訊,預留一個空的線材資訊等待你手動輸入。" msgid "Power on update" msgstr "開機時偵測" @@ -3045,15 +3054,14 @@ msgid "" "The AMS will automatically read the information of inserted filament on " "start-up. It will take about 1 minute.The reading process will roll filament " "spools." -msgstr "" -"每次開機時,AMS 將會自動讀取有插入的線材資訊(讀取過程會轉動線卷)。需要花費" -"大約1分鐘。" +msgstr """每次開機時,AMS 將會自動讀取有插入的線材資訊(讀取過程會轉動線卷)。需要花費大約1分鐘。" msgid "" "The AMS will not automatically read information from inserted filament " "during startup and will continue to use the information recorded before the " "last shutdown." -msgstr "AMS 不會在啟動時自動讀取線材資訊。它會使用上次關機前記錄的資訊。" +msgstr "" +"AMS 不會在啟動時自動讀取線材資訊。它會使用上次關機前記錄的資訊。" msgid "Update remaining capacity" msgstr "更新線材剩餘量" @@ -3063,17 +3071,16 @@ msgid "" "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"AMS 讀取 Bambu Lab 官方線材資訊同時預估線材卷的剩餘線材量。在列印過程中,剩餘" -"線材量會自動更新。" +"AMS 會在耗材資訊更新後估算 Bambu 耗材的剩餘量,並在列印時自動更新剩餘容量。" -#, fuzzy msgid "AMS filament backup" msgstr "AMS 備用線材" msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" -msgstr "AMS 線材耗盡後將自動切換到屬性完全相同的線材" +msgstr "" +"AMS 線材耗盡後將自動切換到屬性完全相同的線材" msgid "Air Printing Detection" msgstr "偵測到憑空列印" @@ -3081,7 +3088,8 @@ msgstr "偵測到憑空列印" msgid "" "Detects clogging and filament grinding, halting printing immediately to " "conserve time and filament." -msgstr "偵測到卡料,已暫停列印來節省時間與線材" +msgstr "" +"偵測到卡料,已暫停列印來節省時間與線材。" msgid "File" msgstr "檔案" @@ -3092,12 +3100,14 @@ msgstr "校準" msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." -msgstr "插件下載失敗。請檢查你的防火牆設定和 VPN 軟體,檢查後重試。" +msgstr "" +"插件下載失敗。請檢查你的防火牆設定和 VPN 軟體,檢查後重試。" msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." -msgstr "插件安裝失敗。請檢查是否被防毒軟體阻擋或刪除。" +msgstr "" +"插件安裝失敗。請檢查是否被防毒軟體阻擋或刪除。" msgid "click here to see more info" msgstr "點擊這裡查看更多資訊" @@ -3109,6 +3119,7 @@ msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" +")來定位工具頭的位置,這可防止設備移動超出可列印範圍,並避免設備磨損。" msgid "Go Home" msgstr "回原點" @@ -3116,7 +3127,8 @@ msgstr "回原點" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" -msgstr "發生錯誤。可能系統記憶體不足或者程式存在錯誤。" +msgstr "" +"發生錯誤。可能系統記憶體不足或者程式存在錯誤" msgid "Please save project and restart the program. " msgstr "請儲存專案項目並重啟程式。" @@ -3157,7 +3169,7 @@ msgstr "完成執行後處理腳本" msgid "Unknown error occurred during exporting G-code." msgstr "匯出 G-code 期間發生未知錯誤。" -#, boost-format +#, possible-boost-format msgid "" "Copying of the temporary G-code to the output G-code failed. Maybe the SD " "card is write locked?\n" @@ -3166,47 +3178,42 @@ msgstr "" "將臨時的 G-code 複製到輸出的 G-code 失敗 ,也許 SD 卡寫入被鎖定?\n" "錯誤訊息:%1%" -#, boost-format +#, possible-boost-format msgid "" "Copying of the temporary G-code to the output G-code failed. There might be " "problem with target device, please try exporting again or using different " "device. The corrupted output G-code is at %1%.tmp." msgstr "" -"將臨時 G-code 複製到輸出 G-code 時失敗。目標設備可能存在問題,請嘗試再次匯出" -"或使用不同的設備。損壞的G-code 已輸出為%1%.tmp。" +"將臨時 G-code 複製到輸出 G-code 時失敗。目標設備可能存在問題,請嘗試再次匯出或使用不同的設備。損壞的 G-code 已輸出為 %1%.tmp。" -#, boost-format +#, possible-boost-format msgid "" "Renaming of the G-code after copying to the selected destination folder has " "failed. Current path is %1%.tmp. Please try exporting again." msgstr "" -"複製到選取之目標檔案夾的 G-code 重命名失敗。目前路徑為%1%.tmp。請再試看看匯" -"出。" +"複製到選取之目標檔案夾的 G-code 重命名失敗。目前路徑為 %1%.tmp。請再試看看匯出。" -#, boost-format +#, possible-boost-format msgid "" "Copying of the temporary G-code has finished but the original code at %1% " "couldn't be opened during copy check. The output G-code is at %2%.tmp." -msgstr "" -"臨時 G-code 的 複製已完成,但原始 G-code 因%1%在複製檢查期間無法打開。輸出 G-" -"code 為%2%.tmp。" +msgstr """臨時 G-code 的 複製已完成,但原始 G-code 因 %1% 在複製檢查期間無法打開。輸出 G-code 為%2%.tmp。" -#, boost-format +#, possible-boost-format msgid "" "Copying of the temporary G-code has finished but the exported code couldn't " "be opened during copy check. The output G-code is at %1%.tmp." msgstr "" -"臨時 G-code 的複制已完成,但匯出的 G-code 無法在復製檢查過程中打開。輸出 G-" -"code 為%1%.tmp。" +"臨時 G-code 的複制已完成,但匯出的 G-code 無法在復製檢查過程中打開。輸出 G-code 為 %1%.tmp。" -#, boost-format +#, possible-boost-format msgid "G-code file exported to %1%" msgstr "G-code 檔案已匯出為 %1%" msgid "Unknown error when export G-code." msgstr "匯出 G-code 檔案發生未知錯誤。" -#, boost-format +#, possible-boost-format msgid "" "Failed to save gcode file.\n" "Error message: %1%.\n" @@ -3219,7 +3226,7 @@ msgstr "" msgid "Copying of the temporary G-code to the output G-code failed" msgstr "將臨時 G-Code 複製到輸出 G-Code 失敗" -#, boost-format +#, possible-boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "計劃上傳到 `%1%`。請參閱視窗-> 列印設備上傳佇列" @@ -3271,11 +3278,12 @@ msgid "Device Status" msgstr "機台狀態" msgid "Actions" -msgstr "" +msgstr "操作" msgid "" "Please select the devices you would like to manage here (up to 6 devices)" -msgstr "請選擇要管理的設備(最多6台)" +msgstr "" +"請選擇要管理的設備(最多6台)" msgid "Add" msgstr "新增" @@ -3368,10 +3376,10 @@ msgid "Abnormal print file data. Please slice again" msgstr "列印檔案資料異常,請重新切片" msgid "There is no device available to send printing." -msgstr "沒有可用的機臺可以傳送列印" +msgstr "沒有可用的機臺可以傳送列印。" msgid "The number of printers in use simultaneously cannot be equal to 0." -msgstr "" +msgstr "同時使用的列印機數量不能為 0。" msgid "Use External Spool" msgstr "使用外掛線盤" @@ -3395,7 +3403,7 @@ msgid "Timelapse" msgstr "縮時攝影" msgid "Flow Dynamic Calibration" -msgstr "" +msgstr "動態流量校準" msgid "Send Options" msgstr "傳送選項" @@ -3407,13 +3415,14 @@ msgid "" "printers at the same time.(It depends on how many devices can undergo " "heating at the same time.)" msgstr "" +"可同時運行的列印機數量。(取決於能同時加熱的設備數量而定。)" msgid "Wait" msgstr "等待" msgid "" "minute each batch.(It depends on how long it takes to complete the heating.)" -msgstr "" +msgstr """每批次需要的分鐘數。(具體取決於加熱完成所需的時間。)" msgid "Send" msgstr "傳送" @@ -3448,12 +3457,14 @@ msgstr "矩形框在 X 和 Y 方向的尺寸。" msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." -msgstr "G-code 0,0 坐標相對於矩形框左前角的距離。" +msgstr "" +"G-code 0,0 座標相對於矩形框左前角的距離。" msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" +"列印平臺的直徑,假設原點 (0,0) 位於中央位置。" msgid "Rectangular" msgstr "矩形" @@ -3493,7 +3504,8 @@ msgstr "所選檔案不包含任何幾何數據。" msgid "" "The selected file contains several disjoint areas. This is not supported." -msgstr "所選檔案包含多個未連接的區域。不支援這種類型。" +msgstr "" +"所選檔案包含多個未連接的區域。不支援這種類型。" msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "選擇(PNG/SVG)檔案作為熱床紋理:" @@ -3507,12 +3519,14 @@ msgstr "熱床形狀" msgid "" "The recommended minimum temperature is less than 190 degree or the " "recommended maximum temperature is greater than 300 degree.\n" -msgstr "推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n" +msgstr "" +"推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " "maximum temperature.\n" -msgstr "推薦的最小溫度不能高於推薦的最大溫度。\n" +msgstr "" +"推薦的最小溫度不能高於推薦的最大溫度。\n" msgid "Please check.\n" msgstr "請檢查。\n" @@ -3526,11 +3540,12 @@ msgstr "" "請確認是否使用該溫度列印\n" "\n" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" -msgstr "該線材的推薦噴嘴溫度是攝氏[%d, %d]度" +msgstr "" +"該線材的推薦噴嘴溫度是攝氏 [%d, %d] 度" msgid "" "Too small max volumetric speed.\n" @@ -3539,29 +3554,26 @@ msgstr "" "最大體積速度設定過小\n" "重設為 0.5" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Current chamber temperature is higher than the material's safe " "temperature,it may result in material softening and clogging.The maximum " "safe temperature for the material is %d" -msgstr "" -"目前列印設備內部溫度高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高" -"安全溫度為:%d" +msgstr "目前列印設備內部溫度高於線材的安全溫度,可能會導致線材軟化和堵塞。線材的最高安全溫度為:%d" msgid "" "Too small layer height.\n" "Reset to 0.2" msgstr "" "層高過小。\n" -"將重設為 0.2。" +"將重設為 0.2" -#, fuzzy msgid "" "Too small ironing spacing.\n" "Reset to 0.1" msgstr "" "熨燙線距過小。\n" -"將重設為 0.1。" +"將重設為 0.1" msgid "" "Zero initial layer height is invalid.\n" @@ -3571,7 +3583,6 @@ msgstr "" "0為無效的首層層高值。\n" "將被重設為0.2。" -#, fuzzy msgid "" "This setting is only used for model size tunning with small value in some " "cases.\n" @@ -3580,13 +3591,12 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"這個設定僅用於在特定場景下微調模型尺寸。\n" -"例如,當模型尺寸誤差較小,難以組裝。\n" -"對於大尺寸的調整,請使用模型縮放功能。\n" -"\n" -"這個數值將被重設為 0。" +"此設定僅用於在特定情況下對模型尺寸進行微調。\n" +"例如,當模型尺寸存在輕微誤差且難以組裝時。\n" +"如需大幅調整尺寸,請使用模型縮放功能\n" +"。\n" +"該值將會重置為 0。" -#, fuzzy msgid "" "Too large elephant foot compensation is unreasonable.\n" "If really have serious elephant foot effect, please check other settings.\n" @@ -3594,16 +3604,16 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"過大的象腳補償是不合理的。\n" -"如果確實有嚴重的象腳效應,請檢查其他設定。\n" -"例如,是否設定了過高的床溫。\n" +"象腳補償設置過大是不合理的。如果確實有嚴重的象腳效應,請檢查其他設置。\n" +"例如,檢查床溫是否設定過高。\n" "\n" -"這個數值將被重設為 0。" +"該值將會重置為 0。" msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " -msgstr "當確保垂直外殼厚度設為「全部」時,交錯額外牆壁效果不佳。" +msgstr "" +"當確保垂直外殼厚度設為『全部』時,交錯額外牆壁效果不佳。" msgid "" "Change these settings automatically? \n" @@ -3611,6 +3621,7 @@ msgid "" "alternate extra wall\n" "No - Don't use alternate extra wall" msgstr "" + "是否自動更改這些設定?\n" "是 - 將確保垂直外殼厚度設為中等並啟用交錯額外牆壁\n" "否 - 不使用交錯額外牆壁" @@ -3660,11 +3671,10 @@ 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 結構機型將不產生縮時攝影。" +msgstr " 但採用 I3 結構的機器無法生成延時影片。" msgid "" "Change these settings automatically? \n" @@ -3769,10 +3779,10 @@ msgid "Motor noise showoff" msgstr "電機噪音" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "檢測到噴嘴被耗材覆蓋,暫停列印" msgid "Cutter error pause" -msgstr "" +msgstr "刀具錯誤,暫停列印" msgid "First layer error pause" msgstr "第一層錯誤暫停" @@ -3809,27 +3819,29 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"當前或目標機箱溫度超過 45℃。為避免擠出機堵塞,不允許裝載低溫耗材(PLA/PETG/TPU)。" msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"擠出機中已裝載低溫耗材(PLA/PETG/TPU)。為避免擠出機堵塞,機箱溫度不可設定超過 45℃。" msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" -"當你設定的設備內部溫度低於 40℃ 時,內部溫度控制將不會啟動。 且目標溫度將自動" -"設定為 0℃。" +"當機箱溫度設置低於 40℃時,機箱溫度控制將不會啟動,並且目標機箱溫度將自動設為 0℃。" msgid "Failed to start printing job" msgstr "無法啟動列印作業" msgid "" "This calibration does not support the currently selected nozzle diameter" -msgstr "校準不支援目前選擇的噴嘴直徑" +msgstr "" +"校準不支援目前選擇的噴嘴直徑" msgid "Current flowrate cali param is invalid" msgstr "目前流量校準參數無效" @@ -3852,17 +3864,19 @@ msgstr "AMS 不支援 Bambu PET-CF/PA6-CF。" msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." -msgstr "潮濕的 PVA 會變得柔軟並黏在 AMS 內,請在使用前注意乾燥。" +msgstr "" +"潮濕的 PVA 會變得柔軟並黏在 AMS 內,請在使用前注意乾燥。" msgid "" "CF/GF filaments are hard and brittle, It's easy to break or get stuck in " "AMS, please use with caution." -msgstr "含 CF/GF 線材又硬又脆,在 AMS 中很容易斷裂或卡住,請謹慎使用。" +msgstr "" +"含 CF/GF 線材又硬又脆,在 AMS 中很容易斷裂或卡住,請謹慎使用。" msgid "default" msgstr "預設" -#, boost-format +#, possible-boost-format msgid "Edit Custom G-code (%1%)" msgstr "編輯自訂 GOCDE(%1%)" @@ -3905,9 +3919,9 @@ msgstr "溫度" msgid "Timestamps" msgstr "時間戳記" -#, boost-format +#, possible-boost-format msgid "Specific for %1%" -msgstr "" +msgstr "特定於 %1%" msgid "Presets" msgstr "預設" @@ -3933,7 +3947,7 @@ msgstr "%s 不可以是百分比" #, c-format, boost-format msgid "Value %s is out of range, continue?" -msgstr "值 %s 超出範圍,是否繼續?" +msgstr "數值 %s 超出範圍,是否繼續?" msgid "Parameter validation" msgstr "參數驗證" @@ -3943,7 +3957,7 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "數值 %s 超出範圍。有效範圍是從 %d 到 %d。" msgid "Value is out of range." -msgstr "值超出範圍。" +msgstr "數值超出範圍。" #, c-format, boost-format msgid "" @@ -3951,25 +3965,26 @@ msgid "" "YES for %s%%, \n" "NO for %s %s." msgstr "" -"%s%% 還是 %s %s?\n" -"是:%s%%\n" -"否:%s %s" +"是 %s%% 還是 %s %s?\n" +"選『是』代表 %s%%,\n" +"選『否』代表 %s %s。" -#, boost-format +#, possible-boost-format msgid "" "Invalid input format. Expected vector of dimensions in the following format: " "\"%1%\"" -msgstr "輸入格式無效。預期向量應使用以下格式:\"%1%\"" +msgstr "" +"輸入格式無效。預期的向量尺寸格式應為:「%1%」" msgid "Input value is out of range" msgstr "輸入值超出範圍" msgid "Some extension in the input is invalid" -msgstr "輸入的副檔名無效。" +msgstr "輸入的副檔名無效" -#, boost-format +#, possible-boost-format msgid "Invalid format. Expected vector format: \"%1%\"" -msgstr "無效格式,應該是 \"%1%\" 這種格式" +msgstr "無效格式,應該是「%1%」這種格式" msgid "Layer Height" msgstr "層高" @@ -3992,7 +4007,6 @@ msgstr "工具" msgid "Layer Time" msgstr "層時間" -#, fuzzy msgid "Layer Time (log)" msgstr "層時間(對數)" @@ -4032,7 +4046,6 @@ msgstr "所有列印板數據" msgid "Display" msgstr "顯示" -#, fuzzy msgid "Flushed" msgstr "廢料" @@ -4133,10 +4146,10 @@ msgid "Printer" msgstr "列印設備" msgid "Custom g-code" -msgstr "" +msgstr "自定義 g-code" msgid "ToolChange" -msgstr "" +msgstr "ToolChange" msgid "Time Estimation" msgstr "時間預估" @@ -4268,9 +4281,8 @@ msgstr "自動定向" msgid "Arrange all objects" msgstr "全域整理" -#, fuzzy msgid "Arrange objects on selected plates" -msgstr "單一列印板整理" +msgstr "在選定的列印板上排列物件" msgid "Split to objects" msgstr "拆分為物件" @@ -4314,13 +4326,12 @@ msgstr "體積:" msgid "Size:" msgstr "尺寸:" -#, boost-format +#, possible-boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." msgstr "" -"發現 gcode 路徑在 %d 層,高為 %.2lf mm處的衝突。請將有衝突的物件分離得更遠" -"(%s <-> %s)。" +"發現 gcode 路徑在 %d 層,高為 %.2lf mm 處的衝突。請將有衝突的物件分離得更遠(%s <-> %s)。" msgid "An object is layed over the boundary of plate." msgstr "偵測到有物件放在列印板的邊界上。" @@ -4365,8 +4376,8 @@ msgid "" "minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"校準程序會自動偵測設備以最小化設備誤差。\n" -"它可以讓設備保持最佳性能。" +"校準程序會自動檢測設備狀態以最小化偏差。\n" +"它確保設備保持最佳性能。" msgid "Calibration Flow" msgstr "校準流程" @@ -4390,7 +4401,7 @@ msgid "Go Live" msgstr "開啟直播" msgid "Liveview Retry" -msgstr "" +msgstr "重新嘗試 Liveview" msgid "Resolution" msgstr "解析度" @@ -4405,7 +4416,7 @@ msgid "Custom camera source" msgstr "自訂相機來源" msgid "Show \"Live Video\" guide page." -msgstr "顯示\"直播影片\"引導" +msgstr "顯示\"直播影片\"引導。" msgid "720p" msgstr "720p" @@ -4427,7 +4438,7 @@ msgstr "" "查看,如下圖所示:" msgid "Invalid input." -msgstr "輸入無效" +msgstr "輸入無效。" msgid "New Window" msgstr "新視窗" @@ -4576,7 +4587,6 @@ msgstr "最近的專案項目" msgid "Save Project" msgstr "儲存專案項目" -#, fuzzy msgid "Save current project to file" msgstr "儲存目前專案項目到檔案" @@ -4637,7 +4647,6 @@ msgstr "匯出目前列印板的 G-code" msgid "Export Preset Bundle" msgstr "匯出設定檔組" -#, fuzzy msgid "Export current configuration to files" msgstr "匯出目前選擇的設定檔" @@ -4671,7 +4680,6 @@ msgstr "從剪貼簿貼上" msgid "Delete selected" msgstr "刪除所選項目" -#, fuzzy msgid "Deletes the current selection" msgstr "刪除目前所選項目" @@ -4718,10 +4726,10 @@ msgid "Show g-code window in Preview scene" msgstr "在預覽分頁中顯示 G-code 視窗" msgid "Show 3D Navigator" -msgstr "" +msgstr "顯示 3D 導覽器" msgid "Show 3D navigator in Prepare and Preview scene" -msgstr "" +msgstr "在準備與預覽分頁中顯示 3D 導覽器" msgid "Reset Window Layout" msgstr "重設視窗配置" @@ -4745,7 +4753,7 @@ msgid "Show Selected Outline (Experimental)" msgstr "顯示選取輪廓(實驗性)" msgid "Show outline around selected object in 3D scene" -msgstr "在 3D 場景中顯示選定物件的輪廓。" +msgstr "在 3D 場景中顯示選定物件的輪廓" msgid "Preferences" msgstr "偏好設定" @@ -4800,7 +4808,7 @@ msgstr "VFA" # SoftFever msgid "More..." -msgstr "進階校準" +msgstr "更多…" msgid "Tutorial" msgstr "教學" @@ -4853,11 +4861,11 @@ msgstr "幫助" #, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." -msgstr "有一個同名稱的檔案 %s。要覆蓋它嗎?" +msgstr "檔案名稱為 %s 的檔案已存在,是否要覆蓋它?" #, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." -msgstr "有一個同名稱的設定檔 %s。要覆蓋它嗎?" +msgstr "已存在名稱為 %s 的設定檔,是否要覆蓋它?" msgid "Overwrite file" msgstr "覆蓋檔案" @@ -4882,7 +4890,7 @@ msgstr "匯出結果" msgid "Select profile to load:" msgstr "選擇要載入的設定檔:" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" msgid_plural "" "There are %d configs imported. (Only non-system and compatible configs)" @@ -4931,7 +4939,7 @@ msgid "Player is malfunctioning. Please reinstall the system player." msgstr "播放器故障。請重新安裝系統播放器。" msgid "The player is not loaded, please click \"play\" button to retry." -msgstr "播放器未載入,請點擊「播放」按鈕重試。" +msgstr "播放器未載入,請點擊『播放』按鈕重試。" msgid "Please confirm if the printer is connected." msgstr "請確認列印設備是否已連接。" @@ -4939,7 +4947,8 @@ msgstr "請確認列印設備是否已連接。" msgid "" "The printer is currently busy downloading. Please try again after it " "finishes." -msgstr "列印機目前正忙於下載。請待下載完成後再試一次。" +msgstr "" +"列印機目前正忙於下載。請待下載完成後再試一次。" msgid "Printer camera is malfunctioning." msgstr "列印設備攝影機故障。" @@ -4949,21 +4958,23 @@ msgstr "發生問題。請更新列印設備韌體後再試一次。" msgid "" "LAN Only Liveview is off. Please turn on the liveview on printer screen." -msgstr "僅 LAN 模式的LiveView已關閉。請在列印機螢幕上開啟LiveView。" +msgstr "" +"僅 LAN 模式的 LiveView 已關閉。請在列印機螢幕上開啟 LiveView。" msgid "Please enter the IP of printer to connect." msgstr "請輸入列印設備的 IP 以進行連接。" msgid "Initializing..." -msgstr "正在初始化……" +msgstr "正在初始化..." msgid "Connection Failed. Please check the network and try again" -msgstr "連線失敗。請檢查網路並重試。" +msgstr "連線失敗。請檢查網路並重試" msgid "" "Please check the network and try again, You can restart or update the " "printer if the issue persists." -msgstr "請檢查網路並重試。如果問題持續,你可以重新啟動或更新列印設備。" +msgstr "" +"請檢查網路並重試。如果問題持續,你可以重新啟動或更新列印設備。" msgid "The printer has been logged out and cannot connect." msgstr "列印設備已登出,無法連接。" @@ -4972,16 +4983,17 @@ msgid "Stopped." msgstr "已經停止。" msgid "LAN Connection Failed (Failed to start liveview)" -msgstr "區域網路連接失敗(無法啟動直播)" +msgstr "區域網路連接失敗(無法啟動 Liveview)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" -msgstr "該功能需要\"虛擬攝影機工具包\",是否下載並安裝該工具包?" +msgstr "" +"執行此功能需要「虛擬攝影機工具包」!\n" +"你要安裝它們嗎?" -#, fuzzy msgid "Downloading Virtual Camera Tools" -msgstr "正在下載虛擬攝影機工具包...." +msgstr "正在下載虛擬攝影機工具包..." msgid "" "Another virtual camera is running.\n" @@ -4992,7 +5004,7 @@ msgstr "" "Orca Slicer 同時只能支援一個虛擬攝影機。\n" "是否停止前一個虛擬攝影機?" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" msgstr "虛擬攝影機初始化失敗(%s)!" @@ -5015,40 +5027,40 @@ msgid "All Files" msgstr "所有檔案" msgid "Group files by year, recent first." -msgstr "按年份分組,從最近的開始展示" +msgstr "按年份分組,從最近的開始展示。" msgid "Group files by month, recent first." -msgstr "按月份分組,從最近的開始展示" +msgstr "按月份分組,從最近的開始展示。" msgid "Show all files, recent first." -msgstr "顯示所有檔案,從最近的開始展示" +msgstr "顯示所有檔案,從最近的開始展示。" msgid "Switch to timelapse files." -msgstr "切換到縮時攝影檔案清單" +msgstr "切換到縮時攝影檔案清單。" msgid "Video" msgstr "錄影" msgid "Switch to video files." -msgstr "切換到影片檔案清單" +msgstr "切換到影片檔案清單。" msgid "Switch to 3mf model files." -msgstr "切換到 3MF 模型檔案。" +msgstr "切換到 3mf 模型檔案。" msgid "Delete selected files from printer." -msgstr "從列印設備中刪除選中的檔案" +msgstr "從列印設備中刪除選中的檔案。" msgid "Download" msgstr "下載" msgid "Download selected files from printer." -msgstr "從列印設備中下載選中的檔案" +msgstr "從列印設備中下載選中的檔案。" msgid "Select" msgstr "選擇" msgid "Batch manage files." -msgstr "批次管理檔案" +msgstr "批次管理檔案。" msgid "Refresh" msgstr "刷新" @@ -5056,9 +5068,8 @@ msgstr "刷新" msgid "Reload file list from printer." msgstr "從列印機重新載入檔案清單。" -#, fuzzy msgid "No printers." -msgstr "未選擇列印設備" +msgstr "未選擇列印設備。" #, c-format, boost-format msgid "Connect failed [%d]!" @@ -5079,10 +5090,11 @@ msgstr "初始化失敗(未連接列印設備)" msgid "" "Browsing file in SD card is not supported in current firmware. Please update " "the printer firmware." -msgstr "目前韌體不支援瀏覽 SD 卡中的檔案。請更新列印機韌體。" +msgstr "" +"目前韌體不支援瀏覽 SD 卡中的檔案。請更新列印機韌體。" msgid "Initialize failed (Storage unavailable, insert SD card.)!" -msgstr "初始化失敗(存儲不可用,請插入 SD 卡)。" +msgstr "初始化失敗(存儲不可用,請插入 SD 卡)!" msgid "LAN Connection Failed (Failed to view sdcard)" msgstr "LAN 連線失敗(無法查看 SD 卡)。" @@ -5094,7 +5106,7 @@ msgstr "在僅 LAN 模式下不支援瀏覽 SD 卡中的檔案。" msgid "Initialize failed (%s)!" msgstr "初始化失敗(%s)!" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" msgid_plural "" "You are going to delete %u files from printer. Are you sure to continue?" @@ -5123,8 +5135,7 @@ msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" -".gcode.3mf 檔案中不包含 G-code 數據。請使用 Orca Slicer 進行切片並匯出新" -"的.gcode.3mf 檔案。" +".gcode.3mf 檔案中不包含 G-code 數據。請使用 Orca Slicer 進行切片並匯出新的 .gcode.3mf 檔案。" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -5135,6 +5146,8 @@ msgid "" "File: %s\n" "Title: %s\n" msgstr "" +"檔案:%s\n" +"標題:%s\n" msgid "Download waiting..." msgstr "等待下載中..." @@ -5155,7 +5168,8 @@ msgstr "下載中 %d%%..." msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." -msgstr "重新連接列印機,操作無法立即完成,請稍後再試。" +msgstr "" +"重新連接列印機,操作無法立即完成,請稍後再試。" msgid "File does not exist." msgstr "檔案不存在。" @@ -5176,7 +5190,6 @@ msgstr "錯誤代碼:%d" msgid "Speed:" msgstr "速度:" -#, fuzzy msgid "Deadzone:" msgstr "盲點區:" @@ -5233,11 +5246,11 @@ msgstr "已經完成了 MakeWorld 模型的列印,但評論資料同步失敗 msgid "How do you like this printing file?" msgstr "你覺得這個列印檔案怎麼樣?" -#, fuzzy msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" -msgstr "(此模型已被評價。你的評價將覆蓋先前的評價。)" +msgstr "" +"(此模型已被評價。你的評價將覆蓋先前的評價。)" msgid "Rate" msgstr "速率" @@ -5258,7 +5271,7 @@ msgid "Control" msgstr "控制" msgid "Printer Parts" -msgstr "" +msgstr "列印設備零件" msgid "Print Options" msgstr "列印選項" @@ -5276,7 +5289,7 @@ msgid "Cham" msgstr "機箱" msgid "Bed" -msgstr "熱床" +msgstr "列印板" msgid "Debug Info" msgstr "除錯資訊" @@ -5301,7 +5314,7 @@ msgstr "雲端切片中..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." -msgstr "雲端切片佇列中,前面還有 %s 個檔案" +msgstr "雲端切片佇列中,前面還有 %s 個檔案。" #, c-format, boost-format msgid "Layer: %s" @@ -5314,7 +5327,8 @@ msgstr "%d/%d 層" msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." -msgstr "請在上料或退料之前將噴嘴加熱至 170 度以上。" +msgstr "" +"請在上料或退料之前將噴嘴加熱至 170 度以上。" msgid "Still unload" msgstr "繼續退料" @@ -5328,7 +5342,8 @@ msgstr "請先選擇一個 AMS 槽位後進行校準" msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." -msgstr "無法讀取線材資訊:線材已經載入到工具頭,請退出線材後再重試。" +msgstr "" +"無法讀取線材資訊:線材已經載入到工具頭,請退出線材後再重試。" msgid "This only takes effect during printing" msgstr "僅在列印過程中生效" @@ -5346,7 +5361,7 @@ msgid "Ludicrous" msgstr "狂暴模式(150%)" msgid "Can't start this without SD card." -msgstr "沒有 SD 記憶卡無法開始" +msgstr "沒有 SD 記憶卡無法開始。" msgid "Rate the Print Profile" msgstr "評價列印設定檔" @@ -5382,23 +5397,24 @@ msgid "Number of images successfully uploaded" msgstr "成功上傳的圖片數量" msgid " upload failed" -msgstr "上傳失敗" +msgstr " 上傳失敗" -#, fuzzy msgid " upload config prase failed\n" -msgstr "上傳設定檔失敗\n" +msgstr " 上傳設定檔失敗\n" msgid " No corresponding storage bucket\n" -msgstr "沒有對應的儲存區\n" +msgstr " 沒有對應的儲存區\n" msgid " can not be opened\n" -msgstr "無法開啟\n" +msgstr " 無法開啟\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" -msgstr "在上傳圖片的過程中出現了以下問題。要忽略此問題嗎?\n" +msgstr "" +"在上傳圖片的過程中出現了以下問題。要忽略此問題嗎?\n" +"\n" msgid "info" msgstr "資訊" @@ -5419,7 +5435,7 @@ msgid "" msgstr "" "由於某些原因,你的評論結果無法上傳。如下:\n" "\n" -"錯誤代碼: " +" 錯誤代碼: " msgid "error message: " msgstr "錯誤訊息:" @@ -5431,12 +5447,13 @@ msgid "" 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 張圖片。" @@ -5445,8 +5462,8 @@ msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" -"該列印設定檔至少需要一筆成功的列印記錄\n" -"給予正面評價(4 或 5 顆星)。" +"若要給予正面評價(4 或 5 星),\n" +"必須至少有一個此列印設定檔的成功列印記錄。" msgid "Status" msgstr "設備狀態" @@ -5490,34 +5507,33 @@ msgstr "較新的 3mf 版本" msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." -msgstr "該 3MF 檔案版本為測試版,並且較目前的 OrcaSlicer 版本更新。" +msgstr "" +"該 3mf 檔案版本為測試版,並且較目前的 OrcaSlicer 版本更新。" msgid "If you would like to try Orca Slicer Beta, you may click to" -msgstr "如果你想嘗試 Orca Slicer 測試版,可以點擊以下載。" +msgstr "如果你想嘗試 Orca Slicer 測試版,可以點擊以下載到" msgid "Download Beta Version" msgstr "下載測試版" msgid "The 3mf file version is newer than the current Orca Slicer version." -msgstr "該 3MF 檔案版本較目前的 Orca Slicer 版本更新。" +msgstr "該 3mf 檔案版本較目前的 Orca Slicer 版本更新。" msgid "Update your Orca Slicer could enable all functionality in the 3mf file." -msgstr "更新你的 Orca Slicer 以啟用 3MF 檔案中的所有功能。" +msgstr "更新你的 Orca Slicer 以啟用 3mf 檔案中的所有功能。" msgid "Current Version: " -msgstr "目前版本" +msgstr "目前版本:" msgid "Latest Version: " -msgstr "最新版本" +msgstr "最新版本:" msgid "Not for now" msgstr "現在不要" -#, fuzzy msgid "3D Mouse disconnected." msgstr "3D 滑鼠已中斷連線。" -#, fuzzy msgid "Configuration can update now." msgstr "設定檔現在可以升級。" @@ -5576,7 +5592,7 @@ msgstr[0] "%1$d 物件有上色。" #, c-format, boost-format msgid "%1$d object was loaded as a part of cut object." msgid_plural "%1$d objects were loaded as parts of cut object" -msgstr[0] "%1$d 物件載入為一個切割物件的子零件" +msgstr[0] "%1$d 物件載入為一個切割物件的子零件。" msgid "ERROR" msgstr "錯誤" @@ -5612,7 +5628,7 @@ msgid " (Repair)" msgstr "(修復)" msgid " Click here to install it." -msgstr "點擊此處安裝" +msgstr "點擊此處安裝。" msgid "WARNING:" msgstr "警告:" @@ -5641,7 +5657,8 @@ msgstr "範圍" msgid "" "The application cannot run normally because OpenGL version is lower than " "2.0.\n" -msgstr "應用程式無法正常運行,因為 OpenGL 的版本低於 2.0。\n" +msgstr "" +"應用程式無法正常運行,因為 OpenGL 的版本低於 2.0。\n" msgid "Please upgrade your graphics card driver." msgstr "請升級你的顯示卡驅動。" @@ -5649,11 +5666,13 @@ msgstr "請升級你的顯示卡驅動。" msgid "Unsupported OpenGL version" msgstr "不支援的 OpenGL 版本" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "" "Unable to load shaders:\n" "%s" -msgstr "無法載入 Shader: %s" +msgstr "" +"無法載入 Shader:\n" +"%s" msgid "Error loading shaders" msgstr "載入 shader 程序時發生錯誤" @@ -5678,9 +5697,9 @@ msgstr "啟用列印板位置偵測" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." -msgstr "偵測列印板的定位標記,如果標記不在預定義範圍內時暫停列印。" +msgstr "" +"偵測列印板的定位標記,如果標記不在預定義範圍內時暫停列印。" -#, fuzzy msgid "First Layer Inspection" msgstr "首層檢查" @@ -5710,7 +5729,7 @@ msgstr "硬化鋼" #, c-format, boost-format msgid "%.1f" -msgstr "" +msgstr "%.1f" msgid "Global" msgstr "全域" @@ -5751,11 +5770,10 @@ msgstr "編輯列印板名稱" msgid "Move plate to the front" msgstr "更改列印板順序至前" -#, fuzzy msgid "Customize current plate" msgstr "自訂列印板參數" -#, boost-format +#, possible-boost-format msgid " plate %1%:" msgstr "列印板 %1%:" @@ -5772,7 +5790,7 @@ msgid "Used Filament (mm³)" msgstr "線材消耗體積(mm³)" msgid "Used Filament (g)" -msgstr "線材消耗重量(克)" +msgstr "線材消耗重量(g)" msgid "Used Materials" msgstr "線材消耗" @@ -5783,7 +5801,6 @@ msgstr "預估列印時間" msgid "Filament changes" msgstr "線材切換" -#, fuzzy msgid "Click to edit preset" msgstr "點擊編輯預設檔設定" @@ -5816,7 +5833,8 @@ msgstr "顆粒" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." -msgstr "沒有發現 AMS 線材。請在\"設備\"頁面選擇列印設備,載入 AMS 資訊" +msgstr "" +"沒有發現 AMS 線材。請在\"設備\"頁面選擇列印設備,載入 AMS 資訊。" msgid "Sync filaments with AMS" msgstr "同步到 AMS 的線材清單" @@ -5830,7 +5848,8 @@ msgstr "" msgid "" "Already did a synchronization, do you want to sync only changes or resync " "all?" -msgstr "已經同步過,你希望僅同步改變的線材還是重新同步所有線材?" +msgstr "" +"已經同步過,你希望僅同步改變的線材還是重新同步所有線材?" msgid "Sync" msgstr "僅同步改變的" @@ -5846,20 +5865,20 @@ msgid "" "Orca Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"有一些未知型號的線材套用於通用預設上。請更新或者重啟 Orca Slicer,以檢查系統" -"預設檔有無更新。" +"有一些未知型號的線材套用於通用預設上。請更新或者重啟 Orca Slicer,以檢查系統預設檔有無更新。" -#, boost-format +#, possible-boost-format msgid "Do you want to save changes to \"%1%\"?" msgstr "是否儲存變更到 \"%1%\"?" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" +"卸載成功。設備 %s(%s) 現在可以安全移除。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "Ejecting of device %s(%s) has failed." msgstr "退出設備 %s(%s)失敗。" @@ -5874,21 +5893,20 @@ 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 " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化噴嘴或線材,否則噴" -"嘴可能被磨損或損壞。" +"線材所要求的噴嘴硬度高於列印設備預設的噴嘴硬度。請更換硬化噴嘴或線材,否則噴嘴可能被磨損或損壞。" msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." -msgstr "使用傳統模式的縮時攝影可能會導致表面缺陷。建議改為平滑模式。" +msgstr "" +"使用傳統模式的縮時攝影可能會導致表面缺陷。建議改為平滑模式。" msgid "Expand sidebar" msgstr "展開側邊欄" @@ -5906,52 +5924,55 @@ msgstr "該 3mf 檔案不是來自 Orca Slicer,將只載入幾何數據。" msgid "Load 3mf" msgstr "載入 3mf" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" -msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,以下參數值無法識別:" +msgstr "" +"該 3mf 的版本 %s 比 %s 的版本 %s 新,以下參數值無法識別:" msgid "You'd better upgrade your software.\n" msgstr "建議升級你的軟體版本。\n" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." -msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 要新,建議升級你的軟體。" +msgstr "" +"該 3mf 的版本 %s 比 %s 的版本 %s 要新,建議升級你的軟體。" msgid "Invalid values found in the 3mf:" msgstr "在 3mf 檔案中發現無效值:" -#, fuzzy msgid "Please correct them in the param tabs" msgstr "請在參數設定頁更正它們" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "該 3MF 檔案在耗材或列印機預設中具有以下修改過的 GCODE:" +msgstr "該 3mf 檔案在耗材或列印機預設中具有以下修改過的 GCODE:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" -msgstr "請確認這些修改過的 GCODE 是安全的,以防止對機器造成任何損壞!" +msgstr "" +"請確認這些修改過的 GCODE 是安全的,以防止對機器造成任何損壞!" msgid "Modified G-codes" msgstr "已修改的 GCODE" msgid "The 3mf has following customized filament or printer presets:" -msgstr "該 3MF 檔案具有以下自訂的耗材或列印機預設:" +msgstr "該 3mf 檔案具有以下自訂的耗材或列印機預設:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" -msgstr "請確認這些預設中的 GCODE 是安全的,以防止對機器造成任何損壞!" +msgstr "" +"請確認這些預設中的 G-code 是安全的,以防止對機器造成損壞!" msgid "Customized Preset" -msgstr "" +msgstr "自訂預設" msgid "Name of components inside step file is not UTF8 format!" -msgstr "step 檔案中的零件名稱包含非 UTF8 格式的字元!" +msgstr "step 檔案內部元件的名稱不是 UTF8 格式!" msgid "The name may show garbage characters!" msgstr "此名稱可能顯示亂碼字元!" @@ -5959,7 +5980,7 @@ msgstr "此名稱可能顯示亂碼字元!" msgid "Remember my choice." msgstr "記住我的選擇。" -#, boost-format +#, possible-boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "載入檔案 \"%1%\" 失敗。發現無效設定值。" @@ -6024,7 +6045,9 @@ msgstr "匯出 OBJ 檔案:" msgid "" "The file %s already exists\n" "Do you want to replace it?" -msgstr "檔案 %s 已存在您確定要替換它嗎?" +msgstr "" +"檔案 %s 已存在\n" +"是否要覆蓋它?" msgid "Confirm Save As" msgstr "確認另存為" @@ -6037,8 +6060,9 @@ msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed." msgstr "" -"你正嘗試刪除切割物件的一部分,這將破壞切割對應關係,刪除之後,將無法再保證模" -"型的一致性。" +"你正在嘗試刪除一個屬於切割物件的部分。\n" +"此操作將破壞切割對應關係。\n" +"模型的一致性可能無法保證。" msgid "The selected object couldn't be split." msgstr "選中的模型不可分割。" @@ -6100,7 +6124,8 @@ msgstr "請解決切片錯誤後再重新發布。" msgid "" "Network Plug-in is not detected. Network related features are unavailable." -msgstr "未偵測到網路插件。網路相關功能不可用。" +msgstr "" +"未偵測到網路插件。網路相關功能不可用。" msgid "" "Preview only mode:\n" @@ -6109,7 +6134,6 @@ msgstr "" "僅預覽模式:\n" "被載入的檔案僅包含 G-Code,不支援進入準備頁面" -#, fuzzy msgid "You can keep the modified presets to the new project or discard them" msgstr "你可以將修改後的預設檔保留到新專案項目中或者忽略這些修改" @@ -6146,12 +6170,13 @@ msgstr "下載失敗,檔案大小異常。" #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "專案已下載 %d%%" +msgstr "專案已下載 %d%%" msgid "" "Importing to Orca Slicer failed. Please download the file and manually " "import it." -msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" +msgstr "" +"匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" msgid "Import SLA archive" msgstr "匯入 SLA 存檔" @@ -6166,20 +6191,19 @@ msgid "Error occurs while loading G-code file" msgstr "載入 G-code 檔案時遇到錯誤" #. TRN %1% is archive path -#, boost-format +#, possible-boost-format msgid "Loading of a ZIP archive on path %1% has failed." msgstr "載入路徑 %1% 的 ZIP 檔案失敗。" #. TRN: First argument = path to file, second argument = error description -#, boost-format +#, possible-boost-format msgid "Failed to unzip file to %1%: %2%" msgstr "無法將檔案解壓縮到 %1%:%2%" -#, boost-format +#, possible-boost-format msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." msgstr "無法找到解壓縮的檔案 %1%。解壓縮檔案失敗。" -#, fuzzy msgid "Drop project file" msgstr "刪除專案項目" @@ -6199,10 +6223,10 @@ msgid "G-code loading" msgstr "正在載入 G-code 檔案" msgid "G-code files can not be loaded with models together!" -msgstr "G-code 檔案不能和模型一起載入" +msgstr "G-code 檔案不能和模型一起載入!" msgid "Can not add models when in preview mode!" -msgstr "在預覽模式不允許增加模型" +msgstr "在預覽模式不允許增加模型!" msgid "All objects will be removed, continue?" msgstr "即將刪除所有物件,是否繼續?" @@ -6213,7 +6237,6 @@ msgstr "目前專案包含未儲存的修改,是否先儲存?" msgid "Number of copies:" msgstr "複製數量:" -#, fuzzy msgid "Copies of the selected object" msgstr "所選物件的複製數量" @@ -6232,11 +6255,12 @@ msgstr "FAT 檔案系統不允許使用以下字元:" msgid "Save Sliced file as:" msgstr "切片檔案另存為:" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." -msgstr "檔案 %s 已經傳送到列印設備的儲存空間,可以在列印設備上瀏覽。" +msgstr "" +"檔案 %s 已經傳送到列印設備的儲存空間,可以在列印設備上瀏覽。" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " @@ -6244,47 +6268,45 @@ msgid "" msgstr "" "無法對模型網格執行布林運算。只有正向部分會被保留。你可以修正網格後再試一次。" -#, boost-format +#, possible-boost-format msgid "Reason: part \"%1%\" is empty." -msgstr "原因:\"%1%\"無物件" +msgstr "原因:零件 「%1%”」 無物件。" -#, boost-format +#, possible-boost-format msgid "Reason: part \"%1%\" does not bound a volume." -msgstr "原因:零件\"%1%\"無體積" +msgstr "原因:零件 「%1%」 無體積。" -#, boost-format +#, possible-boost-format msgid "Reason: part \"%1%\" has self intersection." -msgstr "原因:零件\"%1%\"" +msgstr "原因:零件 「%1%」" -#, boost-format +#, possible-boost-format msgid "Reason: \"%1%\" and another part have no intersection." -msgstr "原因:\"%1%\" 與另一個零件沒有交集" +msgstr "原因:「%1%」 與另一個零件沒有交集。" -#, fuzzy msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " "will be exported." -msgstr "無法對模型網格執行布林運算。只有正面部分將被導出。" +msgstr "" +"無法對模型網格執行布林運算。只有正面部分將被導出。" msgid "" "Are you sure you want to store original SVGs with their local paths into the " "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" -"你確定要將原始 SVG 檔案及其本地路徑儲存到 3MF 檔案中嗎?如果選擇「否」,專案" -"中的所有 SVG 將不再可編輯。" +"你確定要將原始 SVG 檔案及其本地路徑儲存到 3MF 檔案中嗎?\n" +"如果選擇『否』,專案中的所有 SVG 將不再可編輯。" msgid "Private protection" -msgstr "" +msgstr "私密保護" -#, fuzzy msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "列印設備是否準備完成?列印平台是否在正確的位置、有沒有異物、是否乾淨?" msgid "Upload and Print" msgstr "上傳並列印" -#, fuzzy msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -6310,39 +6332,39 @@ msgstr "無效數字" msgid "Plate Settings" msgstr "列印板參數設定" -#, boost-format +#, possible-boost-format msgid "Number of currently selected parts: %1%\n" msgstr "目前選擇的零件數量:%1%\n" -#, boost-format +#, possible-boost-format msgid "Number of currently selected objects: %1%\n" msgstr "目前選擇的物件數量:%1%\n" -#, boost-format +#, possible-boost-format msgid "Part name: %1%\n" msgstr "零件名字:%1%\n" -#, boost-format +#, possible-boost-format msgid "Object name: %1%\n" msgstr "物件名字:%1%\n" -#, boost-format +#, possible-boost-format msgid "Size: %1% x %2% x %3% in\n" msgstr "大小:%1% x %2% x %3% 英寸\n" -#, boost-format +#, possible-boost-format msgid "Size: %1% x %2% x %3% mm\n" msgstr "大小: %1% x %2% x %3% mm\n" -#, boost-format +#, possible-boost-format msgid "Volume: %1% in³\n" msgstr "體積: %1% 英寸³\n" -#, boost-format +#, possible-boost-format msgid "Volume: %1% mm³\n" msgstr "體積: %1% mm³\n" -#, boost-format +#, possible-boost-format msgid "Triangles: %1%\n" msgstr "三角形:%1%\n" @@ -6353,15 +6375,15 @@ msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " "on Orca Slicer(windows) or CAD softwares." msgstr "" +"「模型修復」功能目前僅適用於 Windows。請在 Orca Slicer(Windows)或 CAD 軟體中修復模型。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Plate% d: %s is not suggested to be used to print filament %s(%s). If you " "still want to do this printing, please set this filament's bed temperature " "to non zero." msgstr "" -"列印板 %d:%s 不建議被用於列印 %s(%s)線材。如果你依然想列印,請設定線材對應" -"的熱床溫度為非零值。" +"列印板% d:%s 不建議用於列印 %s(%s)線材。如果你仍想執行此列印,請將該線材的熱床溫度設為非零值。" msgid "Switching the language requires application restart.\n" msgstr "切換語言要求重啟應用程式。\n" @@ -6394,19 +6416,19 @@ msgid "Choose Download Directory" msgstr "選擇下載資料夾" msgid "Associate" -msgstr "" +msgstr "關聯" msgid "with OrcaSlicer so that Orca can open models from" -msgstr "" +msgstr "與 OrcaSlicer 關聯,以便 Orca 可以從中打開模型" msgid "Current Association: " -msgstr "" +msgstr "當前關聯:" msgid "Current Instance" -msgstr "" +msgstr "當前實例" msgid "Current Instance Path: " -msgstr "" +msgstr "當前實例路徑:" msgid "General Settings" msgstr "一般設定" @@ -6436,8 +6458,7 @@ msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" -"這會停止數據傳輸到 Bambu 的雲端服務。使用者如果不使用 Bambu 機台或僅使用區域" -"網路模式,可以安全地啟用此功能。" +"這會停止數據傳輸到 Bambu 的雲端服務。使用者如果不使用 Bambu 機台或僅使用區域網路模式,可以安全地啟用此功能。" msgid "Enable network plugin" msgstr "啟用網路插件" @@ -6462,16 +6483,14 @@ msgid "" "it is allowed to run multiple instances of same app from the command line. " "In such case this settings will allow only one instance." msgstr "" -"在 OSX 上,預設情況下總是只有一個應用程式實例在運行。但是卻允許從命令視窗執行" -"同一應用程式的多個實例。當你設定了這個設定後將只允許一個實例執行。" +"在 OSX 上,預設情況下總是只有一個應用程式實例在運行。但是卻允許從命令視窗執行同一應用程式的多個實例。當你設定了這個設定後將只允許一個實例執行。" msgid "" "If this is enabled, when starting OrcaSlicer and another instance of the " "same OrcaSlicer is already running, that instance will be reactivated " "instead." msgstr "" -"啟用後,嘗試開起 OrcaSlicer 時若有另一個 OrcaSlicer 程序已在運行時,已在運行" -"的程序會被重新啟動。" +"啟用後,嘗試開起 OrcaSlicer 時若有另一個 OrcaSlicer 程序已在運行時,已在運行的程序會被重新啟動。" msgid "Home" msgstr "首頁" @@ -6493,8 +6512,9 @@ msgid "" "Default: LMB+move for rotation, RMB/MMB+move for panning.\n" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" -"選擇相機導航樣式。預設:左鍵+移動旋轉,右鍵/中鍵+移動平移。觸控板:Alt+移動旋" -"轉,Shift+移動平移。" +"選擇相機導航樣式。\n" +"預設:左鍵+移動旋轉,右鍵/中鍵+移動平移。\n" +"觸控板:Alt+移動旋轉,Shift+移動平移。" msgid "Zoom to mouse position" msgstr "放大到滑鼠位置" @@ -6502,7 +6522,8 @@ msgstr "放大到滑鼠位置" msgid "" "Zoom in towards the mouse pointer's position in the 3D view, rather than the " "2D window center." -msgstr "在 3D 視角放大到滑鼠位置,而不是 2D 窗口的中心。" +msgstr "" +"在 3D 視圖中以滑鼠指標的位置為中心放大,而非以 2D 視窗中心放大。" msgid "Use free camera" msgstr "使用自由鏡頭" @@ -6514,7 +6535,7 @@ msgid "Reverse mouse zoom" msgstr "反轉滑鼠滾輪縮放方向" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "啟用後,改變滑鼠滾輪縮放方向" +msgstr "啟用後,改變滑鼠滾輪縮放方向。" msgid "Show splash screen" msgstr "顯示啟動動畫" @@ -6529,14 +6550,15 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "如果啟用,將在啟動時顯示有用的提示。" msgid "Flushing volumes: Auto-calculate every time the color changed." -msgstr "廢料體積:換色時自動計算" +msgstr "廢料體積:換色時自動計算。" msgid "If enabled, auto-calculate every time the color changed." -msgstr "啟用後,換色時自動計算" +msgstr "啟用後,換色時自動計算。" msgid "" "Flushing volumes: Auto-calculate every time when the filament is changed." -msgstr "廢料體積:換料時自動計算" +msgstr "" +"廢料體積:換料時自動計算。" msgid "If enabled, auto-calculate every time when filament is changed" msgstr "啟用後,換料時自動計算" @@ -6547,7 +6569,8 @@ msgstr "記住機臺設定" msgid "" "If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." -msgstr "啟用後,Orca會記住且自動切換各機臺線材與列印設定" +msgstr "" +"啟用後,Orca會記住且自動切換各機臺線材與列印設定。" msgid "Multi-device Management(Take effect after restarting Orca)." msgstr "多臺設備管理(需重開Orca)" @@ -6555,25 +6578,26 @@ msgstr "多臺設備管理(需重開Orca)" msgid "" "With this option enabled, you can send a task to multiple devices at the " "same time and manage multiple devices." -msgstr "啟用時可以同時傳送到並管理多個機臺" +msgstr "" +"啟用時可以同時傳送到並管理多個機臺。" msgid "Auto arrange plate after cloning" -msgstr "複製後自動排列" +msgstr "複製後自動排列列印板" msgid "Auto arrange plate after object cloning" -msgstr " " +msgstr "物件複製後自動排列列印板" msgid "Network" msgstr "網路" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "自動同步使用者預設(列印設備/線材/列印品質參數)" +msgstr "自動同步用戶預設(列印設備/線材/列印品質參數)" msgid "User Sync" msgstr "使用者同步" msgid "Update built-in Presets automatically." -msgstr "自動更新系統預設" +msgstr "自動更新系統預設。" msgid "System Sync" msgstr "系統同步" @@ -6582,7 +6606,7 @@ msgid "Clear my choice on the unsaved presets." msgstr "清除我對未儲存預設的選擇。" msgid "Associate files to OrcaSlicer" -msgstr " Orca Slicer 檔案關聯" +msgstr "Orca Slicer 檔案關聯" msgid "Associate .3mf files to OrcaSlicer" msgstr "使用 Orca Slicer 打開 .3mf 檔案" @@ -6603,10 +6627,10 @@ msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "開啟後,將預設使用 Orca Slicer 打開 .step 檔案" msgid "Associate web links to OrcaSlicer" -msgstr "" +msgstr "將網頁連結關聯到 OrcaSlicer" msgid "Associate URLs to OrcaSlicer" -msgstr "" +msgstr "將 URL 關聯到 OrcaSlicer" msgid "Maximum recent projects" msgstr "最近專案項目的最大數量" @@ -6615,23 +6639,24 @@ msgid "Maximum count of recent projects" msgstr "近期專案項目的最大統計" msgid "Clear my choice on the unsaved projects." -msgstr "清除我對未儲存的專案項目的選擇。" +msgstr "清除我對未儲存專案項目的選擇。" msgid "No warnings when loading 3MF with modified G-codes" -msgstr "載入具有GCODE修改的3MF時不警告" +msgstr "載入包含修改過 G-code 的 3MF 時不顯示警告" msgid "Auto-Backup" msgstr "自動備份" msgid "" "Backup your project periodically for restoring from the occasional crash." -msgstr "定期備份專案,以便從未預期的錯誤中恢復。" +msgstr "" +"定期備份專案,以便從未預期的錯誤中恢復。" msgid "every" msgstr "所有" msgid "The period of backup in seconds." -msgstr "備份的週期" +msgstr "備份的週期。" msgid "Downloads" msgstr "下載" @@ -6711,18 +6736,17 @@ msgstr "除錯" msgid "trace" msgstr "跟蹤" -#, fuzzy msgid "Host Setting" msgstr "伺服器設定" msgid "DEV host: api-dev.bambu-lab.com/v1" -msgstr "" +msgstr "開發環境主機:api-dev.bambu-lab.com/v1" msgid "QA host: api-qa.bambu-lab.com/v1" -msgstr "" +msgstr "測試環境主機:api-qa.bambu-lab.com/v1" msgid "PRE host: api-pre.bambu-lab.com/v1" -msgstr "" +msgstr "預發布環境主機:api-pre.bambu-lab.com/v1" msgid "Product host" msgstr "正式環境" @@ -6788,10 +6812,10 @@ msgid "Customize" msgstr "自訂" msgid "Other layer filament sequence" -msgstr "" +msgstr "其他層的線材列印順序" msgid "Please input layer value (>= 2)." -msgstr "" +msgstr "請輸入層數值(>= 2)" msgid "Plate name" msgstr "列印板名稱" @@ -6806,19 +6830,17 @@ msgid "Same as Global" msgstr "跟隨全域設定" msgid "Disable" -msgstr "" +msgstr "停用" msgid "Spiral vase" -msgstr "花瓶模式" +msgstr "螺旋花瓶模式" msgid "First layer filament sequence" msgstr "首層線材列印順序" -#, fuzzy msgid "Same as Global Plate Type" msgstr "跟隨全域列印板設定" -#, fuzzy msgid "Same as Global Bed Type" msgstr "跟隨全域列印板設定" @@ -6880,11 +6902,11 @@ msgstr "名稱不可用。" msgid "Overwrite a system profile is not allowed" msgstr "不允許覆蓋系統預設" -#, boost-format +#, possible-boost-format msgid "Preset \"%1%\" already exists." msgstr "預設 \"%1%\" 已存在。" -#, boost-format +#, possible-boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." msgstr "預設 \"%1%\" 已存在,並且和目前列印設備不相容。" @@ -6901,23 +6923,23 @@ msgctxt "PresetName" msgid "Copy" msgstr "複製" -#, fuzzy, boost-format +#, possible-boost-format msgid "Printer \"%1%\" is selected with preset \"%2%\"" msgstr "選中的列印設備 \"%1%\" 和預設 \"%2%\"" -#, fuzzy, boost-format +#, possible-boost-format msgid "Please choose an action with \"%1%\" preset after saving." msgstr "請選擇儲存後對 \"%1%\" 預設的操作。" -#, fuzzy, boost-format +#, possible-boost-format msgid "For \"%1%\", change \"%2%\" to \"%3%\" " msgstr "為 \"%1%\",把 \"%2%\" 更換為 \"%3%\" " -#, fuzzy, boost-format +#, possible-boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" msgstr "為 \"%1%\",增加 \"%2%\" 為一個新預設" -#, fuzzy, boost-format +#, possible-boost-format msgid "Simply switch to \"%1%\"" msgstr "直接切換到 \"%1%\" " @@ -6958,16 +6980,16 @@ msgid "PLA Plate" msgstr "PLA 列印板" msgid "Bambu Engineering Plate" -msgstr "工程列印熱床" +msgstr "Bambu 工程列印熱板" msgid "Bambu Smooth PEI Plate" -msgstr "" +msgstr "Bambu 平滑 PEI 列印板" msgid "High temperature Plate" msgstr "高溫列印板" msgid "Bambu Textured PEI Plate" -msgstr "" +msgstr "Bambu 紋理 PEI 列印板" msgid "Send print job to" msgstr "傳送列印作業至" @@ -6999,97 +7021,94 @@ msgstr "同步設備資訊逾時" msgid "Cannot send the print job when the printer is updating firmware" msgstr "設備升級中,無法傳送列印作業" -#, fuzzy msgid "" "The printer is executing instructions. Please restart printing after it ends" -msgstr "列印設備正在執行指令,請在指令結束後重新開始列印" +msgstr "" +"列印設備正在執行指令,請在指令結束後重新開始列印" -#, fuzzy msgid "The printer is busy on other print job" msgstr "列印設備正在執行其他列印作業" -#, fuzzy, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" "線材編號 %s 超出 AMS 槽位數量,請更新列印設備韌體以支援 AMS 槽位映射功能。" -#, fuzzy msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." -msgstr "線材編號超出 AMS 槽位數量,請更新列印設備韌體以支援 AMS 槽位映射功能。" +msgstr "" +"線材編號超出 AMS 槽位數量,請更新列印設備韌體以支援 AMS 槽位映射功能。" -#, fuzzy msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" -"已自動建立 \"線材清單=>AMS 槽位\" 的映射關係。 可點擊上方的線材來手動設定其所" -"對應的 AMS 槽位" +"線材與 AMS 槽位的映射關係已設定完成。你可以點擊上方的線材來更改其對應的 AMS 槽位" msgid "" "Please click each filament above to specify its mapping AMS slot before " "sending the print job" -msgstr "請在傳送列印前點擊上方各個線材,指定其所對應的 AMS 槽位" +msgstr "" +"請在傳送列印前點擊上方各個線材,指定其所對應的 AMS 槽位" -#, fuzzy, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"線材編號 %s 和 AMS 槽位 %s 中的線材材質不相符,請更新列印設備韌體以支援 AMS " -"槽位映射功能" +"線材編號 %s 和 AMS 槽位 %s 中的線材材質不相符,請更新列印設備韌體以支援 AMS 槽位映射功能。" + -#, fuzzy msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"材料編號和 AMS 槽位中的線材材質不相符,請更新列印設備韌體以支援 AMS 槽位映射" -"功能" +"材料編號和 AMS 槽位中的線材材質不相符,請更新列印設備韌體以支援 AMS 槽位映射功能。" -#, fuzzy msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"已自動建立 \"線材清單=>AMS 槽位\" 的映射關係。 可點擊上方的線材來手動設定其所" -"對應的 AMS 槽位" +"已自動建立「線材清單 => AMS 槽位」的映射關係。 可點擊上方的線材來手動設定其所對應的 AMS 槽位。" msgid "An SD card needs to be inserted before printing." -msgstr "請在進行列印前插入 SD 記憶卡" +msgstr "請在進行列印前插入 SD 記憶卡。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The selected printer (%s) is incompatible with the chosen printer profile in " "the slicer (%s)." msgstr "" +"選定的列印設備(%s)與切片軟體中選擇的列印設備設定檔(%s)不相容。" msgid "An SD card needs to be inserted to record timelapse." -msgstr "使用縮時攝影功能需要插入 SD 記憶卡" +msgstr "使用縮時攝影功能需要插入 SD 記憶卡。" msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." -msgstr "機台需要更新韌體才能接收列印作業" +msgstr "" +"機台需要更新韌體才能接收列印作業。" msgid "Cannot send the print job for empty plate" msgstr "無法傳送空的列印板" -#, fuzzy msgid "This printer does not support printing all plates" msgstr "此列印設備類型不支援列印所有列印板" msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." -msgstr "當啟用花瓶模式時,門架結構的設備不會產生縮時攝影影片" +msgstr "" +"當啟用螺旋花瓶模式時,龍門結構的設備不會產生縮時攝影影片。" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." -msgstr "逐件列印模式下不支援縮時錄影" +msgstr "" +"『逐件列印』模式下不支援縮時錄影。" msgid "Errors" msgstr "錯誤" @@ -7102,55 +7121,58 @@ msgid "" "currently selected printer. It is recommended that you use the same printer " "type for slicing." msgstr "" -"產生 G-code 時選擇的列印設備類型與目前選擇的列印設備不一致。建議你使用相同的" -"列印設備類型進行切片。" +"產生 G-code 時選擇的列印設備類型與目前選擇的列印設備不一致。建議你使用相同的列印設備類型進行切片。" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"AMS 設定中存在一些未知的線材。請檢查是否符合所需的線材。如果符合,按\"確定" -"\"以開始列印作業。" +"AMS 設定中存在一些未知的線材。請檢查是否符合所需的線材。如果符合,按『確定』以開始列印作業。" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "預設中的噴嘴:%s %s" #, c-format, boost-format msgid "nozzle memorized: %.2f %s" -msgstr "" +msgstr "記憶中的噴嘴:%.2f %s" msgid "" "Your nozzle diameter in sliced file is not consistent with memorized nozzle. " "If you changed your nozzle lately, please go to Device > Printer Parts to " "change settings." msgstr "" +"切片文件中的噴嘴直徑與記憶中的噴嘴不一致。如果你最近更換了噴嘴,請前往「設備 > 列印機部件」更新設定。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Printing high temperature material(%s material) with %s may cause nozzle " "damage" msgstr "" +"使用 %s 列印高溫材料(%s 材料)可能會導致噴嘴損壞" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "請排除上述錯誤,否則無法繼續列印" +msgstr "請排除上述錯誤,否則無法繼續列印。" msgid "" "Please click the confirm button if you still want to proceed with printing." -msgstr "如果你仍然想繼續列印,請滑鼠左鍵點擊 確定 按鈕。" +msgstr "" +"如果你仍然想繼續列印,請滑鼠左鍵點擊『確定』按鈕。" msgid "" "Connecting to the printer. Unable to cancel during the connection process." -msgstr "正在連接列印設備。連接過程中無法取消。" +msgstr "" +"正在連接列印設備。連接過程中無法取消。" msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." -msgstr "小心使用!紋理 PEI 板 上的流量校準可能會因表面光線散射而失敗。" +msgstr "" +"小心使用!紋理 PEI 板 上的流量校準可能會因表面光線散射而失敗。" msgid "Automatic flow calibration using Micro Lidar" -msgstr "使用微型雷射雷達進行自動流量校準" +msgstr "使用 Micro Lidar 進行自動流量校準" msgid "Modifying the device name" msgstr "修改列印設備名稱" @@ -7168,7 +7190,7 @@ msgid "The selected printer is incompatible with the chosen printer presets." msgstr "所選列印設備與選擇的列印設備預設檔不相容。" msgid "An SD card needs to be inserted before send to printer SD card." -msgstr "傳送到列印設備需要插入 SD 記憶卡" +msgstr "傳送到列印設備需要插入 SD 記憶卡。" msgid "The printer is required to be in the same LAN as Orca Slicer." msgstr "列印設備需要與 Orca Slicer 在同一個區域網路內。" @@ -7177,7 +7199,7 @@ msgid "The printer does not support sending to printer SD card." msgstr "該列印設備不支援傳送到 SD 記憶卡。" msgid "Slice ok." -msgstr "切片完成." +msgstr "切片完成。" msgid "View all Daily tips" msgstr "顯示所有每日提示" @@ -7192,15 +7214,14 @@ msgid "Failed to publish login request" msgstr "請求登陸失敗" msgid "Get ticket from device timeout" -msgstr "" +msgstr "從設備獲取票證超時" msgid "Get ticket from server timeout" -msgstr "" +msgstr "從伺服器獲取票證超時" msgid "Failed to post ticket to server" -msgstr "" +msgstr "將票證提交到伺服器失敗" -#, fuzzy msgid "Failed to parse login report reason" msgstr "無法解析登入回覆" @@ -7230,7 +7251,7 @@ msgid "Please confirm on the printer screen" msgstr "請到機台上按確認" msgid "Log in failed. Please check the Pin Code." -msgstr "登入失敗。請確認Pin" +msgstr "登入失敗。請檢查 Pin碼。" msgid "Log in printer" msgstr "登入列印設備" @@ -7254,24 +7275,22 @@ msgid "" "Use(collectively, the \"Terms\"). If you do not comply with or agree to the " "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" -"感謝你購買 Bambu Lab 設備,使用 Bambu Lab 設備前,請閱讀一下條款,點擊同意使" -"用你的 Bambu Lab 設備即表示你同意遵守隱私政策以及使用條款(統稱為 條款 )。如" -"果你不願遵守或不同意 Bambu Lab 隱私政策,請不要使用 Bambu Lab 設備和服務。" +"感謝你購買 Bambu Lab 設備。在使用 Bambu Lab 設備之前,請先閱讀條款與條件。點擊同意使用 Bambu Lab 設備,即表示你同意遵守隱私政策與使用條款(以下統稱「條款」)。若你不同意或無法遵守 Bambu Lab 隱私政策,請勿使用 " +"Bambu Lab 的設備及服務。" msgid "and" -msgstr " 與 " +msgstr "與" msgid "Privacy Policy" msgstr "隱私協議" -#, fuzzy msgid "We ask for your help to improve everyone's printer" msgstr "我們請求你的幫助來改善大家的列印設備" msgid "Statement about User Experience Improvement Program" msgstr "關於使用者體驗改善計劃的聲明" -#, fuzzy, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "In the 3D Printing community, we learn from each other's successes and " "failures to adjust our own slicing parameters and settings. %s follows the " @@ -7285,13 +7304,9 @@ msgid "" "payment information, or phone numbers. By enabling this service, you agree " "to these terms and the statement about Privacy Policy." msgstr "" -"在 3D 列印社區,我們從彼此的成功和失敗中學習調整自己的切片參數和設定。%s 遵循" -"同樣的原則,透過機器學習的方式從大量使用者列印的成功和失敗中獲取經驗,從而改" -"善列印性能。我們正在透過向 %s 提供真實世界的資料來訓練他們變得更聰明。如果你" -"願意,此服務將訪問你的錯誤日誌和使用日誌中的資訊,其中可能包括隱私政策中描述" -"的資料。我們不會收集任何可以直接或間接識別個人的個人資料,包括但不限於姓名、" -"地址、支付資訊或電話號碼。啟用此服務即表示你同意這些條款和有關隱私政策的聲" -"明。" +"在 3D 列印社群中,我們通過分享彼此的成功與失敗經驗來調整切片參數與設置。%s 也採用了相同的原則,利用機器學習,透過用戶的大量列印成功與失敗數據來提升其性能。我們正以實際應用數據來訓練 %s,使其變得更智能。如果你" +"願意,這項服務將存取你的錯誤日誌和使用日誌,其中可能包含隱私政策中提到的相關資訊。我們不會收集任何可直接或間接識別個人身份的個人資料,包括但不限於姓名、地址、支付資訊或電話號碼。啟用此服務即表示你同意這些條款" +"及隱私政策聲明。" msgid "Statement on User Experience Improvement Plan" msgstr "關於使用者體驗改善計劃的聲明" @@ -7315,7 +7330,7 @@ msgid "Failed to log out." msgstr "登出失敗。" #. TRN "Save current Settings" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Save current %s" msgstr "儲存目前 %s" @@ -7332,14 +7347,13 @@ msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。確定要關閉換料塔" -"嗎?" +"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。你是否要關閉換料塔?" msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。要打開換料塔嗎?" +"平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。你是否要啟用換料塔?" msgid "Still print by object?" msgstr "持續逐件列印?" @@ -7349,9 +7363,8 @@ msgid "" "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"我們增加了一種實驗性的支撐樣式 \"苗條樹\",它的特點是支撐體積較小,但強度較" -"弱。\n" -"因此我們推薦以下參數:界面數為 0,頂部Z距離為 0,牆層數為 2。" +"我們新增了一種實驗性支撐樣式『苗條樹』,具有更小的支撐體積但強度較低。\n" +"建議使用以下設置:0 個介面層、0 頂部距離、2 層牆。" msgid "" "Change these settings automatically? \n" @@ -7367,8 +7380,7 @@ msgid "" "settings: at least 2 interface layers, at least 0.1mm top z distance or " "using support materials on interface." msgstr "" -"對於 \"強壯樹 \"和 \"混合樹 \"的支撐樣式,我們推薦以下設定:至少 2 層界面層," -"至少 0.1 毫米的頂部z距離或使用專用的支撐線材。" +"對於 \"強壯樹 \"和 \"混合樹 \"的支撐樣式,我們推薦以下設定:至少 2 層界面層,至少 0.1 毫米的頂部z距離或使用專用的支撐線材。" msgid "" "When using support material for the support interface, We recommend the " @@ -7384,9 +7396,10 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" +"啟用此選項將會改變模型形狀。如果你的列印需要精準的尺寸或屬於組裝件的一部分,請務必再次確認此幾何形狀的更改是否會影響你的列印。" msgid "Are you sure you want to enable this option?" -msgstr "" +msgstr "你確定要啟用此選項嗎?" msgid "" "Layer height is too small.\n" @@ -7416,6 +7429,7 @@ msgid "" "reduce flush, it may also elevate the risk of nozzle clogs or other " "printing complications." msgstr "" +"實驗性功能:在換線過程中以更大的距離收回並切斷線材,以減少沖洗量。儘管這可以顯著減少沖洗,但也可能增加噴嘴堵塞或其他列印問題的風險。" msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " @@ -7423,16 +7437,16 @@ msgid "" "reduce flush, it may also elevate the risk of nozzle clogs or other printing " "complications.Please use with the latest printer firmware." msgstr "" +"實驗性功能:在換線過程中以更大的距離收回並切斷線材,以減少沖洗量。儘管這可以顯著減少沖洗,但也可能增加噴嘴堵塞或其他列印問題的風險。請搭配最新的打印機韌體使用。" -#, fuzzy 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\"." msgstr "" -"在錄製無工具頭縮時錄影影片時,建議增加\"縮時錄影換料塔\"\n" -"右鍵單擊列印板的空白位置,選擇\"新增標準模型\"->\"縮時錄影換料塔\"。" +"在錄製無工具頭縮時錄影影片時,建議添加一個「縮時錄影換料塔」\n" +"可以通過右鍵點擊構建板的空白位置,選擇『新增標準模型』->『縮時錄影換料塔』來進行添加。" msgid "Line width" msgstr "線寬" @@ -7475,8 +7489,7 @@ msgid "" "expressed as a percentage of line width. 0 speed means no slowing down for " "the overhang degree range and wall speed is used" msgstr "" -"不同懸空程度的列印速度。懸空程度使用相對於線寬的百分比表示。速度為 0 代表這個" -"懸空程度範圍內不降速,直接使用牆的速度" +"此設置是為不同懸空角度指定的速度。懸空角度以線寬的百分比表示。若速度設置為 0,表示該懸空角度範圍內不會減速,將使用牆面速度" msgid "Bridge" msgstr "橋接" @@ -7509,13 +7522,13 @@ msgid "Prime tower" msgstr "換料塔" msgid "Filament for Features" -msgstr "" +msgstr "用於特徵的線材" msgid "Ooze prevention" msgstr "防止漏料" msgid "Skirt" -msgstr "側裙" +msgstr "Skirt" msgid "Special mode" msgstr "特殊模式" @@ -7532,7 +7545,7 @@ msgstr "備註" msgid "Frequent" msgstr "常用" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Following line %s contains reserved keywords.\n" "Please remove it, or will beat G-code visualization and printing time " @@ -7543,7 +7556,7 @@ msgid_plural "" "estimation." msgstr[0] "" "以下行 %s 包含保留關鍵字。\n" -"請將其移除,否則將影響 G-code 視覺化和列印時間估計。" +"請將其移除,否則將影響 G-code 的視覺化和列印時間估算。" msgid "Reserved keywords found" msgstr "偵測到保留的關鍵字" @@ -7579,12 +7592,13 @@ msgid "Nozzle temperature when printing" msgstr "列印時的噴嘴溫度" msgid "Cool Plate (SuperTack)" -msgstr "" +msgstr "低溫增穩列印板" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate SuperTack" msgstr "" +"使用低溫增穩列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於低溫增穩列印板" msgid "Cool Plate" msgstr "低溫列印板" @@ -7592,34 +7606,36 @@ msgstr "低溫列印板" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" -msgstr "使用低溫列印板時的熱床溫度。0 值表示這個線材不支援低溫列印板" +msgstr "" +"使用低溫列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於低溫列印板" msgid "Textured Cool plate" -msgstr "紋理低溫列印板" +msgstr "低溫紋理列印板" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Textured Cool Plate" msgstr "" +"使用紋理低溫列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於低溫紋理列印板" msgid "Engineering plate" -msgstr "工程高溫列印板" +msgstr "工程列印板" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" -msgstr "使用工程高溫列印板時的熱床溫度。0 值表示這個線材不支援工程高溫列印板" +msgstr "" +"使用工程列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於工程列印板" 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 列印板 / 高溫列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於平滑 PEI 列印板 / 高溫列印板" msgid "Textured PEI Plate" msgstr "紋理 PEI 列印板" @@ -7627,7 +7643,8 @@ msgstr "紋理 PEI 列印板" 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 "使用紋理 PEI 列印板時的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" +msgstr "" +"使用紋理 PEI 列印板時,熱床設定溫度其值為 0 ,表示該線材不適用於紋理 PEI 列印板" msgid "Volumetric speed limitation" msgstr "體積流量速度限制" @@ -7650,8 +7667,7 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"當預計的層時間小於設定的層時間時,物件冷卻風扇速度將開始以最小速度運轉。當層" -"時間小於設定值時,風扇速度將根據該層列印時間在最小和最大風扇速度之間自動調整" +"當預計的層時間小於設定的層時間時,物件冷卻風扇速度將開始以最小速度運轉。當層時間小於設定值時,風扇速度將根據該層列印時間在最小和最大風扇速度之間自動調整" msgid "Max fan speed threshold" msgstr "最大風扇速度臨界值" @@ -7659,7 +7675,8 @@ msgstr "最大風扇速度臨界值" msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" -msgstr "當預計的層列印時間比設定值要小時,物件冷卻風扇轉速將達到最大值" +msgstr "" +"當預計的層列印時間比設定值要小時,物件冷卻風扇轉速將達到最大值" msgid "Auxiliary part cooling fan" msgstr "輔助冷卻風扇" @@ -7680,30 +7697,27 @@ msgid "Filament end G-code" msgstr "線材結束 G-code" msgid "Wipe tower parameters" -msgstr "色塔參數" +msgstr "換料塔參數" -#, fuzzy msgid "Toolchange parameters with single extruder MM printers" -msgstr "單擠出機多線材列印設備換色參數" +msgstr "適用於單擠出機多材料打印機的工具切換參數" -#, fuzzy msgid "Ramming settings" msgstr "尖端成型設定" -#, fuzzy msgid "Toolchange parameters with multi extruder MM printers" -msgstr "多擠出機多線材列印設備換色參數" +msgstr "適用於多擠出機多材料打印機的工具切換參數" msgid "Printable space" msgstr "可列印區域" #. TRN: First argument is parameter name, the second one is the value. -#, boost-format +#, possible-boost-format msgid "Invalid value provided for parameter %1%: %2%" -msgstr "" +msgstr "參數 %1% 的值無效:%2%" msgid "G-code flavor is switched" -msgstr "" +msgstr "G-code 格式已切換" msgid "Cooling Fan" msgstr "冷卻風扇" @@ -7715,7 +7729,7 @@ msgid "Extruder Clearance" msgstr "擠出機避讓空間" msgid "Adaptive bed mesh" -msgstr "自適應床面網格" +msgstr "自適應熱床網格" msgid "Accessory" msgstr "配件" @@ -7730,7 +7744,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" @@ -7745,7 +7759,7 @@ msgid "Change filament G-code" msgstr "線材更換 G-code" msgid "Change extrusion role G-code" -msgstr "" +msgstr "變更擠出機任務的 G-code" msgid "Pause G-code" msgstr "暫停 G-code" @@ -7772,7 +7786,7 @@ msgid "Single extruder multi-material setup" msgstr "單擠出機多線材設定" msgid "Number of extruders of the printer." -msgstr "機台擠出機數量" +msgstr "機台擠出機數量。" msgid "" "Single Extruder Multi Material is selected, \n" @@ -7780,12 +7794,15 @@ msgid "" "Do you want to change the diameter for all extruders to first extruder " "nozzle diameter value?" msgstr "" +"已選擇單噴頭多材料模式,\n" +"所有噴頭的直徑必須相同。\n" +"你是否要將所有噴頭的直徑更改為第一噴頭的噴嘴直徑值?" msgid "Nozzle diameter" msgstr "噴嘴直徑" msgid "Wipe tower" -msgstr "色塔" +msgstr "換料塔" msgid "Single extruder multi-material parameters" msgstr "單擠出機多線材參數" @@ -7794,12 +7811,13 @@ msgid "" "This is a single extruder multi-material printer, diameters of all extruders " "will be set to the new value. Do you want to proceed?" msgstr "" +"這是一台單噴頭多材料列印機,所有噴頭的直徑將被設置為新的值。你要繼續嗎?" msgid "Layer height limits" msgstr "層高限制" msgid "Z-Hop" -msgstr "" +msgstr "Z 軸抬升" msgid "Retraction when switching material" msgstr "切換線材時的回抽量" @@ -7809,8 +7827,9 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" -"使用韌體回抽模式時,擦拭選項不可用。\n" -"是否禁用擦拭選項來啟用韌體回抽?" +"當使用韌體回抽模式時,擦拭選項不可用。\n" +"\n" +"是否需要禁用擦拭以啟用韌體回抽?" msgid "Firmware Retraction" msgstr "韌體回抽" @@ -7818,37 +7837,38 @@ msgstr "韌體回抽" msgid "Detached" msgstr "分離的" -#, c-format, boost-format +#, possible-c-format, possible-boost-format 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 處理預設。若刪除此印表設備,這些預設將被刪" -"除。" +"此列印設備含有 %d 線材預設和 %d 列印參數預設。若刪除此列印設備,這些預設將被刪除。" msgid "Presets inherited by other presets can not be deleted!" 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 +#, possible-boost-format msgid "%1% Preset" msgstr "%1% 預設" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "下列預設將被一起刪除。" +msgstr[0] "以下預設將一起被刪除。" 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 "" +"你確定要刪除所選預設嗎?\n" +"如果該預設對應的是列印設備當前使用的線材,請重置該槽位的線材資訊。" -#, boost-format +#, possible-boost-format msgid "Are you sure to %1% the selected preset?" msgstr "確定要 %1% 所選預設嗎?" @@ -7858,7 +7878,6 @@ msgstr "所有" msgid "Set" msgstr "設定" -#, fuzzy msgid "Click to reset current value and attach to the global value." msgstr "點擊該圖示,恢復到全域的設定數值,並與全域設定同步變化。" @@ -7910,41 +7929,43 @@ msgstr "保留所選項目。" msgid "Transfer the selected options to the newly selected preset." msgstr "將所選項目遷移到新的預設中。" -#, fuzzy, boost-format +#, possible-boost-format msgid "" "Save the selected options to preset \n" "\"%1%\"." msgstr "" -"儲存所選選項到預設 \n" -"\"%1%\"。" +"將所選的選項儲存到預設\n" +"「%1%」。" -#, fuzzy, boost-format +#, possible-boost-format msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"將選擇的選項轉移到新選擇的預設 \n" -"\"%1%\"。" +"將所選的選項轉移至新選擇的預設\n" +"「%1%」。" -#, boost-format +#, possible-boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" -msgstr "預設 \"%1%\" 包含以下未儲存的修改:" +msgstr "預設「%1%」包含以下未儲存的變更:" -#, fuzzy, boost-format +#, possible-boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" -msgstr "預設檔 \"%1%\" 與新的列印設備預設不相容,並且包含以下未儲存的修改:" +msgstr "" +"預設「%1%」與新的列印設備設定檔不相容,且包含以下未儲存的變更:" -#, fuzzy, boost-format +#, possible-boost-format msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" -msgstr "預設 \"%1%\" 和新的列印品質預設不相容,並且它包含以下未儲存的修改:" +msgstr "" +"預設「%1%」與新的列印參數設定檔不相容,並包含以下未儲存的變更:" -#, boost-format +#, possible-boost-format msgid "You have changed some settings of preset \"%1%\". " -msgstr "已更改預設 \"%1%\" 的一些設定。" +msgstr "已更改預設「%1%」的一些設定。" msgid "" "\n" @@ -7962,7 +7983,7 @@ msgstr "" "你可以儲存或放棄已修改的預設值,或選擇將修改的數值轉移到新的預設值。" msgid "You have previously modified your settings." -msgstr "" +msgstr "你之前已經對設定進行了修改。" msgid "" "\n" @@ -7970,7 +7991,7 @@ msgid "" "the modified values to the new project" msgstr "" "\n" -"你可以放棄已修改的預設值,或選擇將修改的數值轉移到新專案中。" +"你可以放棄已修改的預設值,或選擇將修改的數值轉移到新專案中" msgid "Extruders count" msgstr "擠出機數量" @@ -7987,15 +8008,16 @@ msgstr "顯示所有預設(包括不相容的)" msgid "Select presets to compare" msgstr "選擇要比較的預設" -msgid "" -"You can only transfer to current active profile because it has been modified." -msgstr "" +msgid "You can only transfer to current active profile because it has been modified." +msgstr "因為當前的設定檔已被修改,你只能轉移到目前啟用的設定檔。" msgid "" "Transfer the selected options from left preset to the right.\n" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" +"所選的選項從左側預設移至右側。\n" +"注意:關閉此對話框後,修改後的預設將在設置頁面中自動選取。" msgid "Transfer values from left to right" msgstr "將數值從左邊轉移到右邊" @@ -8003,7 +8025,8 @@ msgstr "將數值從左邊轉移到右邊" msgid "" "If enabled, this dialog can be used for transfer selected values from left " "to right preset." -msgstr "如果啟用,則此視窗可用於將選定的數值從左邊轉移到右邊的預設值。" +msgstr "" +"如果啟用,則此視窗可用於將選定的數值從左邊轉移到右邊的預設值。" msgid "Add File" msgstr "新增檔案" @@ -8014,9 +8037,9 @@ msgstr "設定為封面" msgid "Cover" msgstr "封面" -#, boost-format +#, possible-boost-format msgid "The name \"%1%\" already exists." -msgstr "\"%1%\" 已經存在。" +msgstr "「%1%」已經存在。" msgid "Basic Info" msgstr "基本資訊" @@ -8024,7 +8047,6 @@ msgstr "基本資訊" msgid "Pictures" msgstr "圖片" -#, fuzzy msgid "Bill of Materials" msgstr "材料清單" @@ -8037,7 +8059,7 @@ msgstr "作者" msgid "Model Name" msgstr "模型名字" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "%s Update" msgstr "%s 更新" @@ -8059,19 +8081,18 @@ msgstr "設定檔不相容" msgid "the configuration package is incompatible with current application." msgstr "設定檔和目前的應用程式不相容。" -#, fuzzy, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The configuration package is incompatible with current application.\n" "%s will update the configuration package, Otherwise it won't be able to start" msgstr "" -"設定檔和目前的應用程式不相容。\n" -"%s 會更新設定檔,否則無法正常啟動" +"設定檔與目前的應用程式不相容。\n" +"%s 將更新設定檔,否則應用程式將無法啟動" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "Exit %s" msgstr "退出 %s" -#, fuzzy msgid "the Configuration package is incompatible with current APP." msgstr "設定檔與目前(手機應用程式)?不相容。" @@ -8085,54 +8106,56 @@ msgid "The configuration is up to date." msgstr "目前設定檔已經是最新版本。" msgid "Obj file Import color" -msgstr "" +msgstr "Obj 文件匯入顏色" msgid "Specify number of colors:" -msgstr "" +msgstr "指定顏色數量:" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "The color count should be in range [%d, %d]." -msgstr "" +msgstr "顏色數量應在 [%d, %d] 範圍內。" msgid "Recommended " -msgstr "" +msgstr "建議 " msgid "Current filament colors:" -msgstr "" +msgstr "當前線材顏色:" msgid "Quick set:" -msgstr "" +msgstr "快速設置:" msgid "Color match" -msgstr "" +msgstr "顏色匹配" msgid "Approximate color matching." -msgstr "" +msgstr "近似顏色匹配。" msgid "Append" -msgstr "" +msgstr "追加" msgid "Add consumable extruder after existing extruders." -msgstr "" +msgstr "在現有擠出機後新增可用的擠出機。" msgid "Reset mapped extruders." -msgstr "" +msgstr "重設已映射的擠出機。" msgid "Cluster colors" -msgstr "" +msgstr "色彩分群" msgid "Map Filament" -msgstr "" +msgstr "映射線材" msgid "" "Note:The color has been selected, you can choose OK \n" " to continue or manually adjust it." msgstr "" +"注意:顏色已選擇,你可以點擊確定繼續,\n" +"或者手動進行調整。" msgid "" "Waring:The count of newly added and \n" " current extruders exceeds 16." -msgstr "" +msgstr "警告:新增的擠出機量與當前擠出機總數超過 16。" msgid "Ramming customization" msgstr "自訂尖端成型" @@ -8149,10 +8172,8 @@ msgid "" "jams, extruder wheel grinding into filament etc." msgstr "" "尖端成型是指在單擠出機多線材列印設備中換色之前的快速抽插。\n" -"其目的是使退出的線材末端正確成形,這樣就不會妨礙新線材的插入,並可以重新插" -"入。\n" -"這個階段很重要,不同的線材可能需要不同的擠出速度才能獲得良好的形狀。因此尖端" -"成型過程中的擠壓率是需要可調整的。\n" +"其目的是使退出的線材末端正確成形,這樣就不會妨礙新線材的插入,並可以重新插入。\n" +"這個階段很重要,不同的線材可能需要不同的擠出速度才能獲得良好的形狀。因此尖端成型過程中的擠壓率是需要可調整的。\n" "這是一個進階的設定,不正確的調整可能會導致堵塞、線材磨損等。" msgid "Total ramming time" @@ -8167,7 +8188,6 @@ msgstr "尖端成型總體積" msgid "Ramming line width" msgstr "尖端成型線寬" -#, fuzzy msgid "Ramming line spacing" msgstr "尖端成型線間距" @@ -8175,7 +8195,7 @@ msgid "Auto-Calc" msgstr "自動計算" msgid "Re-calculate" -msgstr "" +msgstr "重新計算" msgid "Flushing volumes for filament change" msgstr "線材更換時產生的廢料體積" @@ -8184,15 +8204,16 @@ msgid "" "Orca would re-calculate your flushing volumes every time 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³)" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" msgstr "建議:廢料體積量應設定在[ %d, %d ]範圍內" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "The multiplier should be in range [%.2f, %.2f]." msgstr "倍數的數值範圍是[%.2f, %.2f]" @@ -8218,38 +8239,41 @@ msgid "" "Windows Media Player is required for this task! Do you want to enable " "'Windows Media Player' for your operation system?" msgstr "" +"執行此設置需要 Windows Media Player!你是否要啟用 Windows Media Player?" msgid "" "BambuSource has not correctly been registered for media playing! Press Yes " "to re-register it. You will be promoted twice" msgstr "" +"「BambuSource 未正確註冊為媒體播放模組!請點擊『是』進行重新註冊,過程中會有兩次提示" msgid "" "Missing BambuSource component registered for media playing! Please re-" "install BambuStudio or seek after-sales help." msgstr "" +"缺少 BambuSource 媒體播放組件!請重新安裝 BambuStudio 或聯繫售後支援。" msgid "" "Using a BambuSource from a different install, video play may not work " "correctly! Press Yes to fix it." -msgstr "" +msgstr """BambuSource 來自其他安裝版本,可能導致影片播放異常!請點擊『是』進行修復。" msgid "" "Your system is missing H.264 codecs for GStreamer, which are required to " "play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" "libav packages, then restart Orca Slicer?)" msgstr "" +"你的系統缺少 GStreamer 的 H.264 編解碼器,這是播放影片所必需的。(請嘗試安裝 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 套件,然後重新啟動 Orca Slicer。)" msgid "Bambu Network plug-in not detected." -msgstr "" +msgstr "未偵測到 Bambu 網路插件。" msgid "Click here to download it." -msgstr "下載" +msgstr "點擊下載。" msgid "Login" msgstr "登入" -#, fuzzy msgid "The configuration package is changed in previous Config Guide" msgstr "設定檔在之前的設定引導過程中已改變" @@ -8266,20 +8290,19 @@ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "從 STL/STEP/3MF/OBJ/AMF 檔案中匯入幾何模型" msgid "⌘+Shift+G" -msgstr "" +msgstr "⌘+Shift+G" msgid "Ctrl+Shift+G" -msgstr "" +msgstr "Ctrl+Shift+G" msgid "Paste from clipboard" msgstr "從剪貼簿貼上" -#, fuzzy msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "顯示/隱藏 3Dconnexion 設備的設定對話框" msgid "Switch table page" -msgstr "" +msgstr "切換表單頁面" msgid "Show keyboard shortcuts list" msgstr "顯示鍵盤快捷鍵清單" @@ -8300,22 +8323,21 @@ msgid "Zoom View" msgstr "縮放視角" msgid "Shift+A" -msgstr "" +msgstr "Shift+A" msgid "Shift+R" -msgstr "" +msgstr "Shift+R" -#, fuzzy msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" "自動調整選取零件/所有零件的方向,\n" -"有選取零件時調整選取零件的方向,沒有選取零件時調整目前列印板所有零件的方向" +"有選取零件時調整選取零件的方向,沒有選取零件時調整目前列印板所有零件的方向。" msgid "Shift+Tab" -msgstr "" +msgstr "Shift+Tab" msgid "Collapse/Expand the sidebar" msgstr "摺疊/展開 側邊欄" @@ -8323,7 +8345,6 @@ msgstr "摺疊/展開 側邊欄" msgid "⌘+Any arrow" msgstr "⌘+方向鍵" -#, fuzzy msgid "Movement in camera space" msgstr "沿相機視角移動物件" @@ -8433,7 +8454,7 @@ msgid "Gizmo FDM paint-on seam" msgstr "FDM 塗裝接縫" msgid "Gizmo Text emboss / engrave" -msgstr "" +msgstr "浮雕/雕刻文字工具" msgid "Zoom in" msgstr "放大" @@ -8469,7 +8490,7 @@ msgid "Alt+Mouse wheel" msgstr "Alt+滑鼠滾輪" msgid "Gizmo" -msgstr "" +msgstr "浮雕" msgid "Set extruder number for the objects and parts" msgstr "設定物件、零件使用的擠出機編號" @@ -8514,28 +8535,29 @@ msgid "Shift+Mouse wheel" msgstr "Shift+滑鼠滾輪" msgid "Horizontal slider - Move to start position" -msgstr "" +msgstr "水平滑動條 - 移動到起始位置" msgid "Horizontal slider - Move to last position" -msgstr "" +msgstr "水平滑動條 - 移動到最後位置" msgid "Release Note" msgstr "更新說明" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "version %s update information :" -msgstr "版本 %s 更新資訊" +msgstr "版本 %s 更新資訊:" msgid "Network plug-in update" msgstr "網路插件升級" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." -msgstr "按下「確定」後,下次啟動 Orca Slicer 時會更新網路插件" +msgstr "" +"按下『確定』後,下次啟動 Orca Slicer 時會更新網路插件。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "新版的網路插件( %s)可用,是否要安裝?" +msgstr "新版的網路插件(%s)可用,是否要安裝?" msgid "New version of Orca Slicer" msgstr "新版本的 Orca Slicer" @@ -8562,7 +8584,7 @@ msgid "Stop Printing" msgstr "停止列印" msgid "Check Assistant" -msgstr "" +msgstr "檢查助手" msgid "Filament Extruded, Continue" msgstr "線才擠出,繼續" @@ -8580,17 +8602,17 @@ msgid "Filament Loaded, Resume" msgstr "進料完成,繼續" msgid "View Liveview" -msgstr "" +msgstr "預覽 Liveview" msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "確認並更新噴嘴" msgid "LAN Connection Failed (Sending print file)" msgstr "區域網路連接失敗(傳送列印檔案)" msgid "" "Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "第1步,請確認 Orca Slicer 和你的列印設備在同一個區域網路上。" +msgstr """第1步,請確認 Orca Slicer 和你的列印設備在同一個區域網路上。" msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -8599,7 +8621,7 @@ msgstr "" "步驟2, 如果下面的 IP 和訪問碼與列印設備上的實際值不同,請輸入正確的數值。" msgid "IP" -msgstr "" +msgstr "IP" msgid "Access Code" msgstr "訪問碼" @@ -8614,17 +8636,17 @@ msgid "Test" msgstr "測試" msgid "IP and Access Code Verified! You may close the window" -msgstr "IP 和存取碼已驗證!可以關閉視窗。" +msgstr "IP 和存取碼已驗證!可以關閉視窗" msgid "Connection failed, please double check IP and Access Code" -msgstr "連接失敗,請再次檢查 IP 和存取碼。" +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" -"請進入第 3 步進行網路問題排解。" +"請進入第 3 步進行網路問題排解" msgid "Model:" msgstr "型號:" @@ -8639,7 +8661,7 @@ msgid "Update firmware" msgstr "更新韌體" msgid "Beta version" -msgstr "" +msgstr "Beta 版本" msgid "Latest version" msgstr "最新版本" @@ -8656,24 +8678,22 @@ msgstr "更新成功" msgid "" "Are you sure you want to update? This will take about 10 minutes. Do not " "turn off the power while the printer is updating." -msgstr "確定要更新嗎?更新需要大約10分鐘,更新期間請勿關閉電源。" +msgstr "" +"確定要更新嗎?更新需要大約10分鐘,更新期間請勿關閉電源。" msgid "" "An important update was detected and needs to be run before printing can " "continue. Do you want to update now? You can also update later from 'Upgrade " "firmware'." msgstr "" -"偵測到重要更新,需要升級後才可進行列印。你想現在就開始升級嗎?你也可以稍後點" -"擊‘升級韌體’完成升級。" +"檢測到重要更新,必須執行後才能繼續列印。你要現在更新嗎?或者稍後可在『升級韌體』中完成更新。" -#, fuzzy msgid "" "The firmware version is abnormal. Repairing and updating are required before " "printing. Do you want to update now? You can also update later on printer or " "update next time starting Orca." msgstr "" -"目前韌體版本異常,需要進行修復升級,否則無法繼續列印。你想現在就開始升級嗎?" -"你也可以稍後在列印設備上升級,或者下一次啟動 Orca Slicer 再升級。" +"韌體版本異常,必須修復並更新後才能列印。你要現在更新嗎?也可以稍後在列印設備上更新,或在下次啟動 Orca 時進行更新。" msgid "Extension Board" msgstr "擴展板" @@ -8726,19 +8746,18 @@ msgstr "修復已完成" msgid "Repair canceled" msgstr "修復被取消" -#, boost-format +#, possible-boost-format msgid "Copying of file %1% to %2% failed: %3%" msgstr "從 %1% 複製檔案到 %2% 失敗:%3%" -#, fuzzy msgid "Need to check the unsaved changes before configuration updates." msgstr "在設定更新之前需要檢查未儲存的設定變更。" msgid "Configuration package: " -msgstr "" +msgstr "設定檔:" msgid " updated to " -msgstr "" +msgstr "更新到 " msgid "Open G-code file:" msgstr "打開 G-code 檔案:" @@ -8746,28 +8765,31 @@ msgstr "打開 G-code 檔案:" msgid "" "One object has empty initial layer and can't be printed. Please Cut the " "bottom or enable supports." -msgstr "模型出現空層無法列印。請切掉底部或打開支撐。" +msgstr "" +"模型出現空層無法列印。請切掉底部或打開支撐。" -#, boost-format +#, possible-boost-format msgid "Object can't be printed for empty layer between %1% and %2%." msgstr "模型在 %1% 和 %2% 之間出現空層,無法列印。" -#, boost-format +#, possible-boost-format msgid "Object: %1%" msgstr "模型:%1%" msgid "" "Maybe parts of the object at these height are too thin, or the object has " "faulty mesh" -msgstr "部分模型在這些高度可能過薄,或者模型存在缺陷" +msgstr "" +"部分模型在這些高度可能過薄,或者模型存在缺陷" msgid "No object can be printed. Maybe too small" -msgstr "沒有可列印的物件。可能是因為尺寸過小。" +msgstr "沒有可列印的物件。可能是因為尺寸過小" msgid "" "Your print is very close to the priming regions. Make sure there is no " "collision." msgstr "" +"你的列印區域非常接近準備區域,請確認不會發生碰撞。" msgid "" "Failed to generate gcode for invalid custom G-code.\n" @@ -8779,7 +8801,7 @@ msgstr "" msgid "Please check the custom G-code or use the default custom G-code." msgstr "請檢查自訂 G-code,或者使用預設的。" -#, boost-format +#, possible-boost-format msgid "Generating G-code: layer %1%" msgstr "正在產生 G-code:第 %1% 層" @@ -8804,7 +8826,6 @@ msgstr "頂面" msgid "Bottom surface" msgstr "底面" -#, fuzzy msgid "Internal Bridge" msgstr "內部橋接" @@ -8820,14 +8841,15 @@ msgstr "支撐轉換層" msgid "Multiple" msgstr "多個" -#, boost-format +#, possible-boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "計算 %1% 的線寬失敗。無法獲得 \"%2%\" 的值" msgid "" "Invalid spacing supplied to Flow::with_spacing(), check your layer height " "and extrusion width" -msgstr "提供給 Flow::with_spacing()的間距無效,請檢查層高和擠出寬度" +msgstr "" +"提供給 Flow::with_spacing()的間距無效,請檢查層高和擠出寬度" msgid "undefined error" msgstr "未定義的錯誤" @@ -8922,16 +8944,17 @@ msgstr "驗證失敗" msgid "write callback failed" msgstr "寫入回調失敗" -#, boost-format +#, possible-boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." -msgstr "%1% 離不可列印區域太近,可能會發生碰撞。" +msgstr "" +"%1% 離淨空區域太近,可能會發生碰撞。" -#, boost-format +#, possible-boost-format msgid "%1% is too close to others, and collisions may be caused." msgstr "%1% 離其它物件太近,可能會發生碰撞。" -#, boost-format +#, possible-boost-format msgid "%1% is too tall, and collisions will be caused." msgstr "%1% 太高,會發生碰撞。" @@ -8939,7 +8962,7 @@ msgid " is too close to others, there may be collisions when printing." msgstr "離其它物件太近,列印時可能會發生碰撞。" msgid " is too close to exclusion area, there may be collisions when printing." -msgstr "離不可列印區域太近,列印時可能會發生碰撞。" +msgstr "離淨空區域太近,列印時可能會發生碰撞。" msgid "Prime Tower" msgstr "換料塔" @@ -8948,14 +8971,14 @@ msgid " is too close to others, and collisions may be caused.\n" msgstr "離其它物件太近,可能會發生碰撞。\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr "離不可列印區域太近,會發生碰撞。\n" +msgstr "離淨空區域太近,會發生碰撞。\n" msgid "" "Can not print multiple filaments which have large difference of temperature " "together. Otherwise, the extruder and nozzle may be blocked or damaged " "during printing" msgstr "" -"不能將溫度差異過大的線材一起列印。否則擠出機和噴嘴在列印中可能被堵塞或損壞" +"無法法同時列印溫度差異較大的多種線材,否則在列印過程中可能會造成擠出機或噴嘴堵塞甚至損壞" msgid "No extrusions under current settings." msgstr "根據目前設定,不會進行任何列印。" @@ -8963,38 +8986,44 @@ msgstr "根據目前設定,不會進行任何列印。" msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." -msgstr "逐件列印模式下不支援使用平滑模式的縮時錄影。" +msgstr "" +"逐件列印模式下不支援使用平滑模式的縮時錄影。" msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." -msgstr "請選擇逐件列印以支援在花瓶模式下列印多個物件。" +msgstr "" +"請選擇逐件列印以支援在螺旋花瓶模式下列印多個物件。" msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." -msgstr "不支援在包含多個線材的列印中使用花瓶模式。" +msgstr "" +"不支援在包含多個線材的列印中使用螺旋花瓶模式。" -#, boost-format +#, possible-boost-format msgid "" "While the object %1% itself fits the build volume, it exceeds the maximum " "build volume height because of material shrinkage compensation." msgstr "" +"物件 %1% 本身雖然符合構建體積,但由於材料收縮補償,導致其超出了最大構建高度限制。" -#, boost-format +#, possible-boost-format msgid "The object %1% exceeds the maximum build volume height." msgstr "物件 %1% 超出了最大體積高度。" -#, boost-format +#, possible-boost-format msgid "" "While the object %1% itself fits the build volume, its last layer exceeds " "the maximum build volume height." -msgstr "雖然物件 %1% 本身符合列印體積,但最後一層超出了最大列印體積高度。" +msgstr "" +"物件 %1% 本身雖符合構建體積限制,但其最後一層超出了最大構建高度。" msgid "" "You might want to reduce the size of your model or change current print " "settings and retry." -msgstr "你可能想要減小模型的尺寸或更改目前的列印設定並重試。" +msgstr "" +"你可能想要減小模型的尺寸或更改目前的列印設定並重試。" msgid "Variable layer height is not supported with Organic supports." msgstr "有機樹支撐不支持可變層高。" @@ -9004,21 +9033,25 @@ msgid "" "well when the prime tower is enabled. It's very experimental, so please " "proceed with caution." 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)。" +msgstr "" +"換料塔目前僅支援相對擠出機定址 (use_relative_e_distances=1)。" msgid "" "Ooze prevention is only supported with the wipe tower when " "'single_extruder_multi_material' is off." msgstr "" +"『防止漏料』功能僅在 ‘single_extruder_multi_material’ 關閉時,才支援換料塔。" 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 "逐件列印模式下無法使用換料塔。" @@ -9026,28 +9059,32 @@ msgstr "逐件列印模式下無法使用換料塔。" msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." -msgstr "可變層高開啟時無法使用換料塔。它要求所有物件擁有相同的層高。" +msgstr "" +"可變層高開啟時無法使用換料塔。它要求所有物件擁有相同的層高。" msgid "The prime tower requires \"support gap\" to be multiple of layer height" -msgstr "換料塔要求\"支撐間隙\"為層高的整數倍數。" +msgstr "換料塔要求\"支撐間隙\"為層高的整數倍數" msgid "The prime tower requires that all objects have the same layer heights" -msgstr "換料塔要求各個物件擁有同樣的層高。" +msgstr "換料塔要求各個物件擁有同樣的層高" msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" -msgstr "換料塔要求各個物件使用同樣的筏層數量。" +msgstr "" +"換料塔要求各個物件使用同樣的筏層數量" msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." -msgstr "換料塔要求各個物件擁有同樣的層高。" +msgstr "" +"換料塔要求各個物件擁有同樣的層高。" msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" -msgstr "各個物件的層高存在差異,無法啟用換料塔" +msgstr "" +"各個物件的層高存在差異,無法啟用換料塔" msgid "Too small line width" msgstr "線寬太小" @@ -9057,38 +9094,41 @@ msgstr "線寬太大" msgid "" "The prime tower requires that support has the same layer height with object." -msgstr "換料塔要求支撐和物件採用同樣的層高。" +msgstr "" +"換料塔要求支撐和物件採用同樣的層高。" msgid "" "Organic support tree tip diameter must not be smaller than support material " "extrusion width." -msgstr "有機樹狀支撐尖端直徑不得小於支撐材料擠出寬度。" +msgstr "" +"有機樹支撐尖端直徑不得小於支撐材料擠出寬度。" msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." -msgstr "有機樹狀支撐分支直徑不得小於支撐材料擠出寬度的 2 倍。" +msgstr "" +"有機樹狀支撐分支直徑不得小於支撐材料擠出寬度的 2 倍。" msgid "" "Organic support branch diameter must not be smaller than support tree tip " "diameter." -msgstr "有機樹狀支撐枝直徑不得小於支撐樹梢直徑。" +msgstr "" +"有機樹狀支撐枝直徑不得小於支撐樹梢直徑。" msgid "" "Support enforcers are used but support is not enabled. Please enable support." -msgstr "使用支撐添加器但沒有打開支撐。請打開支撐。" +msgstr "" +"使用支撐添加器但沒有打開支撐。請打開支撐。" msgid "Layer height cannot exceed nozzle diameter" msgstr "層高不能超過噴嘴直徑" -#, fuzzy msgid "" "Relative extruder addressing requires resetting the extruder position at " "each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" -"相對擠出機尋址需要重置每層的擠出機位置,以防止浮點精度損失。 將 \"G92 E0\" 加" -"入到 layer_gcode。" +"相對擠出機尋址需要重置每層的擠出機位置,以防止浮點精度損失。 將 \"G92 E0\" 加入到 layer_gcode。" msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " @@ -9099,15 +9139,17 @@ msgstr "" msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." -msgstr "在 layer_gcode 中發現 \"G92 E0\",它與絕對擠出機尋址不相容。" +msgstr "" +"在 layer_gcode 中發現 \"G92 E0\",它與絕對擠出機尋址不相容。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "列印板 %d:%s 不支援線材 %s" +msgstr "" msgid "" "Setting the jerk speed too low could lead to artifacts on curved surfaces" msgstr "" +"抖動速度設置過低可能會在曲面上產生缺陷" msgid "" "The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/" @@ -9117,6 +9159,9 @@ msgid "" "You can adjust the maximum jerk setting in your printer's configuration to " "get higher speeds." msgstr "" +"抖動設定已超過打印機的最大急動值(machine_max_jerk_x/machine_max_jerk_y)。\n" +"Orca 將自動限制急動速度,以確保不超出列印設備的性能範圍。\n" +"如需更高速度,你可以在列印設備配置中調整最大急動值。" msgid "" "The acceleration setting exceeds the printer's maximum acceleration " @@ -9126,6 +9171,9 @@ msgid "" "You can adjust the machine_max_acceleration_extruding value in your " "printer's configuration to get higher speeds." msgstr "" +"加速度設定已超過列印設備的最大加速度值 (machine_max_acceleration_travel)。\n" +"Orca 將自動限制加速度,以確保不超出列印設備的性能範圍。\n" +"如需更高速度,你可以在列印設備配置中調整 machine_max_acceleration_extruding 值。" msgid "" "The travel acceleration setting exceeds the printer's maximum travel " @@ -9135,14 +9183,18 @@ msgid "" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" +"移動加速度設定已超過列印設備的最大移動加速度值(machine_max_acceleration_travel)。\n" +"Orca 將自動限制移動加速度,以確保不超出列印設備的性能範圍。\n" +"如需更高速度,你可以在列印設備配置中調整 machine_max_acceleration_travel 值。" msgid "" "Filament shrinkage will not be used because filament shrinkage for the used " "filaments differs significantly." msgstr "" +"線材收縮補償將被禁用,因為所使用的線材之間的收縮率差異過大。" msgid "Generating skirt & brim" -msgstr "正在產生 skirt 和 brim(裙邊)" +msgstr "正在產生 Skirt 和 Brim" msgid "Exporting G-code" msgstr "正在匯出 G-code" @@ -9150,7 +9202,6 @@ msgstr "正在匯出 G-code" msgid "Generating G-code" msgstr "正在產生 G-code" -#, fuzzy msgid "Failed processing of the filename_format template." msgstr "處理檔案名稱格式範本失敗。" @@ -9158,22 +9209,18 @@ msgid "Printable area" msgstr "可列印區域" msgid "Bed exclude area" -msgstr "不可列印區域" +msgstr "熱床淨空區域" -#, fuzzy msgid "" "Unprintable area in XY plane. For example, X1 Series printers use the front " "left corner to cut filament during filament change. The area is expressed as " "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" -"XY 平面上的不可列印區域。例如,X1系列設備在換料過程中,會使用左前角區域來切斷" -"線材。這個多邊形區域由以下格式的點表示:\"XxY,XxY,…\"" +"XY 平面上的不可列印區域。例如,X1系列設備在換料過程中,會使用左前角區域來切斷線材。這個多邊形區域由以下格式的點表示:\"XxY,XxY,…\"" -#, fuzzy msgid "Bed custom texture" msgstr "自訂列印板紋理" -#, fuzzy msgid "Bed custom model" msgstr "自訂列印板模型" @@ -9183,7 +9230,8 @@ msgstr "象腳補償" msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" -msgstr "將首層收縮用於補償象腳效應" +msgstr "" +"將首層收縮用於補償象腳效應" msgid "Elephant foot compensation layers" msgstr "象腳補償層數" @@ -9194,8 +9242,7 @@ msgid "" "the next layers will be linearly shrunk less, up to the layer indicated by " "this value." msgstr "" -"象腳補償將處於活動狀態的層數。 第一層將縮小象腳補償值,然後接下來的層將線性縮" -"小,直到該值指示的層。" +"象腳補償將處於活動狀態的層數。 第一層將縮小象腳補償值,然後接下來的層將線性縮小,直到該值指示的層。" msgid "layers" msgstr "層" @@ -9203,7 +9250,8 @@ msgstr "層" msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" -msgstr "每一層的切片高度。越小的層高意味著更高的精度和更長的列印時間。" +msgstr "" +"每一層的切片高度。越小的層高意味著更高的精度和更長的列印時間" msgid "Printable height" msgstr "可列印高度" @@ -9212,25 +9260,23 @@ 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 "匯入STL時自動對齊Z軸" -#, fuzzy msgid "Printer preset names" msgstr "列印設備預設名稱" msgid "Use 3rd-party print host" -msgstr "" +msgstr "啟用第三方列印主機" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "" +msgstr "允許使用第三方列印主機控制 BambuLab 列印機" msgid "Hostname, IP or URL" msgstr "主機名,IP 或者 URL" -#, fuzzy msgid "" "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 " @@ -9238,27 +9284,25 @@ msgid "" "user name and password into the URL in the following format: https://" "username:password@your-octopi-address/" msgstr "" -"Orca Slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含列印設備的主機名、" -"IP 位址或 URL。啟用基本身份驗證的列印設備可以透過將使用者名稱和密碼放入以下格" -"式的URL中來訪問:https://username:password@your-octopi-address/" +"Orca Slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含列印設備的主機名、IP 位址或 URL。啟用基本身份驗證的列印設備可以透過將使用者名稱和密碼放入以下格式的URL中來訪問:https://username:password@your-octopi-" +"address/" msgid "Device UI" msgstr "設備使用者界面" msgid "" "Specify the URL of your device user interface if it's not same as print_host" -msgstr "如果列印設備的使用者界面 URL 不同,請輸入在此。" +msgstr "" +"如果列印設備的使用者界面 URL 不同,請輸入在此" msgid "API Key / Password" msgstr "API Key / 密碼" -#, fuzzy msgid "" "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 " -"金鑰或密碼。" +"Orca slicer 可以將 G-code 檔案上傳到列印設備。此欄位應包含用於身份驗證的 API 金鑰或密碼。" msgid "Name of the printer" msgstr "列印設備名稱" @@ -9266,14 +9310,12 @@ msgstr "列印設備名稱" msgid "HTTPS CA File" msgstr "HTTPS CA憑證 檔" -#, fuzzy msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"可以為 HTTPS OctoPrint 連接指定自訂 CA憑證 檔案,格式為 crt/pem。如果留空,則" -"使用預設的操作系統 CA憑證 儲存庫。" +"可以為 HTTPS OctoPrint 連接指定自訂 CA憑證 檔案,格式為 crt/pem。如果留空,則使用預設的操作系統 CA憑證 儲存庫。" msgid "User" msgstr "使用者名稱" @@ -9281,20 +9323,16 @@ msgstr "使用者名稱" msgid "Password" msgstr "密碼" -#, fuzzy msgid "Ignore HTTPS certificate revocation checks" msgstr "忽略 HTTPS憑證 吊銷檢查" -#, fuzzy msgid "" "Ignore HTTPS certificate revocation checks in case of missing or offline " "distribution points. One may want to enable this option for self signed " "certificates if connection fails." msgstr "" -"在缺少或離線的情況下忽略 HTTPS憑證 吊銷檢查。如果連接失敗,可以啟用此選項來處" -"理自簽名憑證。" +"在缺少或離線的情況下忽略 HTTPS憑證 吊銷檢查。如果連接失敗,可以啟用此選項來處理自簽名憑證。" -#, fuzzy msgid "Names of presets related to the physical printer" msgstr "與實體列印設備相關的預設名稱" @@ -9322,6 +9360,7 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" +"避開穿越牆體時的最大繞行距離。若繞行距離超過此設定值,則不進行繞行。繞行距離可設為絕對值,或直接移動路徑的百分比(如 50%)。設為 0 以停用繞行功能" msgid "mm or %" msgstr "mm 或 %" @@ -9332,7 +9371,8 @@ msgstr "其它層" msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Cool Plate" -msgstr "除首層外的床溫。0 值表示這個線材不支援低溫列印板" +msgstr "" +"首層之外各層的熱床溫度。值為 0 表示該線材不適用於低溫列印板" msgid "°C" msgstr "°C" @@ -9341,24 +9381,25 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured Cool Plate" msgstr "" +"首層之外各層的熱床溫度。值為 0 表示該線材不適用於低溫紋理列印板" -#, fuzzy msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Engineering Plate" -msgstr "除首層外的熱床溫度。0 值表示這個線材不支援工程高溫列印板" +msgstr "" +"首層之外各層的熱床溫度。值為 0 表示該線材不適用於工程列印板" -#, fuzzy msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the High Temp Plate" -msgstr "除首層外的熱床溫度。0 值表示這個線材不支援高溫列印板" +msgstr "" +"首層之外各層的熱床溫度。值為 0 表示該線材不適用於高溫列印板" -#, fuzzy 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 "除首層外的熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" +msgstr "" +"首層之外各層的熱床溫度。值為 0 表示該線材不適用於紋理 PEI 列印板" msgid "Initial layer" msgstr "首層" @@ -9370,64 +9411,64 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate SuperTack" msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於低溫增穩列印板" -#, fuzzy msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" -msgstr "首層熱床溫度。0 值表示這個線材不支援低溫列印板" +msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於低溫列印板" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured Cool Plate" msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於低溫紋理列印板" -#, fuzzy msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" -msgstr "首層熱床溫度。0 值表示這個線材不支援工程高溫列印板" +msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於工程列印板" -#, fuzzy msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" -msgstr "首層熱床溫度。0 值表示這個線材不支援高溫列印板" +msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於高溫列印板" -#, fuzzy msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" -msgstr "首層熱床溫度。0 值表示這個線材不支援紋理 PEI 列印板" +msgstr "" +"首層的列印床溫度。值為 0 表示該線材不適用於紋理 PEI 列印板" -#, fuzzy msgid "Bed types supported by the printer" msgstr "列印設備所支援的列印板類型" msgid "Smooth Cool Plate" -msgstr "" +msgstr "低溫平滑列印板" -#, fuzzy msgid "Engineering Plate" -msgstr "工程高溫列印板" +msgstr "工程列印板" msgid "Smooth High Temp Plate" -msgstr "" +msgstr "高溫平滑列印板" msgid "Textured Cool Plate" -msgstr "" +msgstr "低溫紋理列印板" msgid "First layer print sequence" msgstr "首層列印順序" msgid "Other layers print sequence" -msgstr "" +msgstr "其他層的列印順序" msgid "The number of other layers print sequence" -msgstr "" +msgstr "其他層列印順序的次數" msgid "Other layers filament sequence" -msgstr "" +msgstr "其他層線材的列印順序" msgid "This G-code is inserted at every layer change before lifting z" msgstr "在每次換層抬升z高度之前插入這段 G-code" @@ -9440,13 +9481,11 @@ msgid "" "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"底部殼體實心層層數,包括底面。當由該層數計算的厚度小於底部殼體厚度,切片時會" -"增加底部殼體的層數" +"底部殼體實心層層數,包括底面。當由該層數計算的厚度小於底部殼體厚度,切片時會增加底部殼體的層數" msgid "Bottom shell thickness" msgstr "底部殼體厚度" -#, fuzzy msgid "" "The number of bottom solid layers is increased when slicing if the thickness " "calculated by bottom shell layers is thinner than this value. This can avoid " @@ -9454,12 +9493,10 @@ msgid "" "is disabled and thickness of bottom shell is absolutely determined by bottom " "shell layers" msgstr "" -"如果由底部殼體層數算出的厚度小於這個數值,那麼切片時將自動增加底部殼體層數。" -"這能夠避免當層高很小時,底部殼體過薄。0 表示關閉這個設定,同時底部殼體的厚度" -"完全由底部殼體層數決定" +"如果由底部殼體層數算出的厚度小於這個數值,那麼切片時將自動增加底部殼體層數。這能夠避免當層高很小時,底部殼體過薄。0 表示關閉這個設定,同時底部殼體的厚度完全由底部殼體層數決定" msgid "Apply gap fill" -msgstr "間隙填充" +msgstr "套用間隙填充" msgid "" "Enables gap fill for the selected solid surfaces. The minimum gap length " @@ -9488,6 +9525,16 @@ msgid "" "generator and use this option to control whether the cosmetic top and bottom " "surface gap fill is generated" msgstr "" +"為選定的實心表面啟用間隙填充。你可以使用下方的『過濾微小間隙』選項來控制填充的最小間隙長度。\n" +"\n" +"選項:\n" +"1. 所有區域:將間隙填充應用於頂部、底部和內部實心表面,以提升結構強度。\n" +"2. 僅頂部和底部:僅在頂部和底部表面進行間隙填充,平衡列印速度,減少實心填充中的過度擠出,同時確保頂部和底部表面無針孔間隙。\n" +"3. 不填充:禁用所有實心填充區域的間隙填充。\n" +"\n" +"請注意,若使用『經典』的牆產生器,當外牆之間無法容納完整寬度的線條時,間隙填充仍可能生成。這類外牆間隙填充不受此設置控制。\n" +"如果希望移除所有間隙填充,包括『經典』的牆產生器間隙填充,可將『過濾微小間隙』設置為較大的數字(如 999999)。\n" +"然而,不建議這麼做,因為外牆間的間隙填充能增強模型強度。若模型因外牆間隙填充過多而受影響,更好的解決方案是切換到『Arachne』牆產生器,並利用此選項控制是否生成頂部和底部表面的美觀間隙填充" msgid "Everywhere" msgstr "全部" @@ -9501,34 +9548,34 @@ msgstr "無" msgid "Force cooling for overhang and bridge" msgstr "懸空/橋接強制冷卻" -#, fuzzy msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" -msgstr "勾選這個選項將自動最佳化橋接和懸空的風扇轉速以獲得更好的冷卻" +msgstr "" +"勾選這個選項將自動最佳化橋接和懸空的風扇轉速以獲得更好的冷卻" msgid "Fan speed for overhang" msgstr "懸空風扇速度" -#, fuzzy msgid "" "Force part cooling fan to be this speed when printing bridge or overhang " "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 "冷卻懸空臨界值" -#, c-format +#, possible-c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " "exceeds this value. Expressed as percentage which indicates how much width " "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" +"當列印部件的懸空角度超過此值時,強制冷卻風扇以特定速度運行。此值以百分比表示," +"指的是無下層支撐的線寬比例。設為 0%% 時,表示無論懸垂角度如何,冷卻風扇都會對所有外牆啟用強制冷卻" msgid "Bridge infill direction" msgstr "橋接填充角度" @@ -9538,14 +9585,11 @@ msgid "" "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"橋接角度覆蓋。如果為零,該角度將自動計算。否則外部的橋接將用提供的值。180° 表" -"示 0 度。" +"橋接角度覆蓋。如果為零,該角度將自動計算。否則外部的橋接將用提供的值。180° 表示 0 度。" -#, fuzzy msgid "Bridge density" msgstr "橋接密度" -#, fuzzy msgid "Density of external bridges. 100% means solid bridge. Default is 100%." msgstr "外部橋接的密度。 100% 意味著堅固的橋樑。 預設值為 100%。" @@ -9559,6 +9603,9 @@ msgid "" "The actual bridge flow used is calculated by multiplying this value with the " "filament flow ratio, and if set, the object's flow ratio." msgstr "" +"略微降低此值(例如設為 0.9)可減少橋接所需的材料量,從而改善橋接下垂的問題。\n" +"\n" +"實際的橋接流量是通過此值乘以線材流量比例計算的,並且若已設置物件流量比例,該比例也將被考慮在內。" msgid "Internal bridge flow ratio" msgstr "內部橋接流量" @@ -9572,6 +9619,9 @@ msgid "" "with the bridge flow ratio, the filament flow ratio, and if set, the " "object's flow ratio." msgstr "" +"此設定值決定內部橋接層的厚度,該層是稀疏填充上的第一層。稍微降低此值(例如設為 0.9)可改善稀疏填充表面的列印品質。\n" +"\n" +"實際的內部橋接流量是由此值乘以橋接流量比例、線材流量比例計算得出,若設置了物件流量比例,比例也會被納入計算。" msgid "Top surface flow ratio" msgstr "頂部表面流量比例" @@ -9583,6 +9633,9 @@ msgid "" "The actual top surface flow used is calculated by multiplying this value " "with the filament flow ratio, and if set, the object's flow ratio." msgstr "" +"此設定值會影響頂部實心填充的材料用量。稍微降低此值可使表面更加平滑。\n" +"\n" +"實際的頂部表面流量是此值乘以線材流量比例計算得出,若已設置物件流量比例,該比例也會被納入計算。" msgid "Bottom surface flow ratio" msgstr "底部表面流量比例" @@ -9593,6 +9646,9 @@ msgid "" "The actual bottom solid infill flow used is calculated by multiplying this " "value with the filament flow ratio, and if set, the object's flow ratio." msgstr "" +"此設定值會影響底部實心填充的材料用量。\n" +"\n" +"實際的底部實心填充流量是此值乘以線材流量比例計算得出,若已設置物件流量比例,該比例也會被納入計算。" msgid "Precise wall" msgstr "精準外牆尺寸" @@ -9603,6 +9659,8 @@ msgid "" "Note: This setting will only take effect if the wall sequence is configured " "to Inner-Outer" msgstr "" +"調整外牆間距以提升外殼精度,並改善層的一致性。\n" +"注意:此設定僅在牆體順序設置為由內向外時有效" msgid "Only one wall on top surfaces" msgstr "頂面單層牆" @@ -9610,10 +9668,11 @@ msgstr "頂面單層牆" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " "pattern" -msgstr "頂面只使用單層牆,從而更多的空間能夠使用頂部填充圖案" +msgstr "" +"頂面只使用單層牆,從而更多的空間能夠使用頂部填充圖案" msgid "One wall threshold" -msgstr "單壁閾值" +msgstr "單層牆閾值" #, no-c-format, no-boost-format msgid "" @@ -9626,11 +9685,8 @@ msgid "" "on the next layer, like letters. Set this setting to 0 to remove these " "artifacts." msgstr "" -"如果頂面需要列印,但是它的一部分被其它層覆蓋,那麼當它的寬度小於這個值時,它" -"不會被認為是頂層。這個設定可以用於避免在狹窄頂面上觸發\"頂面單層牆\"。這個值" -"可以是 mm 或線寬的 %。\n" -"警告:如果啟用該選項,可能會在下一層上產生一些薄的特徵,比如字母。將此設定設" -"為 0 可以消除這些偽影。" +"當需要列印頂部表面,但該表面部分被另一層覆蓋時,如果其寬度小於此設定值,則不會被視為頂層。這有助於避免在需要外牆覆蓋的表面上,產生「單層牆」的情況發生。此值可以設為毫米或外周擠出寬度的百分比。\n" +"警告:啟用此設定可能會在下一層具有細小特徵(如字母)時產生瑕疵。將此值設為 0 可移除這些瑕疵。" msgid "Only one wall on first layer" msgstr "首層僅單層牆" @@ -9638,7 +9694,8 @@ msgstr "首層僅單層牆" msgid "" "Use only one wall on first layer, to give more space to the bottom infill " "pattern" -msgstr "首層只使用單層牆,從而更多的空間能夠使用底部填充圖案" +msgstr "" +"首層只使用單層牆,從而更多的空間能夠使用底部填充圖案" msgid "Extra perimeters on overhangs" msgstr "懸挑上的額外周長" @@ -9646,12 +9703,12 @@ msgstr "懸挑上的額外周長" msgid "" "Create additional perimeter paths over steep overhangs and areas where " "bridges cannot be anchored. " -msgstr "在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" +msgstr "" +"在陡峭的懸空和無法固定橋接的區域中增加額外的周長路徑。" msgid "Reverse on even" -msgstr "偶數反向" +msgstr "偶數層反向" -#, fuzzy msgid "Overhang reversal" msgstr "懸空反向" @@ -9663,8 +9720,7 @@ msgid "" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." msgstr "" -"在偶數層上,對於有懸挑部分的外圍輪廓,採用反向擠出。這種交替模式可以大幅改善" -"陡峭的懸挑。\n" +"在偶數層上,對於有懸空部分的外圍輪廓,採用反向擠出。這種交替模式可以大幅改善陡峭的懸挑。\n" "\n" "此設定還有助於減少因零件牆壁應力降低而導致的變形。" @@ -9685,6 +9741,12 @@ msgid "" "Reverse Threshold to 0 so that all internal walls print in alternating " "directions on even layers irrespective of their overhang degree." msgstr "" +"僅在內圍輪廓應用反向邏輯。\n" +"\n" +"此設定可顯著減少零件應力,因為應力會以交替方向分佈。這有助於減少零件翹曲,同時保持外部牆面的品質。此功能對於易翹曲的材料(例如 ABS/ASA),以及彈性線材(例如 TPU 和絲光 PLA)特別有用。它還可以幫助減少支撐上懸空" +"區域的翹曲。\n" +"\n" +"為使此設定達到最佳效果,建議將反向閾值設為 0,以確保所有內圍牆體在偶數層以交替方向列印,而不受懸垂角度的影響。" msgid "Bridge counterbore holes" msgstr "橋接沉孔" @@ -9696,10 +9758,10 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" -"此選項為沉孔創建橋接,使其可以無需支撐地列印。可用模式包括:\n" -"1. 無:不創建橋接。\n" -"2. 部分橋接:只有部分無支撐區域會被橋接。\n" -"3. 犧牲層:創建一層完整的祭層橋接。" +"此選項為沉孔創建橋接,允許其在無支撐的情況下列印。可用模式包括:\n" +"1. 無:不創建任何橋接。\n" +"2. 部分橋接:僅對未支撐區域的一部分進行橋接。\n" +"3. 犧牲層:創建一層完整的犧牲橋接層。" msgid "Partially bridged" msgstr "部分橋接" @@ -9721,8 +9783,9 @@ msgid "" "When Detect overhang wall is not enabled, this option is ignored and " "reversal happens on every even layers regardless." msgstr "" -"懸挑需要達到的毫米數,才會反向列印。可以是周邊寬度的百分比。\n" -"值為 0 時,將在每個偶數層啟用反向列印。" +"懸空需要達到的 mm,才能使反轉被認為是有用的。該值可以是外牆寬度的百分比。\n" +"設為 0 時,反轉將在所有偶數層上無條件啟用。\n" +"如果未啟用『檢測懸空外牆』,此選項將被忽略,並且反轉會無條件發生在所有偶數層上。" msgid "Classic mode" msgstr "經典模式" @@ -9734,7 +9797,7 @@ msgid "Slow down for overhang" msgstr "懸空處降速" msgid "Enable this option to slow printing down for different overhang degree" -msgstr "打開這個選項將降低不同懸垂程度的走線的列印速度" +msgstr "打開這個選項將降低不同懸空程度的走線的列印速度" msgid "Slow down for curled perimeters" msgstr "翹邊處降速" @@ -9759,6 +9822,12 @@ msgid "" "overhanging, with no wall supporting them from underneath, the 100% overhang " "speed will be applied." msgstr "" +"啟用此選項以在可能發生外牆翹起的區域減慢列印速度。例如,在列印懸空的尖銳角落(如 Benchy 船體前部)時,會額外減速,從而減少多層累積後的翹起。\n" +"\n" +"一般建議啟用此選項,除非你的列印設備冷卻性能足夠強大,或者列印速度足夠慢,避免發生外部周邊翹起。如果使用高外部周邊列印速度,此參數可能因列印速度差異過大而導致輕微瑕疵。如果你注意到瑕疵,請確保壓力補償已正確調" +"整。\n" +"\n" +"注意:啟用此選項時,懸空外周邊會被視為懸空結構,即使該懸空外部周邊是橋接的一部分,也會應用懸空速度。例如,當外牆 100% 懸空且下方無牆支撐時,將應用 100% 懸空速度。" msgid "mm/s or %" msgstr "mm/s 或 %" @@ -9774,10 +9843,9 @@ msgid "" "are supported by less than 13%, whether they are part of a bridge or an " "overhang." msgstr "" -"外部可見橋接擠出速度。\n" +"外部可見橋接擠出的列印速度\n" "\n" -"如果禁用了「翹邊處降速」或啟用了「經典懸挑模式」,則它將是支撐不足 13% 的懸挑" -"牆的列印速度,無論它們是橋接的一部分還是懸挑。" +"如果禁用了『翹邊處降速』或啟用了『經典懸空模式』,則對支撐率低於 13% 的懸空牆(無論是橋接的一部分還是懸空結構)將使用該列印速度。" msgid "mm/s" msgstr "" @@ -9789,55 +9857,52 @@ msgid "" "Speed of internal bridges. If the value is expressed as a percentage, it " "will be calculated based on the bridge_speed. Default value is 150%." msgstr "" -"內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 " -"150%" +"內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 150%。" msgid "Brim width" -msgstr "Brim(裙邊)寬度" +msgstr "Brim 寬度" msgid "Distance from model to the outermost brim line" -msgstr "從模型到 brim(裙邊)最外圈的距離" +msgstr "從模型到 Brim 最外圈的距離" msgid "Brim type" -msgstr "Brim(裙邊)類型" +msgstr "Brim 類型" -#, fuzzy msgid "" "This controls the generation of the brim at outer and/or inner side of " "models. Auto means the brim width is analyzed and calculated automatically." msgstr "" -"該參數控制在模型的外側和/或內側產生 brim(裙邊)。自動是指自動分析和計算邊框" -"的寬度。" +"該參數控制在模型的外側和/或內側產生 Brim 。自動是指自動分析和計算邊框的寬度。" msgid "Brim-object gap" -msgstr "Brim(裙邊)與模型的間隙" +msgstr "Brim 與模型的間隙" msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" -msgstr "在 brim(裙邊)和模型之間設定間隙,能夠讓 brim(裙邊)更容易拆除" +msgstr "" +"在 Brim 和模型之間設定間隙,能夠讓 Brim 更容易拆除" msgid "Brim ears" -msgstr "圓盤" +msgstr "耳狀 Brim" msgid "Only draw brim over the sharp edges of the model." -msgstr "僅在模型的鋒利邊緣上產生Brim(裙邊)。" +msgstr "僅在模型的鋒利邊緣上產生 Brim 。" msgid "Brim ear max angle" -msgstr "圓盤最大角度" +msgstr "耳狀 Brim 最大角度" -#, fuzzy msgid "" "Maximum angle to let a brim ear appear. \n" "If set to 0, no brim will be created. \n" "If set to ~180, brim will be created on everything but straight sections." msgstr "" -"讓圓盤出現的最大角度。\n" -"如果設定為 0,則不會建立圓盤。\n" -"設定越趨近 180,除直線部分外,其他部分都會建立圓盤。" +"讓耳狀 Brim 出現的最大角度。\n" +"如果設定為 0,則不會建立 Brim。\n" +"設定越趨近 180,除直線部分外,其他部分都會建立 Brim。" msgid "Brim ear detection radius" -msgstr "圓盤偵測半徑" +msgstr "耳狀 Brim 偵測半徑" msgid "" "The geometry will be decimated before detecting sharp angles. This parameter " @@ -9850,19 +9915,15 @@ msgstr "" msgid "Compatible machine" msgstr "相容的設備" -#, fuzzy msgid "upward compatible machine" msgstr "向上相容的設備" -#, fuzzy msgid "Compatible machine condition" msgstr "相容的設備條件" -#, fuzzy msgid "Compatible process profiles" msgstr "相容的切片設定" -#, fuzzy msgid "Compatible process profiles condition" msgstr "相容的切片設定條件" @@ -9876,13 +9937,13 @@ msgid "By object" msgstr "逐件" msgid "Intra-layer order" -msgstr "" +msgstr "單層順序" msgid "Print order within a single layer" -msgstr "" +msgstr "每一層的列印順序" msgid "As object list" -msgstr "" +msgstr "按照物件清單排序" msgid "Slow printing down for better layer cooling" msgstr "降低列印速度 以得到更好的冷卻" @@ -9893,9 +9954,7 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"勾選這個選項,將降低列印速度,使得最終的層列印時間不小於\"最大風扇速度臨界值" -"\"裡的層時間臨界值,從而使得該層獲得更久的冷卻。這能夠改善尖頂和小細節的冷卻" -"效果" +"啟用此選項可降低列印速度,確保最終層的列印時間不少於「最大風扇速度臨界值」中的層時間設定值,以延長冷卻時間。此功能有助於提升針狀結構和細小細節的冷卻效果" msgid "Normal printing" msgstr "普通列印" @@ -9903,7 +9962,8 @@ msgstr "普通列印" msgid "" "The default acceleration of both normal printing and travel except initial " "layer" -msgstr "除首層之外的預設的列印和空駛的加速度" +msgstr "" +"除首層之外的預設的列印和空駛的加速度" msgid "mm/s²" msgstr "mm/s²" @@ -9911,14 +9971,12 @@ msgstr "mm/s²" msgid "Default filament profile" msgstr "預設線材設定檔" -#, fuzzy msgid "Default filament profile when switch to this machine profile" msgstr "切換設備自動更換預設線材設定檔" msgid "Default process profile" msgstr "預設切片設定檔" -#, fuzzy msgid "Default process profile when switch to this machine profile" msgstr "切換設備自動更換預設切片設定檔" @@ -9934,7 +9992,8 @@ msgstr "風扇速度" msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" -msgstr "列印過程中排風扇的速度。此速度將覆蓋線材自訂 G-code 中的速度" +msgstr "" +"列印過程中排風扇的速度。此速度將覆蓋線材自訂 G-code 中的速度" msgid "Speed of exhaust fan after printing completes" msgstr "列印完成後排風扇的轉速" @@ -9942,7 +10001,6 @@ msgstr "列印完成後排風扇的轉速" msgid "No cooling for the first" msgstr "前N層關閉零件風扇" -#, fuzzy msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" @@ -9956,8 +10014,7 @@ 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 "厚橋" @@ -9967,8 +10024,7 @@ msgid "" "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"如果啟用,橋接會更可靠,可以橋接更長的距離,但可能看起來更糟。如果關閉,橋梁" -"看起來更好,但只適用於較短的橋接距離。" +"如果啟用,橋接會更可靠,可以橋接更長的距離,但可能看起來更糟。如果關閉,橋梁看起來更好,但只適用於較短的橋接距離。" msgid "Thick internal bridges" msgstr "增厚內部橋接" @@ -9978,11 +10034,10 @@ msgid "" "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" -"如果啟用,將使用較厚的內部橋接。通常建議開啟此功能。但如果使用較大的噴嘴,可" -"考慮關閉此選項。" +"如果啟用,將使用較厚的內部橋接。通常建議開啟此功能。但如果使用較大的噴嘴,可考慮關閉此選項。" msgid "Filter out small internal bridges (beta)" -msgstr "篩選掉短的內部橋接(beta)" +msgstr "篩選掉短的內部橋接(Beta)" msgid "" "This option can help reducing pillowing on top surfaces in heavily slanted " @@ -10014,22 +10069,17 @@ msgid "" msgstr "" "此選項有助於減少在大幅傾斜或曲面的模型上頂部表面瑕疵。\n" "\n" -"預設情況下,小型內部橋接會被篩選掉,內部實心填充會直接印刷在稀疏填充上。這在" -"大多數情況下運作良好,能加速列印並且不會過度影響頂部表面質量。\n" +"預設情況下,小型內部橋接會被篩選掉,內部實心填充會直接印刷在稀疏填充上。這在大多數情況下運作良好,能加速列印並且不會過度影響頂部表面質量。\n" "\n" -"在大幅傾斜或曲面的模型中,特別是當使用過低的稀疏填充密度時,這可能會導致支撐" -"不夠的實心填充翹曲,進而造成瑕疵。\n" +"在大幅傾斜或曲面的模型中,特別是當使用過低的稀疏填充密度時,這可能會導致支撐不夠的實心填充翹曲,進而造成瑕疵。\n" "\n" -"禁用此選項將在稍微未支撐的內部實心填充區列印內部橋接層。以下選項控制篩選的程" -"度(創建內部橋接的數量)。\n" +"禁用此選項將在稍微未支撐的內部實心填充區列印內部橋接層。以下選項控制篩選的程度(創建內部橋接的數量)。\n" "\n" "篩選 - 啟用此選項。這是預設行為,並且在大多數情況下運作良好。\n" "\n" -"有限篩選 - 僅在大幅傾斜的表面上創建內部橋接。這對大多數困難模型來說效果良" -"好。\n" +"有限篩選 - 僅在大幅傾斜的表面上創建內部橋接。這對大多數困難模型來說效果良好。\n" "\n" -"不篩選 - 在每個可能的內部懸挑處創建內部橋接。這個選項對於大幅傾斜的頂部表面模" -"型很有用。然而,在大多數情況下,它會創建過多不必要的橋接。" +"不篩選 - 在每個可能的內部懸空處創建內部橋接。這個選項對於大幅傾斜的頂部表面模型很有用。然而,在大多數情況下,它會創建過多不必要的橋接。" msgid "Filter" msgstr "篩選" @@ -10048,8 +10098,7 @@ msgid "" "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-code" @@ -10063,7 +10112,8 @@ msgstr "物件分隔" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" -msgstr "在物件之間插入 Gcode。此參數僅在逐次列印時生效。" +msgstr "" +"在物件之間插入 Gcode。此參數僅在逐次列印時生效" msgid "End G-code when finish the printing of this filament" msgstr "使用該線材列印結束時的結尾 G-code" @@ -10081,12 +10131,18 @@ msgid "" "All: Add solid infill for all suitable sloping surfaces\n" "Default value is All." msgstr "" +"在傾斜面附近添加實心填充,以保證垂直外殼的厚度(頂部+底部實心層)\n" +"無:不在任何地方添加實心填充。注意:如果你的模型有傾斜表面,請謹慎使用此選項\n" +"僅關鍵部位:避免為牆體添加實心填充\n" +"適中:僅為大角度傾斜的表面添加實心填充\n" +"全部:為所有適合的傾斜表面添加實心填充\n" +"默認值為 全部。" msgid "Critical Only" -msgstr "" +msgstr "僅關鍵部分" msgid "Moderate" -msgstr "" +msgstr "適度" msgid "Top surface pattern" msgstr "頂面圖案" @@ -10131,18 +10187,19 @@ 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 " "nozzle diameter." -msgstr "外牆的線寬。如果以 % 表示,將以噴嘴直徑為基準來計算" +msgstr "" +"外牆的線寬。如果以 % 表示,將以噴嘴直徑為基準來計算。" 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 "外牆的列印速度。它通常比內壁速度慢,以獲得更好的列印品質。" +msgstr "" +"外牆的列印速度。它通常比內壁速度慢,以獲得更好的列印品質。" msgid "Small perimeters" msgstr "微小部位" @@ -10153,13 +10210,15 @@ msgid "" "example: 80%) it will be calculated on the outer wall speed setting above. " "Set to zero for auto." msgstr "" +"此獨立設定將影響半徑小於或等於 small_perimeter_threshold 的外牆列印速度(通常指孔洞)。若設定為百分比(如 80%),將基於上述外牆速度進行計算。設定為 0 表示自動調整。" msgid "Small perimeters threshold" msgstr "微小部位周長臨界值" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "這設定了微小部位周長的臨界值。 預設臨界值是 0mm" +msgstr "" +"這設定了微小部位周長的臨界值。 預設臨界值是 0mm" msgid "Walls printing order" msgstr "牆列印順序" @@ -10188,15 +10247,22 @@ msgid "" "\n" " " msgstr "" +"『內牆』與『外牆』牆體的列印順序。\n" +"使用『內牆/外牆』順序可獲得最佳的懸空效果。這是因為懸空牆體在列印時可以附著到相鄰的牆。然而,此選項會略微降低表面品質,因為外牆被壓到內牆上而變形。\n" +"使用『內牆/外牆/內牆』順序可獲得最佳的外表面光潔度和尺寸精度,因為外牆的列印不會受到內牆影響。然而,因為外牆缺少內牆的支撐,懸空性能會有所降低。此選項需要至少 3 層牆才能生效,它會先從第 3 層牆開始列印內牆,接" +"著列印外部周邊,最後列印最內層的內牆。在大多數情況下,建議選擇此選項,而不是外牆/內牆的順序設定。\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 "先列印填充" @@ -10211,9 +10277,11 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" +"牆體與填充的列印順序。當未勾選選框時,牆體會先列印,這在大多數情況下效果最佳。\n" +"先列印填充可能對極端懸空有幫助,因為牆體可以附著在相鄰的填充上。然而,填充會在接觸牆體處稍微推動牆體,導致外部表面光潔度下降。同時,填充還可能透過零件的外表面顯現出來。" msgid "Wall loop direction" -msgstr "牆方向" +msgstr "牆體列印方向" msgid "" "The direction which the wall loops are extruded when looking down from the " @@ -10225,12 +10293,11 @@ msgid "" "\n" "This option will be disabled if spiral vase mode is enabled." msgstr "" -"從上方觀看時,牆擠出方向。\n" +"從頂部俯視時,牆體迴圈的擠出方向。\n" "\n" -"預設情況下,所有牆面都是以逆時針方向擠出,除非啟用了「偶數反向」。將此設置為" -"「自動」以外的任何選項,將強制牆面方向,無論是否啟用了「偶數反向」。\n" +"默認情況下,所有牆體以逆時針方向擠出,除非啟用了『偶數層反向』。若將此選項設為非自動,則無論是否啟用『偶數層反向』,都將強制指定牆體方向。\n" "\n" -"如果啟用了花瓶模式,這個選項將被禁用。" +"如果啟用了螺旋花瓶模式,該選項將被禁用。" msgid "Counter clockwise" msgstr "逆時針" @@ -10244,7 +10311,8 @@ msgstr "到橫杆高度" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." -msgstr "噴嘴尖端到下方滑杆的距離。用於在逐件列印中避免碰撞。" +msgstr "" +"噴嘴尖端到下方滑杆的距離。用於在逐件列印中避免碰撞。" msgid "Height to lid" msgstr "到頂蓋高度" @@ -10252,21 +10320,22 @@ msgstr "到頂蓋高度" msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." -msgstr "噴嘴尖端到頂蓋的距離。用於在逐件列印中避免碰撞。" +msgstr """噴嘴尖端到頂蓋的距離。用於在逐件列印中避免碰撞。" msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." -msgstr "擠出機四周的避讓半徑。用於在逐件列印中避免碰撞。" +msgstr "" +"擠出機四周的避讓半徑。用於在逐件列印中避免碰撞。" msgid "Nozzle height" -msgstr "" +msgstr "噴嘴高度" msgid "The height of nozzle tip." -msgstr "" +msgstr "噴嘴尖端的高度。" msgid "Bed mesh min" -msgstr "" +msgstr "熱床網格最小值" msgid "" "This option sets the min point for the allowed bed mesh area. Due to the " @@ -10278,9 +10347,11 @@ msgid "" "your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" +"此選項設置允許的熱網格區域的最小值。由於探測器的 XY 偏移,大多數列印設備無法探測整個熱床。為確保感測範圍不超出熱床區域,應適當設置熱床網格的最小值和最大值。OrcaSlicer 會確保 adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max 的值不超出這些最小值/最大值。此訊息通常可從設備製造商處獲取。默認設置為 (-99999, -99999),表示無限制,允許探測整個熱床。" msgid "Bed mesh max" -msgstr "" +msgstr "熱床網格最大值" msgid "" "This option sets the max point for the allowed bed mesh area. Due to the " @@ -10292,22 +10363,26 @@ msgid "" "your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" +"此選項設置允許的熱網格區域的最大值。由於探測器的 XY 偏移,大多數列印設備無法探測整個熱床。為確保感測範圍不超出熱床區域,應適當設置熱床網格的最小值和最大值。OrcaSlicer 會確保 adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max 的值不超出這些最小值/最大值。此訊息通常可從設備製造商處獲取。默認設置為 (-99999, -99999),表示無限制,允許探測整個熱床。" msgid "Probe point distance" -msgstr "" +msgstr "探測間距" msgid "" "This option sets the preferred distance between probe points (grid size) for " "the X and Y directions, with the default being 50mm for both X and Y." msgstr "" +"此選項用於設定 X 和 Y 方向探測點之間的首選距離(網格尺寸),默認值為 X 和 Y 方向各為 50mm。" msgid "Mesh margin" -msgstr "" +msgstr "網格邊緣距離" msgid "" "This option determines the additional distance by which the adaptive bed " "mesh area should be expanded in the XY directions." -msgstr "此選項決定自適應床面網格區域在 XY 方向上應該擴展的額外距離。" +msgstr "" +"此選項決定自適應床面網格區域在 XY 方向上應該擴展的額外距離。" msgid "Extruder Color" msgstr "擠出機顏色" @@ -10328,9 +10403,7 @@ msgid "" "and 1.05. Maybe you can tune this value to get nice flat surface when there " "has slight overflow or underflow" msgstr "" -"線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" -"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗" -"試微調這個參數。" +"線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗試微調這個參數" msgid "" "The material may have volumetric change after switching between molten state " @@ -10342,25 +10415,23 @@ msgid "" "The final object flow ratio is this value multiplied by the filament flow " "ratio." msgstr "" -"線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出" -"量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗" -"試微調這個參數。\n" +"線材經過融化後凝固可能會產生體積差異。這個設定會等比例改變所有擠出走線的擠出量。推薦的範圍為 0.95 到 1.05。發現模型的平面有輕微的缺料或多料時,或許可以嘗試微調這個參數。\n" "最終物體流量比是此值與線材流量比的乘積。" msgid "Enable pressure advance" -msgstr "啟用壓力提前" +msgstr "啟用壓力補償" msgid "" "Enable pressure advance, auto calibration result will be overwritten once " "enabled." -msgstr "啟用壓力提前,一旦啟用會覆蓋自動校準的結果" +msgstr "" +"啟用壓力補償功能,啟用後將覆蓋自動校準結果。" -#, fuzzy msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "壓力提前(Klipper)或者線性提前(Marlin)" +msgstr "壓力補償(Klipper),也稱為線性前進係數(Marlin)" msgid "Enable adaptive pressure advance (beta)" -msgstr "啟用進階壓力提前 (beta)" +msgstr "自適應壓力補償功能(Beta)" #, no-c-format, no-boost-format msgid "" @@ -10383,9 +10454,15 @@ msgid "" "and for when tool changing.\n" "\n" msgstr "" +"隨著列印速度的提高(因此噴嘴內的體積流速增加)以及加速度的增加,已觀察到有效的壓力補償(PA)值通常會下降。這意味著單一的 PA 值並不總是對所有特徵都能達到最佳效果,通常會使用一個折衷值,以減少在較低流速和加速度" +"下的特徵出現過多凸起,同時避免在更快的特徵中出現間隙。\n" +"\n" +"此功能旨在通過建模的方式,讓擠出系統在不同體積流速和加速度下的反應狀態來解決這一限制。內部會生成一個擬合模型,可根據給定的體積流速和加速度推算出所需的壓力補償值,並根據當前的打印條件將該值發送到打印機。\n" +"\n" +"啟用後,上述的壓力補償值將被覆蓋。然而,建議設置一個合理的默認值,以作為備用或擠出機更換時的回推值。\n" msgid "Adaptive pressure advance measurements (beta)" -msgstr "自適應壓力提前測量(beta)" +msgstr "自適應壓力補償測量功能(Beta)" #, no-c-format, no-boost-format msgid "" @@ -10417,9 +10494,21 @@ msgid "" "your filament profile\n" "\n" msgstr "" +"添加壓力補償 (PA) 值、體積流速和加速度的數據集,使用逗號分隔。每行一組數據。例如:\n" +"0.04,3.96,3000\n" +"0.033,3.96,10000\n" +"0.029,7.91,3000\n" +"0.026,7.91,10000\n" +"\n" +"校準方法:\n" +"1. 為每個加速度值執行至少 3 個速度的壓力補償測試。建議至少測試外牆速度、內牆速度和設定檔中最快的特徵列印速度(通常是稀疏或實心填充)。然後對最慢和最快的列印加速度執行相同速度的測試,但不超過 Klipper 輸入整形器" +"建議的最大加速度。\n" +"2. 記錄每個體積流速和加速度的最佳壓力補償 (PA) 值。你可以通過從顏色方案下拉選單中選擇流量,並將水平滑桿移動到 PA 測試線的圖案來找到流量數值。該數值應顯示在頁面底部。理想的 PA 值應隨著體積流速的增加而減小。如果" +"不是,請檢查你的擠出機是否正常工作。當列印速度較慢且加速度較低時,可接受的 PA 值範圍會更大。如果看不出差異,請採用最快測試的 PA 值。\n" +"3. 將 PA 值、流量和加速度的三組數據輸入到此文字框中,然後保存你的線材設定檔\n" msgid "Enable adaptive pressure advance for overhangs (beta)" -msgstr "啟用懸挑自適應壓力提前(beta)" +msgstr "啟用懸挑自適應壓力提前 (beta)" msgid "" "Enable adaptive PA for overhangs as well as when flow changes within the " @@ -10427,11 +10516,10 @@ msgid "" "set accurately, it will cause uniformity issues on the external surfaces " "before and after overhangs.\n" msgstr "" -"啟用自適應 PA 以應對懸挑以及同一特徵內流量變化。這是一個實驗性選項,因為如果 " -"PA 配置未準確設定,可能會在懸挑前後的外部表面上造成均勻性問題。\n" +"啟用自適應壓力補償 (PA) 功能,用於懸空部分及同一特徵的流量變化。此功能屬於實驗性選項,若 PA 設定檔不夠精確,可能會導致懸空前後外表面出現不均勻現象。\n" msgid "Pressure advance for bridges" -msgstr "橋接壓力提前" +msgstr "橋接的壓力補償" msgid "" "Pressure advance value for bridges. Set to 0 to disable. \n" @@ -10441,10 +10529,7 @@ msgid "" "pressure drop in the nozzle when printing in the air and a lower PA helps " "counteract this." msgstr "" -"橋接的壓力提前值。設為 0 可禁用。\n" -"\n" -"在列印橋接時,較低的 PA 值有助於減少橋接結束後出現的輕微欠擠壓現象。這是由於" -"列印空中時噴嘴內部壓力下降,較低的 PA 值有助於抵消這個問題。" +"橋接的壓力補償值。設為 0 以禁用此功能。降低橋接時的壓力補償值有助於減少橋接結束後立即出現的輕微欠擠出現象。這種現象是由於在空中列印時噴嘴內壓力下降引起的,而降低壓力補償值有助於抵消這一影響。" msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " @@ -10459,8 +10544,7 @@ msgid "" "If enable this setting, part cooling fan will never be stopped and will run " "at least at minimum speed to reduce the frequency of starting and stopping" msgstr "" -"如果勾選這個選項,物件冷卻風扇將不會停止,並且會以最小風扇轉速設定值運轉以減" -"少風扇的頻繁開關" +"如果勾選這個選項,物件冷卻風扇將不會停止,並且會以最小風扇轉速設定值運轉以減少風扇的頻繁開關" msgid "Don't slow down outer walls" msgstr "列印外牆不減速" @@ -10477,17 +10561,25 @@ msgid "" "external walls\n" "\n" msgstr "" +"啟用此設定後,外牆的列印速度將不會為了滿足每層最短列印時間而減慢,這對以下情況特別有用:\n" +"\n" +"1.\t列印亮面耗材時,避免光澤不均的問題。\n" +"2. 避免因外牆速度變化而產生類似 Z 條紋的瑕疵。\n" +"3. 防止外牆因列印速度過快而出現 VFAs(細微表面瑕疵)。\n" +"\n" +"譯者補充:最小層時間(Minimum Layer Time)是指列印每一層所需的最短時間。如果列印機以較快的速度完成一層的列印時間短於這個設定值,為了確保每層有足夠的時間冷卻和固化,列印機會自動減慢速度,以延長該層的列印時間," +"達到最小層時間的要求。這樣可以避免因冷卻不足而導致的列印缺陷,如層間附著不良或變形。\n" +"\n" msgid "Layer time" -msgstr "層時間" +msgstr "每一層列印時間" msgid "" "Part cooling fan will be enabled for layers of which estimated time is " "shorter than this value. Fan speed is interpolated between the minimum and " "maximum fan speeds according to layer printing time" msgstr "" -"當層預估列印時間小於該數值時,物件冷卻風扇將會被開啟。風扇轉速將根據層列印時" -"間在最大和最小風扇轉速之間自動調整" +"當層預估列印時間小於該數值時,物件冷卻風扇將會被開啟。風扇轉速將根據層列印時間在最大和最小風扇轉速之間自動調整" msgid "Default color" msgstr "預設顏色" @@ -10507,15 +10599,15 @@ msgstr "噴嘴硬度要求" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." -msgstr "列印此線材的所需的最小噴嘴硬度。零值表示不檢查噴嘴硬度。" +msgstr "" +"列印此線材的所需的最小噴嘴硬度。零值表示不檢查噴嘴硬度。" msgid "" "This setting stands for how much volume of filament can be melted and " "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"這個設定表示每秒能夠融化和擠出的線材體積。列印速度會受限於到最大體積速度,防" -"止設定過高和不合理的速度。不允許設定為 0。" +"這個設定表示每秒能夠融化和擠出的線材體積。列印速度會受限於到最大體積速度,防止設定過高和不合理的速度。不允許設定為 0" msgid "mm³/s" msgstr "mm³/s" @@ -10528,6 +10620,7 @@ msgid "" "single-extruder multi-material machines. For tool changers or multi-tool " "machines, it's typically 0. For statistics only" msgstr "" +"更換耗材時加載新耗材的時間,通常適用於單噴頭多材料的列印機。對於具備擠出機切換功能或多擠出機系統的設備,此值通常設為 0,僅作為統計參考" msgid "Filament unload time" msgstr "退料的時間" @@ -10537,23 +10630,26 @@ msgid "" "for single-extruder multi-material machines. For tool changers or multi-tool " "machines, it's typically 0. For statistics only" msgstr "" +"更換耗材時卸載舊耗材的時間,通常適用於單噴頭多材料的列印機。於具備擠出機切換功能或多擠出機系統的設備,此值通常設為 0,僅作為統計參考" msgid "Tool change time" -msgstr "" +msgstr "擠出機替換時間" msgid "" "Time taken to switch tools. It's usually applicable for tool changers or " "multi-tool machines. For single-extruder multi-material machines, it's " "typically 0. For statistics only" msgstr "" +"切換擠出機所需的時間,通常適用於具備擠出機切換功能或多擠出機系統的設備。對於單噴頭多材料的列印機,此值一般設為 0,僅作為統計參考" msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" -msgstr "線材直徑被用於計算 G-code 檔案中的擠出量。因此很重要,應盡可能精確。" +msgstr "" +"線材直徑被用於計算 G-code 檔案中的擠出量。因此很重要,應盡可能精確" msgid "Pellet flow coefficient" -msgstr "" +msgstr "顆粒材料流量係數" msgid "" "Pellet flow coefficient is empirically derived and allows for volume " @@ -10564,9 +10660,12 @@ msgid "" "\n" "filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgstr "" +"顆粒流量係數是基於實驗數據得出的,用於計算顆粒列印機的材料體積。\n" +"在內部系統中,該係數會被轉換為耗材直徑,而其它體積計算方式則維持不變。\n" +"filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgid "Shrinkage (XY)" -msgstr "" +msgstr "收縮(XY)" #, no-c-format, no-boost-format msgid "" @@ -10576,13 +10675,12 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" -"冷卻後線材會收縮的百分比(如果測量的長度是 94mm 而不是 100mm,則為是收縮率為 " -"94%)\n" -"補償將按比例縮放 xy 軸該補償僅考慮牆壁所使用的線材\n" -"請確保物體之間有足夠的間距,因為補償是在邊界檢查之後進行" +"輸入耗材冷卻後的收縮率百分比(例如,如果測量結果為 94mm 而非 100mm,則填寫 94%)。\n" +"零件的 XY 平面將根據此設定進行縮放補償,僅計算用於列印牆的耗材量。\n" +"請確保物件間預留足夠的空間,因為此補償是在完成檢查後才執行的。" msgid "Shrinkage (Z)" -msgstr "" +msgstr "收縮(Z)" #, no-c-format, no-boost-format msgid "" @@ -10590,6 +10688,7 @@ msgid "" "if you measure 94mm instead of 100mm). The part will be scaled in Z to " "compensate." msgstr "" +"輸入耗材冷卻後的收縮百分比(例如,如果測量值為 94mm 而不是 100mm,則填寫 94%)。零件的 Z 軸尺寸將被縮放以進行補償。" msgid "Loading speed" msgstr "進料速度" @@ -10600,25 +10699,25 @@ msgstr "將線材擠出到換料塔上的速度。" msgid "Loading speed at the start" msgstr "啟動時進料速度" -#, fuzzy msgid "Speed used at the very beginning of loading phase." msgstr "初始進料階段速度。" msgid "Unloading speed" msgstr "退料速度" -#, fuzzy msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." -msgstr "使用於換料塔上退料的速度(不影響尖端成型之後初始部分的速度)。" +msgstr "" +"用於在換料塔上退料速度(不影響尖端成型之後初始部分的速度)。" msgid "Unloading speed at the start" msgstr "退料初始速度" msgid "" "Speed used for unloading the tip of the filament immediately after ramming." -msgstr "線材尖端成型後立即退料的速度。" +msgstr "" +"線材尖端成型後立即退料的速度。" msgid "Delay after unloading" msgstr "退料後延遲" @@ -10628,8 +10727,7 @@ msgid "" "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" -"退料後等待的時間。有助於使用柔性線材(收縮到原始尺寸需更多的時間)以獲得可靠" -"的换色。" +"退料後等待的時間。有助於使用柔性線材(收縮到原始尺寸需更多的時間)以獲得可靠的换色。" msgid "Number of cooling moves" msgstr "冷卻移動次數" @@ -10637,22 +10735,24 @@ msgstr "冷卻移動次數" msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." -msgstr "藉由在喉管中來回移動以冷卻線材。指定移動所需的次數。" +msgstr "" +"藉由在喉管中來回移動以冷卻線材。指定移動所需的次數。" msgid "Stamping loading speed" -msgstr "" +msgstr "沖壓機的載入速度" msgid "Speed used for stamping." -msgstr "" +msgstr "進行沖壓操作時所使用的速度。" msgid "Stamping distance measured from the center of the cooling tube" -msgstr "" +msgstr "沖壓距離是以冷卻管的中心作為參考點進行測量" msgid "" "If set to nonzero value, filament is moved toward the nozzle between the " "individual cooling moves (\"stamping\"). This option configures how long " "this movement should be before the filament is retracted again." msgstr "" +"當此設定為非零值時,耗材會在每次冷卻移動(沖壓)之間向噴嘴推進。該選項用於設定在耗材回抽之前的推進持續時間。" msgid "Speed of the first cooling move" msgstr "第一次冷卻移動的速度" @@ -10670,9 +10770,7 @@ msgid "" "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" msgstr "最後一次冷卻移動的速度" @@ -10686,7 +10784,8 @@ msgstr "尖端成型參數" msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." -msgstr "此內容由尖端成型欄位編輯,包含尖端成型的特定參數。" +msgstr "" +"此內容由尖端成型欄位編輯,包含尖端成型的特定參數。" msgid "Enable ramming for multi-tool setups" msgstr "使用多色尖端成形設定" @@ -10697,27 +10796,25 @@ msgid "" "small amount of filament is rapidly extruded on the wipe tower just before " "the toolchange. This option is only used when the wipe tower is enabled." msgstr "" -"多色列印設備執行尖端成型時(即,當列印設備設定中的單擠出機多材料未選取時)。" -"選取時,在換色之前,會迅速擠出少量線材絲到換料塔上。此選項僅在啟用換料塔時使" -"用。" +"多色列印設備執行尖端成型時(即,當列印設備設定中的單擠出機多材料未選取時)。選取時,在換色之前,會迅速擠出少量線材絲到換料塔上。此選項僅在啟用換料塔時使用。" msgid "Multi-tool ramming volume" msgstr "多色尖端成型體積" msgid "The volume to be rammed before the toolchange." -msgstr "換色前尖端成型的體積" +msgstr "換色前尖端成型的體積。" msgid "Multi-tool ramming flow" msgstr "多色尖端成型流量" msgid "Flow used for ramming the filament before the toolchange." -msgstr "換色前線材尖端成型的流量" +msgstr "換色前線材尖端成型的流量。" msgid "Density" msgstr "密度" msgid "Filament density. For statistics only" -msgstr "線材的密度。只用於統計資訊。" +msgstr "線材的密度。只用於統計資訊" msgid "g/cm³" msgstr "g/cm³" @@ -10730,14 +10827,16 @@ msgstr "可溶性材料" msgid "" "Soluble material is commonly used to print support and support interface" -msgstr "可溶性材料通常用於列印支撐和支撐面" +msgstr "" +"可溶性材料通常用於列印支撐和支撐面" msgid "Support material" msgstr "支撐材料" msgid "" "Support material is commonly used to print support and support interface" -msgstr "支撐材料通常用於列印支撐體和支撐接觸面" +msgstr "" +"支撐材料通常用於列印支撐體和支撐接觸面" msgid "Softening temperature" msgstr "線材軟化溫度" @@ -10747,14 +10846,13 @@ msgid "" "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid clogging." msgstr "" -"線材在此溫度下容易軟化,因此當熱床床溫等於或高於該溫度時,強烈建議打開前門和/" -"或拆下上部玻璃以避免堵塞。" +"線材在此溫度下容易軟化,因此當熱床床溫等於或高於該溫度時,強烈建議打開前門和/或拆下上部玻璃以避免堵塞。" msgid "Price" msgstr "價格" msgid "Filament price. For statistics only" -msgstr "線材的價格。只用於統計資訊。" +msgstr "線材的價格。只用於統計資訊" msgid "money/kg" msgstr "元/公斤" @@ -10763,32 +10861,34 @@ msgid "Vendor" msgstr "廠牌" msgid "Vendor of filament. For show only" -msgstr "列印線材的廠牌。僅用於展示。" +msgstr "列印線材的廠牌。僅用於展示" msgid "(Undefined)" msgstr "(未定義)" msgid "Sparse infill direction" -msgstr "" +msgstr "稀疏填充方向" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" -msgstr "稀疏填充圖案的角度,決定走線的開始或整體方向。" +msgstr "" +"稀疏填充圖案的角度,決定走線的開始或整體方向" msgid "Solid infill direction" -msgstr "" +msgstr "實心填充方向" msgid "" "Angle for solid infill pattern, which controls the start or main direction " "of line" msgstr "" +"實心填充圖案的角度設定,用於決定線條的起始方向或主要列印方向" msgid "Rotate solid infill direction" -msgstr "" +msgstr "旋轉實心填充方向" msgid "Rotate the solid infill direction by 90° for each layer." -msgstr "" +msgstr "每層實心填充的列印方向旋轉 90°。" msgid "Sparse infill density" msgstr "稀疏填充密度" @@ -10798,6 +10898,7 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" +"設定內部稀疏填充的密度,當密度為 100% 時,所有稀疏填充將變為實心填充,並應用內部實心填充的圖案" msgid "Sparse infill pattern" msgstr "稀疏填充圖案" @@ -10836,7 +10937,7 @@ msgid "Lightning" msgstr "閃電" msgid "Cross Hatch" -msgstr "" +msgstr "交叉填充" msgid "Sparse infill anchor length" msgstr "稀疏填充錨線長度" @@ -10853,8 +10954,10 @@ msgid "" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" +"將填充線透過一小段額外的牆與內牆連接。如果以百分比形式設定(如 15%),此數值是基於填充擠出寬度進行計算。Orca Slicer 會嘗試將兩條靠近的填充線連接到一段較短的牆。如果沒有找到比 infill_anchor_max 更短的牆,則填充" +"線會只連接到一側的牆,且該段的長度受此參數限制,但不會超過 anchor_length_max。 \n" +"將此參數設為 0 可禁用單條填充線與牆的錨接功能。" -#, fuzzy msgid "0 (no open anchors)" msgstr "0(無錨線)" @@ -10876,6 +10979,8 @@ msgid "" "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%),此數值是基於填充擠出寬度進行計算。Orca Slicer 會嘗試將兩條靠近的填充線連接到一段較短的牆。如果沒有找到短於此參數的牆,則填充線會只連接到單" +"側牆,且該牆的長度受 infill_anchor 限制,但不會超過此參數的設定值。若此參數設定為 0,將啟用舊版填充連接算法,並生成與設置為 1000 和 0 相同的結果。" msgid "0 (Simple connect)" msgstr "0(簡單連接)" @@ -10884,7 +10989,7 @@ msgid "Acceleration of outer walls" msgstr "外牆的加速度。它通常使用比內壁速度慢的加速度,以獲得更好的列印品質" msgid "Acceleration of inner walls" -msgstr "內牆加速度,使用較低值可以改善列印品質。" +msgstr "內牆加速度,使用較低值可以改善列印品質" msgid "Acceleration of travel moves" msgstr "空駛加速度" @@ -10892,10 +10997,11 @@ msgstr "空駛加速度" msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" -msgstr "頂面填充的加速度。使用較低值可能會改善頂面列印品質" +msgstr "" +"頂面填充的加速度。使用較低值可能會改善頂面列印品質" msgid "Acceleration of outer wall. Using a lower value can improve quality" -msgstr "外牆加速度。使用較小的值可以提高列印品質。" +msgstr "外牆加速度。使用較小的值可以提高列印品質" msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " @@ -10910,35 +11016,35 @@ 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 " "adhesive" -msgstr "首層加速度。使用較低值可以改善和列印板的黏附。" +msgstr "" +"首層加速度。使用較低值可以改善和列印板的黏附" msgid "Enable accel_to_decel" msgstr "啟用煞車速度" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "Klipper 會依照煞車速度值自動調整" +msgstr "Klipper 會依照煞車速度自動調整" msgid "accel_to_decel" msgstr "煞車速度" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" -msgstr "Klipper 的最大煞車速度將調整為加速度的 %%" +msgstr "" +"Klipper 的最大煞車速度將調整為加速度的 %%" msgid "Jerk of outer walls" msgstr "外牆抖動值" @@ -10961,7 +11067,8 @@ msgstr "空駛抖動值" msgid "" "Line width of initial layer. If expressed as a %, it will be computed over " "the nozzle diameter." -msgstr "首層的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"首層的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" msgid "Initial layer height" msgstr "首層層高" @@ -10969,7 +11076,8 @@ msgstr "首層層高" msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhesion" -msgstr "首層層高" +msgstr "" +"首層層高" msgid "Speed of initial layer except the solid infill part" msgstr "首層除實心填充之外的其他部分的列印速度" @@ -10992,7 +11100,8 @@ msgstr "慢速列印層數" 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 "減慢前幾層的列印速度。列印速度會逐漸加速到滿速" +msgstr "" +"減慢前幾層的列印速度。列印速度會逐漸加速到滿速。" msgid "Initial layer nozzle temperature" msgstr "首層列印溫度" @@ -11010,9 +11119,8 @@ msgid "" "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 "" -"風扇速度將從\"禁用第一層\"的零線性上升到\"全風扇速度層\"的最大。如果低於\"禁" -"用風扇第一層\",則\"全風扇速度第一層\"將被忽略,在這種情況下,風扇將在\"禁用" -"風扇第一層\"+1層以最大允許速度運行。" +"風扇速度會從第「close_fan_the_first_x_layers」層開始,從零速以線性方式逐漸增加,直到第「full_fan_speed_layer」層達到最大速度。如果「full_fan_speed_layer」的設定值小於「close_fan_the_first_x_layers」,則" +"「full_fan_speed_layer」會被忽略,此時風扇會在「close_fan_the_first_x_layers + 1」層以允許的最高速度運行。" msgid "layer" msgstr "層" @@ -11032,7 +11140,8 @@ msgstr "" msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" -msgstr "列印外牆時隨機抖動,使外表面產生絨毛效果。這個設定決定適用的位置。" +msgstr "" +"列印外牆時隨機抖動,使外表面產生絨毛效果。這個設定決定適用的位置" msgid "Contour" msgstr "輪廓" @@ -11049,7 +11158,8 @@ msgstr "絨毛表面厚度" msgid "" "The width within which to jitter. It's advised to be below outer wall line " "width" -msgstr "產生絨毛的抖動的寬度。建議小於外圈牆的線寬。" +msgstr "" +"產生絨毛的抖動的寬度。建議小於外圈牆的線寬" msgid "Fuzzy skin point distance" msgstr "絨毛表面點間距" @@ -11057,13 +11167,14 @@ msgstr "絨毛表面點間距" msgid "" "The average distance between the random points introduced on each line " "segment" -msgstr "產生絨毛表面時,插入的隨機點之間的平均距離" +msgstr "" +"產生絨毛表面時,插入的隨機點之間的平均距離" msgid "Apply fuzzy skin to first layer" -msgstr "" +msgstr "在第一層啟用絨毛表面" msgid "Whether to apply fuzzy skin on the first layer" -msgstr "" +msgstr "是否啟用絨毛表面於第一層" msgid "Filter out tiny gaps" msgstr "忽略微小間隙" @@ -11076,20 +11187,23 @@ msgid "" "(in mm). This setting applies to top, bottom and solid infill and, if using " "the classic perimeter generator, to wall gap fill. " msgstr "" +"若縫隙填充的長度小於設定的閾值(以 mm 計),則不列印該填充。此設定適用於頂部、底部和實心填充,以及使用經典牆產生器時的牆體縫隙填充。" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" -msgstr "填縫的速度。縫隙通常有不一致的線寬,應改用較慢速度列印。" +msgstr "" +"填縫的速度。縫隙通常有不一致的線寬,應改用較慢速度列印" msgid "Precise Z height" -msgstr "" +msgstr "Z 軸的精確高度" msgid "" "Enable this to get precise z height of object after slicing. It will get the " "precise object height by fine-tuning the layer heights of the last few " "layers. Note that this is an experimental parameter." msgstr "" +"啟用此選項可以在切片後確保物件的 Z 軸高度更加精確。此功能透過微調最後幾層的層高來達成精確的物件高度。請注意,這是一個實驗性功能。" msgid "Arc fitting" msgstr "圓弧擬合" @@ -11104,12 +11218,15 @@ msgid "" "quality as line segments are converted to arcs by the slicer and then back " "to line segments by the firmware." msgstr "" +"啟用此選項可生成包含 G2 和 G3 弧形運動的 G-code 文件,其擬合公差與解析度一致。 \n" +"\n" +"注意:對於 Klipper 控制的機器,建議關閉此功能。Klipper 無法有效利用弧形指令,因為固件會將這些弧形指令重新分割為線段。這可能導致表面品質下降,因為切片器將線段轉換為弧形,然後固件又將弧形還原為線段。" msgid "Add line number" msgstr "標註行號" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" -msgstr "" +msgstr "啟用此選項可在每行 G-Code 的開頭添加行號(Nx)" msgid "Scan first layer" msgstr "首層檢查" @@ -11117,7 +11234,8 @@ msgstr "首層檢查" msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" -msgstr "打開這個設定將使用列印設備上的鏡頭用於檢查首層列印品質。" +msgstr "" +"打開這個設定將使用列印設備上的鏡頭用於檢查首層列印品質" msgid "Nozzle type" msgstr "噴嘴類型" @@ -11125,7 +11243,8 @@ msgstr "噴嘴類型" msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" -msgstr "噴嘴的金屬材料。這將決定噴嘴的耐磨性,以及可列印線材的種類" +msgstr "" +"噴嘴的金屬材料。這將決定噴嘴的耐磨性,以及可列印線材的種類" msgid "Undefine" msgstr "未定義" @@ -11145,7 +11264,8 @@ msgstr "噴嘴洛氏硬度" msgid "" "The nozzle's hardness. Zero means no checking for nozzle's hardness during " "slicing." -msgstr "噴嘴硬度。零值表示在切片時不檢查噴嘴硬度。" +msgstr "" +"噴嘴硬度。零值表示在切片時不檢查噴嘴硬度。" msgid "HRC" msgstr "洛氏硬度" @@ -11157,16 +11277,16 @@ msgid "The physical arrangement and components of a printing device" msgstr "列印設備的實體佈置和組件" msgid "CoreXY" -msgstr "" +msgstr "CoreXY" msgid "I3" -msgstr "" +msgstr "I3" msgid "Hbot" -msgstr "" +msgstr "Hbot" msgid "Delta" -msgstr "" +msgstr "Delta" msgid "Best object position" msgstr "最佳物件位置" @@ -11191,18 +11311,19 @@ msgid "" "gcode' is activated.\n" "Use 0 to deactivate." msgstr "" -"將風扇啟動指令往前移動指定時間以補償風扇的啟動時間。目前支援 G1 G0 指令\n" -"設為 0 以禁用此選項" +"在風扇目標啟動時間前提前設定的秒數啟動風扇(支持小數點)。此功能基於無限加速假設進行時間估算,並僅考慮 G1 和 G0 指令的移動(不支援圓弧擬合)。\n" +"風扇指令不會從自定義 G-code 中轉移(它們被視為「屏障」)。\n" +"若啟用『僅使用自定義起始 G-code』,風扇指令將不會移動到起始 G-code 中。\n" +"將此值設為 0 可停用該功能。" msgid "Only overhangs" msgstr "僅懸空" -#, fuzzy msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "僅參考懸空的冷卻延遲" +msgstr "此設定僅針對懸空部分的冷卻延遲進行考量。" msgid "Fan kick-start time" -msgstr "風扇" +msgstr "風扇啟動時間" msgid "" "Emit a max fan speed command for this amount of seconds before reducing to " @@ -11211,10 +11332,11 @@ msgid "" "fan started spinning from a stop, or to get the fan up to speed faster.\n" "Set to 0 to deactivate." msgstr "" -"先用最快風扇速度運轉冷卻風扇N秒後再降低到目標速度。\n" -"這對於低 PWM/功率不足以讓風扇從停止狀態啟動,或使風扇加速更快的情況非常有" -"用。\n" -"設定為 0 以停用。" +"在風扇降速至目標速度之前,先以最大風扇速度運行指定的秒數來啟動冷卻風扇。\n" +"這對於需要較高功率才能從靜止狀態啟動,或需要更快達到運行速度的風扇非常有幫助。\n" +"若設置為 0,將停用此功能。\n" +"譯者補充:風扇啟動時間通常是指風扇從靜止狀態到穩定運轉所需的時間\n" +"這個設定可以確保風扇在低轉速時順利啟動,避免因功率不足而無法正常運行。" msgid "Time cost" msgstr "時間成本" @@ -11252,19 +11374,19 @@ msgid "What kind of gcode the printer is compatible with" msgstr "列印設備相容的 G-code 樣式" msgid "Klipper" -msgstr "" +msgstr "Klipper" msgid "Pellet Modded Printer" -msgstr "" +msgstr "顆粒改裝列印機" msgid "Enable this option if your printer uses pellets instead of filaments" -msgstr "" +msgstr "若你的列印機使用塑料顆粒而非傳統線材,請啟用此選項" msgid "Support multi bed types" -msgstr "" +msgstr "支援多種熱床類型" msgid "Enable this option if you want to use multiple bed types" -msgstr "" +msgstr "若你需要切換使用不同的列印床類型,請啟用此選項" msgid "Label objects" msgstr "標註物件" @@ -11275,9 +11397,7 @@ msgid "" "plugin. This settings is NOT compatible with Single Extruder Multi Material " "setup and Wipe into Object / Wipe into Infill." msgstr "" -"啟用此選項可將註解新增至 G-code 中,標記列印移動及其所屬物件,這對於 " -"Octoprint CancelObject 外掛程式非常有用。此設定與單擠出機多色設定和擦除到物" -"件/擦除到填充不相容。" +"啟用此選項可將註解新增至 G-code 中,標記列印移動及其所屬物件,這對於 Octoprint CancelObject 外掛程式非常有用。此設定與單擠出機多色設定和擦除到物件/擦除到填充不相容。" msgid "Exclude objects" msgstr "物件排除" @@ -11293,8 +11413,7 @@ msgid "" "descriptive text. If you print from SD card, the additional weight of the " "file could make your firmware slow down." msgstr "" -"啟用此選項可取得帶註釋的 G-code,其中每一行均由描述性文字進行解釋。 如果你從 " -"SD 卡列印,檔案的額外容量可能會導致韌體速度變慢。" +"啟用此選項可取得帶註釋的 G-code,其中每一行均由描述性文字進行解釋。如果你從 SD 卡列印,檔案的額外容量可能會導致韌體速度變慢。" msgid "Infill combination" msgstr "合併填充" @@ -11303,10 +11422,10 @@ msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"自動合併若干層稀疏填充一起列印以可縮短時間。內外牆依然保持原始層高列印。" +"自動將多層稀疏填充合併列印,以縮短列印時間。同時,周邊仍保持原層高列印。" msgid "Infill combination - Max layer height" -msgstr "" +msgstr "合併填充 - 最大層高" msgid "" "Maximum layer height for the combined sparse infill. \n" @@ -11320,14 +11439,20 @@ msgid "" "Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values " "(eg 80%). This value must not be larger than the nozzle diameter." msgstr "" +"設定稀疏填充合併列印最大層高。\n" +"\n" +"你可以將其設為 0 或 100% 來使用噴嘴直徑(以最大程度縮短列印時間),或者設定為大約 80% 來增強稀疏填充的強度。結合的層數會根據此值與層高的比值計算,並向下取整到最接近的位數。\n" +"\n" +"可以使用絕對值(例如 0.32mm,對應 0.4mm 的噴嘴)或百分比(例如 80%)。注意,此值不能超過噴嘴的直徑。" 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 "內部稀疏填充的線寬。如果以%表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"內部稀疏填充的線寬。如果以%表示,它將以噴嘴直徑為基準來計算。" msgid "Infill/Wall overlap" msgstr "填充/牆 重疊" @@ -11339,9 +11464,10 @@ msgid "" "value to ~10-15% to minimize potential over extrusion and accumulation of " "material resulting in rough top surfaces." msgstr "" +"為了增強填充與周邊的結合,填充區域會略微擴大,與周邊產生重疊。此百分比值是基於稀疏填充的線寬來計算的。建議將該值設置在 10-15% 左右,以減少過擠出或材料堆積的可能性從而避免列印出粗糙的頂部表面。" msgid "Top/Bottom solid infill/wall overlap" -msgstr "" +msgstr "頂部/底部實心填充部分和周邊重疊區域設定" #, no-c-format, no-boost-format msgid "" @@ -11351,6 +11477,7 @@ msgid "" "appearance of pinholes. The percentage value is relative to line width of " "sparse infill" msgstr "" +"頂部實心填充的區域會略微擴大,與周邊部分重疊,以增強結合效果並減少填充與周邊接合處出現針孔的可能性。建議從 25-30% 的設定值開始,這通常能有效減少針孔現象。此百分比值是基於稀疏填充的線寬來計算的" msgid "Speed of internal sparse infill" msgstr "內部稀疏填充的列印速度" @@ -11363,8 +11490,7 @@ msgid "" "Useful for multi-extruder prints with translucent materials or manual " "soluble support material" msgstr "" -"強制在相鄰材料/體積之間產生實體殼。 適用於使用半透明材料或手動可溶支撐材料的" -"多擠出機列印" +"強制在相鄰材料/體積之間產生實體殼。 適用於使用半透明材料或手動可溶支撐材料的多擠出機列印" msgid "Maximum width of a segmented region" msgstr "分隔區域的最大寬度" @@ -11373,7 +11499,7 @@ msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "分隔區域的最大寬度。零表示禁用此功能。" msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "分隔區域的互鎖深度" msgid "" "Interlocking depth of a segmented region. It will be ignored if " @@ -11381,51 +11507,59 @@ msgid "" "\"mmu_segmented_region_interlocking_depth\"is bigger then " "\"mmu_segmented_region_max_width\". Zero disables this feature." msgstr "" +"設定分隔區域的互鎖深度。如果「mmu_segmented_region_max_width」設定為 0,或者「mmu_segmented_region_interlocking_depth」的值大於「mmu_segmented_region_max_width」,此功能將被忽略。將此值設為 0 可完全關閉該功" +"能。" msgid "Use beam interlocking" -msgstr "" +msgstr "使用梁式互鎖" msgid "" "Generate interlocking beam structure at the locations where different " "filaments touch. This improves the adhesion between filaments, especially " "models printed in different materials." msgstr "" +"在不同材料的耗材接觸點生成梁式互鎖結構,增強耗材之間的附著力,特別適用於不同材料列印的模型。\n" +"譯者補充:此設定通常用於提升結構穩定性,透過梁式設計讓不同部分更緊密地連接在一起,常見於模組化或多材料列印中。" msgid "Interlocking beam width" -msgstr "" +msgstr "梁式互鎖寬度" msgid "The width of the interlocking structure beams." -msgstr "" +msgstr "梁式互鎖結構寬度。" msgid "Interlocking direction" -msgstr "" +msgstr "梁式互鎖方向" msgid "Orientation of interlock beams." -msgstr "" +msgstr "梁式互鎖結構的排列方向。" msgid "Interlocking beam layers" -msgstr "" +msgstr "梁式互鎖層數" msgid "" "The height of the beams of the interlocking structure, measured in number of " "layers. Less layers is stronger, but more prone to defects." msgstr "" +"梁式互鎖的交錯高度,以層數計算。層數越少,結構越強,但更容易出現缺陷。" msgid "Interlocking depth" -msgstr "" +msgstr "梁式互鎖深度" msgid "" "The distance from the boundary between filaments to generate interlocking " "structure, measured in cells. Too few cells will result in poor adhesion." msgstr "" +"互鎖結構與邊界之間的距離,以單元數做計算。若單元數過少,可能會導致附著力不足。" msgid "Interlocking boundary avoidance" -msgstr "" +msgstr "梁式互鎖的邊界避讓" msgid "" "The distance from the outside of a model where interlocking structures will " "not be generated, measured in cells." msgstr "" +"設定模型外部距離範圍內不生成互鎖結構,此距離以單元數做計算\n" +"譯者補充:此設定用於確保互鎖結構不干擾模型的外部區域,特別適用於需要精細外觀或保護特定結構的列印需求。" msgid "Ironing Type" msgstr "熨燙類型" @@ -11434,8 +11568,7 @@ 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 "" -"熨燙是指使用小流量在表面相同高度再次列印,以使平面更加光滑。此設定控制哪些層" -"進行熨燙。" +"熨燙是指使用小流量在表面相同高度再次列印,以使平面更加光滑。此設定控制哪些層進行熨燙" msgid "No ironing" msgstr "不熨燙" @@ -11461,7 +11594,8 @@ msgstr "熨燙流量" 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 "熨燙時相對正常層高流量的材料量。過高的數值將會導致表面材料過擠出。" +msgstr "" +"熨燙時相對正常層高流量的材料量。過高的數值將會導致表面材料過擠出" msgid "Ironing line spacing" msgstr "熨燙間距" @@ -11482,9 +11616,10 @@ msgid "" "The angle ironing is done at. A negative number disables this function and " "uses the default method." msgstr "" +"設定熨燙操作的角度。若設為負值,將停用此功能並改用預設的熨平方式。" msgid "This gcode part is inserted at every layer change after lift z" -msgstr "在每次換層抬升Z高度之後插入這段 G-code。" +msgstr "在每次換層抬升Z高度之後插入這段 G-code" msgid "Supports silent mode" msgstr "支援靜音模式" @@ -11492,10 +11627,11 @@ msgstr "支援靜音模式" msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" -msgstr "設備是否支援使用低加速度列印的靜音模式。" +msgstr "" +"設備是否支援使用低加速度列印的靜音模式" msgid "Emit limits to G-code" -msgstr "" +msgstr "將限制參數輸出至 G-code" msgid "Machine limits" msgstr "設備限制" @@ -11504,23 +11640,25 @@ 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-code 文件中。若 G-code 格式為 Klipper,該選項將無效。" msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" -msgstr "該 G-code 用於暫停列印。你可以在 gcode 預覽中插入暫停 G-code" +msgstr "" +"這段 G-code 用於暫停列印操作。使用者可以在 G-code 預覽中手動插入暫停指令" msgid "This G-code will be used as a custom code" -msgstr "該 G-code 是訂製化指令" +msgstr "這段 G-code 是訂製化指令" msgid "Small area flow compensation (beta)" -msgstr "" +msgstr "小面積流量補償(Beta)" msgid "Enable flow compensation for small infill areas" -msgstr "" +msgstr "啟用小面積填充區域的流量補償功能" msgid "Flow Compensation Model" -msgstr "" +msgstr "流量補償模型" msgid "" "Flow Compensation Model, used to adjust the flow for small infill areas. The " @@ -11528,78 +11666,80 @@ msgid "" "and flow correction factors, one per line, in the following format: " "\"1.234,5.678\"" msgstr "" +"流量補償模型,用於在小面積填充區域中調整擠出流量。模型格式為以逗號分隔的擠出長度和流量補償係數,每行輸入一組,格式示例如下:1.234,5.678。\n" +"譯者補充:此參數允許根據不同的擠出長度動態調整流量補償,以提升小區域列印的精確度和品質。" msgid "Maximum speed X" -msgstr "X最大速度" +msgstr "X 最大速度" msgid "Maximum speed Y" -msgstr "Y最大速度" +msgstr "Y 最大速度" msgid "Maximum speed Z" -msgstr "Z最大速度" +msgstr "Z 最大速度" msgid "Maximum speed E" -msgstr "E最大速度" +msgstr "E 最大速度" msgid "Maximum X speed" -msgstr "X最大速度" +msgstr "X 最大速度" msgid "Maximum Y speed" -msgstr "Y最大速度" +msgstr "Y 最大速度" msgid "Maximum Z speed" -msgstr "Z最大速度" +msgstr "Z 最大速度" msgid "Maximum E speed" -msgstr "E最大速度" +msgstr "E 最大速度" msgid "Maximum acceleration X" -msgstr "X最大加速度" +msgstr "X 最大加速度" msgid "Maximum acceleration Y" -msgstr "Y最大加速度" +msgstr "Y 最大加速度" msgid "Maximum acceleration Z" -msgstr "Z最大加速度" +msgstr "Z 最大加速度" msgid "Maximum acceleration E" -msgstr "E最大加速度" +msgstr "E 最大加速度" msgid "Maximum acceleration of the X axis" -msgstr "X軸的最大加速度" +msgstr "X 軸的最大加速度" msgid "Maximum acceleration of the Y axis" -msgstr "Y軸的最大加速度" +msgstr "Y 軸的最大加速度" msgid "Maximum acceleration of the Z axis" -msgstr "Z軸的最大加速度" +msgstr "Z 軸的最大加速度" msgid "Maximum acceleration of the E axis" -msgstr "E軸的最大加速度" +msgstr "E 軸的最大加速度" msgid "Maximum jerk X" -msgstr "X最大抖動" +msgstr "X 最大抖動" msgid "Maximum jerk Y" -msgstr "Y最大抖動" +msgstr "Y 最大抖動" msgid "Maximum jerk Z" -msgstr "Z最大抖動" +msgstr "Z 最大抖動" msgid "Maximum jerk E" -msgstr "E最大抖動" +msgstr "E 最大抖動" msgid "Maximum jerk of the X axis" -msgstr "X軸最大抖動" +msgstr "X 軸最大抖動" msgid "Maximum jerk of the Y axis" -msgstr "Y軸最大抖動" +msgstr "Y 軸最大抖動" msgid "Maximum jerk of the Z axis" -msgstr "Z軸最大抖動" +msgstr "Z 軸最大抖動" msgid "Maximum jerk of the E axis" -msgstr "E軸最大抖動" +msgstr "E 軸最大抖動" msgid "Minimum speed for extruding" msgstr "最小擠出速度" @@ -11643,7 +11783,8 @@ msgstr "最大" msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" -msgstr "擠出頭最大可列印的層高。用於限制開啟自適應層高時的最大層高。" +msgstr "" +"擠出頭最大可列印的層高。用於限制開啟自適應層高時的最大層高" msgid "Extrusion rate smoothing" msgstr "平滑擠出率" @@ -11676,6 +11817,7 @@ msgid "" "\n" "Note: this parameter disables arc fitting." msgstr "" +"這個參數可以讓列印設備在高流量(例如高速度或較大線寬)和低流量(例如低速度或較小線寬)的切換能能夠平穩過渡,避免擠出量改變得太突然而影響列印效果。" msgid "mm³/s²" msgstr "mm³/s²" @@ -11693,6 +11835,11 @@ msgid "" "\n" "Allowed values: 1-5" msgstr "" +"較低的數值會讓擠出量的變化更平滑,但會導致 gcode 文件變得更大,列印設備需要處理更多指令。\n" +"\n" +"預設值為 3,適合大多數情況。如果你的列印設備有卡頓問題,可以調高這個數值,減少調整次數\n" +"\n" +"可用範圍:1-5" msgid "Minimum speed for part cooling fan" msgstr "物件冷卻風扇的最小轉速" @@ -11704,8 +11851,7 @@ msgid "" "Please enable auxiliary_fan in printer settings to use this feature. G-code " "command: M106 P2 S(0-255)" msgstr "" -"輔助冷卻風扇的轉速。 列印期間,輔助風扇將以該速度運行,除了設定無須冷卻的前幾" -"層除外\n" +"輔助冷卻風扇的轉速。 列印期間,輔助風扇將以該速度運行,除了設定無須冷卻的前幾層除外\n" "請在列印設備設定中啟用輔助風扇才能使用此功能。 G碼指令:M106 P2 S(0-255)" msgid "Min" @@ -11714,16 +11860,18 @@ msgstr "最小" msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" -msgstr "擠出頭最小可列印的層高。用於限制開啟自適應層高時的最小層高。" +msgstr "" +"擠出頭最小可列印的層高。用於限制開啟自適應層高時的最小層高" msgid "Min print speed" msgstr "最小列印速度" msgid "" -"The minimum printing speed that the printer will slow down to to attempt to " -"maintain the minimum layer time above, when slow down for better layer " -"cooling is enabled." +"The minimum print speed to which the printer slows down " +"to maintain the minimum layer time defined above " +"when the slowdown for better layer cooling is enabled." msgstr "" +"當啟用了為改善層冷卻而減速的功能時,這個參數設定列印設備能減速到的最低打印速度,以確保達到上面設定的最短層時間。" msgid "Diameter of nozzle" msgstr "噴嘴直徑" @@ -11734,7 +11882,8 @@ msgstr "設定備註" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." -msgstr "你可以在這裡放置你的個人備註。 該文字將會加入 G 代碼標題註釋中。" +msgstr "" +"你可以在這裡放置你的個人備註。 該文字將會加入 G 代碼標題註釋中。" msgid "Host Type" msgstr "主機類型" @@ -11742,13 +11891,14 @@ msgstr "主機類型" msgid "" "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 檔案上傳到列印設備。此欄位必須包含設備類型。" +msgstr "" +"Orca Slicer可以將 G-code 檔案上傳到列印設備。此欄位必須包含設備類型。" msgid "Nozzle volume" msgstr "噴嘴內腔體積" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "從切刀位置到噴嘴尖端的內腔體積" +msgstr "噴嘴內從刀具到末端之間的體積" msgid "Cooling tube position" msgstr "喉管位置" @@ -11770,8 +11920,7 @@ msgid "" "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" -"可能有益於更換線材過程中增加擠出機電流,克服進料時的阻力以加快尖端成型進料速" -"率而避免產生難看形狀的尖端。" +"可能有益於更換線材過程中增加擠出機電流,克服進料時的阻力以加快尖端成型進料速率而避免產生難看形狀的尖端。" msgid "Filament parking position" msgstr "線材停放位置" @@ -11791,8 +11940,7 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" -"當設定為零時,線材的進料移動與退料移動的距離相同。如果為正,進料比退料長。如" -"果為負,進料比退料短。" +"當設定為零時,線材的進料移動與退料移動的距離相同。如果為正,進料比退料長。如果為負,進料比退料短。" msgid "Start end points" msgstr "起始終止點" @@ -11808,19 +11956,19 @@ 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 "" -"當空駛完全在填充區域內時不觸發回抽。這意味著即使漏料也是不可見的。對於複雜模" -"型,該設定能夠減少回抽次數以及列印時長,但是會造成 G-code 產生變慢" +"當空駛完全在填充區域內時不觸發回抽。這意味著即使漏料也是不可見的。對於複雜模型,該設定能夠減少回抽次數以及列印時長,但是會造成 G-code 產生變慢" msgid "" "This option will drop the temperature of the inactive extruders to prevent " "oozing." msgstr "" +"這個選項會降低未使用噴頭的溫度,以防止材料滲出。" msgid "Filename format" msgstr "檔案名稱格式" msgid "User can self-define the project file name when export" -msgstr "使用者可以自訂匯出項目檔案的名稱。" +msgstr "使用者可以自訂匯出項目檔案的名稱" msgid "Make overhangs printable" msgstr "修改懸空成可列印" @@ -11836,8 +11984,7 @@ msgid "" "printable.90° will not change the model at all and allow any overhang, while " "0 will replace all overhangs with conical material." msgstr "" -"開啟使懸空可列印後,允許的懸空最大角度。90° 將完全不改變模型並允許任何懸空," -"而0° 將用圓錐形材料替換所有懸空部分。" +"開啟使懸空可列印後,允許的懸空最大角度。 90° 將完全不改變模型並允許任何懸空,而 0° 將用圓錐形材料替換所有懸空部分。" msgid "Make overhangs printable - Hole area" msgstr "最大孔洞面積" @@ -11846,30 +11993,29 @@ msgid "" "Maximum area of a hole in the base of the model before it's filled by " "conical material.A value of 0 will fill all the holes in the model base." msgstr "" -"模型底部的孔洞在被圓錐形材料填充前所允許的最大面積。值為 0 將填充模型底部的所" -"有孔洞。" +"模型底部的孔洞在被圓錐形材料填充前所允許的最大面積。值為 0 將填充模型底部的所有孔洞。" msgid "mm²" msgstr "mm²" msgid "Detect overhang wall" -msgstr "識別懸空外牆" +msgstr "檢測懸空外牆" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "Detect the overhang percentage relative to line width and use different " "speed to print. For 100%% overhang, bridge speed is used." msgstr "" -"偵測懸空相對於線寬的百分比,並應用不同的速度列印。100%% 的懸空將使用橋接速" -"度。" +"偵測懸空相對於線寬的百分比,並應用不同的速度列印。100%% 的懸空將使用橋接速度。" msgid "Filament to print walls" -msgstr "" +msgstr "用於列印牆體的線材" msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " "nozzle diameter." -msgstr "內牆的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"內牆的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" msgid "Speed of inner wall" msgstr "內圈牆列印速度" @@ -11890,6 +12036,11 @@ msgid "" "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 " @@ -11898,24 +12049,22 @@ msgid "" "argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" -"如果你想透過自訂腳本處理輸出的 G-code,只需在此處列出它們的絕對路徑即可。 用" -"分號分隔多個腳本。 腳本將傳遞 G-code 檔案的絕對路徑作為第一個參數,並且它們可" -"以透過讀取環境變數來讀取 Orca Slicer 設定。" +"如果你想透過自訂腳本處理輸出的 G-code,只需在此處列出它們的絕對路徑即可。用分號分隔多個腳本。腳本將傳遞 G-code 檔案的絕對路徑作為第一個參數,並且它們可以透過讀取環境變數來讀取 Orca Slicer 設定。" msgid "Printer type" -msgstr "" +msgstr "列印設備類型" msgid "Type of the printer" -msgstr "" +msgstr "列印設備類型" msgid "Printer notes" msgstr "列印設備備註" msgid "You can put your notes regarding the printer here." -msgstr "可以將列印設備的備註填寫在此處" +msgstr "可以將列印設備的備註填寫在此處。" msgid "Printer variant" -msgstr "" +msgstr "列印機型號" msgid "Raft contact Z distance" msgstr "筏層Z間距" @@ -11939,7 +12088,7 @@ msgid "Initial layer expansion" msgstr "首層擴展" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "擴展筏和支撐的首層可以改善和熱床的黏附。" +msgstr "擴展筏和支撐的首層可以改善和熱床的黏附" msgid "Raft layers" msgstr "筏層" @@ -11948,15 +12097,14 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"模型會在相應層數的支撐上抬高進行列印。使用該功能通常用於列印 ABS 時翹曲。" +"模型會在相應層數的支撐上抬高進行列印。使用該功能通常用於列印 ABS 時翹曲" msgid "" "G-code path is generated after simplifying the contour of model to avoid too " "much points and gcode lines in gcode file. Smaller value means higher " "resolution and more time to slice" msgstr "" -"為了避免 G-code 檔案中過密集的點和走線,G-code走線通常是在簡化模型的外輪廓之" -"後產生。越小的數值代表更高的解析度,同時需要更長的切片時間。" +"為了避免 G-code 檔案中過密集的點和走線,G-code走線通常是在簡化模型的外輪廓之後產生。越小的數值代表更高的解析度,同時需要更長的切片時間" msgid "Travel distance threshold" msgstr "空駛距離臨界值" @@ -11964,28 +12112,31 @@ msgstr "空駛距離臨界值" msgid "" "Only trigger retraction when the travel distance is longer than this " "threshold" -msgstr "只在空駛距離大於該數值時觸發回抽。" +msgstr "" +"只在空駛距離大於該數值時觸發回抽" msgid "Retract amount before wipe" msgstr "擦拭前的回抽量" msgid "" "The length of fast retraction before wipe, relative to retraction length" -msgstr "擦拭之前的回抽長度,用總回抽長度的百分比表示。" +msgstr "" +"擦拭之前的回抽長度,用總回抽長度的百分比表示" msgid "Retract when change layer" msgstr "換層時回抽" msgid "Force a retraction when changes layer" -msgstr "強制在換層時回抽。" +msgstr "強制在換層時回抽" msgid "Retract on top layer" -msgstr "" +msgstr "頂層回抽" msgid "" "Force a retraction on top layer. Disabling could prevent clog on very slow " "patterns with small movements, like Hilbert curve" msgstr "" +"在頂層強制執行回抽操作。禁用此功能可能有助於避免在非常緩慢且移動距離較小的模式(例如希爾伯特曲線)中出現堵塞" msgid "Retraction Length" msgstr "回抽長度" @@ -11994,11 +12145,10 @@ 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 "Long retraction when cut(experimental)" -msgstr "" +msgstr "切斷時的長回抽(實驗性功能)" msgid "" "Experimental feature.Retracting and cutting off the filament at a longer " @@ -12006,47 +12156,50 @@ msgid "" "significantly, it may also raise the risk of nozzle clogs or other printing " "problems." msgstr "" +"實驗性功能。在線材切換時,通過更長距離的回抽和切斷操作來減少沖洗量。雖然這能大幅降低沖洗需求,但可能會提高噴嘴堵塞或其他列印問題的風險。" msgid "Retraction distance when cut" -msgstr "" +msgstr "切斷時的回抽距離" msgid "" "Experimental feature.Retraction length before cutting off during filament " "change" msgstr "" +"實驗性功能。線材切換時切斷前的回抽距離" msgid "Z-hop height" -msgstr "" +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 "" -"回抽完成之後,噴嘴輕微抬升,和列印物件之間產生一定間隙。這能夠避免空駛時噴嘴" -"和列印物件剮蹭和碰撞。使用螺旋線抬升z能夠減少拉絲。" +"回抽完成之後,噴嘴輕微抬升,和列印物件之間產生一定間隙。這能夠避免空駛時噴嘴和列印物件剮蹭和碰撞。使用螺旋線抬升z能夠減少拉絲" msgid "Z hop lower boundary" -msgstr "" +msgstr "Z 抬升下邊界" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"只有當 Z 值高於此設定值且低於『Z 抬升上邊界』參數時,Z 抬升功能才會啟用。" msgid "Z hop upper boundary" -msgstr "" +msgstr "Z 抬升上邊界" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"若此值為正,Z 抬升功能僅在 Z 值高於『Z 抬升下邊界』參數且低於此設定值時才會啟用" msgid "Z-hop type" -msgstr "" +msgstr "Z 抬升類型" msgid "Z hop type" -msgstr "抬Z類型" +msgstr "Z 抬升類型" msgid "Slope" msgstr "梯形" @@ -12055,46 +12208,49 @@ msgid "Spiral" msgstr "螺旋" msgid "Traveling angle" -msgstr "" +msgstr "移動角度" msgid "" "Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results " "in Normal Lift" msgstr "" +"適用於坡度和螺旋 Z 抬升類型的移動角度。將其設為 90° 可執行正常抬升" msgid "Only lift Z above" -msgstr "僅在高度以上抬Z" +msgstr "僅在高度以上抬 Z" msgid "" "If you set this to a positive value, Z lift will only take place above the " "specified absolute Z." -msgstr "如果設定為正值,則 Z 抬升僅在指定的絕對 Z 之上發生" +msgstr "" +"若將此值設定為正數,Z 抬升僅會在超過指定的絕對 Z 值時啟用。" msgid "Only lift Z below" -msgstr "僅在高度以下抬Z" +msgstr "僅在 Z 值低於指定值時抬升" msgid "" "If you set this to a positive value, Z lift will only take place below the " "specified absolute Z." -msgstr "如果設定為正值,則 Z 抬升僅在指定的絕對 Z 以下發生。" +msgstr "" +"若將此值設定為正數,Z 抬升僅會在低於指定的絕對 Z 值時啟用。" msgid "On surfaces" -msgstr "僅表面抬Z" +msgstr "僅在表面" msgid "" "Enforce Z Hop behavior. This setting is impacted by the above settings (Only " "lift Z above/below)." msgstr "" -"強制 Z 抬升行為。此設定受上述設定的影響(僅在高度以下抬Z/僅在高度以上抬Z)。" +"強制啟用 Z 抬升行為。此功能受前述設定(僅在 Z 值高於/低於時啟用)的影響。" msgid "All Surfaces" msgstr "所有表面" msgid "Top Only" -msgstr "僅頂面" +msgstr "僅在頂面" msgid "Bottom Only" -msgstr "僅底面" +msgstr "僅在底面" msgid "Top and Bottom" msgstr "頂面和地面" @@ -12105,12 +12261,14 @@ msgstr "額外回填長度" 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 "每當空駛後回抽被補償時,擠出機將推入額外長度的線材。很少需要此設定。" +msgstr "" +"每當空駛後回抽被補償時,擠出機將推入額外長度的線材。很少需要此設定。" msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." -msgstr "當換色後回抽被補償時,擠出機將推入額外長度的線材。" +msgstr "" +"當換色後回抽被補償時,擠出機將推入額外長度的線材。" msgid "Retraction Speed" msgstr "回抽速度" @@ -12124,7 +12282,8 @@ msgstr "裝填速度" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" -msgstr "線材裝填的速度,0 表示和回抽速度一致。" +msgstr "" +"線材裝填的速度,0 表示和回抽速度一致" msgid "Use firmware retraction" msgstr "使用韌體回抽" @@ -12133,18 +12292,18 @@ 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 命令讓韌體處理回抽。該功能僅支持最近版本的 " -"Marlin 固件。" +"此實驗性功能使用 G10 和 G11 指令,由韌體負責執行回抽操作。僅支援於最新版本的 Marlin 韌體。" msgid "Show auto-calibration marks" msgstr "顯示雷達校準線" msgid "Disable set remaining print time" -msgstr "" +msgstr "停用剩餘列印時間設定" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" +"停用在最終 G-code 中生成 M73 指令以設定剩餘列印時間" msgid "Seam position" msgstr "接縫位置" @@ -12170,7 +12329,8 @@ msgstr "交錯的內牆接縫" msgid "" "This option causes the inner seams to be shifted backwards based on their " "depth, forming a zigzag pattern." -msgstr "此選項會根據內牆深度使接縫向後移動,形成鋸齒形模式。" +msgstr "" +"此選項會根據內牆深度使接縫向後移動,形成鋸齒形模式。" msgid "Seam gap" msgstr "接縫間隔" @@ -12181,23 +12341,26 @@ msgid "" "This amount can be specified in millimeters or as a percentage of the " "current extruder diameter. The default value for this parameter is 10%." msgstr "" +"為了降低閉環擠出中接縫的可見度,閉環會中斷並縮短指定的長度。\n" +"此長度可設定為毫米或擠出機直徑的百分比,默認值為 10%。" msgid "Scarf joint seam (beta)" -msgstr "" +msgstr "斜拼接縫(Beta)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." -msgstr "" +msgstr "採用斜拼接縫來減少接縫的可見度並提高接縫的強度。" msgid "Conditional scarf joint" -msgstr "" +msgstr "斜拼接縫條件" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"僅在平滑外牆使用斜拼接縫,用於傳統接縫無法在尖角處有效隱藏接縫的情況。" msgid "Conditional angle threshold" -msgstr "" +msgstr "角度閾值條件" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -12206,9 +12369,10 @@ msgid "" "(indicating the absence of sharp corners), a scarf joint seam will be used. " "The default value is 155°." msgstr "" +"此選項設定斜拼接縫的角度閾值條件。當外牆迴圈內的最大角度超過該設定值(表示不存在尖角)時,將應用斜接縫接縫。預設值為 155°。" msgid "Conditional overhang threshold" -msgstr "" +msgstr "懸空閾值條件" #, no-c-format, no-boost-format msgid "" @@ -12218,9 +12382,10 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"此選項用於設定斜拼接縫的懸空閾值。當外牆未支撐的部分小於該閾值時,將應用斜拼接縫。預設閾值為外層牆寬度的 40%。為了考慮性能,此懸空程度為估算值。" msgid "Scarf joint speed" -msgstr "" +msgstr "斜拼接縫速度" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " @@ -12232,47 +12397,51 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" +"此選項用於設定斜拼接縫的列印速度,建議以較慢的速度進行列印(小於 100 mm/s)。若設定的速度與外牆或內牆速度差異較大,建議啟用『平滑擠出率』功能。若此處設定的速度高於外牆或內牆速度,列印設備將自動選擇兩者中較慢的" +"速度。當以百分比(如 80%)指定時,該速度將基於外牆或內牆速度進行計算。預設值為 100%。" msgid "Scarf joint flow ratio" -msgstr "" +msgstr "斜拼接縫流量比" msgid "This factor affects the amount of material for scarf joints." -msgstr "" +msgstr "此參數會影響斜拼接縫的擠出流量。" msgid "Scarf start height" -msgstr "" +msgstr "斜拼接縫起始高度" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"設定斜拼接縫的起始高度。該值可用毫米或當前層高度的百分比表示,默認值為 0。" msgid "Scarf around entire wall" -msgstr "" +msgstr "環繞整個牆體的斜拼接縫" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "斜拼接縫覆蓋牆體的整個長度。" msgid "Scarf length" -msgstr "" +msgstr "斜拼接縫長度" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"斜拼接縫的長度。若將此參數設為 0,將禁用斜接功能。" msgid "Scarf steps" -msgstr "" +msgstr "斜拼接縫段數" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "每個斜拼接縫的最小分段數量。" msgid "Scarf joint for inner walls" -msgstr "" +msgstr "內牆的斜接縫" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "內牆同樣使用斜接縫。" msgid "Role base wipe speed" msgstr "自動擦拭速度" @@ -12282,6 +12451,7 @@ msgid "" "if a wipe action is executed immediately following an outer wall extrusion, " "the speed of the outer wall extrusion will be utilized for the wipe action." msgstr "" +"拭的速度由當前擠出任務的速度決定。例如,若擦拭操作緊接著外牆的擠出執行,則將使用外牆擠出的速度進行擦拭。" msgid "Wipe on loops" msgstr "閉環擦拭" @@ -12290,11 +12460,10 @@ msgid "" "To minimize the visibility of the seam in a closed loop extrusion, a small " "inward movement is executed before the extruder leaves the loop." msgstr "" -"為了最大限度地減少閉環擠出中接縫的可見性,在擠出機離開環之前,會向內執行一個" -"小小的移動。" +"為了降低閉環擠出中接縫的可見性,在擠出機退出閉環前會進行一次微小的內縮移動。" msgid "Wipe before external loop" -msgstr "" +msgstr "外牆迴圈前的擦拭動作" msgid "" "To minimize visibility of potential overextrusion at the start of an " @@ -12307,6 +12476,8 @@ msgid "" "print order as in these modes it is more likely an external perimeter is " "printed immediately after a de-retraction move." msgstr "" +"為了減少在使用『外牆/內牆』或『內牆/外牆/內牆』牆體列印順序時,外牆開始位置可能出現的過擠出痕跡,回抽復位動作會稍微偏向外牆起始位置的內側執行。這樣可將可能的過擠出隱藏於外牆內部。此功能對於『外牆/內牆』或『內" +"牆/外牆/內牆』牆體列印順序非常有用,因為在這些模式下,外牆往往緊接著回抽復位動作開始列印。" msgid "Wipe speed" msgstr "擦拭速度" @@ -12317,28 +12488,28 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"擦拭速度是根據此配置中指定的速度設定。如果該值以百分比形式表示(例如 80%)," -"則將根據空駛速度設定進行計算。該參數的預設值為 80%。" +"擦拭速度取決於此配置中設定的速度值。若以百分比表示(例如 80%),則會根據上述的移動速度設定進行計算。該參數的預設值為 80%" msgid "Skirt distance" -msgstr "Skirt距離" +msgstr "Skirt 距離" msgid "Distance from skirt to brim or object" -msgstr "從 skirt 到模型或者 brim(裙邊)的距離" +msgstr "從 Skirt 到模型或者 Brim 的距離" msgid "Skirt start point" -msgstr "" +msgstr "Skirt 起始位置" msgid "" "Angle from the object center to skirt start point. Zero is the most right " "position, counter clockwise is positive angle." msgstr "" +"物件中心至 Skirt 起始點的角度。0 度表示最右側位置,逆時針方向為正角度。" msgid "Skirt height" msgstr "Skirt 高度" msgid "How many layers of skirt. Usually only one layer" -msgstr "skirt 有多少層。通常只有一層" +msgstr "Skirt 有多少層。通常只有一層" msgid "Draft shield" msgstr "防風罩" @@ -12354,6 +12525,10 @@ msgid "" "distance from the object. Therefore, if brims are active it may intersect " "with them. To avoid this, increase the skirt distance value.\n" msgstr "" +"擋防風罩可有效保護 ABS 或 ASA 列印物免受氣流影響,避免翹曲或脫離打印床。通常僅在開放式框架的打印機(即無外殼)中需要使用。\n" +"\n" +"啟用後,Skirt 的高度將與列印物的最高點相同。若未啟用,則使用『Skirt 高度』的設定值。\n" +"注意:啟用擋風護盾時,Skirt 會按照設定的 Skirt 距離列印於物體周圍。如果同時啟用了耳狀 Brim,Skirt 可能會與其重疊。為避免此問題,請增加 Skirt 距離的設定值。\n" msgid "Disabled" msgstr "停用" @@ -12362,24 +12537,25 @@ msgid "Enabled" msgstr "啟用" msgid "Skirt type" -msgstr "" +msgstr "Skirt 類型" msgid "" "Combined - single skirt for all objects, Per object - individual object " "skirt." msgstr "" +"合併 - 所有物件共用一個 Skirt;逐件 - 每個物件使用獨立的 Skirt」" msgid "Combined" -msgstr "" +msgstr "合併" msgid "Per object" -msgstr "" +msgstr "逐件" msgid "Skirt loops" msgstr "Skirt 圈數" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "skirt 的圈數。0 表示關閉 skirt。" +msgstr "Skirt 的圈數。0 表示關閉 Skirt" msgid "Skirt speed" msgstr "Skirt 速度" @@ -12388,7 +12564,7 @@ msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "Skirt 速度,單位為 mm/秒。 0 表示使用預設層擠出速度。" msgid "Skirt minimum extrusion length" -msgstr "" +msgstr "Skirt 最小擠出長度" msgid "" "Minimum filament extrusion length in mm when printing the skirt. Zero means " @@ -12399,12 +12575,14 @@ msgid "" "Final number of loops is not taling into account whli arranging or " "validating objects distance. Increase loop number in such case. " msgstr "" +"列印 Skirt 時的最小擠出線材長度(單位:毫米)。設為 0 表示停用此功能。若列印設備設定為不使用沖洗線材,建議設定為非零值。注意,排列或驗證物件距離時,最終迴圈數不會被計算進去。如需更多迴圈,請手動增加迴圈數設" +"定。" 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 "" -"當層預估列印時間小於這個數值時,列印速度將會降低,從而獲得更好的冷卻效果。" +"當預估的層列印時間低於該設定值時,導出的 G-code 中的列印速度會自動減慢,以提升該層的冷卻效果" msgid "Minimum sparse infill threshold" msgstr "稀疏填充最小臨界值" @@ -12412,45 +12590,48 @@ msgstr "稀疏填充最小臨界值" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" -msgstr "小於這個臨界值的稀疏填充區域將會被內部實心填充替代。" +msgstr "" +"小於設定閾值的稀疏填充區域將替換為內部實心填充" msgid "Solid infill" -msgstr "" +msgstr "實心填充" msgid "Filament to print solid infill" -msgstr "" +msgstr "列印實心填充所使用的線材" msgid "" "Line width of internal solid infill. If expressed as a %, it will be " "computed over the nozzle diameter." -msgstr "內部實心填充的線寬。如果以%表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"內部實心填充的列印線寬。若以百分比表示,將根據噴嘴直徑進行計算。" msgid "Speed of internal solid infill, not the top and bottom surface" -msgstr "內部實心填充的速度,不是頂面和底面。" +msgstr "內部實心填充的列印速度,不適用於頂面和底面" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " "model into a single walled print with solid bottom layers. The final " "generated model has no seam" msgstr "" -"沿著物件的外輪廓螺旋上升,將實體模型轉變為只有底面實心層和側面單層牆壁的列" -"印。最後產生的列印物件沒有接縫。" +"平滑螺旋功能可平滑外輪廓的 Z 軸運動,並將實心模型轉換為具有實心底層的單壁列印。生成的最終模型不會有接縫" msgid "Smooth Spiral" -msgstr "" +msgstr "平滑螺旋" msgid "" "Smooth Spiral smooths out X and Y moves as well, resulting in no visible " "seam at all, even in the XY directions on walls that are not vertical" msgstr "" +"平滑螺旋功能同時平滑 X 和 Y 軸的移動,確保即使在非垂直牆面上,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 " @@ -12462,10 +12643,8 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"如果啟用平滑模式或者傳統模式,將在每次列印時產生縮時錄影影片。列印完每層後," -"將用內建相機拍攝快照。列印完成後,所有這些快照會組合成一個延時影片。如果啟用" -"平滑模式,列印完每層後,工具頭將移動到吐料槽,然後拍攝快照。由於平滑模式在拍" -"攝快照的過程中熔融的線材可能會從噴嘴中洩漏,因此需要使用換料塔進行噴嘴擦拭。" +"選擇平滑模式或傳統模式時,列印過程將生成縮時影片。每打印一層,相機會拍攝一張照片。列印完成後,這些照片會被合成為縮時影片。如果選擇了平滑模式,擠出機會在每層列印完成後移動到廢料槽拍攝一張照片。由於在拍攝過程中" +"熔融的線材可能會從噴嘴洩漏,平滑模式需要使用換料塔來清潔噴嘴。" msgid "Traditional" msgstr "傳統模式" @@ -12479,9 +12658,10 @@ msgid "" "value is not used when 'idle_temperature' in filament settings is set to non " "zero value." msgstr "" +"設定擠出機閒置時的溫差。若線材設定中的『idle_temperature』設為非零值,該參數將不生效。" msgid "Preheat time" -msgstr "" +msgstr "預熱時間" msgid "" "To reduce the waiting time after tool change, Orca can preheat the next tool " @@ -12489,14 +12669,16 @@ msgid "" "seconds to preheat the next tool. Orca will insert a M104 command to preheat " "the tool in advance." msgstr "" +"為了縮短工具更換後的等待時間,Orca 可在當前工具使用期間提前預熱下一個工具。此設定用於指定預熱下一個工具的時間(單位:秒)。Orca 將自動插入 M104 指令以提前進行工具預熱。" msgid "Preheat steps" -msgstr "" +msgstr "預熱階段" msgid "" "Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " "other printers, please set it to 1." msgstr "" +"插入多條預熱指令(例如:M104.1)。此功能僅適用於 Prusa XL。其他列印設備請將其設為 1。" msgid "Start G-code" msgstr "起始 G-code" @@ -12523,6 +12705,7 @@ msgid "" "printing, where we use M600/PAUSE to trigger the manual filament change " "action." msgstr "" +"啟用此選項後,自定義的換線 G-code 將僅在打印開始時被省略,整個打印過程中會跳過工具更換指令(例如:T0)。此功能適用於手動多材料列印,允許使用 M600/PAUSE 指令來觸發手動換線操作。" msgid "Purge in prime tower" msgstr "沖刷進換料塔" @@ -12534,7 +12717,7 @@ msgid "Enable filament ramming" msgstr "啟用線材尖端成型" msgid "No sparse layers (beta)" -msgstr "" +msgstr "取消稀疏層(Beta)" msgid "" "If enabled, the wipe tower will not be printed on layers with no " @@ -12542,8 +12725,7 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" -"如果啟用,將不會在沒有換色的層列印換料塔。存在換色的層時,擠出機將降低高度打" -"印換料塔。使用者應該確保不會與列印物件發生衝突。" +"啟用此選項後,換料塔將不會在沒有工具更換的層中列印。在有工具更換的層中,擠出機將向下移動以列印換料塔。請用戶自行確保清洗塔與列印物之間不會發生碰撞。" msgid "Prime all printing extruders" msgstr "所有擠出機畫線" @@ -12551,7 +12733,8 @@ msgstr "所有擠出機畫線" msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." -msgstr "如果啟用,所有擠出機將在列印開始時在列印板前方畫線" +msgstr "" +"如果啟用,所有擠出機將在列印開始時在列印板前方畫線。" msgid "Slice gap closing radius" msgstr "切片間隙閉合半徑" @@ -12561,8 +12744,7 @@ msgid "" "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"在三角形網格切片過程中,小於2倍間隙閉合半徑的裂紋將被填充。間隙閉合操作可能會" -"降低最終列印解析度,因此建議降值保持在合理的較低水準" +"在三角網格切片過程中,寬度小於 2 倍間隙閉合半徑的裂縫將被填補。由於間隙閉合操作可能降低列印的最終解析度,因此建議將該值設置為較低的合理範圍。" msgid "Slicing Mode" msgstr "切片模式" @@ -12571,7 +12753,7 @@ msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"對 3DLabPrint 的飛機模型使用 \"奇偶\"。使用 \"閉孔 \"來關閉模型上的所有孔。" +"針對 3DLabPrint 飛機模型,請選擇『奇偶』模式。若需閉合模型中的所有孔洞,請啟用『閉合孔洞』選項。" msgid "Regular" msgstr "常規" @@ -12580,10 +12762,10 @@ msgid "Even-odd" msgstr "奇偶" msgid "Close holes" -msgstr "閉孔" +msgstr "閉合孔洞" msgid "Z offset" -msgstr "Z 偏移(Z offset)" +msgstr "Z 偏移" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -12591,6 +12773,7 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"此值將被加至(或減去)輸出 G-code 中的所有 Z 坐標,用於補償不準確的 Z 軸限位開關位置。例如,如果限位開關的歸零導致噴嘴實際距離打印床 0.3 毫米,可將此值設為 -0.3(或者調整限位開關位置)。" msgid "Enable support" msgstr "開啟支撐" @@ -12599,10 +12782,11 @@ msgid "Enable support generation." msgstr "開啟支撐產生。" msgid "" -"normal(auto) and tree(auto)is used to generate support automatically. If " -"normal(manual)or tree(manual)is selected, only support enforcers are " +"normal(auto) and tree(auto) is used to generate support automatically. If " +"normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" +"選擇『普通(自動)』或『樹狀(自動)』時,會自動生成支撐結構。若選擇『普通(手動)』或『樹狀(手動)』,則僅生成支撐強化部分" msgid "normal(auto)" msgstr "普通(自動)" @@ -12617,13 +12801,13 @@ msgid "tree(manual)" msgstr "樹狀(手動)" msgid "Support/object xy distance" -msgstr "支撐/模型 xy 間距" +msgstr "支撐/模型 XY 間距" msgid "XY separation between an object and its support" -msgstr "模型和支撐之間 XY 分離距離" +msgstr "模型和支撐之間 XY 的間距" msgid "Pattern angle" -msgstr "模式角度" +msgstr "支撐角度" msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "設定支撐圖形在水平面的旋轉角度。" @@ -12632,7 +12816,7 @@ msgid "On build plate only" msgstr "僅在列印板產生" msgid "Don't create support on model surface, only on build plate" -msgstr "不在模型表面上產生支撐,只在列印板上產生。" +msgstr "不在模型表面上產生支撐,只在列印板上產生" msgid "Support critical regions only" msgstr "僅支撐關鍵區域" @@ -12640,7 +12824,8 @@ msgstr "僅支撐關鍵區域" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." -msgstr "僅對關鍵區域產生支撐,包括尖尾、懸臂等。" +msgstr "" +"僅針對關鍵區域(如尖銳尾部、懸臂等)生成支撐結構。" msgid "Remove small overhangs" msgstr "移除小懸空" @@ -12666,26 +12851,30 @@ msgstr "支撐/筏層主體" msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" -msgstr "列印支撐主體和筏層的線材。\"預設\"代表不指定特定的線材,並使用目前線材" +msgstr "" +"用於列印支撐基座和筏層的線材。選擇『預設』時,將使用當前列印的線材,而非特定線材" msgid "Avoid interface filament for base" 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 " "nozzle diameter." -msgstr "支撐的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"支撐的線寬。如果以 % 表示,它將以噴嘴直徑為基準來計算。" msgid "Interface use loop pattern" -msgstr "接觸面採用圈形走線。" +msgstr "接觸面採用圈形走線" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." -msgstr "使用圈形走線覆蓋頂部接觸面。預設關閉。" +msgstr "" +"使用圈形走線覆蓋頂部接觸面。預設關閉。" msgid "Support/raft interface" msgstr "支撐/筏層界面" @@ -12693,7 +12882,8 @@ msgstr "支撐/筏層界面" msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" -msgstr "列印支撐界面的線材。\"預設\"代表不指定特定的線材,並使用目前線材" +msgstr "" +"用於列印支撐介面的線材。選擇『預設』時,將使用當前列印的線材,而非指定的特定線材" msgid "Top interface layers" msgstr "頂部接觸面層數" @@ -12714,13 +12904,13 @@ msgid "Top interface spacing" msgstr "頂部接觸面線距" msgid "Spacing of interface lines. Zero means solid interface" -msgstr "接觸面的線距。0 代表實心接觸面。" +msgstr "接觸面的線距。0 代表實心接觸面" msgid "Bottom interface spacing" msgstr "底部接觸面線距" msgid "Spacing of bottom interface lines. Zero means solid interface" -msgstr "底部接觸面走線的線距。0 表示實心接觸面。" +msgstr "底部接觸面走線的線距。0 表示實心接觸面" msgid "Speed of support interface" msgstr "支撐面速度" @@ -12745,8 +12935,7 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"支撐接觸面的走線圖案。非可溶支撐接觸面的預設圖案為直線,可溶支撐接觸面的預設" -"圖案為同心。" +"支撐接觸面的走線圖案。非可溶支撐接觸面的預設圖案為直線,可溶支撐接觸面的預設圖案為同心" msgid "Rectilinear Interlaced" msgstr "交疊的直線" @@ -12775,10 +12964,8 @@ msgid "" "style will create similar structure to normal support under large flat " "overhangs." msgstr "" -"支撐的樣式和形狀。 對於普通支撐,將支撐投影到網格中將創建更穩定的支撐(預" -"設),而緊貼的支撐塔將節省材料並減少物體表面的痕跡。\n" -"對於樹狀支撐,細長和有機風格將更積極地合併樹枝並節省大量材料(預設有機),而" -"混合風格將在大平面懸空下建立與正常支撐類似的結構。" +"支撐的樣式與形狀設定。普通支撐使用網格(默認設定)可提供更穩定的支撐,而緊貼型支撐可節省材料並減少對物件表面的損傷。樹狀支撐中,『有機樹』會更積極地融合分支,節省大量材料(默認為有機樹);而『混合樹』則會在較" +"大的平坦懸空區域下生成類似於普通支撐的結構。" msgid "Default (Grid/Organic" msgstr "預設 (格狀/有機" @@ -12806,8 +12993,7 @@ msgid "" "support customizing z-gap and save print time.This option will be invalid " "when the prime tower is enabled." msgstr "" -"支撐層使用與物件層獨立的層高。這是為了支援自訂Z間隙(z-gap)並且節省列印時" -"間。當換料塔被啟用時,這個選項將無效。" +"支撐層的層厚設定可獨立於物件層高度,允許自定義 Z 間隙並縮短列印時間。此選項在啟用換料塔時將失效。" msgid "Threshold angle" msgstr "臨界值角度" @@ -12815,7 +13001,8 @@ msgstr "臨界值角度" msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." -msgstr "將會為懸空角度低於臨界值的模型表面產生支撐。" +msgstr "" +"將會為懸空角度低於臨界值的模型表面產生支撐。" msgid "Tree support branch angle" msgstr "樹狀支撐分支角度" @@ -12825,8 +13012,7 @@ msgid "" "tree support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" -"此設定決定樹狀支撐的最大分支角度。如果角度增加,可以更水平地列印分支,使它們" -"可以到達更遠的地方。" +"此設定決定樹狀支撐的最大分支角度。如果角度增加,可以更水平地列印分支,使它們可以到達更遠的地方。" msgid "Preferred Branch Angle" msgstr "偏好樹狀分支角度" @@ -12837,15 +13023,15 @@ msgid "" "model. Use a lower angle to make them more vertical and more stable. Use a " "higher angle for branches to merge faster." msgstr "" -"當樹狀分支不必避開模型時的偏好角度。 使用較低的角度使它們更垂直且更穩定。 使" -"用更高的角度使分支合併得更快。" +"當樹狀分支不必避開模型時的偏好角度。使用較低的角度使它們更垂直且更穩定。使用更高的角度使分支合併得更快。" msgid "Tree support branch distance" msgstr "樹狀支撐分支距離" msgid "" "This setting determines the distance between neighboring tree support nodes." -msgstr "此設定確定了樹狀支撐的相鄰節點之間的距離。" +msgstr "" +"此設定確定了樹狀支撐的相鄰節點之間的距離。" msgid "Branch Density" msgstr "樹狀分支密度" @@ -12858,8 +13044,7 @@ msgid "" "interfaces instead of a high branch density value if dense interfaces are " "needed." msgstr "" -"用於調整產生樹狀支撐結構的密度。 較高的值會產生更好的懸空,但支撐更難移除,因" -"此如果需要密集的支撐,建議啟用頂部支撐而不是高分支密度值。" +"調整支撐結構中分支末端的密度。較高的密度能提供更好的懸空支撐,但也會使支撐更難移除。如果需要密集的支撐層,建議啟用頂部支撐介面,而非單純提高分支密度設定。" msgid "Adaptive layer height" msgstr "自適應層高" @@ -12867,28 +13052,30 @@ msgstr "自適應層高" msgid "" "Enabling this option means the height of tree support layer except the " "first will be automatically calculated " -msgstr "啟用此選項將自動計算(除第一層外)樹狀支撐的層高。" +msgstr "" +"啟用此選項將自動計算(除第一層外)樹狀支撐的層高" msgid "Auto brim width" -msgstr "自動 brim(裙邊)寬度" +msgstr "自動 Brim 寬度" msgid "" "Enabling this option means the width of the brim for tree support will be " "automatically calculated" -msgstr "啟用此選項意味著樹狀支撐的裙邊寬度將自動計算自動計算" +msgstr "" +"啟用此選項意味著樹狀支撐的 Brim 寬度將自動計算自動計算" msgid "Tree support brim width" -msgstr "樹狀支撐brim(裙邊)寬度" +msgstr "樹狀支撐 Brim 寬度" msgid "Distance from tree branch to the outermost brim line" -msgstr "從樹狀支撐分支到最外層brim(裙邊)線的距離" +msgstr "從樹狀支撐分支到最外層 Brim 線的距離" msgid "Tip Diameter" msgstr "末端直徑" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." -msgstr "有機樹狀支撐的分支末端直徑。" +msgstr "有機樹支撐的分支末端直徑。" msgid "Tree support branch diameter" msgstr "樹狀支撐分支直徑" @@ -12907,8 +13094,7 @@ msgid "" "over their length. A bit of an angle can increase stability of the organic " "support." msgstr "" -"樹狀分支直徑隨著向底部逐漸變粗的角度。 0 角度將導致分支在其長度上具有均勻的厚" -"度。 一點角度可以增加有機樹支撐的穩定性。" +"分支直徑隨高度逐漸變粗的角度。若角度設為 0,分支將在整個長度上保持均勻厚度。稍微調整角度可提升有機樹的穩定性。" msgid "Branch Diameter with double walls" msgstr "分支雙層牆直徑" @@ -12919,8 +13105,7 @@ msgid "" "printed with double walls for stability. Set this value to zero for no " "double walls." msgstr "" -"該數值大於以分支直徑得到的圓形面積時,將列印雙層牆以確保穩定性。 如果不使用雙" -"層牆體,請將此值設為 0。" +"當分支的面積大於設定直徑圓形的面積時,將以雙層牆結構列印以增強穩定性。若設為 0,則不啟用雙層牆結構。" msgid "Support wall loops" msgstr "支撐牆數" @@ -12934,7 +13119,8 @@ msgstr "樹狀支撐產生填充" msgid "" "This setting specifies whether to add infill inside large hollows of tree " "support" -msgstr "此設定決定是否為樹狀支撐內部的空間產生填充。" +msgstr "" +"此設定決定是否為樹狀支撐內部的空間產生填充" msgid "Activate temperature control" msgstr "啟動溫度控制" @@ -12951,12 +13137,8 @@ msgid "" "either via macros or natively and is usually used when an active chamber " "heater is installed." msgstr "" -"此選項啟用機箱溫度控制。此選項會在 \"machine_start_gcode\" 之前啟用 M191 命" -"令,設定機箱溫度並等待達到設定溫度。此外,它會在列印結束時發出 M141 命令來關" -"閉機箱加熱器(如果存在)\n" -"。\n" -"此選項依賴於韌體支援 M191 和 M141 命令(通過巨集或原生),通常用於主動機箱加" -"熱器。" +"啟用此選項後,將自動控制機箱溫度。此功能會在執行『machine_start_gcode』之前發送 M191 指令,用於設定機箱溫度並等待達到設定值。此外,在列印結束時會發送 M141 指令以關閉機箱加熱器(若設備有加熱器)。此功能需要韌體" +"原生支援或通過宏指令支援 M191 和 M141 指令,通常用於配備主動機箱加熱器的打印機。" msgid "Chamber temperature" msgstr "機箱溫度" @@ -12980,6 +13162,9 @@ msgid "" "desire to handle heat soaking in the print start macro if no active chamber " "heater is installed." msgstr "" +"對於 ABS、ASA、PC 和 PA 等高溫材料,較高的機箱溫度能有效抑制或減少翹曲,並可能提升層間結合強度。然而,較高的機箱溫度也會降低 ABS 和 ASA 的空氣過濾效率。對於 PLA、PETG、TPU、PVA 和其他低溫材料,建議將此選項禁用" +"(設為 0),因機箱溫度應保持較低,以避免因材料在熱端軟化而導致擠出機堵塞。啟用此選項後,會設置一個名為 chamber_temperature 的 G-code 變數,可用於將所需的機箱溫度傳遞給列印開始宏,或像以下的熱浸泡宏(預熱):" +"PRINT_START (其他變數) CHAMBER_TEMP=[chamber_temperature]。這對於不支援 M141/M191 指令的列印設備,或者希望在列印開始宏中處理熱浸泡(預熱)但未安裝主動機箱加熱器的情況下非常實用。" msgid "Nozzle temperature for layers after the initial one" msgstr "除首層外的其它層的噴嘴溫度" @@ -12991,21 +13176,22 @@ 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 "" -"檢查無法容納兩條走線的薄壁。使用單條走線列印。可能會打地不是很好,因為走線不" -"再閉合。" +"檢查無法容納兩條走線的薄壁。使用單條走線列印。可能會打地不是很好,因為走線不再閉合" msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" -msgstr "換料時插入的G-code,包括T命令。" +msgstr "" +"換料時插入的 G-code,包括 T 命令" msgid "This gcode is inserted when the extrusion role is changed" -msgstr "" +msgstr "此 G-code 會在擠出模式切換時插入" msgid "" "Line width for top surfaces. If expressed as a %, it will be computed over " "the nozzle diameter." -msgstr "頂面的線寬。如果以%表示,它將以噴嘴直徑為基準來計算。" +msgstr "" +"頂面的線寬。如果以%表示,它將以噴嘴直徑為基準來計算。" msgid "Speed of top surface infill which is solid" msgstr "頂面實心填充的速度" @@ -13018,8 +13204,7 @@ msgid "" "layer. When the thickness calculated by this value is thinner than top shell " "thickness, the top shell layers will be increased" msgstr "" -"頂部殼體實心層層數,包括頂面。當由該層數計算的厚度小於頂部殼體厚度,切片時會" -"增加頂部殼體的層數" +"頂部殼體實心層層數,包括頂面。當由該層數計算的厚度小於頂部殼體厚度,切片時會增加頂部殼體的層數" msgid "Top solid layers" msgstr "頂部殼體層數" @@ -13034,12 +13219,10 @@ msgid "" "is disabled and thickness of top shell is absolutely determined by top shell " "layers" msgstr "" -"如果由頂部殼體層數算出的厚度小於這個數值,那麼切片時將自動增加頂部殼體層數。" -"這能夠避免當層高很小時,頂部殼體過薄。0 表示關閉這個設定,同時頂部殼體的厚度" -"完全由頂部殼體層數決定" +"當切片時,如果通過頂部殼層計算的厚度小於設定值,將自動增加頂部實心層的數量,以避免層高較小時頂部殼層過薄。若設為 0,則禁用此功能,頂部殼層厚度完全由設定的頂部殼層數決定" msgid "Speed of travel which is faster and without extrusion" -msgstr "空駛的速度。空駛是無擠出量的快速移動。" +msgstr "空駛的速度。空駛是無擠出量的快速移動" msgid "Wipe while retracting" msgstr "回抽時擦拭" @@ -13048,8 +13231,7 @@ 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 "" -"當回抽時,讓噴嘴沿著前面的走線方向繼續移動,清除掉噴嘴上的漏料。這能夠避免空" -"駛結束列印新的區域時產生斑點。" +"回抽時讓噴嘴沿著最後的擠出路徑移動,清理噴嘴上的洩漏材料。此功能可減少移動後列印新區域時材料堆積的情況" msgid "Wipe Distance" msgstr "擦拭距離" @@ -13065,20 +13247,18 @@ 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 "" -"描述當回抽時噴嘴沿最後一條路徑移動的時間。\n" +"描述在回抽時噴嘴沿最後路徑移動的距離。\n" "\n" -"根據擦拭操作持續時間、擠出機/線材回抽設定的速度和時間長度,可能需要回抽來抽回" -"剩餘的線材。\n" -"若在下面的擦拭設定之前設定回抽量,將會在擦拭之前執行多餘的回抽,否則將在之後" -"執行。" +"根據擦拭操作持續的時間、擠出機/線材回抽設定的速度和距離,可能需要額外的回抽來收回剩餘的線材。\n" +"\n" +"在以下的『擦拭前的回抽量』設定中設置一個值,將在擦拭之前執行任何額外的回抽操作;否則,將在擦拭之後執行。" msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " "stabilize the chamber pressure inside the nozzle, in order to avoid " "appearance defects when printing objects." msgstr "" -"換料塔可以用來清理噴嘴上的殘留料和讓噴嘴內部的壓力達到穩定狀態,以避免列印物" -"體時出現外觀瑕疵。" +"換料塔的功能是用於清除噴嘴上的殘留物,同時穩定噴嘴內的壓力,從而避免列印物件時出現外觀瑕疵。" msgid "Purging volumes" msgstr "沖刷體積" @@ -13089,13 +13269,14 @@ msgstr "沖刷量乘數" msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." -msgstr "實際沖刷量等於沖刷量乘數乘以表格單元中的沖刷量" +msgstr "" +"實際沖刷量等於沖刷量乘數乘以表格單元中的沖刷量。" msgid "Prime volume" msgstr "清理量" msgid "The volume of material to prime extruder on tower." -msgstr "換料塔上的清理量" +msgstr "換料塔上的清理量。" msgid "Width of prime tower" msgstr "換料塔寬度" @@ -13112,7 +13293,8 @@ msgstr "穩定錐形頂角" msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." -msgstr "圓錐體頂點處的角度,用於穩定換料塔。 更大的角度意味著更寬的底座。" +msgstr "" +"圓錐體頂點處的角度,用於穩定換料塔。 更大的角度意味著更寬的底座。" msgid "Maximum wipe tower print speed" msgstr "換料塔最快列印速度" @@ -13138,16 +13320,13 @@ msgid "" "For the wipe tower external perimeters the internal perimeter speed is used " "regardless of this setting." msgstr "" -"在換料塔中和換料塔稀疏層時的最快列印速度。在列印時,如果稀疏填充速度或從線材" -"最大體積速度計算出的速度較低,則將使用較低的速度。\n" +"在換料塔中和換料塔稀疏層時的最快列印速度。在列印時,如果稀疏填充速度或從線材最大體積速度計算出的速度較低,則將使用較低的速度。\n" "\n" -"在列印稀疏層時,如果內部周界速度或從線材最大體積速度計算出的速度較低,則將使" -"用較低的速度。\n" +"在列印稀疏層時,如果內部周界速度或從線材最大體積速度計算出的速度較低,則將使用較低的速度。\n" "\n" "提高此速度可能會影響塔的穩定性,並增加噴嘴與換料塔上斑點的碰撞力。\n" "\n" -"在將此參數提高於預設值 90mm/sec 以上之前,請確保你的印表設備能夠可靠地在更高" -"的速度下橋接,並且工具更換時的溢出能良好的被控制。\n" +"在將此參數提高於預設值 90mm/sec 以上之前,請確保你的印表設備能夠可靠地在更高的速度下橋接,並且工具更換時的溢出能良好的被控制。\n" "\n" "對於換料塔外部周邊,無論此設定如何,都使用內部周邊速度。" @@ -13155,8 +13334,7 @@ msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." msgstr "" -"列印換料塔周長時使用的擠出機。設置為 0 將使用唯一的擠出機(盡量使用不可溶的材" -"料)。" +"列印換料塔周長時使用的擠出機。設置為 0 將使用唯一的擠出機(盡量使用不可溶的材料)。" msgid "Purging volumes - load/unload volumes" msgstr "清理量 - 進料/退料 量" @@ -13166,8 +13344,7 @@ msgid "" "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -"可保存所需的體積,用於更改每個換料塔上工具所使用的 from/to 體積 。這些值用於" -"簡化完全沖刷體積的建立。" +"此數據記錄了換料塔每次切換所需的體積,並用於簡化後續完整沖洗體積的計算。" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -13175,25 +13352,21 @@ 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 " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" -"多色列印換色後的廢料會被用來列印物件的支撐。這樣可以減少線材浪費和縮短列印時" -"間。該功能只有在啟用換料塔的時候才生效。" +"更換線材後的沖洗動作將在物件的支撐結構內進行,可減少材料浪費並縮短列印時間。然而,此功能需啟用換料塔後才會生效。" msgid "" "This object will be used to purge the nozzle after a filament change to save " "filament and decrease the print time. Colours of the objects will be mixed " "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"多色列印換色後的廢料會被用來列印這個物件。這樣可以減少線材浪費和縮短列印時" -"間,但是這個物件的外觀會是混色的。該功能只有在啟用換料塔的時候才生效。" +"此物件將用於更換線材後進行噴嘴清洗,從而節省線材並縮短列印時間。但物件的顏色會因此被混合。此功能需啟用換料塔後才會生效。" msgid "Maximal bridging distance" msgstr "最大橋接距離" @@ -13215,8 +13388,7 @@ msgid "" "purging lines thicker or narrower than they normally would be. The spacing " "is adjusted automatically." msgstr "" -"用於換料塔上的換料的額外流量。這會使列印線比正常情況更粗或更細。間距會自動調" -"整。" +"讓換料塔在清理時輸出額外流量。這會使列印線比正常情況更粗或更細。間距會自動調整。" msgid "Idle temperature" msgstr "閒置溫度" @@ -13226,8 +13398,7 @@ msgid "" "setups.This is only used when 'Ooze prevention' is active in Print Settings. " "Set to 0 to disable." msgstr "" -"當工具頭在多工具頭設置中未使用時的噴嘴溫度。僅在「列印設定」中啟用「溢出預" -"防」時有效。設置 0 為禁用。" +"當工具頭在多工具頭設置中未使用時的噴嘴溫度。僅在『列印設定』中啟用『防止漏料』時有效。設置 0 為禁用。" msgid "X-Y hole compensation" msgstr "X-Y 孔洞尺寸補償" @@ -13237,8 +13408,7 @@ msgid "" "Positive value makes holes bigger. Negative value makes holes smaller. This " "function is used to adjust size slightly when the object has assembling issue" msgstr "" -"垂直的孔洞的尺寸將在X-Y方向收縮或拓展特定值。正值代表擴大孔洞。負值代表縮小孔" -"洞。這個功能通常在模型有裝配問題時微調尺寸" +"垂直的孔洞的尺寸將在 XY 方向收縮或拓展特定值。正值代表擴大孔洞。負值代表縮小孔洞。這個功能通常在模型有裝配問題時微調尺寸" msgid "X-Y contour compensation" msgstr "X-Y 外輪廓尺寸補償" @@ -13249,8 +13419,7 @@ msgid "" "smaller. This function is used to adjust size slightly when the object has " "assembling issue" msgstr "" -"模型外輪廓的尺寸將在X-Y方向收縮或拓展特定值。正值代表擴大。負值代表縮小。這個" -"功能通常在模型有裝配問題時微調尺寸" +"模型外輪廓的尺寸將在 XY 方向收縮或拓展特定值。正值代表擴大。負值代表縮小。這個功能通常在模型有裝配問題時微調尺寸" msgid "Convert holes to polyholes" msgstr "將圓孔轉換為多邊形孔" @@ -13261,6 +13430,8 @@ msgid "" "compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" +"尋找橫跨多層的近似圓形孔洞,並將其幾何形狀轉換為多邊形孔。多邊形孔的計算將根據噴嘴尺寸及最大直徑進行。\n" +"更多的說明請參閱:https://hydraraptor.blogspot.com/2011/02/polyholes.html" msgid "Polyhole detection margin" msgstr "偵測多邊形孔邊緣" @@ -13273,16 +13444,15 @@ msgid "" "broaden the detection.\n" "In mm or in % of the radius." msgstr "" -"點到圓半徑的最大偏差。\n" -"由於圓柱體通常被導出為大小不同的三角形,因此點可能不在圓周上。\n" -"此設定允許有一些餘地來擴大偵測範圍。\n" -"以 mm 或半徑的百分比 %% 表示。" +"點與圓估算半徑的最大偏差範圍。\n" +"由於圓柱體在匯出時通常由不同大小的三角形組成,點可能不會完全位於圓周上。此設定允許一定的容差,以便擴大檢測範圍。\n" +"該值可使用毫米或半徑的百分比來表示。" msgid "Polyhole twist" msgstr "扭曲多邊形孔" msgid "Rotate the polyhole every layer." -msgstr "依層旋轉多邊形孔" +msgstr "依層旋轉多邊形孔。" msgid "G-code thumbnails" msgstr "G-code 縮圖" @@ -13291,7 +13461,7 @@ msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " "following format: \"XxY, XxY, ...\"" msgstr "" -"將被儲存到 .gcode 和 .sl1/.sl1s 檔案中圖片尺寸,格式如下:\"XxY, XxY, ...\"" +"設定將存儲於 .gcode 和 .sl1 / .sl1s 文件中,其圖片尺寸,格式為:「XxY, XxY, ...」" msgid "Format of G-code thumbnails" msgstr "G-code 縮圖的格式" @@ -13299,7 +13469,8 @@ msgstr "G-code 縮圖的格式" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" -msgstr "G-code 縮圖的格式:PNG 品質最佳,JPG 檔案最小,QOI 最低記憶體韌體" +msgstr "" +"G-code 縮圖的格式:PNG 品質最佳,JPG 檔案最小,QOI 最低記憶體韌體" msgid "Use relative E distances" msgstr "使用相對 E 距離" @@ -13310,17 +13481,14 @@ msgid "" "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 "" -"經典牆產生器產生的牆走線具有一致的擠出寬度,對狹窄區域使用填縫。Arachne 引擎" -"則產生變線寬的牆走線" +"經典牆產生器產生的牆走線具有一致的擠出寬度,對狹窄區域使用填縫。Arachne 引擎則產生變線寬的牆走線" msgid "Classic" msgstr "經典" @@ -13336,8 +13504,7 @@ msgid "" "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 "" -"當零件逐漸變薄導致牆的層數發生變化時,需要在過渡段分配一定的空間來分割和連接" -"牆走線。參數值表示為相對於噴嘴直徑的百分比" +"當零件變薄需要切換牆體數量時,系統會分配一定空間用於分割或合併牆段。此空間以噴嘴直徑的百分比表示" msgid "Wall transitioning filter margin" msgstr "牆過渡過濾間距" @@ -13351,10 +13518,8 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"防止特定厚度變化規律的局部在多一層牆和少一層牆之間來迴轉換。這個參數將擠壓寬" -"度的範圍擴大到[牆最小寬度-參數值, 2*牆最小寬度+參數值]。增大參數可以減少轉換" -"的次數,從而減少擠出開始/停止和空駛的時間。然而,大的擠出寬度變化會導致過擠出" -"或欠擠出的問題。參數值表示為相對於噴嘴直徑的百分比" +"防止牆體數量在多出一層與少一層之間頻繁切換。此邊界擴展了可接受的擠出寬度範圍,範圍為 [最小牆寬 - 邊界, 2 倍最小牆寬 + 邊界]。增大邊界可以減少切換次數,從而減少擠出啟停和移動時間。但過大的擠出寬度變化可能引發欠" +"擠或過擠問題。此參數以噴嘴直徑的百分比表示" msgid "Wall transitioning threshold angle" msgstr "牆過渡臨界值角度" @@ -13366,9 +13531,7 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"何時在偶數和奇數牆層數之間創建過渡段。角度大於這個臨界值的楔形將不創建過渡" -"段,並且不會在楔形中心列印牆走線以填補剩餘空間。減小這個數值能減少中心牆走線" -"的數量和長度,但可能會導致間隙或者過擠出" +"何時在偶數和奇數牆層數之間創建過渡段。角度大於這個臨界值的楔形將不創建過渡段,並且不會在楔形中心列印牆走線以填補剩餘空間。減小這個數值能減少中心牆走線的數量和長度,但可能會導致間隙或者過擠出" msgid "Wall distribution count" msgstr "牆分布計數" @@ -13377,8 +13540,7 @@ 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 "" -"從中心開始計算的牆層數,線寬變化需要分布在這些牆走線上。較低的數值意味著外牆" -"寬度更不易被改變" +"從中心開始計算的牆層數,線寬變化需要分布在這些牆走線上。較低的數值意味著外牆寬度更不易被改變" msgid "Minimum feature size" msgstr "最小特徵尺寸" @@ -13389,8 +13551,7 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"薄壁特徵的最小厚度。比這個數值還薄的特徵將不被列印,而比最小特徵厚度還厚的特" -"征將被加寬到牆最小寬度。參數值表示為相對噴嘴直徑的百分比" +"薄壁特徵的最小厚度。比這個數值還薄的特徵將不被列印,而比最小特徵厚度還厚的特征將被加寬到牆最小寬度。參數值表示為相對噴嘴直徑的百分比" msgid "Minimum wall length" msgstr "最短牆長" @@ -13405,12 +13566,8 @@ msgid "" "top-surface. 'One wall threshold' is only visible if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"調整此值可防止列印短的、未閉合的牆面,這些可能會增加列印時間。較高的值會移除" -"更多、更長的牆面。\n" -"\n" -"注意:底部和頂部表面不受此值影響,以防止模型外部出現視覺間隙。調整下面的「高" -"級設定」中的「單壁閾值」來調整對什麼被視為頂表面的敏感度。「單壁閾值」僅在此" -"設定設置為大於預設值 0.5或啟用單壁頂部表面時可見。" +"調整此參數以避免列印短小且未封閉的牆體,這可能會延長列印時間。參數值越高,移除的牆體會越多且越長。注意:為避免模型外表面出現視覺裂縫,此設定不會影響頂面和底面。若需調整頂面判定的靈敏度,可修改進階設定中的『單" +"層牆閾值』。『單層牆閾值』僅在此設置超過預設值 0.5 或啟用了單層牆頂面功能時可用。" msgid "First layer minimum wall width" msgstr "首層牆最小線寬" @@ -13431,6 +13588,7 @@ 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 "" +"設定替代模型中細薄特徵(依據最小特徵尺寸)的牆體寬度。若最小牆寬小於特徵厚度,牆體將與特徵的厚度一致。此值以噴嘴直徑的百分比表示" msgid "Detect narrow internal solid infill" msgstr "識別狹窄內部實心填充" @@ -13440,14 +13598,13 @@ msgid "" "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used by default." msgstr "" -"此選項用於自動識別內部狹窄的實心填充。開啟後,將對狹窄實心區域使用同心填充加" -"快列印速度。否則使用預設的直線填充。" +"此選項可自動檢測狹窄的內部實心填充區域。啟用後,系統會採用同心圖案以提升列印速度;若未啟用,則預設使用直線圖案進行填充。" msgid "invalid value " msgstr "無效值" msgid "Invalid value when spiral vase mode is enabled: " -msgstr "值於花瓶模式無效:" +msgstr "值於螺旋花瓶模式無效:" msgid "too large line width " msgstr "線寬過大" @@ -13456,7 +13613,7 @@ msgid " not in range " msgstr " 不在合理的區間" msgid "Minimum save" -msgstr "" +msgstr "最低保存" msgid "export 3mf with minimum size." msgstr "匯出最小尺寸的 3mf。" @@ -13472,13 +13629,14 @@ msgstr "確認在列印板上" msgid "" "Lift the object above the bed when it is partially below. Disabled by default" -msgstr "當物件部分位於列印板的下方時,將其提升到列印板的上方。預設情況下禁用" +msgstr "" +"當物件部分位於列印板的下方時,將其提升到列印板的上方。預設情況下禁用" msgid "Orient Options" -msgstr "" +msgstr "方向設定" msgid "Orient options: 0-disable, 1-enable, others-auto" -msgstr "" +msgstr "方向設定:0-關閉,1-開啟,其它-自動模式" msgid "Rotation angle around the Z axis in degrees." msgstr "繞 Z 軸的旋轉角度(以度為單位)。" @@ -13497,8 +13655,7 @@ msgid "" "maintaining different profiles or including configurations from a network " "storage." msgstr "" -"指定目錄用以載入或儲存設定檔。 這對於維護不同的設定檔或包含來自網路儲存的設定" -"檔非常有用。" +"指定目錄用以載入或儲存設定檔。 這對於維護不同的設定檔或包含來自網路儲存的設定檔非常有用。" msgid "Load custom gcode" msgstr "載入自訂 G-code" @@ -13507,26 +13664,24 @@ msgid "Load custom gcode from json" msgstr "從 json 載入自訂 gcode" msgid "Current z-hop" -msgstr "" +msgstr "當前 Z 抬升高度" msgid "Contains z-hop present at the beginning of the custom G-code block." -msgstr "" +msgstr "包含在自定義 G-code 區塊開頭的 Z 抬升動作。" msgid "" "Position of the extruder at the beginning of the custom G-code block. If the " "custom G-code travels somewhere else, it should write to this variable so " "OrcaSlicer knows where it travels from when it gets control back." msgstr "" -"自訂 G-code 區塊開頭的擠出機位置。如果自訂 G-code 移動到了其他位置,應該寫入" -"此變數,以便 OrcaSlicer 知道它從哪裡移動到當它重新獲得控制權時。" +"擠出機在自定義 G-code 區塊開頭的位置。如果自定義 G-code 將擠出機移動到其他位置,應將該位置記錄到此變數中,以便 OrcaSlicer 在恢復控制時了解擠出機的移動起點。" msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "OrcaSlicer de-retracts correctly when it gets control back." msgstr "" -"自訂 G-code 區塊開頭的回抽狀態。如果自訂 G-code 移動了擠出機軸,應該寫入此變" -"數,以便 OrcaSlicer 在重新獲得控制權時正確返回抽。" +"自定義 G-code 區塊開始時的回抽狀態。如果自定義 G-code 移動了擠出軸,應將該狀態記錄到此變數中,以確保 OrcaSlicer 在恢復控制時能正確執行回抽恢復動作。" msgid "Extra de-retraction" msgstr "額外返回抽" @@ -13540,7 +13695,8 @@ msgstr "絕對擠出值" msgid "" "Current position of the extruder axis. Only used with absolute extruder " "addressing." -msgstr "擠出機軸的目前位置。僅用於絕對擠出值。" +msgstr "" +"擠出機軸的目前位置。僅用於絕對擠出值。" msgid "Current extruder" msgstr "目前使用的擠出機" @@ -13554,13 +13710,14 @@ msgstr "目前列印物件的索引" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." -msgstr "特定於序列列印。目前列印物件的索引,從 0 開始。" +msgstr "" +"特定於序列列印。目前列印物件的索引,從 0 開始。" msgid "Has wipe tower" msgstr "有換料塔" msgid "Whether or not wipe tower is being generated in the print." -msgstr "是否有產生換料塔" +msgstr "是否有產生換料塔。" msgid "Initial extruder" msgstr "初始擠出機" @@ -13568,7 +13725,8 @@ msgstr "初始擠出機" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." -msgstr "列印中使用的第一個擠出機的索引,從 0 開始。與 initial_tool 相同。" +msgstr "" +"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_tool 相同。" msgid "Initial tool" msgstr "初始工具頭" @@ -13576,7 +13734,8 @@ msgstr "初始工具頭" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." -msgstr "列印中使用的第一個擠出機的索引,從 0 開始。與 initial_extruder 相同。" +msgstr "" +"列印中使用的第一個擠出機的索引,從 0 開始。與 initial_extruder 相同。" msgid "Is extruder used?" msgstr "擠出機是否被使用?" @@ -13584,30 +13743,31 @@ msgstr "擠出機是否被使用?" msgid "" "Vector of booleans stating whether a given extruder is used in the print." msgstr "" +"包含布林值的向量,用於指示每個擠出機是否在列印過程中被啟用。" msgid "Has single extruder MM priming" -msgstr "" +msgstr "單擠出機多材料預熱" msgid "Are the extra multi-material priming regions used in this print?" -msgstr "" +msgstr "這次列印是否使用了額外的多材料準備區域?" msgid "Volume per extruder" msgstr "各擠出機線材體積" msgid "Total filament volume extruded per extruder during the entire print." -msgstr "各擠出機擠出總線材體積" +msgstr "整個列印過程中,每個噴頭擠出的線材總體積。" msgid "Total toolchanges" -msgstr "總工具頭變更次數" +msgstr "換色次數" msgid "Number of toolchanges during the print." -msgstr "列印期間工具頭變更次數" +msgstr "列印期間工具頭變更次數。" msgid "Total volume" msgstr "總體積" msgid "Total volume of filament used during the entire print." -msgstr "列印總線材體積" +msgstr "列印總線材體積。" msgid "Weight per extruder" msgstr "各擠出機擠出總重" @@ -13615,7 +13775,8 @@ msgstr "各擠出機擠出總重" msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." -msgstr "各擠出機擠出總重,依據線材密度計算" +msgstr "" +"各擠出機擠出總重,依據線材密度計算。" msgid "Total weight" msgstr "總重" @@ -13623,25 +13784,26 @@ msgstr "總重" msgid "" "Total weight of the print. Calculated from filament_density value in " "Filament Settings." -msgstr "列印總重,依據線材密度計算" +msgstr "" +"列印總重,依據線材密度計算。" msgid "Total layer count" msgstr "總層數" msgid "Number of layers in the entire print." -msgstr "列印總層數" +msgstr "列印總層數。" msgid "Number of objects" msgstr "物件數量" msgid "Total number of objects in the print." -msgstr "列印總物件數量" +msgstr "列印總物件數量。" msgid "Number of instances" -msgstr "" +msgstr "實例數量" msgid "Total number of object instances in the print, summed over all objects." -msgstr "" +msgstr "列印中所有物件實例的總數,累計所有物件的數量。" msgid "Scale per object" msgstr "各物件縮放" @@ -13652,8 +13814,7 @@ msgid "" "index 0).\n" "Example: 'x:100% y:50% z:100'." msgstr "" -"包含一個字串,描述了每個物件縮放的資訊。第一個物件索引為 0。例如:'x:100% " -"y:50% z:100'" +"包含各個物件所應用縮放比例資訊的字串。物件索引以 0 為起點(第一個物件的索引為 0)。範例:x:100% y:50% z:100。" msgid "Input filename without extension" msgstr "輸入檔名(不含副檔名)" @@ -13663,12 +13824,14 @@ msgstr "第一個物件的原始檔名(不含副檔名)" msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." -msgstr "這個向量包含兩個元素:點的 x 和 y 座標,單位為毫米。" +msgstr "" +"這個向量包含兩個元素:點的 x 和 y 座標,單位為毫米。" msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." -msgstr "這個向量包含兩個元素:邊界的 x 和 y 尺寸,單位為mm。" +msgstr "" +"這個向量包含兩個元素:邊界的 x 和 y 尺寸,單位為mm。" msgid "First layer convex hull" msgstr "第一層凸包" @@ -13701,7 +13864,7 @@ msgid "Timestamp" msgstr "時間戳記" msgid "String containing current time in yyyyMMdd-hhmmss format." -msgstr "yyyyMMdd-hhmmss 格式的目前時間字串" +msgstr "yyyyMMdd-hhmmss 格式的目前時間字串。" msgid "Day" msgstr "天" @@ -13716,7 +13879,7 @@ msgid "Print preset name" msgstr "列印預設名稱" msgid "Name of the print preset used for slicing." -msgstr "切片使用的列印預設名稱" +msgstr "切片使用的列印預設名稱。" msgid "Filament preset name" msgstr "線材預設名稱" @@ -13725,14 +13888,13 @@ msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" -"切片使用的各個擠出機的線材預設名稱。此變數是一個向量,包含每個擠出機相對應的" -"名稱。" +"切片使用的各個擠出機的線材預設名稱。此變數是一個向量,包含每個擠出機相對應的名稱。" msgid "Printer preset name" msgstr "列印設備預設名稱" msgid "Name of the printer preset used for slicing." -msgstr "用於切片的列印設備預設名稱" +msgstr "用於切片的列印設備預設名稱。" msgid "Physical printer name" msgstr "列印設備名稱" @@ -13746,7 +13908,8 @@ msgstr "總擠出機數" msgid "" "Total number of extruders, regardless of whether they are used in the " "current print." -msgstr "總擠出機數,無論是否用於列印。" +msgstr "" +"總擠出機數,無論是否用於列印。" msgid "Layer number" msgstr "層數" @@ -13755,24 +13918,25 @@ msgid "Index of the current layer. One-based (i.e. first layer is number 1)." msgstr "當層數 (第一層為一)" msgid "Layer z" -msgstr "層z高" +msgstr "層 z 高" msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." msgstr "" +"目前這一層距離熱床的高度,從層頂開始計算。" msgid "Maximal layer z" -msgstr "" +msgstr "層的最大 Z 軸高度" msgid "Height of the last layer above the print bed." -msgstr "" +msgstr "最後一層距打印床的高度。" msgid "Filament extruder ID" -msgstr "" +msgstr "線材擠出機識別碼" msgid "The current extruder ID. The same as current_extruder." -msgstr "" +msgstr "目前的擠出機識別碼,與 current_extruder 一致。" msgid "Error in zip archive" msgstr "zip 檔案中存在錯誤" @@ -13804,11 +13968,12 @@ msgstr "浮空懸臂" msgid "large overhangs" msgstr "大面積懸空" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." -msgstr "物件 %s 似乎有 %s。請重新調整物件的方向或啟用支撐。" +msgstr "" +"物件 %s 似乎有 %s。請重新調整物件的方向或啟用支撐。" msgid "Optimizing toolpath" msgstr "正在最佳化走線" @@ -13820,6 +13985,7 @@ msgid "" "No layers were detected. You might want to repair your STL file(s) or check " "their size or thickness and retry.\n" msgstr "" +"未檢測到任何列印層。請檢查你的 STL 文件是否需要修復,或者確認其尺寸與厚度,然後再重試。\n" msgid "" "An object's XY size compensation will not be used because it is also color-" @@ -13863,12 +14029,13 @@ msgstr "支撐:正在生長 %d 層的樹枝" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" +"檔案格式未知。輸入的檔案必須是 .stl、.obj 或 .amf(.xml) 格式。" msgid "Loading of a model file failed." msgstr "載入模型檔案失敗。" msgid "The supplied file couldn't be read because it's empty" -msgstr "無法讀取提供的檔案,因為該檔案為空。" +msgstr "無法讀取提供的檔案,因為該檔案為空" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .3mf 或 .zip .amf。" @@ -13913,7 +14080,7 @@ msgid "Auto-Calibration" msgstr "自動校準" msgid "We would use Lidar to read the calibration result" -msgstr "將使用雷射雷達來讀取校準結果。" +msgstr "將使用雷射雷達來讀取校準結果" msgid "Prev" msgstr "上一個" @@ -13932,7 +14099,8 @@ msgstr "如何使用校準結果?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" -msgstr "你可以在線材編輯中更改流量動態校準因子。" +msgstr "" +"你可以在線材編輯中更改流量動態校準因子" msgid "" "The current firmware version of the printer does not support calibration.\n" @@ -13984,14 +14152,15 @@ msgid "The name cannot be the same as the system preset name." msgstr "名稱不能與系統預設值名稱相同。" msgid "The name is the same as another existing preset name" -msgstr "該名稱與另一個現有預設值名稱相同。" +msgstr "該名稱與另一個現有預設值名稱相同" msgid "create new preset failed." -msgstr "新增預設失敗" +msgstr "新增預設失敗。" msgid "" "Are you sure to cancel the current calibration and return to the home page?" -msgstr "你確定要取消目前的校準並返回首頁嗎?" +msgstr "" +"你確定要取消目前的校準並返回首頁嗎?" msgid "No Printer Connected!" msgstr "沒有連接列印設備!" @@ -14012,9 +14181,7 @@ msgid "" "historical results. \n" "Do you still want to continue the calibration?" msgstr "" -"此機型每個噴嘴只能儲存 16 筆歷史記錄。你可以刪除現有的歷史記錄,然後開始校" -"準。或者你可以繼續校準,但無法建立新的校準歷史記錄。\n" -"是否仍要繼續校準?" +"此機型每個噴嘴最多只能保存 16 條歷史記錄。你可以刪除現有記錄後再開始校準,或者選擇繼續校準,但無法新增新的校準記錄。你確定要繼續校準嗎?" msgid "Connecting to printer..." msgstr "正在連接列印設備..." @@ -14023,28 +14190,28 @@ msgid "The failed test result has been dropped." msgstr "測試失敗的結果已被刪除。" msgid "Flow Dynamics Calibration result has been saved to the printer" -msgstr "動態流量校準的結果已儲存至列印設備。" +msgstr "動態流量校準的結果已儲存至列印設備" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "There is already a historical calibration result with the same name: %s. " "Only one of the results with the same name is saved. Are you sure you want " "to override the historical result?" msgstr "" -"已經有一個同名的歷史校準結果:%s。僅保存同名結果中的其中一個。確定要覆寫歷史" -"結果嗎?" +"已經有一個同名的歷史校準結果:%s。僅保存同名結果中的其中一個。確定要覆寫歷史結果嗎?" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." -msgstr "此機型每個噴嘴只能儲存 %d 筆歷史記錄。此結果將不會被保存。" +msgstr "" +"此機型每個噴嘴只能儲存 %d 筆歷史記錄。此結果將不會被保存。" msgid "Internal Error" msgstr "內部錯誤" msgid "Please select at least one filament for calibration" -msgstr "請至少選擇一種線材進行校準。" +msgstr "請至少選擇一種線材進行校準" msgid "Flow rate calibration result has been saved to preset" msgstr "流量比例校準結果已儲存到預設值" @@ -14065,8 +14232,7 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" -"我們現在已經為不同的列印線材新增了自動校準功能,該功能是完全自動化的,並且結" -"果將儲存在列印設備中以供將來使用。你只需要在以下有限情況下進行校準:\n" +"我們現在已經為不同的列印線材新增了自動校準功能,該功能是完全自動化的,並且結果將儲存在列印設備中以供將來使用。你只需要在以下有限情況下進行校準:\n" "1. 如果你引入了不同品牌/型號的新列印線材,或者列印線材受潮;\n" "2. 如果噴嘴磨損或更換了新的噴嘴;\n" "3. 如果你在列印線材設定中更改了最大體積速度或列印溫度。" @@ -14095,17 +14261,12 @@ msgid "" msgstr "" "請參考我們的 Wiki 頁面,了解「流體動力校準」的詳細資訊。\n" "\n" -"通常不需要進行校準。當你啟動單色/單材質列印,並在列印開始選單中勾選「流體動力" -"校準」選項時,列印設備將按照舊方式,在列印前校準耗材。當你啟動多色/多材質列印" -"時,列印設備將在每次耗材切換時使用預設的補償參數,這在大部分情況下都能得到良" -"好的結果。\n" +"通常不需要進行校準。當你啟動單色/單材質列印,並在列印開始選單中勾選『流體動力校準』選項時,列印設備將按照舊方式,在列印前校準耗材。當你啟動多色/多材質列印時,列印設備將在每次耗材切換時使用預設的補償參數,這在" +"大部分情況下都能得到良好的結果。\n" "\n" -"請注意,有些情況可能會導致校準結果不可靠,例如列印板上的黏著力不足。你可以通" -"過清洗印板板或塗抹膠水來改善黏著力。有關此主題的更多資訊,請參考我們的 " -"Wiki。\n" +"請注意,有些情況可能會導致校準結果不可靠,例如列印板上的黏著力不足。你可以通過清洗印板板或塗抹膠水來改善黏著力。有關此主題的更多資訊,請參考我們的 Wiki。\n" "\n" -"在我們的測試中,校準結果存在約 10% 的誤差,這可能導致每次校準的結果不完全相" -"同。我們仍在調查根本原因,並將在新的更新中進行改進。" +"在我們的測試中,校準結果存在約 10% 的誤差,這可能導致每次校準的結果不完全相同。我們仍在調查根本原因,並將在新的更新中進行改進。" msgid "When to use Flow Rate Calibration" msgstr "何時使用流量率校準" @@ -14122,8 +14283,7 @@ msgid "" "they should be." msgstr "" "使用流量動態校準後,仍可能出現一些擠出問題,例如:\n" -"1. 過度擠出:列印物體上有過多的線材,形成凸起或小球,或者層次看起來比預期的厚" -"而且不均勻。\n" +"1. 過度擠出:列印物體上有過多的線材,形成凸起或小球,或者層次看起來比預期的厚而且不均勻。\n" "2. 不足擠出:層次非常薄,填充強度不足,或者在緩慢列印時模型頂層有缺陷。\n" "3. 表面品質差:列印的表面看起來粗糙或不均勻。\n" "4. 結構穩固性差:列印物件容易斷裂,或者沒有應有的穩固性。" @@ -14133,8 +14293,7 @@ msgid "" "PLA used in RC planes. These materials expand greatly when heated, and " "calibration provides a useful reference flow rate." msgstr "" -"此外,對於像用於遙控飛機的輕質發泡 PLA(LW-PLA)這樣的發泡線材,流量率校準非" -"常重要。這些線材在加熱時會大幅膨脹,而校準提供了有用的流量率參考。" +"此外,對於像用於遙控飛機的輕質發泡 PLA(LW-PLA)這樣的發泡線材,流量率校準非常重要。這些線材在加熱時會大幅膨脹,而校準提供了有用的流量率參考。" msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -14144,10 +14303,8 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" -"流量率校準測量預期擠出體積與實際擠出體積之間的比率。預設設定在 Bambu Lab 列印" -"設備和官方線材上表現良好,因為它們已經進行了預先校準和微調。對於普通的線材," -"通常情況下,你不需要執行流量率校準,除非在完成其他校準後仍然看到上述列出的缺" -"陷。如需更多詳細資訊,請查閱 wiki 文章。" +"流量率校準測量預期擠出體積與實際擠出體積之間的比率。預設設定在 Bambu Lab 列印設備和官方線材上表現良好,因為它們已經進行了預先校準和微調。對於普通的線材,通常情況下,你不需要執行流量率校準,除非在完成其他校準後" +"仍然看到上述列出的缺陷。如需更多詳細資訊,請查閱 wiki 文章。" msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -14167,17 +14324,12 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" -"自動流量率校準採用 Bambu Lab 的雷射雷達技術,直接測量校準圖案。然而,請注意," -"這種方法的功效和準確性可能會因特定類型的線材而受影響。特別是透明或半透明、帶" -"有閃光顆粒或具有高反射表面的線材可能不適合這種校準,並可能產生不理想的結" -"果。\n" +"自動流量率校準採用 Bambu Lab 的雷射雷達技術,直接測量校準圖案。然而,請注意,這種方法的功效和準確性可能會因特定類型的線材而受影響。特別是透明或半透明、帶有閃光顆粒或具有高反射表面的線材可能不適合這種校準,並可" +"能產生不理想的結果。\n" "\n" -"校準結果可能因每次校準或線材的不同而有所不同。我們仍在透過韌體更新不斷提高這" -"種校準的準確性和相容性。\n" +"校準結果可能因每次校準或線材的不同而有所不同。我們仍在透過韌體更新不斷提高這種校準的準確性和相容性。\n" "\n" -"注意:流量率校準是一項先進的技術,只有完全理解其目的和影響的人才應嘗試。錯誤" -"的使用可能導致列印品質不佳或損壞列印設備。請確保在執行之前仔細閱讀和理解此過" -"程。" +"注意:流量率校準是一項先進的技術,只有完全理解其目的和影響的人才應嘗試。錯誤的使用可能導致列印品質不佳或損壞列印設備。請確保在執行之前仔細閱讀和理解此過程。" msgid "When you need Max Volumetric Speed Calibration" msgstr "當你需要最大體積速度校準時" @@ -14195,17 +14347,19 @@ msgid "materials with inaccurate filament diameter" msgstr "線材直徑不準確的線材" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "我們找到了最佳的流量動態校準因子。" +msgstr "我們找到了最佳的流量動態校準因子" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." -msgstr "部分校準失敗! 你可以清潔列印板並重試。 失敗的測試結果將不會儲存。" +msgstr "" +"部分校準失敗! 你可以清潔列印板並重試。 失敗的測試結果將不會儲存。" msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" -msgstr "*我們建議你在名稱中加入品牌、材料、類型,甚至濕度水平。" +msgstr "" +"*我們建議你在名稱中加入品牌、材料、類型,甚至濕度水平" msgid "Failed" msgstr "失敗" @@ -14219,7 +14373,8 @@ msgstr "名稱不能超過40個字元。" msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to override the other results?" -msgstr "同名的結果只能儲存一個,是否要覆蓋其他結果?" +msgstr "" +"同名的結果只能儲存一個,是否要覆蓋其他結果?" msgid "Please find the best line on your plate" msgstr "請在你的列印板上找到最佳線條" @@ -14257,9 +14412,8 @@ msgstr "校準 1" msgid "Calibration2" msgstr "校準 2" -#, fuzzy msgid "Please find the best object on your plate" -msgstr "請在你的列印板裡找到最好的物件" +msgstr "請在列印板上選擇最理想的物件" msgid "Fill in the value above the block with smoothest top surface" msgstr "用最光滑的頂面填充塊上方的值" @@ -14295,7 +14449,8 @@ msgstr "標題" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." -msgstr "將列印一份測試模型。在校準之前,請清理列印板並將其放回熱床上。" +msgstr "" +"將列印一份測試模型。在校準之前,請清理列印板並將其放回熱床上。" msgid "Printing Parameters" msgstr "列印參數" @@ -14384,7 +14539,7 @@ msgid "New Flow Dynamic Calibration" msgstr "重新校準動態流量" msgid "Ok" -msgstr "" +msgstr "Ok" msgid "The filament must be selected." msgstr "必須選擇線材。" @@ -14413,7 +14568,7 @@ msgstr "完成" msgid "Multiple resolved IP addresses" msgstr "多個解析的 IP 位址" -#, boost-format +#, possible-boost-format msgid "" "There are several IP addresses resolving to hostname %1%.\n" "Please select one that should be used." @@ -14443,16 +14598,16 @@ msgid "PA Pattern" msgstr "V形模式" msgid "Start PA: " -msgstr "起始值" +msgstr "起始值:" msgid "End PA: " -msgstr "結束值" +msgstr "結束值:" msgid "PA step: " -msgstr "步距" +msgstr "步距:" msgid "Print numbers" -msgstr "列印數字" +msgstr "列印號碼" msgid "" "Please input valid values:\n" @@ -14461,33 +14616,33 @@ msgid "" "PA step: >= 0.001)" msgstr "" "請輸入有效值:\n" -"起始PA:>= 0.0\n" -"結束PA:> 起始PA\n" -"PA步距:>= 0.001)" +"起始 PA:>= 0.0\n" +"結束 PA:> 起始PA\n" +"PA 步距:>= 0.001)" msgid "Temperature calibration" msgstr "溫度校準" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" -msgstr "" +msgstr "PETG" msgid "PCTG" -msgstr "" +msgstr "PCTG" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" msgstr "線材類型" @@ -14496,10 +14651,10 @@ msgid "Start temp: " msgstr "起始溫度: " msgid "End temp: " -msgstr "終止溫度" +msgstr "終止溫度:" msgid "Temp step: " -msgstr "溫度步距" +msgstr "溫度步距:" msgid "" "Please input valid values:\n" @@ -14516,13 +14671,13 @@ msgid "Max volumetric speed test" msgstr "最大體積速度測試" msgid "Start volumetric speed: " -msgstr "起始流量" +msgstr "起始流量:" msgid "End volumetric speed: " -msgstr "結束流量" +msgstr "結束流量:" msgid "step: " -msgstr "步距" +msgstr "步距:" msgid "" "Please input valid values:\n" @@ -14539,10 +14694,10 @@ msgid "VFA test" msgstr "VFA震紋測試" msgid "Start speed: " -msgstr "起始速度" +msgstr "起始速度:" msgid "End speed: " -msgstr "結束速度" +msgstr "結束速度:" msgid "" "Please input valid values:\n" @@ -14556,13 +14711,13 @@ msgstr "" "結束 > 開始 + 步距)" msgid "Start retraction length: " -msgstr "起始回抽長度" +msgstr "起始回抽長度:" msgid "End retraction length: " -msgstr "結束回抽長度" +msgstr "結束回抽長度:" msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" msgstr "傳送 G-code 到列印設備" @@ -14571,7 +14726,7 @@ msgid "Upload to Printer Host with the following filename:" msgstr "使用下列檔案名上傳到列印設備:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" +msgstr "如有需要,請使用正斜線(/)作為目錄分隔符。" msgid "Upload to storage" msgstr "上傳到儲存單位" @@ -14639,10 +14794,10 @@ msgid "Intersection" msgstr "交集" msgid "Source Volume" -msgstr "" +msgstr "來源體積" msgid "Tool Volume" -msgstr "" +msgstr "工具體積" msgid "Subtract from" msgstr "從中減去" @@ -14690,7 +14845,7 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "測試 OrcaSlicer(GitHub):" msgid "Test Bing.com" -msgstr "測試 Bing.com:" +msgstr "測試 Bing.com" msgid "Test bing.com:" msgstr "測試 bing.com:" @@ -14754,7 +14909,8 @@ msgstr "自訂廠牌尚未輸入,請輸入自訂廠牌。" msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." -msgstr "「Bambu」或「Generic」不能作為自訂線材的廠牌名稱。" +msgstr "" +"「Bambu」或「Generic」不能作為自訂線材的廠牌名稱。" msgid "Filament type is not selected, please reselect type." msgstr "線材類型尚未選擇,請重新選擇類型。" @@ -14765,7 +14921,8 @@ 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 "自訂廠牌或序號中的所有輸入都是空白,請重新輸入。" @@ -14775,9 +14932,10 @@ msgstr "廠牌不能為數字,請重新輸入。" msgid "" "You have not selected a printer or preset yet. Please select at least one." -msgstr "尚未選擇列印設備或預設,請至少選擇一個。" +msgstr "" +"尚未選擇列印設備或預設,請至少選擇一個。" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The Filament name %s you created already exists. \n" "If you continue creating, the preset created will be displayed with its full " @@ -14802,7 +14960,7 @@ msgid "" "To add preset for more printers, Please go to printer selection" msgstr "" "將會將預設名稱重新命名為「廠牌 型號 序號 @選擇的列印設備」。\n" -"若要為更多列印設備新增預設,請前往列印設備選擇頁面。" +"若要為更多列印設備新增預設,請前往列印設備選擇頁面" msgid "Create Printer/Nozzle" msgstr "建立列印設備/噴嘴" @@ -14898,12 +15056,14 @@ 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 entered, please enter it." msgstr "未輸入自訂列印設備或型號,請輸入。" @@ -14918,8 +15078,7 @@ msgid "" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" "創建的列印設備預設設定已經有相同名稱的預設設定。是否要覆蓋它?\n" -"\t是:覆蓋相同名稱的列印設備預設設定,並重新創建名稱相同的線材和處理預設設" -"定,名稱不同的線材和處理預設設定將被保留。\n" +"\t是:覆蓋相同名稱的列印設備預設設定,並重新創建名稱相同的線材和處理預設設定,名稱不同的線材和處理預設設定將被保留。\n" " \t取消:不創建預設設定,返回創建界面。" msgid "You need to select at least one filament preset." @@ -14943,23 +15102,27 @@ msgstr "目前廠牌沒有可用的型號,請重新選擇。" msgid "" "You have not selected the vendor and model or entered 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 "請檢查熱床可列印區域形狀和原點設定。" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "尚未選擇要更換噴嘴的列印設備,請選擇。" +msgstr "" +"尚未選擇要更換噴嘴的列印設備,請選擇。" msgid "Create Printer Successful" msgstr "列印設備創建成功" @@ -14982,8 +15145,8 @@ msgid "" "volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -"如果需要,請前往線材設定編輯你的預設設定。\n" -" 請注意,噴嘴溫度、熱床溫度和最大體積速度對列印品質有重大影響,請小心設置。" +"如需調整,請至線材設定頁編輯你的預設。\n" +"請特別注意,噴嘴溫度、熱床溫度及最大體積速度會顯著影響列印品質,建議謹慎設定。" msgid "" "\n" @@ -14995,17 +15158,17 @@ msgid "" msgstr "" "\n" "\n" -"Orca 偵測到你的使用者預設設定同步功能未啟用,這可能會導致設備頁面上的線材設定" -"無法成功。請點擊「同步使用者預設設定」以啟用同步功能。" +"Orca 偵測到你的使用者預設同步功能尚未啟用,這可能導致線材設定在裝置頁面上無法正常使用。\n" +"請點擊『同步用戶預設』以啟用同步功能。" msgid "Printer Setting" msgstr "列印設備設定" msgid "Printer config bundle(.orca_printer)" -msgstr "列印機配置包 (.orca_printer)" +msgstr "列印設備設定檔 (.orca_printer)" msgid "Filament bundle(.orca_filament)" -msgstr "線材包 (.orca_filament)" +msgstr "線材設定檔 (.orca_filament)" msgid "Printer presets(.zip)" msgstr "列印設備預設設定檔 (.zip)" @@ -15020,7 +15183,7 @@ msgid "initialize fail" msgstr "初始化失敗" msgid "add file fail" -msgstr "添加檔案失敗。" +msgstr "添加檔案失敗" msgid "add bundle structure file fail" msgstr "添加捆綁結構檔案失敗" @@ -15034,7 +15197,7 @@ msgstr "打開 zip 檔案失敗" msgid "Export successful" msgstr "匯出成功" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "The '%s' folder already exists in the current directory. Do you want to " "clear it and rebuild it.\n" @@ -15061,7 +15224,8 @@ msgstr "" 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 "僅顯示對線材預設設定有變更的線材名稱。" @@ -15070,8 +15234,7 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"只有具有使用者列印設備預設設定的列印設備名稱會顯示,你選擇的每個預設設定將以 " -"zip 檔案格式匯出。" +"只有具有使用者列印設備預設設定的列印設備名稱會顯示,你選擇的每個預設設定將以 zip 檔案格式匯出。" msgid "" "Only the filament names with user filament presets will be displayed, \n" @@ -15107,14 +15270,15 @@ msgstr "此線材下的線材預設設定" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." -msgstr "注意:如果此線材下的唯一預設設定被刪除,退出對話框後該線材將被刪除。" +msgstr "" +"注意:如果此線材下的唯一預設設定被刪除,退出對話框後該線材將被刪除。" msgid "Presets inherited by other presets can not be deleted" msgstr "被其他預設設定繼承的預設設定無法刪除" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" +msgstr[0] "以下預設設定繼承了此預設。" msgid "Delete Preset" msgstr "刪除預設設定" @@ -15152,16 +15316,16 @@ msgid "Copy preset from filament" msgstr "從線材複製預設設定" msgid "The filament choice not find filament preset, please reselect it" -msgstr "未找到該線材的預設設定,請重新選擇。" +msgstr "未找到該線材的預設設定,請重新選擇" msgid "[Delete Required]" -msgstr "" +msgstr "「需要刪除」" msgid "Edit Preset" msgstr "編輯預設設定" msgid "For more information, please check out Wiki" -msgstr "如需更多資訊,請查看 Wiki。" +msgstr "如需更多資訊,請查看 Wiki" msgid "Collapse" msgstr "摺疊" @@ -15176,13 +15340,13 @@ 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 "*使用 %s 材料和 %s 列印可能會導致噴嘴損壞。" +msgstr "*使用 %s 材料和 %s 列印可能會導致噴嘴損壞" -#, fuzzy msgid "Need select printer" msgstr "需要選擇列印設備" @@ -15192,9 +15356,9 @@ msgstr "開始、結束或步距不是有效值。" msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" -msgstr "無法校準:可能是設定的校準值範圍太大,或步距太小" +msgstr "" +"無法校準:可能是設定的校準值範圍太大,或步距太小" -#, fuzzy msgid "Physical Printer" msgstr "實體列印設備" @@ -15210,7 +15374,6 @@ msgstr "成功!" msgid "Are you sure to log out?" msgstr "確定要登出嗎?" -#, fuzzy msgid "Refresh Printers" msgstr "重新整理列印設備" @@ -15232,16 +15395,18 @@ msgstr "憑證檔(*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgid "Open CA certificate file" msgstr "開啟 CA憑證檔" -#, c-format, boost-format +#, possible-c-format, possible-boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." -msgstr "在此系統上,%s 使用系統憑證儲存庫或鑰匙圈中的 HTTPS 憑證。" +msgstr "" +"在此系統上,%s 使用系統憑證儲存庫或鑰匙圈中的 HTTPS 憑證。" msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." -msgstr "若要使用自訂 CA 憑證檔,請將你的 CA 憑證檔匯入到憑證儲存庫/鑰匙圈中。" +msgstr "" +"若要使用自訂 CA 憑證檔,請將你的 CA 憑證檔匯入到憑證儲存庫/鑰匙圈中。" msgid "Login/Test" msgstr "登入/測試" @@ -15289,7 +15454,8 @@ msgstr "無法連接到 FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." -msgstr "注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" +msgstr "" +"注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" msgid "Connection to MKS works correctly." msgstr "成功連接到 MKS。" @@ -15322,17 +15488,17 @@ msgid "Storages found" msgstr "找到存儲空間" #. TRN %1% = storage path -#, boost-format +#, possible-boost-format msgid "%1% : read only" msgstr "%1% : 唯讀" #. TRN %1% = storage path -#, boost-format +#, possible-boost-format msgid "%1% : no free space" msgstr "%1%:沒有可用空間" #. TRN %1% = host -#, boost-format +#, possible-boost-format msgid "Upload has failed. There is no suitable storage found at %1%." msgstr "上傳失敗。未找到適當的存儲位置在 %1%。" @@ -15340,7 +15506,7 @@ msgid "Connection to Prusa Connect works correctly." msgstr "成功連接到 Prusa Connect。" msgid "Could not connect to Prusa Connect" -msgstr "無法連接到 Prusa Connect。" +msgstr "無法連接到 Prusa Connect" msgid "Connection to Repetier works correctly." msgstr "與 Repetier 的連接工作正常。" @@ -15351,7 +15517,7 @@ msgstr "無法連接到 Repetier" msgid "Note: Repetier version at least 0.90.0 is required." msgstr "注意:Repetier 版本至少需要 0.90.0。" -#, boost-format +#, possible-boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" @@ -15359,7 +15525,7 @@ msgstr "" "HTTP 狀態:%1%\n" "訊息內容:\"%2%\"" -#, boost-format +#, possible-boost-format msgid "" "Parsing of host response failed.\n" "Message body: \"%1%\"\n" @@ -15369,7 +15535,7 @@ msgstr "" "訊息內容:\"%1%\"\n" "錯誤碼:\"%2%\"" -#, boost-format +#, possible-boost-format msgid "" "Enumeration of host printers failed.\n" "Message body: \"%1%\"\n" @@ -15383,40 +15549,35 @@ msgid "" "It has a small layer height, and results in almost negligible layer lines " "and high printing quality. It is suitable for most general printing cases." msgstr "" -"它具有較小的層高,產生幾乎可以忽略不計的層線並具有較高的列印品質。適用於大多" -"數一般的列印情況。" +"它具有較小的層高,產生幾乎可以忽略不計的層線並具有較高的列印品質。適用於大多數一般的列印情況。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " "and acceleration, and the sparse infill pattern is Gyroid. So, it results in " "much higher printing quality, but a much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較低的速度和加速度,且稀疏填充圖案" -"為 Gyroid。因此,列印品質大幅提高,但列印時間大幅延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較低的速度和加速度,且稀疏填充圖案為 Gyroid。因此,列印品質大幅提高,但列印時間大幅延長。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a slightly " "bigger layer height, and results in almost negligible layer lines, and " "slightly shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有略大的層高,產生幾乎可以忽略不計的層" -"線,並略微縮短列印時間。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有略大的層高,產生幾乎可以忽略不計的層線,並略微縮短列印時間。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " "height, and results in slightly visible layer lines, but shorter printing " "time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生略微可見的層線,但列" -"印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生略微可見的層線,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " "height, and results in almost invisible layer lines and higher printing " "quality, but shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎不可見的層線並提" -"高列印品質,但列印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎不可見的層線並提高列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15424,17 +15585,14 @@ msgid "" "Gyroid. So, it results in almost invisible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀" -"疏填充圖案為 Gyroid。因此,產生幾乎不可見的層線並大幅提高列印品質,但列印時間" -"會大大延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀疏填充圖案為 Gyroid。因此,產生幾乎不可見的層線並大幅提高列印品質,但列印時間會大大延長。" msgid "" "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " "height, and results in minimal layer lines and higher printing quality, but " "shorter printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生最小的層線並提高列印" -"品質,但列印時間較短。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生最小的層線並提高列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -15442,9 +15600,7 @@ msgid "" "Gyroid. So, it results in minimal layer lines and much higher printing " "quality, but much longer printing time." msgstr "" -"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀" -"疏填充圖案為 Gyroid。因此,產生最小的層線並大幅提高列印品質,但列印時間會大大" -"延長。" +"與 0.2 毫米噴嘴的預設配置相比,該配置具有較小的層線、較低的速度和加速度,且稀疏填充圖案為 Gyroid。因此,產生最小的層線並大幅提高列印品質,但列印時間會大大延長。" msgid "" "It has a general layer height, and results in general layer lines and " @@ -15457,32 +15613,28 @@ msgid "" "and a higher sparse infill density. So, it results in higher strength of the " "prints, but more filament consumption and longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。" -"因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but slightly shorter printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列" -"印品質,但列印時間略微縮短。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列印品質,但列印時間略微縮短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列" -"印品質,但列印時間較短。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並降低列印品質,但列印時間較短。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並提高" -"列印品質,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15490,17 +15642,14 @@ msgid "" "Gyroid. So, it results in less apparent layer lines and much higher printing " "quality, but much longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀" -"疏填充圖案為 Gyroid。因此,產生較不明顯的層線,並且列印品質大幅提高,但列印時" -"間會大大延長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀疏填充圖案為 Gyroid。因此,產生較不明顯的層線,並且列印品質大幅提高,但列印時間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層" -"線,並提高列印品質,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層線,並提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -15508,83 +15657,75 @@ msgid "" "Gyroid. So, it results in almost negligible layer lines and much higher " "printing quality, but much longer printing time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀" -"疏填充圖案為 Gyroid。因此,產生幾乎可以忽略不計的層線,並且列印品質大幅提高," -"但列印時間會大大延長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高、較低的速度和加速度,且稀疏填充圖案為 Gyroid。因此,產生幾乎可以忽略不計的層線,並且列印品質大幅提高,但列印時間會大大延長。" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " "height, and results in almost negligible layer lines and longer printing " "time." msgstr "" -"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層" -"線,但列印時間較長。" +"與 0.4 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生幾乎可以忽略不計的層線,但列印時間較長。" msgid "" "It has a big layer height, and results in apparent layer lines and ordinary " "printing quality and printing time." -msgstr "它具有較大的層高,產生明顯的層線,並且列印品質和列印時間屬於普通水平。" +msgstr "" +"它具有較大的層高,產生明顯的層線,並且列印品質和列印時間屬於普通水平。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " "and a higher sparse infill density. So, it results in higher strength of the " "prints, but more filament consumption and longer printing time." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。" -"因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有更多的牆壁圈層和較高的稀疏填充密度。因此,列印物品的強度更高,但會增加耗材使用量並延長列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " "height, and results in more apparent layer lines and lower printing quality, " "but shorter printing time in some printing cases." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生較為明顯的層線並降低" -"列印品質,但在某些情況下會縮短列印時間。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生較為明顯的層線並降低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " "height, and results in much more apparent layer lines and much lower " "printing quality, but shorter printing time in some printing cases." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並顯著降" -"低列印品質,但在某些情況下會縮短列印時間。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較大的層高,產生更明顯的層線並顯著降低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and slight higher printing " "quality, but longer printing time." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並略微" -"提高列印品質,但列印時間較長。" +"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並略微提高列印品質,但列印時間較長。" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " "height, and results in less apparent layer lines and higher printing " "quality, but longer printing time." msgstr "" -"與 0.6 毫米噴嘴的預設配置相比,該配置具有較小的層高,產生較不明顯的層線並提高" -"列印品質,但列印時間較長。" +"它具有非常大的層高,產生明顯的層線、較低的列印品質和一般的列印時間。" msgid "" "It has a very big layer height, and results in very apparent layer lines, " "low printing quality and general printing time." -msgstr "它具有非常大的層高,產生明顯的層線、較低的列印品質和一般的列印時間。" +msgstr "" +"與0.8mm噴嘴的預設配置相比,該配置具有較大的層高,產生非常明顯的層線並顯著降低列印品質,但在某些情況下會縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " "height, and results in very apparent layer lines and much lower printing " "quality, but shorter printing time in some printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有較大的層高,產生非常明顯的層線並顯著降低" -"列印品質,但在某些情況下會縮短列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有更大的層高,產生極為明顯的層線並顯著降低列印品質,但在某些情況下會大幅縮短列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " "layer height, and results in extremely apparent layer lines and much lower " "printing quality, but much shorter printing time in some printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有更大的層高,產生極為明顯的層線並顯著降低" -"列印品質,但在某些情況下會大幅縮短列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有略小的層高,產生略少但仍明顯的層線,並略微提高列印品質,但在某些情況下會延長列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a slightly " @@ -15592,16 +15733,14 @@ msgid "" "lines and slightly higher printing quality, but longer printing time in some " "printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有略小的層高,產生略少但仍明顯的層線,並略" -"微提高列印品質,但在某些情況下會延長列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有較小的層高,從而產生較少但仍明顯的層線,並略微提高列印品質,但在某些情況下會延長列印時間。" msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " "height, and results in less but still apparent layer lines and slightly " "higher printing quality, but longer printing time in some printing cases." msgstr "" -"與0.8mm噴嘴的預設配置相比,該配置具有較小的層高,從而產生較少但仍明顯的層線," -"並略微提高列印品質,但在某些情況下會延長列印時間。" +"與0.8mm噴嘴的預設配置相比,該配置具有較少的層高,產生較少但仍明顯的層線,並略微提高列印品質,但在某些情況下會延長列印時間。" msgid "Connected to Obico successfully!" msgstr "成功連接到 Obico!" @@ -15625,7 +15764,7 @@ msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "SimplyPrint 帳戶未連結。請前往連接選項進行設置。" msgid "Connection to Flashforge works correctly." -msgstr "成功連接到 Flashforge" +msgstr "成功連接到 Flashforge。" msgid "Could not connect to Flashforge" msgstr "無法連接到 Flashforge" @@ -15640,13 +15779,12 @@ msgid "Something unexpected happened when trying to log in, please try again." msgstr "嘗試登入時發生了意外錯誤,請再試一次。" msgid "User cancelled." -msgstr "使用者取消" +msgstr "使用者取消。" #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" -"Did you know that turning on precise wall can improve precision and layer " -"consistency?" +"Did you know that turning on precise wall can improve precision and layer consistency?" msgstr "" "精確牆壁\n" "你知道啟用精確牆壁可以提高精度和層次一致性嗎?" @@ -15654,10 +15792,10 @@ msgstr "" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" "Sandwich mode\n" -"Did you know that you can use sandwich mode (inner-outer-inner) to improve " -"precision and layer consistency if your model doesn't have very steep " -"overhangs?" +"Did you know that you can use sandwich mode (inner-outer-inner) to improve precision and layer consistency if your model doesn't have very steep overhangs?" msgstr "" +"三明治模式\n" +"你知道嗎?如果模型中沒有太陡峭的懸空區域,可以使用三明治模式(內層-外層-內層)來提升精度並增強層的一致性。" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15670,12 +15808,10 @@ msgstr "" #: resources/data/hints.ini: [hint:Calibration] msgid "" "Calibration\n" -"Did you know that calibrating your printer can do wonders? Check out our " -"beloved calibration solution in OrcaSlicer." +"Did you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer." msgstr "" "校準\n" -"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方" -"案。" +"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方案。" #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" @@ -15704,8 +15840,7 @@ 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." +"You can switch between Prepare and Preview workspaces by pressing the Tab key." msgstr "" "切換工作區\n" "你可以按 Tab 鍵在 準備預覽 工作區之間切換。" @@ -15713,17 +15848,15 @@ msgstr "" #: 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." +"Did you know that Orca Slicer offers a wide range of keyboard shortcuts and 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?" +"Did you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" msgstr "" "奇數反向\n" "你知道 奇數反向 功能可以顯著改善懸垂部分的表面品質嗎?" @@ -15731,8 +15864,7 @@ 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?" +"Did you know that you can cut a model at any angle and position with the cutting tool?" msgstr "" "切割工具\n" "你知道嗎?你可以使用切割工具以任何角度和位置切割模型。" @@ -15740,8 +15872,7 @@ msgstr "" #: resources/data/hints.ini: [hint:Fix Model] msgid "" "Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " -"problems on the Windows system?" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?" msgstr "" "修復模型\n" "你知道可以修復損壞的 3D 模型,以避免在 Windows 系統上出現大量切片問題嗎?" @@ -15765,8 +15896,7 @@ msgstr "" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" "Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for " -"printing by a simple click?" +"Did you know that you can rotate objects to an optimal orientation for printing by a simple click?" msgstr "" "自動定向\n" "你知道嗎,你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。" @@ -15774,29 +15904,23 @@ msgstr "" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" "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." +"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." msgstr "" "指定列印物件底部\n" -"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能" -"或按F鍵。" +"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能或按F鍵。" #: resources/data/hints.ini: [hint:Object List] msgid "" "Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" +"Did you know that you can view all objects/parts in a list and change settings for each object/part?" msgstr "" "物件清單\n" -"你知道物件清單嗎?你可以在其中的查看所有物件/零件,並更改每個物件/零件的設" -"定。" +"你知道嗎?你可以在清單中檢視所有物件/部件,並為每個物件/部件調整設定。" #: resources/data/hints.ini: [hint:Search Functionality] msgid "" "Search Functionality\n" -"Did you know that you use the Search tool to quickly find a specific Orca " -"Slicer setting?" +"Did you know that you use the Search tool to quickly find a specific Orca Slicer setting?" msgstr "" "搜尋功能\n" "你知道可以使用搜尋工具快速找到特定的設定嗎?" @@ -15804,18 +15928,15 @@ msgstr "" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" "Simplify Model\n" -"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." +"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 "" "簡化模型\n" -"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化" -"模型。" +"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化模型。" #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" "Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change " -"settings for each object/part?" +"Did you know that you can view all objects/parts on a table and change settings for each object/part?" msgstr "" "參數表格\n" "你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零件的設定。" @@ -15823,30 +15944,24 @@ msgstr "" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" "Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy " -"colorizing or printing?" +"Did you know that you can split a big object into small ones for easy colorizing or printing?" msgstr "" "分割成物件/零件\n" -"你知道嗎,你可以把一個大物件分割成多個小物件/零件以便著色或列印。" +"你知道嗎?你可以把一個大物件分割成多個小物件/零件以便著色或列印。" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" "Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative " -"part modifier? That way you can, for example, create easily resizable holes " -"directly in Orca Slicer." +"Did you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer." msgstr "" "減去零件\n" -"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?這樣,你可以在 Orca " -"Slicer 中輕鬆創建可調整大小的孔洞。" +"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?這樣,你可以在 Orca Slicer 中輕鬆創建可調整大小的孔洞。" #: resources/data/hints.ini: [hint:STEP] msgid "" "STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file " -"instead of an STL?\n" -"Orca Slicer supports slicing STEP files, providing smoother results than a " -"lower resolution STL. Give it a try!" +"Did you know that you can improve your print quality by slicing a STEP file instead of an STL?\n" +"Orca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" msgstr "" "STEP檔案\n" "你知道嗎,通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n" @@ -15855,42 +15970,31 @@ msgstr "" #: resources/data/hints.ini: [hint:Z seam location] msgid "" "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!" +"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!" msgstr "" "Z接縫位置\n" -"你知道嗎,你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的" -"位置。這樣可以改善模型的整體外觀。試試看!" +"你知道嗎,你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的位置。這樣可以改善模型的整體外觀。試試看!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" "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." +"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." msgstr "" "流量微調\n" -"你知道嗎,你可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進" -"行一些微調來提高列印模型的整體光潔度。" +"你知道嗎,你可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進行一些微調來提高列印模型的整體光潔度。" #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" "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." +"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." msgstr "" "分類列印\n" -"你知道嗎,你可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來," -"這將簡化對所有零件的管理。" +"你知道嗎,你可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來,這將簡化對所有零件的管理。" -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer -#: Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] msgid "" "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!" +"Did you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" msgstr "" "自適應層高度加速列印\n" "你知道嗎,你可以使用\"自適應層高度\"選項可以更快地列印模型。試試看!" @@ -15898,54 +16002,42 @@ msgstr "" #: resources/data/hints.ini: [hint:Support painting] msgid "" "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." +"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." msgstr "" "自訂支撐\n" -"你知道嗎,你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需" -"要的模型截面上變得容易。" +"你知道嗎,你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需要的模型截面上變得容易。" #: resources/data/hints.ini: [hint:Different types of supports] msgid "" "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!" +"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!" msgstr "" "支撐類型\n" -"你知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節線材" -"並提高列印速度。試試看!" +"你知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節線材並提高列印速度。試試看!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" "Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print it " -"successfully? Higher temperature and lower speed are always recommended for " -"the best results." +"Did you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results." msgstr "" "列印絲綢線材\n" -"你知道嗎,絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較" -"高的溫度和較低的速度。" +"你知道嗎,絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較高的溫度和較低的速度。" #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" "Brim for better adhesion\n" -"Did you know that when printing models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" +"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(裙邊)\n" -"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 brim(裙邊)以提高列印成" -"功率。" +"使用 Brim\n" +"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 Brim 以提高列印成功率。" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" "Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at " -"one time?" +"Did you know that you can set slicing parameters for all selected objects at one time?" msgstr "" "為多個物件設定參數\n" -"你知道嗎,你可以同時為所有選取的物件設定切片參數。" +"你知道嗎?你可以同時為所有選取的物件設定切片參數。" #: resources/data/hints.ini: [hint:Stack objects] msgid "" @@ -15958,8 +16050,7 @@ msgstr "" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" "Flush into support/objects/infill\n" -"Did you know that you can save the wasted filament by flushing them into " -"support/objects/infill during filament change?" +"Did you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" msgstr "" "廢料運用到支撐/物件/填充中\n" "你知道嗎?你可以在換料時將廢料運用到支撐/物件/填充,以節省浪費的線材。" @@ -15967,1252 +16058,23 @@ msgstr "" #: resources/data/hints.ini: [hint:Improve strength] msgid "" "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?" +"Did you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" msgstr "" "提高強度\n" "你知道嗎?你可以使用更多的牆層數和更高的疏散填充密度來提高模型的強度。" -#: resources/data/hints.ini: [hint:When need to print with the printer door -#: opened] +#: resources/data/hints.ini: [hint:When need to print with the printer door opened] msgid "" "When need to print with the printer door opened\n" -"Did you know that opening the printer door can reduce the probability of " -"extruder/hotend clogging when printing lower temperature filament with a " -"higher enclosure temperature. More info about this in the Wiki." +"Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature. More info about this in the Wiki." msgstr "" "需要在開啟列印設備門的情況下列印\n" -"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的" -"機率嗎?更多資訊請參閱Wiki。" +"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的機率嗎?更多資訊請參閱Wiki。" #: resources/data/hints.ini: [hint:Avoid warping] msgid "" "Avoid warping\n" -"Did you know that when printing materials that are prone to warping such as " -"ABS, appropriately increasing the heatbed temperature can reduce the " -"probability of warping." +"Did you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping." msgstr "" "避免翹曲\n" -"你知道當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率" -"嗎?" - -#~ msgid "Text contains character glyph (represented by '?')unknown by font." -#~ msgstr "文字包含字型無法識別的字形(以 '?' 表示)。" - -#~ msgid "ShiftLeft mouse button" -#~ msgstr "Shift左滑鼠" - -#~ msgctxt "Verb" -#~ msgid "Scale" -#~ msgstr "縮放" - -#~ msgid "Orca Slicer " -#~ msgstr "Orca Slicer " - -#~ msgid "" -#~ ")to locate the toolhead's position. This prevents device moving beyond " -#~ "the printable boundary and causing equipment wear." -#~ msgstr ")來定位目前工具頭位置,以防止移動時超出邊界造成設備損壞" - -#~ msgid "" -#~ "Diameter of the print bed. It is assumed that origin (0,0)is located in " -#~ "the center." -#~ msgstr "熱床直徑。假定原點(0,0)位於中心。" - -#~ msgid "" -#~ "The current chamber temperature or the target chamber temperature exceeds " -#~ "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -#~ "TPU)is not allowed to be loaded." -#~ msgstr "" -#~ "目前設備內部溫度超過 45℃。為避免阻塞,不允許進料低溫線材(PLA / PETG / " -#~ "TPU)。" - -#~ msgid "" -#~ "Low temperature filament(PLA/PETG/TPU)is loaded in the extruder.In order " -#~ "to avoid extruder clogging,it is not allowed to set the chamber " -#~ "temperature above 45℃." -#~ msgstr "" -#~ "為避免堵塞,使用低溫線材(PLA / PETG / TPU)時,不充許將設備內部溫度設置於" -#~ "45℃以上" - -#, fuzzy, c-format, boost-format -#~ msgid "" -#~ "Successfully unmounted. The device %s(%s)can now be safely removed from " -#~ "the computer." -#~ msgstr "卸載成功。設備 %s(%s)現在可能安全地從電腦移除。" - -#, c-format, boost-format -#~ msgid "Ejecting of device %s(%s)has failed." -#~ msgstr "退出設備 %s(%s)失敗。" - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Orca Slicer(windows)or CAD softwares." -#~ msgstr "" -#~ "\"修復模型\"功能目前僅適用於 Windows 系統。請在 Windows 版本的 Orca " -#~ "slicer 或 CAD 軟體上修復模型。" - -#, c-format, boost-format -#~ msgid "" -#~ "The selected printer (%s)is incompatible with the chosen printer profile " -#~ "in the slicer (%s)." -#~ msgstr "以選的機臺(%s)與切片軟體內所選的機臺預設(%s)不相容" - -#~ msgid "Cool plate" -#~ msgstr "低溫列印板" - -#~ msgid "Lift Z Enforcement" -#~ msgstr "強化抬Z策略" - -#~ msgid "Flushing volume (mm³)for each filament pair." -#~ msgstr "在兩個線材間切換所需的廢料體積(mm³)" - -#, c-format, boost-format -#~ msgid "A new Network plug-in(%s)available, Do you want to install it?" -#~ msgstr "新版的網路插件( %s)可用,是否要安裝?" - -#~ msgid "" -#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " -#~ "detour distance is large than this value. Detour length could be " -#~ "specified either as an absolute value or as percentage (for example 50%)" -#~ "of a direct travel path. Zero to disable" -#~ msgstr "" -#~ "避免跨越外牆時的最大繞行距離。如果繞行距離大於該數值,則不繞行。繞行距離可" -#~ "為絕對值或直線路徑的百分比(例如 50%)。0 表示禁用" - -#~ msgid "" -#~ "This separate setting will affect the speed of perimeters having radius " -#~ "<= small_perimeter_threshold (usually holes). If expressed as percentage " -#~ "(for example: 80%)it will be calculated on the outer wall speed setting " -#~ "above. Set to zero for auto." -#~ msgstr "" -#~ "這個單獨的設定將影響半徑 <= small_perimeter_threshold(通常是圓孔)的周長" -#~ "的速度。 如果以百分比表示(例如:80%),它將根據上面的外牆速度設定進行計" -#~ "算。 自動設定為零。" - -#, fuzzy -#~ msgid "Pressure advance(Klipper)AKA Linear advance factor(Marlin)" -#~ msgstr "壓力提前(Klipper)或者線性提前(Marlin)" - -#~ msgid "" -#~ "If enabled, this setting will ensure external perimeters are not slowed " -#~ "down to meet the minimum layer time. This is particularly helpful in the " -#~ "below scenarios:\n" -#~ "\n" -#~ " 1. To avoid changes in shine when printing glossy filaments \n" -#~ "2. To avoid changes in external wall speed which may create slight wall " -#~ "artifacts that appear like z banding \n" -#~ "3. To avoid printing at speeds which cause VFAs (fine artifacts)on the " -#~ "external walls\n" -#~ "\n" -#~ msgstr "" -#~ "如果啟用,這個設定將確保外圍輪廓不會因為達到最小層時間而減慢速度。這在以下" -#~ "情境中特別有幫助:\n" -#~ "\n" -#~ " 1. 避免在列印光面材料時發生光澤變化\n" -#~ " 2. 避免外牆速度變化,這可能會產生類似Z帶紋的牆面瑕疵\n" -#~ " 3. 避免以會在外牆上造成細微瑕疵(細節瑕疵,VFA)速度列印\n" -#~ "\n" - -#~ 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. 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%),則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充" -#~ "線連接到一段短邊緣。如果找不到小於 infill_anchor_max 的邊緣段,則內填充線" -#~ "將只連接到一側的邊緣段,且所選的邊緣段長度會限制在此參數範圍內,但不超過" -#~ "\"錨點長度\"最大值。若將此參數設為零,則會禁用連接到單一內填充線的錨固邊" -#~ "緣。" - -#~ 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. 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%),則是基於內填充擠出寬度來計算。Orca Slicer 會嘗試將兩條相近的內填充" -#~ "線連接到一段短邊緣。如果找不到小於此參數的邊緣段,則內填充線將只連接到一側" -#~ "的邊緣段,且所選的邊緣段長度會限制於infill_anchor,但不會超過此參數。\n" -#~ "如果設為0,則會使用舊的內填充連接算法,這應該會產生與設為 1000 和 0 相同的" -#~ "結果。" - -#~ msgid "" -#~ "Enable this to add line number(Nx)at the beginning of each G-Code line" -#~ msgstr "打開這個設定,G-code 的每一行的開頭會增加Nx標註行號。" - -#~ msgid "" -#~ "This parameter smooths out sudden extrusion rate changes that happen when " -#~ "the printer transitions from printing a high flow (high speed/larger " -#~ "width)extrusion to a lower flow (lower speed/smaller width)extrusion " -#~ "and vice versa.\n" -#~ "\n" -#~ "It defines the maximum rate by which the extruded volumetric flow in mm3/" -#~ "sec can change over time. Higher values mean higher extrusion rate " -#~ "changes are allowed, resulting in faster speed transitions.\n" -#~ "\n" -#~ "A value of 0 disables the feature. \n" -#~ "\n" -#~ "For a high speed, high flow direct drive printer (like the Bambu lab or " -#~ "Voron)this value is usually not needed. However it can provide some " -#~ "marginal benefit in certain cases where feature speeds vary greatly. For " -#~ "example, when there are aggressive slowdowns due to overhangs. In these " -#~ "cases a high value of around 300-350mm3/s2 is recommended as this allows " -#~ "for just enough smoothing to assist pressure advance achieve a smoother " -#~ "flow transition.\n" -#~ "\n" -#~ "For slower printers without pressure advance, the value should be set " -#~ "much lower. A value of 10-15mm3/s2 is a good starting point for direct " -#~ "drive extruders and 5-10mm3/s2 for Bowden style. \n" -#~ "\n" -#~ "This feature is known as Pressure Equalizer in Prusa slicer.\n" -#~ "\n" -#~ "Note: this parameter disables arc fitting." -#~ msgstr "" -#~ "此參數是列印設備從列印高流量(高速/較大寬度)擠出轉換到較低流量(較低速度/" -#~ "較小寬度)擠出時,用於平滑突然變擠出速率,反之亦然。\n" -#~ "它定義了擠出體積流量(mm3/秒)隨時間變化的最大速率。數值越高意味著允許更高" -#~ "的擠出速率變化,從而實現更快的速度轉換。\n" -#~ "\n" -#~ "值為 0 會停用該功能。\n" -#~ "\n" -#~ "對於高速、高流量的機型(如 Bambu lab 或 Voron),通常不需要此設置。但是," -#~ "在某些速度差異很大的情況下,它可以提供一些邊際效益。 例如,當出現因懸空而" -#~ "導致的劇烈減速時。在這些情況下,建議使用大約 300-350 mm3/s2,因為這樣剛" -#~ "好允許足夠的平滑,以幫助壓力提前實現更平滑的流量過渡。\n" -#~ "\n" -#~ "對於速度較慢且沒有壓力提前的機種,應將此值設置為較低。對於近程擠出機來說\n" -#~ "10-15 mm3/s2 是一個好的起點,而對於遠程擠出機來說是 5-10 mm3/s2。\n" -#~ "此功能在 Prusa 切片軟體中稱為壓力均衡器。\n" -#~ "\n" -#~ "注意:此參數會停用圓弧擬合。" - -#~ msgid "Z hop when retract" -#~ msgstr "回抽時抬升Z" - -#~ msgid "" -#~ "Enable this option to omit the custom Change filament G-code only at the " -#~ "beginning of the print. The tool change command (e.g., T0)will be " -#~ "skipped throughout the entire print. This is useful for manual multi-" -#~ "material printing, where we use M600/PAUSE to trigger the manual filament " -#~ "change action." -#~ msgstr "" -#~ "啟用此選項以僅在列印開始時省略自訂更換線材 G-code。工具更換命令(例如 T0)" -#~ "將在整個列印過程中跳過。這對於手動多線材列印很有用,我們使用 M600/PAUSE 來" -#~ "觸發手動線材更換動作。" - -#~ msgid "" -#~ "This value will be added (or subtracted)from all the Z coordinates in " -#~ "the output G-code. It is used to compensate for bad Z endstop position: " -#~ "for example, if your endstop zero actually leaves the nozzle 0.3mm far " -#~ "from the print bed, set this to -0.3 (or fix your endstop)." -#~ msgstr "" -#~ "該設定值將從輸出 G-code 中的所有 Z 座標增加(或 減少)。 它用於 Z 軸限位器" -#~ "位置的補償:例如,你的 Z 軸限位器實際上使噴嘴距離列印板高了 0.3 mm,請將其" -#~ "設定為 -0.3。" - -#~ msgid "" -#~ "normal(auto)and tree(auto)is used to generate support automatically. If " -#~ "normal(manual)or tree(manual)is selected, only support enforcers are " -#~ "generated" -#~ msgstr "" -#~ "普通(自動)和樹狀(自動)用於自動產生支撐體。如果選擇普通(手動)或樹狀" -#~ "(手動),僅會在支撐強制面上產生支撐。" - -#~ msgid "Expand (+)or shrink (-)the horizontal span of normal support" -#~ msgstr "在水平方向對普通支撐進行延伸(+)或收縮(-)" - -#~ msgid "" -#~ "For high-temperature materials like ABS, ASA, PC, and PA, a higher " -#~ "chamber temperature can help suppress or reduce warping and potentially " -#~ "lead to higher interlayer bonding strength. However, at the same time, a " -#~ "higher chamber temperature will reduce the efficiency of air filtration " -#~ "for ABS and ASA. \n" -#~ "\n" -#~ "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option " -#~ "should be disabled (set to 0)as the chamber temperature should be low to " -#~ "avoid extruder clogging caused by material softening at the heat break.\n" -#~ "\n" -#~ "If enabled, this parameter also sets a gcode variable named " -#~ "chamber_temperature, which can be used to pass the desired chamber " -#~ "temperature to your print start macro, or a heat soak macro like this: " -#~ "PRINT_START (other variables)CHAMBER_TEMP=[chamber_temperature]. This " -#~ "may be useful if your printer does not support M141/M191 commands, or if " -#~ "you desire to handle heat soaking in the print start macro if no active " -#~ "chamber heater is installed." -#~ msgstr "" -#~ "對於 ABS、ASA、PC 和 PA 等高溫材料,較高的機箱溫度有助於抑制或減少翹曲,並" -#~ "可能提高層間結合強度。然而,同時,較高的機箱溫度會降低列印 ABS 和 ASA 時的" -#~ "空氣過濾效率。\n" -#~ "\n" -#~ "對於 PLA、PETG、TPU、PVA 和其他低溫材料,不應使用此選項(設置為 0),因為" -#~ "機箱溫度應較低,以避免由於材料在喉管軟化而導致擠出機堵塞。\n" -#~ "\n" -#~ "如果啟用,此參數還設置了一個名為 chamber_temperature 的 gcode 變數,可將所" -#~ "需的機箱溫度傳遞給列印巨集,例如:PRINT_START(其他變數)" -#~ "CHAMBER_TEMP=[chamber_temperature]。如果你的印表設備不支持 M141/M191 命" -#~ "令,或者你希望在沒有安裝主動機箱加熱器的情況下在列印開始巨集中處理熱浸處" -#~ "理,這可能很有用。" - -#~ msgid "" -#~ "Search for almost-circular holes that span more than one layer and " -#~ "convert the geometry to polyholes. Use the nozzle size and the (biggest)" -#~ "diameter to compute the polyhole.\n" -#~ "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" -#~ msgstr "" -#~ "搜索跨越多層的近似圓形孔,並將幾何形狀轉換為多邊形孔。使用噴嘴尺寸和(最" -#~ "大)直徑來計算多邊形孔。\n" -#~ "參見http://hydraraptor.blogspot.com/2011/02/polyholes.html" - -#~ msgid "" -#~ "Width of the wall that will replace thin features (according to the " -#~ "Minimum feature size)of the model. If the Minimum wall width is thinner " -#~ "than the thickness of the feature, the wall will become as thick as the " -#~ "feature itself. It's expressed as a percentage over nozzle diameter" -#~ msgstr "" -#~ "用於替換模型細小特徵(根據最小特徵尺寸)的牆線寬。如果牆最小線寬小於最小特" -#~ "徵的厚度,則牆將變得和特徵本身一樣厚。參數值表示為相對噴嘴直徑的百分比" - -#~ msgid "" -#~ "No layers were detected. You might want to repair your STL file(s)or " -#~ "check their size or thickness and retry.\n" -#~ msgstr "" -#~ "沒有切到層次。你可能需要修復 STL 檔案,或檢查模型尺寸、厚度等,之後再重" -#~ "試。\n" - -#~ msgid "" -#~ "Unknown file format. Input file must have .stl, .obj, .amf(.xml)" -#~ "extension." -#~ msgstr "未知的檔案格式。輸入檔案的副檔名必須為 .stl、.obj 或 .amf(.xml)。" - -#~ msgid "Use forward slashes ( / )as a directory separator if needed." -#~ msgstr "如有需要,請使用正斜槓( / )作為目錄分隔符號。" - -#~ msgid "" -#~ "Sandwich mode\n" -#~ "Did you know that you can use sandwich mode (inner-outer-inner)to " -#~ "improve precision and layer consistency if your model doesn't have very " -#~ "steep overhangs?" -#~ msgstr "" -#~ "三明治模式\n" -#~ "如果模型沒有非常陡峭的懸垂部分,可以使用三明治模式(內-外-內)來提高精度和" -#~ "層次一致性" - -#~ msgid "Reverse on odd" -#~ msgstr "反轉奇數層方向" - -#, no-c-format, no-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" -#~ "Value 0 enables reversal on every odd layers regardless." -#~ msgstr "" -#~ "判定懸空反轉需要的值(mm),可以是線寬的百分比。\n" -#~ " 0 值則會在每個奇數層上啟用反向。" - -#~ msgid "" -#~ "While printing by Object, the extruder may collide skirt.\n" -#~ "Thus, reset the skirt layer to 1 to avoid that." -#~ msgstr "逐件列印時,擠出機可能與裙邊碰撞。因此將裙邊的層數重設為 1。" - -#~ msgid "" -#~ "The geometry will be decimated before dectecting sharp angles. This " -#~ "parameter indicates the minimum length of the deviation for the " -#~ "decimation.\n" -#~ "0 to deactivate" -#~ msgstr "" -#~ "在偵測尖銳角度之前,幾何形狀將被簡化。此參數表示簡化的最小偏差長度。\n" -#~ "設為 0 以停用" - -#, fuzzy -#~ msgid "" -#~ "Start the fan this number of seconds earlier than its target start time " -#~ "(you can use fractional seconds). It assumes infinite acceleration for " -#~ "this time estimation, and will only take into account G1 and G0 moves " -#~ "(arc fitting is unsupported).\n" -#~ "It won't move fan commands from custom gcodes (they act as a sort of " -#~ "'barrier').\n" -#~ "It won't move fan comands into the start gcode if the 'only custom start " -#~ "gcode' is activated.\n" -#~ "Use 0 to deactivate." -#~ msgstr "" -#~ "將風扇啟動指令往前移動指定時間以補償風扇的啟動時間。目前支援 G1 G0 指令\n" -#~ "設為 0 以禁用此選項" - -#~ msgid "Limited" -#~ msgstr "有限" - -#~ msgid "Shrinkage" -#~ msgstr "線材收縮率" - -#, fuzzy -#~ msgid "" -#~ "Decrease this value slightly(for example 0.9) to reduce the amount of " -#~ "material for bridge, to improve sag" -#~ msgstr "稍微減小這個數值(比如 0.9)可以減小橋接的線材量,來改善下垂。" - -#, fuzzy -#~ msgid "" -#~ "This factor affects the amount of material for top solid infill. You can " -#~ "decrease it slightly to have smooth surface finish" -#~ msgstr "稍微減小這個數值(比如 0.97)可以來改善頂面的光滑程度。" - -#, fuzzy -#~ msgid "This factor affects the amount of material for bottom solid infill" -#~ msgstr "首層流量調整係數,預設為 1.0" - -#~ msgid "" -#~ "Enable this option to slow printing down in areas where potential curled " -#~ "perimeters may exist" -#~ msgstr "啟用此選項降低可能存在潛在翹邊區域的列印速度" - -#~ msgid "Speed of bridge and completely overhang wall" -#~ msgstr "橋接和完全懸空的外牆的列印速度" - -#~ 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%" - -#~ msgid "Time to load new filament when switch filament. For statistics only" -#~ msgstr "切換線材時,進料所需的時間。只用於統計資訊。" - -#~ msgid "" -#~ "Time to unload old filament when switch filament. For statistics only" -#~ msgstr "切換線材時,退料所需時間。只用於統計資訊。" - -#~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to load a " -#~ "new filament during a tool change (when executing the T code). This time " -#~ "is added to the total print time by the G-code time estimator." -#~ msgstr "" -#~ "在換色時(執行 T-code ,如 T1,T2),列印設備韌體(或 Multi Material Unit " -#~ "2.0)載入新線材的所需時間。該時間將會被 G-code 時間評估功能加到總列印時間" -#~ "上去。" - -#~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to unload " -#~ "a filament during a tool change (when executing the T code). This time is " -#~ "added to the total print time by the G-code time estimator." -#~ msgstr "" -#~ "換色期間(執行T-cide 時如 T1,T2),列印設備韌體(或 Multi Material Unit " -#~ "2.0)退出線材所需時間。該時間將會被 G-code 時間評估功能加到總列印時間上" -#~ "去。" - -#~ msgid "Filter out gaps smaller than the threshold specified" -#~ msgstr "忽略小於指定數值的間隙" - -#~ msgid "" -#~ "Enable this option for chamber temperature control. An M191 command will " -#~ "be added before \"machine_start_gcode\"\n" -#~ "G-code commands: M141/M191 S(0-255)" -#~ msgstr "" -#~ "啟用此選項以控製列印設備內部溫度。 在「machine_start_gcode」之前將會新增一" -#~ "個M191指令\n" -#~ "G碼指令:M141/M191 S(0-255)" - -#~ msgid "Wipe tower extruder" -#~ msgstr "換料塔擠出機" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "列印設備區域網路連接失敗,請重試。" - -#~ msgid "" -#~ "Please find the details of Flow Dynamics Calibration from our wiki.\n" -#~ "\n" -#~ "Usually the calibration is unnecessary. When you start a single color/" -#~ "material print, with the \"flow dynamics calibration\" option checked in " -#~ "the print start menu, the printer will follow the old way, calibrate the " -#~ "filament before the print; When you start a multi color/material print, " -#~ "the printer will use the default compensation parameter for the filament " -#~ "during every filament switch which will have a good result in most " -#~ "cases.\n" -#~ "\n" -#~ "Please note there are a few cases that will make the calibration result " -#~ "not reliable: using a texture plate to do the calibration; the build " -#~ "plate does not have good adhesion (please wash the build plate or apply " -#~ "gluestick!)...You can find more from our wiki.\n" -#~ "\n" -#~ "The calibration results have about 10 percent jitter in our test, which " -#~ "may cause the result not exactly the same in each calibration. We are " -#~ "still investigating the root cause to do improvements with new updates." -#~ msgstr "" -#~ "請從我們的wiki中找到流量動態校準的詳細資訊。\n" -#~ "\n" -#~ "通常情況下,校準是不必要的。當你開始單色/單線材列印,並在列印開始選單中勾" -#~ "選了\"流量動態校準\"選項時,列印設備將按照舊的方式,在列印前校準絲料;當你" -#~ "開始多色/多線材列印時,列印設備將在每次換絲料時使用預設的補償參數,這在大" -#~ "多數情況下會產生良好的效果。\n" -#~ "\n" -#~ "請注意,有幾種情況會導致校準結果不可靠:使用紋理板進行校準;建模平台黏附效" -#~ "果不好(請清洗建模平台或塗抹膠棒)... 你可以在我們的wiki中找到更多資訊。\n" -#~ "\n" -#~ "在我們的測試中,校準結果有約 10% 的波動,這可能導致每次校準的結果略有不" -#~ "同。我們仍在調查根本原因,並通過新的更新進行改進。" - -#~ msgid "" -#~ "Only one of the results with the same name will be saved. Are you sure " -#~ "you want to overrides the other results?" -#~ msgstr "相同名稱的結果只會儲存一個。確定要覆蓋其他結果嗎?" - -#, c-format, boost-format -#~ msgid "" -#~ "There is already a historical calibration result with the same name: %s. " -#~ "Only one of the results with the same name is saved. Are you sure you " -#~ "want to overrides the historical result?" -#~ msgstr "" -#~ "已經存在一個具有相同名稱的校準結果:%s。相同名稱的結果只會儲存一個。確定要" -#~ "覆蓋嗎?" - -#~ msgid "Please find the cornor with perfect degree of extrusion" -#~ msgstr "請在你的列印板上找到最接近完美的直角" - -#~ msgid "V" -#~ msgstr "版本:" - -#~ msgid "" -#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " -#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " -#~ "Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Orca Slicer 是基於 Bambulab 的 BambuStudio 開發,而 BambuStudio 源自於 " -#~ "Prusa Research 的 PrusaSlicer。PrusaSlicer 源自於 Alessandro Ranellucci " -#~ "的 Slic3r 和 RepRap 社群" - -#~ msgid "Export &Configs" -#~ msgstr "匯出設定檔" - -#~ msgid "Infill direction" -#~ msgstr "填充方向" - -#, fuzzy -#~ msgid "" -#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " -#~ "fitting tolerance is same with resolution" -#~ msgstr "" -#~ "打開這個設定,匯出的 G-code 將包含 G2 G3 指令。圓弧擬合的容許值和精度相" -#~ "同。" - -#~ 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 "Unload Filament" -#~ msgstr "退料" - -#~ msgid "" -#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " -#~ "automatically load or unload filiament." -#~ msgstr "選擇 1 個 AMS 槽位,然後點擊進料/退料按鈕以自動進料/退料。" - -#~ msgid "MainBoard" -#~ msgstr "主板" - -#~ msgid "active" -#~ msgstr "活動的" - -#~ msgid "Jump to layer" -#~ msgstr "轉換到層" - -#~ msgid "Cabin humidity" -#~ msgstr "AMS 內部濕度" - -#~ msgid "" -#~ "Green means that AMS humidity is normal, orange represent humidity is " -#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" -#~ msgstr "" -#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" -#~ "好。)" - -#~ msgid "Desiccant status" -#~ msgstr "乾燥劑狀態" - -#~ msgid "" -#~ "A desiccant status lower than two bars indicates that desiccant may be " -#~ "inactive. Please change the desiccant.(The bars: higher the better.)" -#~ msgstr "" -#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" -#~ "好。)" - -#~ msgid "" -#~ "Note: When the lid is open or the desiccant pack is changed, it can take " -#~ "hours or a night to absorb the moisture. Low temperatures also slow down " -#~ "the process. During this time, the indicator may not represent the " -#~ "chamber accurately." -#~ msgstr "" -#~ "注意:當 AMS 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水" -#~ "分,低溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" - -#~ msgid "" -#~ "Note: if new filament is inserted during printing, the AMS will not " -#~ "automatically read any information until printing is completed." -#~ msgstr "" -#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材" -#~ "信息。" - -#, boost-format -#~ msgid "Succeed to export G-code to %1%" -#~ msgstr "成功匯出 G-code 至 %1%" - -#~ msgid "Initialize failed (No Device)!" -#~ msgstr "初始化失敗(沒有列印設備)!" - -#~ msgid "Initialize failed (No Camera Device)!" -#~ msgstr "初始化失敗(沒有攝影機)" - -#~ msgid "" -#~ "Printer is busy downloading, Please wait for the downloading to finish." -#~ msgstr "列印設備正忙於下載,請等待下載完成。" - -#~ msgid "Initialize failed (Not supported on the current printer version)!" -#~ msgstr "初始化失敗(目前列印設備的版本不支援)!" - -#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" -#~ msgstr "初始化失敗(在區域網路模式中不可存取)!" - -#~ msgid "Initialize failed (Missing LAN ip of printer)!" -#~ msgstr "初始化失敗(未找到列印設備的區域網路地址)!" - -#, c-format, boost-format -#~ msgid "Stopped [%d]!" -#~ msgstr "已停止 [%d]!" - -#, c-format, boost-format -#~ msgid "Load failed [%d]!" -#~ msgstr "載入失敗 [%d]!" - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "檔案清單為空[%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "載入失敗 [%d]" - -#~ msgid "Failed to fetching model information from printer." -#~ msgstr "無法從列印設備獲取模型資訊。" - -#~ msgid "Failed to parse model informations." -#~ msgstr "解析模型資訊失敗。" - -#, boost-format -#~ msgid "" -#~ "You have changed some settings of preset \"%1%\". \n" -#~ "Would you like to keep these changed settings (new value) after switching " -#~ "preset?" -#~ msgstr "你已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" - -#~ msgid "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings (new value) after switching " -#~ "preset?" -#~ msgstr "你已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" - -#~ msgid "" -#~ "Add solid infill near sloping surfaces to guarantee the vertical shell " -#~ "thickness (top+bottom solid layers)" -#~ msgstr "在斜面表面附近增加實心填充,以保證垂直外殼厚度(頂部+底部實心層)" - -#~ msgid "Configuration package updated to " -#~ msgstr "設定檔已更新到" - -#~ msgid "" -#~ "Improve shell precision by adjusting outer wall spacing. This also " -#~ "improves layer consistency." -#~ msgstr "最佳化外牆路徑以提高外牆精度。這個最佳化同時減少層紋" - -#~ msgid "" -#~ "The minimum printing speed for the filament when slow down for better " -#~ "layer cooling is enabled, when printing overhangs and when feature speeds " -#~ "are not specified explicitly." -#~ msgstr "" -#~ "線材最小列印速度。當啟用減速以實現更好的層冷卻、列印懸空以及未明確指定特徵" -#~ "速度時" - -#~ msgid "No sparse layers (EXPERIMENTAL)" -#~ msgstr "無稀疏層(实验性功能)" - -#~ msgid "The Config can not be loaded." -#~ msgstr "設定檔無法載入。" - -#~ msgid "The 3mf is generated by old Orca Slicer, load geometry data only." -#~ msgstr "該 3mf 檔案來自舊版本的 Orca Slicer" - -#~ 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 "編輯文字" - -#~ msgid "Error! Unable to create thread!" -#~ msgstr "發生錯誤,無法建立執行緒。" - -#~ msgid "Exception" -#~ msgstr "異常" - -#~ msgid "Choose SLA archive:" -#~ msgstr "選擇 SLA 存檔:" - -#~ msgid "Import file" -#~ msgstr "匯入檔案" - -#~ msgid "Import model and profile" -#~ msgstr "匯入模型和設定檔" - -#~ msgid "Import profile only" -#~ msgstr "僅匯入設定檔" - -#~ msgid "Import model only" -#~ msgstr "僅匯入模型" - -#~ msgid "Accurate" -#~ msgstr "準確的" - -#~ msgid "Balanced" -#~ msgstr "平衡的" - -#~ msgid "Quick" -#~ msgstr "快速的" - -#~ msgid "" -#~ "Discribe how long the nozzle will move along the last path when retracting" -#~ msgstr "表示回抽時擦拭的移動距離。" - -#~ msgid "" -#~ "Simplify Model\n" -#~ "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. Read more in the documentation." -#~ msgstr "" -#~ "簡化模型\n" -#~ "你知道嗎,你可以使用\"簡化模型\"功能減少模型的三角形數。在模型上單擊滑鼠右" -#~ "鍵,然後選擇\"簡化模型\"。" - -#~ msgid "" -#~ "Subtract a Part\n" -#~ "Did you know that you can subtract one mesh from another using the " -#~ "Negative part modifier? That way you can, for example, create easily " -#~ "resizable holes directly in Orca Slicer. Read more in the documentation." -#~ msgstr "" -#~ "減去部分幾何體\n" -#~ "你知道嗎,你可以使用負零件從另一個幾何體中減去另一個幾何體。例如,可以直接" -#~ "在 Orca Slicer 中建立可輕鬆調整大小的孔。" - -#~ msgid "Filling bed " -#~ msgstr "填充自動朝向" - -#, boost-format -#~ msgid "%1% infill pattern doesn't support 100%% density." -#~ msgstr "%1% 填充圖案不支援 100%% 密度。" - -#~ msgid "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly" -#~ msgstr "" -#~ "切換到直線圖案?\n" -#~ "是 - 自動切換到直線圖案\n" -#~ "否 - 自動將密度重設為預設的非 100% 值" - -#~ msgid "Please heat the nozzle to above 170 degree before loading filament." -#~ msgstr "請在進料前把噴嘴升溫到 170℃" - -#~ msgid "Show g-code window" -#~ msgstr "顯示 G-code 視窗" - -#~ msgid "If enabled, g-code window will be displayed." -#~ msgstr "如果啟用,將顯示 G-Code 視窗。" - -#, c-format -#~ msgid "Density of internal sparse infill, 100% means solid throughout" -#~ msgstr "內部填充密度,100% 表示整體實心" - -#~ msgid "Tree support wall loops" -#~ msgstr "樹狀支撐外牆層數" - -#~ msgid "This setting specify the count of walls around tree support" -#~ msgstr "樹狀支撐外牆層數" - -#, c-format, boost-format -#~ msgid " doesn't work at 100%% density " -#~ msgstr " 填充圖案不支援 100%% 密度" - -#~ msgid "Ctrl + Shift + Enter" -#~ msgstr "Ctrl + Shift + Enter" - -#~ msgid "Tool-Lay on Face" -#~ msgstr "工具-選擇底面" - -#~ msgid "Export as STL" -#~ msgstr "匯出為 STL" - -#~ msgid "Check cloud service status" -#~ msgstr "檢查雲端服務狀態" - -#~ msgid "Please input a valid value (K in 0~0.5)" -#~ msgstr "請輸入有效的數值(K 值的範圍為 0~0.5)" - -#~ msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -#~ msgstr "請輸入有效的數值(K 值的範圍為 0~0.5, N 值的範圍為 0.6~2.0)" - -#~ msgid "Export all objects as STL" -#~ msgstr "匯出所有物件為 STL" - -#~ msgid "The 3mf is not compatible, load geometry data only!" -#~ msgstr "該 3mf 檔案與軟體不相容,將只載入幾何數據。" - -#~ msgid "Incompatible 3mf" -#~ msgstr "不相容的 3mf" - -#~ msgid "Add/Remove printers" -#~ msgstr "新增/刪除列印設備" - -#~ msgid "" -#~ "When print by object, machines with I3 structure will not generate " -#~ "timelapse videos." -#~ msgstr "按物件列印時,龍門結構的設備不會產生縮時攝影影片" - -#, c-format, boost-format -#~ msgid "%s is not supported by AMS." -#~ msgstr "AMS 不支援 %s 。" - -#~ msgid "Don't remind me of this version again" -#~ msgstr "不要再提醒我這個版本" - -#~ msgid "Error: IP or Access Code are not correct" -#~ msgstr "錯誤:IP 或訪問碼不正確" - -#~ msgid "" -#~ "Extrude perimeters that have a part over an overhang in the reverse " -#~ "direction on odd layers. This alternating pattern can drastically improve " -#~ "steep overhang." -#~ msgstr "" -#~ "在奇數層上以相反方向列印懸空部位。 這種交替模式的可以大大改善陡峭的懸空列" -#~ "印品質。" - -#~ msgid "Order of inner wall/outer wall/infil" -#~ msgstr "內牆/外牆/填充的順序" - -#~ msgid "Print sequence of inner wall, outer wall and infill. " -#~ msgstr "內圈牆/外圈牆/填充的列印順序" - -#~ msgid "inner/outer/infill" -#~ msgstr "內牆/外牆/填充" - -#~ msgid "outer/inner/infill" -#~ msgstr "外牆/內牆/填充" - -#~ msgid "infill/inner/outer" -#~ msgstr "填充/內牆/外牆" - -#~ msgid "infill/outer/inner" -#~ msgstr "填充/外牆/內牆" - -#~ msgid "inner-outer-inner/infill" -#~ msgstr "內牆/外牆/內牆/填充" - -#~ msgid "Export 3MF" -#~ msgstr "匯出 3MF" - -#~ msgid "Export project as 3MF." -#~ msgstr "匯出專案為 3MF。" - -#~ msgid "Export slicing data" -#~ msgstr "匯出切片資料" - -#~ msgid "Export slicing data to a folder." -#~ msgstr "匯出切片資料到資料夾" - -#~ msgid "Load slicing data" -#~ msgstr "匯入切片資料" - -#~ msgid "Load cached slicing data from directory" -#~ msgstr "從目錄匯入切片資料的快取" - -#~ msgid "Export STL" -#~ msgstr "匯出 STL 檔案" - -#~ msgid "Export the objects as multiple STL." -#~ msgstr "將物件匯出為多個 STL 檔案" - -#~ msgid "Slice" -#~ msgstr "切片" - -#~ msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" -#~ msgstr "切片平台:0-所有平台,i-第i個平台,其他-無效" - -#~ msgid "Show command help." -#~ msgstr "顯示命令行幫助。" - -#~ msgid "Update the configs values of 3mf to latest." -#~ msgstr "將 3mf 的設定值更新為最新值。" - -#~ msgid "Load default filaments" -#~ msgstr "載入預設列印線材" - -#~ msgid "Load first filament as default for those not loaded" -#~ msgstr "載入第一個列印線材為預設代替未能載入的線材" - -#~ msgid "max triangle count per plate for slicing." -#~ msgstr "切片時每個列印板的最大三角形數。" - -#~ msgid "max slicing time per plate in seconds." -#~ msgstr "每個列印板的最大切片時間(秒)。" - -#~ msgid "Normative check" -#~ msgstr "規範性檢查" - -#~ msgid "Check the normative items." -#~ msgstr "檢查規範性項目。" - -#~ msgid "Output Model Info" -#~ msgstr "輸出模型資訊" - -#~ msgid "Output the model's information." -#~ msgstr "輸出模型的資訊。" - -#~ msgid "Export Settings" -#~ msgstr "匯出設定" - -#~ msgid "Export settings to a file." -#~ msgstr "匯出設定檔到檔案。" - -#~ msgid "Send progress to pipe" -#~ msgstr "將進度傳送到管道" - -#~ msgid "Send progress to pipe." -#~ msgstr "將進度傳送到管道。" - -#~ msgid "Arrange Options" -#~ msgstr "擺放選項" - -#~ msgid "Arrange options: 0-disable, 1-enable, others-auto" -#~ msgstr "擺放選項:0-關閉,1-開啟,其他-自動" - -#~ msgid "Repetions count" -#~ msgstr "重複次數" - -#~ msgid "Repetions count of the whole model" -#~ msgstr "整個模型的重複次數" - -#~ msgid "Convert Unit" -#~ msgstr "轉換單位" - -#~ msgid "Convert the units of model" -#~ msgstr "轉換模型的單位" - -#~ msgid "Rotate around X" -#~ msgstr "繞 X 旋轉" - -#~ msgid "Rotation angle around the X axis in degrees." -#~ msgstr "繞 X 軸的旋轉角度(以度為單位)。" - -#~ msgid "Scale the model by a float factor" -#~ msgstr "根據因子縮放模型" - -#~ msgid "Load General Settings" -#~ msgstr "載入一般設定" - -#~ msgid "Load process/machine settings from the specified file" -#~ msgstr "從指定檔案載入列印參數/設備設定" - -#~ msgid "Load Filament Settings" -#~ msgstr "載入線材設定" - -#~ msgid "Load filament settings from the specified file list" -#~ msgstr "從指定檔案清單載入線材設定" - -#~ msgid "Skip Objects" -#~ msgstr "零件跳過" - -#~ msgid "Skip some objects in this print" -#~ msgstr "列印過程中跳過一些零件" - -#, fuzzy -#~ msgid "load uptodate process/machine settings when using uptodate" -#~ msgstr "使用最新設定時載入最新的列印參數/設備設定" - -#, fuzzy -#~ msgid "" -#~ "load uptodate process/machine settings from the specified file when using " -#~ "uptodate" -#~ msgstr "使用最新設定時,從指定的檔案清單中載入最新的列印參數/設備設定。" - -#~ msgid "Output directory" -#~ msgstr "輸出路徑" - -#~ msgid "Output directory for the exported files." -#~ msgstr "匯出檔案的輸出路徑。" - -#~ msgid "Debug level" -#~ msgstr "除錯等級" - -#~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " -#~ "5:trace\n" -#~ msgstr "" -#~ "設定除錯日誌等級。0:fatal, 1:error, 2:warning, 3:info, 4:debug, " -#~ "5:trace\n" - -#, boost-format -#~ msgid "The selected preset: %1% is not found." -#~ msgstr "未找到選定的預設值:%1%。" - -#~ msgid "" -#~ "3D Scene Operations\n" -#~ "Did you know how to control view and object/part selection with mouse and " -#~ "touchpanel in the 3D scene?" -#~ msgstr "" -#~ "3D 場景操作\n" -#~ "如何在 3D 場景中使用滑鼠和觸碰面板進行視角控制和物件/零件選擇" - -#~ msgid "" -#~ "Fix Model\n" -#~ "Did you know that you can fix a corrupted 3D model to avoid a lot of " -#~ "slicing problems?" -#~ msgstr "" -#~ "修復模型\n" -#~ "你知道嗎?你可以修復一個損壞的 3D 模型以避免諸多切片問題。" - -#~ msgid "" -#~ "When need to print with the printer door opened\n" -#~ "Opening the printer door can reduce the probability of extruder/hotend " -#~ "clogging when printing lower temperature filament with a higher enclosure " -#~ "temperature. More info about this in the Wiki." -#~ msgstr "" -#~ "當需要打開列印設備門進行列印時\n" -#~ "當列印較低溫度的線材時,打開列印設備門可以減少擠出機或熱端堵塞的可能性。 " -#~ "有關此內容的更多信息,請參見 Wiki。" - -#~ msgid "Embedded" -#~ msgstr "嵌入的" - -#~ msgid "" -#~ "Orca Slicer configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Orca Slicer 設定檔可能已損壞而無法解析。請刪除此檔案並重新啟動 Orca " -#~ "Slicer。" - -#~ msgid "Online Models" -#~ msgstr "線上模型" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "在首頁上顯示推薦的模型" - -#, c-format -#~ msgid "" -#~ "Force cooling fan to be specific speed when overhang degree of printed " -#~ "part exceeds this value. Expressed as percentage which indicates how much " -#~ "width of the line without support from lower layer. 0%% means forcing " -#~ "cooling for all outer wall no matter how much overhang degree" -#~ msgstr "" -#~ "當列印物件的懸空程度超過此值時,強制冷卻風扇達到特定速度。\n" -#~ "用百分比表示,表明沒有下層支撐的線的寬度是多少。0%% 意味著無論懸空程度如" -#~ "何,都要對所有外壁強制冷卻。" - -#~ msgid "The minimum printing speed when slow down for cooling" -#~ msgstr "自動冷卻降速的最小列印速度" - -#~ msgid "" -#~ "There are currently no identical spare consumables available, and " -#~ "automatic replenishment is currently not possible. \n" -#~ "(Currently supporting automatic supply of consumables with the same " -#~ "brand, material type, and color)" -#~ msgstr "" -#~ "目前無相同的備用線材,暫時無法自動補充線材。\n" -#~ "(目前支援品牌、線材種類、顏色相同的線材的自動補給)" - -#~ msgid "Invalid nozzle diameter" -#~ msgstr "無效的噴嘴口徑" - -#~ msgid "" -#~ "The bed temperature exceeds filament's vitrification temperature. Please " -#~ "open the front door of printer before printing to avoid nozzle clog." -#~ msgstr "" -#~ "熱床溫度超過了線材的軟化溫度。請在列印前打開3D列印設備前門以防堵頭。" - -#~ msgid "Temperature of vitrificaiton" -#~ msgstr "軟化溫度" - -#~ msgid "" -#~ "Material becomes soft at this temperature. Thus the heatbed cannot be " -#~ "hotter than this tempature" -#~ msgstr "材料在這個溫度開始變軟。因此熱床溫度不能超過這個溫度。" - -#~ msgid "Enable this option if machine has auxiliary part cooling fan" -#~ msgstr "如果機器有輔助物件冷卻風扇,勾選該選項" - -#~ msgid "" -#~ "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " -#~ "during printing except the first several layers which is defined by no " -#~ "cooling layers" -#~ msgstr "" -#~ "輔助物件冷卻風扇的轉速。輔助物件冷卻風扇將一直運行在該速度,除了設置的無需" -#~ "冷卻的前若干層" - -#~ msgid "" -#~ "Filter out gaps smaller than the threshold specified. This setting won't " -#~ "affect top/bottom layers" -#~ msgstr "小於指定臨界值的微小間隙不填充。本設置不會對頂/底層起作用" - -#~ msgid "Empty layers around bottom are replaced by nearest normal layers." -#~ msgstr "底部出現空層,已被最近的正常層替換。" - -#~ msgid "The model has too many empty layers." -#~ msgstr "模型有太多空層。" - -#~ msgid "Cali" -#~ msgstr "校準" - -#~ msgid "Calibration of extrusion" -#~ msgstr "擠出校準" - -#~ msgid "Push new filament into the extruder" -#~ msgstr "將新的線材推入擠出機" - -#, c-format, boost-format -#~ msgid "" -#~ "Bed temperature of other layer is lower than bed temperature of initial " -#~ "layer for more than %d degree centigrade.\n" -#~ "This may cause model broken free from build plate during printing" -#~ msgstr "" -#~ "其它層的熱床溫度比首層熱床溫度低太多,超過了攝氏 %d 度。\n" -#~ "這可能導致列印中模型從熱床脫落" - -#~ msgid "" -#~ "Bed temperature is higher than vitrification temperature of this " -#~ "filament.\n" -#~ "This may cause nozzle blocked and printing failure\n" -#~ "Please keep the printer open during the printing process to ensure air " -#~ "circulation or reduce the temperature of the hot bed" -#~ msgstr "" -#~ "熱床溫度超過了線材的軟化溫度,線材軟化可能造成噴頭堵塞。\n" -#~ "請保持3D列印設備在列印過程中敞開,保證空氣流通或降低熱床溫度" - -#~ msgid "Total Time Estimation" -#~ msgstr "總時間預估" - -#~ msgid "Resonance frequency identification" -#~ msgstr "共振頻率辨識" - -#~ msgid "Immediately score" -#~ msgstr "立即打分" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "請為你喜歡的 Bambu 商城模型打分。" - -#~ msgid "Score" -#~ msgstr "打分" - -#~ msgid "Bambu High Temperature Plate" -#~ msgstr "高溫列印熱床" - -#~ msgid "Can't connect to the printer" -#~ msgstr "無法連接列印設備" - -#~ msgid "Recommended temperature range" -#~ msgstr "建議溫度範圍" - -#~ msgid "High Temp Plate" -#~ msgstr "高溫列印熱床" - -#~ msgid "" -#~ "Bed temperature when high temperature plate is installed. Value 0 means " -#~ "the filament does not support to print on the High Temp Plate" -#~ msgstr "安裝高溫列印熱床時的熱床溫度。0值表示這個線材不支援高溫列印熱床" - -#~ msgid "Internal bridge support thickness" -#~ msgstr "內部橋接支撐厚度" - -#~ msgid "" -#~ "If enabled, support loops will be generated under the contours of " -#~ "internal bridges.These support loops could prevent internal bridges from " -#~ "extruding over the air and improve the top surface quality, especially " -#~ "when the sparse infill density is low.This value determines the thickness " -#~ "of the support loops. 0 means disable this feature" -#~ msgstr "" -#~ "如果開啟, Orca Slicer 切片會沿著內部橋接的邊沿在其下方產生支撐輪廓。這些" -#~ "支撐輪廓可以防止懸空地列印內部橋接並提高頂面質量,特別是在填充密度較低的情" -#~ "況下。這個設置用於調整支撐輪廓的厚度,0表示關閉此特性。" - -#~ msgid "" -#~ "Style and shape of the support. For normal support, projecting the " -#~ "supports into a regular grid will create more stable supports (default), " -#~ "while snug support towers will save material and reduce object scarring.\n" -#~ "For tree support, slim style will merge branches more aggressively and " -#~ "save a lot of material (default), while hybrid style will create similar " -#~ "structure to normal support under large flat overhangs." -#~ msgstr "" -#~ "支撐物的樣式和形狀。對於普通支撐,將支撐投射到一個規則的網格中,將創建更穩" -#~ "定的支撐(默認),而緊貼的支撐塔將節省材料並減少物體的瑕疵。\n" -#~ "對於樹形支撐,苗條板的風格將更積極地合併樹枝,並節省大量的材料(默認),而" -#~ "混合風格將在大的平面懸垂下創建與正常支撐類似的結構。" - -#~ msgid "Target chamber temperature" -#~ msgstr "目標腔體溫度" - -#~ msgid "Bed temperature difference" -#~ msgstr "熱床溫差" - -#~ msgid "" -#~ "Do not recommend bed temperature of other layer to be lower than initial " -#~ "layer for more than this threshold. Too low bed temperature of other " -#~ "layer may cause the model broken free from build plate" -#~ msgstr "" -#~ "不建議其它層熱床溫度比首層的熱床溫度低於這個值。太低的其它層熱床溫度可能導" -#~ "致列印過程中模型從列印板脫落。" - -#~ msgid "Orient the model" -#~ msgstr "旋轉模型" +"你知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" From 4f82fee592e81204e32b02a681c05208850f3f5f Mon Sep 17 00:00:00 2001 From: GlauTech <33813227+GlauTechCo@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:45:40 +0300 Subject: [PATCH 092/100] Update TURKISH translations (#8117) --- localization/i18n/tr/OrcaSlicer_tr.po | 3611 ++++++++++++------------- 1 file changed, 1739 insertions(+), 1872 deletions(-) diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 13ee660c24..beb9bf7111 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-04 17:35+0100\n" -"PO-Revision-Date: 2024-10-01 22:31+0300\n" +"PO-Revision-Date: 2025-01-21 06:52+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" "Language: tr\n" @@ -551,8 +551,8 @@ msgstr "Oranı azalt" #, boost-format msgid "" -"Processing model '%1%' with more than 1M triangles could be slow. It is " -"highly recommended to simplify the model." +"Processing model '%1%' with more than 1M triangles could be slow. It is highly " +"recommended to simplify the model." msgstr "" "1 milyondan fazla üçgen içeren '%1%' modelinin işlenmesi yavaş olabilir. " "Modelin basitleştirilmesi önemle tavsiye edilir." @@ -728,8 +728,8 @@ 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." +"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." @@ -1010,12 +1010,12 @@ msgstr "Metni kameraya doğru yönlendirin." #, boost-format msgid "" -"Can't load exactly same font(\"%1%\"). Application selected a similar " -"one(\"%2%\"). You have to specify font for enable edit text." +"Can't load exactly same font(\"%1%\"). Application 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." +"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 "Sembol yok" @@ -1131,8 +1131,7 @@ msgid "Path can't be healed from self-intersection and multiple points." msgstr "Yol kendi kendine kesişmeden ve birden fazla noktadan iyileştirilemez." msgid "" -"Final shape contains self-intersection or multiple points with same " -"coordinate." +"Final shape contains self-intersection or multiple points with same coordinate." msgstr "" "Son şekil, kendi kesişimini veya aynı koordinata sahip birden fazla noktayı " "içerir." @@ -1306,24 +1305,24 @@ msgid "Esc" msgstr "Esc" msgid "Cancel a feature until exit" -msgstr "" +msgstr "Çıkışa kadar bir özelliği iptal etme" msgid "Measure" msgstr "Ölçüm" -msgid "" -"Please confirm explosion ratio = 1,and please select at least one object" +msgid "Please confirm explosion ratio = 1,and please select at least one object" msgstr "" +"Lütfen patlama oranının = 1 olduğunu onaylayın ve lütfen en az bir nesne seçin" msgid "Please select at least one object." -msgstr "" +msgstr "Lütfen en az bir nesne seçin." msgid "Edit to scale" msgstr "Ölçeğe göre düzenleyin" msgctxt "Verb" msgid "Scale all" -msgstr "" +msgstr "Tümünü ölçeklendir" msgid "None" msgstr "Hiçbiri" @@ -1338,40 +1337,46 @@ msgid "Selection" msgstr "Seçim" msgid " (Moving)" -msgstr "" +msgstr "(Hareketli)" msgid "" "Select 2 faces on objects and \n" " make objects assemble together." msgstr "" +"Nesnelerde 2 yüz seçin ve \n" +"nesnelerin bir araya gelmesini sağlayın." msgid "" "Select 2 points or circles on objects and \n" " specify distance between them." msgstr "" +"Nesnelerin üzerinde 2 nokta veya daire seçin ve \n" +"aralarındaki mesafeyi belirtin." msgid "Face" -msgstr "" +msgstr "Yüzey" msgid " (Fixed)" -msgstr "" +msgstr "(Sabit)" msgid "Point" -msgstr "" +msgstr "Nokta" msgid "" "Feature 1 has been reset, \n" "feature 2 has been feature 1" msgstr "" +"Özellik 1 sıfırlandı, \n" +"özellik 2, özellik 1 oldu" msgid "Warning:please select Plane's feature." -msgstr "" +msgstr "Uyarı: Lütfen Düzlemin özelliğini seçin." msgid "Warning:please select Point's or Circle's feature." -msgstr "" +msgstr "Uyarı: Lütfen Noktanın veya Çemberin özelliğini seçin." msgid "Warning:please select two different mesh." -msgstr "" +msgstr "Uyarı: Lütfen iki farklı ağ seçin." msgid "Copy to clipboard" msgstr "Panoya kopyala" @@ -1389,25 +1394,25 @@ msgid "Distance XYZ" msgstr "Uzaklık XYZ" msgid "Parallel" -msgstr "" +msgstr "Paralel" msgid "Center coincidence" -msgstr "" +msgstr "Merkezi" msgid "Featue 1" -msgstr "" +msgstr "Özellik 1" msgid "Reverse rotation" -msgstr "" +msgstr "Ters dönüş" msgid "Rotate around center:" -msgstr "" +msgstr "Merkezin etrafında döndürün:" msgid "Parallel distance:" -msgstr "" +msgstr "Paralel mesafe:" msgid "Flip by Face 2" -msgstr "" +msgstr "Yüze 2’ye Göre Çevir" msgid "Ctrl+" msgstr "Ctrl+" @@ -1447,8 +1452,8 @@ msgid "" msgstr "\"%1%\" yapılandırma dosyası yüklendi ancak bazı değerler tanınamadı." msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " -"It will be appreciated if you report the issue to our team." +"OrcaSlicer will terminate because of running out of memory.It may be a bug. It " +"will be appreciated if you report the issue to our team." msgstr "" "OrcaSlicer hafızasının yetersiz olması nedeniyle sonlandırılacak. Bir hata " "olabilir. Sorunu ekibimize bildirirseniz seviniriz." @@ -1528,8 +1533,8 @@ msgstr "Bilgi" msgid "" "The OrcaSlicer configuration file may be corrupted and cannot be parsed.\n" "OrcaSlicer has attempted to recreate the configuration file.\n" -"Please note, application settings will be lost, but printer profiles will " -"not be affected." +"Please note, application settings will be lost, but printer profiles will not " +"be affected." msgstr "" "OrcaSlicer konfigürasyon dosyası bozulmuş olabilir ve ayrıştırılamayabilir.\n" "OrcaSlicer, konfigürasyon dosyasını yeniden oluşturmayı denedi.\n" @@ -1549,8 +1554,7 @@ msgid "Choose one file (3mf):" msgstr "Dosya seçin (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" -msgstr "" -"Bir veya daha fazla dosya seçin (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" +msgstr "Bir veya daha fazla dosya seçin (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Bir veya daha fazla dosya seçin (3mf/step/stl/svg/obj/amf):" @@ -1565,8 +1569,8 @@ msgid "Some presets are modified." msgstr "Bazı ön ayarlar değiştirildi." msgid "" -"You can keep the modified presets to the new project, discard or save " -"changes as new presets." +"You can keep the modified presets to the new project, discard or save changes " +"as new presets." msgstr "" "Modifield ön ayarlarını yeni projede tutabilir, değişiklikleri atabilir veya " "yeni ön ayarlar olarak kaydedebilirsiniz." @@ -1575,8 +1579,7 @@ msgid "User logged out" msgstr "Kullanıcı oturumu kapattı" msgid "new or open project file is not allowed during the slicing process!" -msgstr "" -"dilimleme işlemi sırasında yeni veya açık proje dosyasına izin verilmez!" +msgstr "dilimleme işlemi sırasında yeni veya açık proje dosyasına izin verilmez!" msgid "Open Project" msgstr "Projeyi Aç" @@ -1585,8 +1588,8 @@ msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"Orca Slicer'ın sürümü çok düşük ve normal şekilde kullanılabilmesi için en " -"son sürüme güncellenmesi gerekiyor" +"Orca Slicer'ın sürümü çok düşük ve normal şekilde kullanılabilmesi için en son " +"sürüme güncellenmesi gerekiyor" msgid "Privacy Policy Update" msgstr "Gizlilik Politikası Güncellemesi" @@ -1595,8 +1598,8 @@ 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." +"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" @@ -1799,10 +1802,10 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Bu modelin üst yüzeyinde metin kabartması bulunmaktadır. En iyi sonuçları " -"elde etmek amacıyla, 'Üst Yüzeylerde Yalnızca Bir Duvar'ın en iyi şekilde " -"çalışması için 'Tek Duvar Eşiği(min_width_top_surface)' seçeneğini 0'a " -"ayarlamanız önerilir.\n" +"Bu modelin üst yüzeyinde metin kabartması bulunmaktadır. En iyi sonuçları elde " +"etmek amacıyla, 'Üst Yüzeylerde Yalnızca Bir Duvar'ın en iyi şekilde çalışması " +"için 'Tek Duvar Eşiği(min_width_top_surface)' seçeneğini 0'a ayarlamanız " +"önerilir.\n" "Evet - Bu ayarları otomatik olarak değiştir\n" "Hayır - Bu ayarları benim için değiştirme" @@ -2036,7 +2039,7 @@ msgid "Center" msgstr "Merkez" msgid "Drop" -msgstr "" +msgstr "Düşür" msgid "Edit Process Settings" msgstr "İşlem ayarlarını düzenle" @@ -2129,8 +2132,7 @@ msgid "Switch to per-object setting mode to edit modifier settings." msgstr "Değiştirici ayarlarını düzenlemek için nesne başına ayar moduna geçin." msgid "" -"Switch to per-object setting mode to edit process settings of selected " -"objects." +"Switch to per-object setting mode to edit process settings of selected objects." msgstr "" "Seçilen nesnelerin işlem ayarlarını düzenlemek için nesne başına ayar moduna " "geçin." @@ -2155,8 +2157,8 @@ msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed .\n" "\n" -"To manipulate with solid parts or negative volumes you have to invalidate " -"cut information first." +"To manipulate with solid parts or negative volumes you have to invalidate cut " +"information first." msgstr "" "Bu eylem kesilmiş bir yazışmayı bozacaktır.\n" "Bundan sonra model tutarlılığı garanti edilemez.\n" @@ -2219,8 +2221,7 @@ msgstr "İlk seçilen öğe bir nesne ise ikincisi de nesne olmalıdır." msgid "" "If first selected item is a part, the second one should be part in the same " "object." -msgstr "" -"İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." +msgstr "İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." msgid "The type of the last solid object part is not to be changed." msgstr "Son katı nesne parçasının tipi değiştirilNozullidir." @@ -2577,16 +2578,13 @@ msgstr "" msgid "Arranging done." msgstr "Hizalama tamamlandı." -msgid "" -"Arrange failed. Found some exceptions when processing object geometries." +msgid "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Hizalama başarısız oldu. Nesne geometrilerini işlerken bazı istisnalar " -"bulundu." +"Hizalama başarısız oldu. Nesne geometrilerini işlerken bazı istisnalar bulundu." #, c-format, boost-format msgid "" -"Arrangement ignored the following objects which can't fit into a single " -"bed:\n" +"Arrangement ignored the following objects which can't fit into a single bed:\n" "%s" msgstr "" "Hizalama tek plakaya sığmayan aşağıdaki nesneler göz ardı edildi:\n" @@ -2650,8 +2648,8 @@ msgstr "Görev iptal edildi." msgid "Upload task timed out. Please check the network status and try again." msgstr "" -"Yükleme görevi zaman aşımına uğradı. Lütfen ağ durumunu kontrol edin ve " -"tekrar deneyin." +"Yükleme görevi zaman aşımına uğradı. Lütfen ağ durumunu kontrol edin ve tekrar " +"deneyin." msgid "Cloud service connection failed. Please try again." msgstr "Bulut hizmeti bağlantısı başarısız oldu. Lütfen tekrar deneyin." @@ -2686,15 +2684,14 @@ msgstr "" "deneyin." msgid "Print file not found, Please slice it again and send it for printing." -msgstr "" -"Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." +msgstr "Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." msgid "" "Failed to upload print file to FTP. Please check the network status and try " "again." msgstr "" -"Yazdırma dosyası FTP'ye yüklenemedi. Lütfen ağ durumunu kontrol edin ve " -"tekrar deneyin." +"Yazdırma dosyası FTP'ye yüklenemedi. Lütfen ağ durumunu kontrol edin ve tekrar " +"deneyin." msgid "Sending print job over LAN" msgstr "Yazdırma işi LAN üzerinden gönderiliyor" @@ -2743,8 +2740,8 @@ msgid "Importing SLA archive" msgstr "SLA arşivi içe aktarılıyor" msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." +"The SLA archive doesn't contain any presets. Please activate some SLA printer " +"preset first before importing that SLA archive." msgstr "" "SLA arşivi herhangi bir ön ayar içermez. Lütfen SLA arşivini içe aktarmadan " "önce bazı SLA yazıcı ön ayarlarını etkinleştirin." @@ -2756,8 +2753,8 @@ msgid "Importing done." msgstr "İçe aktarma tamamlandı." msgid "" -"The imported SLA archive did not contain any presets. The current SLA " -"presets were used as fallback." +"The imported SLA archive did not contain any presets. The current SLA presets " +"were used as fallback." msgstr "" "İçe aktarılan SLA arşivi herhangi bir ön ayar içermiyordu. Geçerli SLA ön " "ayarları geri dönüş olarak kullanıldı." @@ -2814,23 +2811,22 @@ msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait " -"olan açık kaynaklı bileşenleri kullanır" +"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait olan " +"açık kaynaklı bileşenleri kullanır" #, c-format, boost-format msgid "About %s" msgstr "Hakkında %s" msgid "Orca Slicer" -msgstr "" +msgstr "Orca Slicer" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." msgstr "OrcaSlicer, BambuStudio, PrusaSlicer ve SuperSlicer'ı temel alır." msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "" -"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel " -"almaktadır." +"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel almaktadır." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -2909,8 +2905,7 @@ msgstr "Lütfen geçerli bir değer girin (K %.1f~%.1f içinde)" #, c-format, boost-format msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" -msgstr "" -"Lütfen geçerli bir değer girin (K %.1f~%.1f içinde, N %.1f~%.1f içinde)" +msgstr "Lütfen geçerli bir değer girin (K %.1f~%.1f içinde, N %.1f~%.1f içinde)" msgid "Other Color" msgstr "Diğer renk" @@ -2922,9 +2917,9 @@ msgid "Dynamic flow calibration" msgstr "Dinamik akış kalibrasyonu" msgid "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"The nozzle temp and max volumetric speed will affect the calibration results. " +"Please fill in the same values as the actual printing. They can be auto-filled " +"by selecting a filament preset." msgstr "" "Nozul sıcaklığı ve maksimum hacimsel hız kalibrasyon sonuçlarını " "etkileyecektir. Lütfen gerçek yazdırmayla aynı değerleri girin. Bir filament " @@ -2961,8 +2956,8 @@ msgid "Next" msgstr "Sonraki" msgid "" -"Calibration completed. Please find the most uniform extrusion line on your " -"hot bed like the picture below, and fill the value on its left side into the " +"Calibration completed. Please find the most uniform extrusion line on your hot " +"bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" "Kalibrasyon tamamlandı. Lütfen sıcak yatağınızdaki en düzgün ekstrüzyon " @@ -3028,8 +3023,7 @@ msgstr "" "değiştirildiğinde. nemin emilmesi saatler alır, düşük sıcaklıklar da süreci " "yavaşlatır." -msgid "" -"Config which AMS slot should be used for a filament used in the print job" +msgid "Config which AMS slot should be used for a filament used in the print job" msgstr "" "Yazdırma işinde kullanılan filament için hangi AMS yuvasının kullanılması " "gerektiğini yapılandırma" @@ -3059,8 +3053,7 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" -"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam " -"edecektir." +"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam edecektir." msgid "Group" msgstr "Grup" @@ -3068,8 +3061,7 @@ msgstr "Grup" msgid "The printer does not currently support auto refill." msgstr "Yazıcı şu anda otomatik yeniden doldurmayı desteklemiyor." -msgid "" -"AMS filament backup is not enabled, please enable it in the AMS settings." +msgid "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" "AMS filament yedekleme özelliği etkin değil, lütfen AMS ayarlarından " "etkinleştirin." @@ -3098,8 +3090,8 @@ msgid "Insertion update" msgstr "Ekleme güncellemesi" msgid "" -"The AMS will automatically read the filament information when inserting a " -"new Bambu Lab filament. This takes about 20 seconds." +"The AMS will automatically read the filament information when inserting a new " +"Bambu Lab filament. This takes about 20 seconds." msgstr "" "AMS, yeni bir Bambu Lab filamenti takıldığında filament bilgilerini otomatik " "olarak okuyacaktır. Bu yaklaşık 20 saniye sürer." @@ -3122,17 +3114,16 @@ msgid "Power on update" msgstr "Güncellemeyi aç" msgid "" -"The AMS will automatically read the information of inserted filament on " -"start-up. It will take about 1 minute.The reading process will roll filament " -"spools." +"The AMS will automatically read the information of inserted filament on start-" +"up. It will take about 1 minute.The reading process will roll filament spools." msgstr "" "AMS, başlangıçta takılan filamentin bilgilerini otomatik olarak okuyacaktır. " "Yaklaşık 1 dakika sürecektir. Okuma işlemi filament makaralarını saracaktır." msgid "" -"The AMS will not automatically read information from inserted filament " -"during startup and will continue to use the information recorded before the " -"last shutdown." +"The AMS will not automatically read information from inserted filament during " +"startup and will continue to use the information recorded before the last " +"shutdown." msgstr "" "AMS, başlatma sırasında takılan filamentden bilgileri otomatik olarak okumaz " "ve son kapatmadan önce kaydedilen bilgileri kullanmaya devam eder." @@ -3146,8 +3137,8 @@ msgid "" "automatically." msgstr "" "AMS, filament bilgisi güncellendikten sonra Bambu filamentin kalan " -"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik " -"olarak güncellenecektir." +"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik olarak " +"güncellenecektir." msgid "AMS filament backup" msgstr "AMS filament yedeklemesi" @@ -3179,8 +3170,8 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn " -"yazılımınızı kontrol edin, kontrol edip yeniden deneyin." +"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn yazılımınızı " +"kontrol edin, kontrol edip yeniden deneyin." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " @@ -3253,8 +3244,8 @@ msgstr "G kodu dışa aktarılırken bilinmeyen bir hata oluştu." #, boost-format msgid "" -"Copying of the temporary G-code to the output G-code failed. Maybe the SD " -"card is write locked?\n" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD card " +"is write locked?\n" "Error message: %1%" msgstr "" "Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Belki SD kart " @@ -3268,8 +3259,8 @@ msgid "" "device. The corrupted output G-code is at %1%.tmp." msgstr "" "Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Hedef cihazda " -"sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz " -"kullanmayı deneyin. Bozuk çıktı G kodu %1%.tmp konumunda." +"sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz kullanmayı " +"deneyin. Bozuk çıktı G kodu %1%.tmp konumunda." #, boost-format msgid "" @@ -3289,8 +3280,8 @@ msgstr "" #, boost-format msgid "" -"Copying of the temporary G-code has finished but the exported code couldn't " -"be opened during copy check. The output G-code is at %1%.tmp." +"Copying of the temporary G-code has finished but the exported code couldn't be " +"opened during copy check. The output G-code is at %1%.tmp." msgstr "" "Geçici G kodunun kopyalanması tamamlandı ancak kopya kontrolü sırasında dışa " "aktarılan kod açılamadı. Çıkış G kodu %1%.tmp konumundadır." @@ -3371,8 +3362,7 @@ msgstr "Cihaz Durumu" msgid "Actions" msgstr "İşlemler" -msgid "" -"Please select the devices you would like to manage here (up to 6 devices)" +msgid "Please select the devices you would like to manage here (up to 6 devices)" msgstr "Lütfen buradan yönetmek istediğiniz cihazları seçin (en fazla 6 cihaz)" msgid "Add" @@ -3502,8 +3492,8 @@ msgid "Send to" msgstr "Gönderildi" msgid "" -"printers at the same time.(It depends on how many devices can undergo " -"heating at the same time.)" +"printers at the same time.(It depends on how many devices can undergo heating " +"at the same time.)" msgstr "" "aynı anda kaç yazıcının ısıtma işleminden geçebileceği, aynı anda " "ısıtılabilecek cihaz sayısına bağlıdır." @@ -3593,8 +3583,7 @@ msgstr "Hata! Geçersiz model" msgid "The selected file contains no geometry." msgstr "Seçilen dosya geometri içermiyor." -msgid "" -"The selected file contains several disjoint areas. This is not supported." +msgid "The selected file contains several disjoint areas. This is not supported." msgstr "Seçilen dosya birkaç ayrık alan içeriyor. Bu desteklenmiyor." msgid "Choose a file to import bed texture from (PNG/SVG):" @@ -3607,11 +3596,11 @@ msgid "Bed Shape" msgstr "Yatak Şekli" msgid "" -"The recommended minimum temperature is less than 190 degree or the " -"recommended maximum temperature is greater than 300 degree.\n" +"The recommended minimum temperature is less than 190 degree or the recommended " +"maximum temperature is greater than 300 degree.\n" msgstr "" -"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum " -"sıcaklık 300 dereceden yüksektir.\n" +"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum sıcaklık " +"300 dereceden yüksektir.\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " @@ -3636,8 +3625,7 @@ msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" msgstr "" -"Bu filament tipinin tavsiye edilen Nozul sıcaklığı [%d, %d] derece " -"santigrattır" +"Bu filament tipinin tavsiye edilen Nozul sıcaklığı [%d, %d] derece santigrattır" msgid "" "Too small max volumetric speed.\n" @@ -3648,13 +3636,13 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe " -"temperature,it may result in material softening and clogging.The maximum " -"safe temperature for the material is %d" +"Current chamber temperature is higher than the material's safe temperature,it " +"may result in material softening and clogging.The maximum safe temperature for " +"the material is %d" msgstr "" -"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, " -"malzemenin yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum " -"güvenli sıcaklık %d'dir" +"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, malzemenin " +"yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum güvenli " +"sıcaklık %d'dir" msgid "" "Too small layer height.\n" @@ -3708,16 +3696,16 @@ msgstr "" "Değer 0'a sıfırlanacaktır." msgid "" -"Alternate extra wall does't work well when ensure vertical shell thickness " -"is set to All. " +"Alternate extra wall does't work well when ensure vertical shell thickness is " +"set to All. " msgstr "" -"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak " -"ayarlandığından emin olunduğunda iyi çalışmaz. " +"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak ayarlandığından " +"emin olunduğunda iyi çalışmaz. " msgid "" "Change these settings automatically? \n" -"Yes - Change ensure vertical shell thickness to Moderate and enable " -"alternate extra wall\n" +"Yes - Change ensure vertical shell thickness to Moderate and enable alternate " +"extra wall\n" "No - Don't use alternate extra wall" msgstr "" "Bu ayarlar otomatik olarak değiştirilsin mi? \n" @@ -3778,8 +3766,7 @@ msgstr "" "olduğunda ve timelapse türü geleneksel olduğunda çalışır." msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" -" Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." +msgstr " Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." msgid "" "Change these settings automatically? \n" @@ -3787,8 +3774,7 @@ msgid "" "No - Give up using spiral mode this time" msgstr "" "Bu ayarlar otomatik olarak değiştirilsin mi?\n" -"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " -"etkinleştirin\n" +"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" msgid "Auto bed leveling" @@ -3921,9 +3907,9 @@ msgid "Update failed." msgstr "Güncelleme başarısız." msgid "" -"The current chamber temperature or the target chamber temperature exceeds " -"45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -"TPU) is not allowed to be loaded." +"The current chamber temperature or the target chamber temperature exceeds 45℃." +"In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is " +"not allowed to be loaded." msgstr "" "Mevcut hazne sıcaklığı veya hedef hazne sıcaklığı 45 ° C'yi aşıyor Ekstruder " "tıkanmasını önlemek için düşük sıcaklıkta filament (PLA / PETG / TPU) " @@ -3931,8 +3917,8 @@ msgstr "" msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " -"avoid extruder clogging,it is not allowed to set the chamber temperature " -"above 45℃." +"avoid extruder clogging,it is not allowed to set the chamber temperature above " +"45℃." msgstr "" "Ekstrudere düşük sıcaklıkta filament (PLA / PETG / TPU) yüklendi. Ekstruder " "tıkanmasını önlemek için hazne sıcaklığının 45 ° C'nin üzerine ayarlanmasına " @@ -3950,8 +3936,7 @@ msgstr "" msgid "Failed to start printing job" msgstr "Yazdırma işi başlatılamadı" -msgid "" -"This calibration does not support the currently selected nozzle diameter" +msgid "This calibration does not support the currently selected nozzle diameter" msgstr "Bu kalibrasyon, şu anda seçilen nozzle çapını desteklememektedir" msgid "Current flowrate cali param is invalid" @@ -3973,15 +3958,15 @@ msgid "Bambu PET-CF/PA6-CF is not supported by AMS." msgstr "Bambu PET-CF/PA6-CF, AMS tarafından desteklenNozulktedir." msgid "" -"Damp PVA will become flexible and get stuck inside AMS,please take care to " -"dry it before use." +"Damp PVA will become flexible and get stuck inside AMS,please take care to dry " +"it before use." msgstr "" -"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan " -"önce kurutmaya dikkat edin." +"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan önce " +"kurutmaya dikkat edin." msgid "" -"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " -"AMS, please use with caution." +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, " +"please use with caution." msgstr "" "CF/GF filamentleri sert ve kırılgandır. AMS'de kırılması veya sıkışması " "kolaydır, lütfen dikkatli kullanın." @@ -5020,8 +5005,8 @@ msgstr[1] "" msgid "" "\n" -"Hint: Make sure you have added the corresponding printer before importing " -"the configs." +"Hint: Make sure you have added the corresponding printer before importing the " +"configs." msgstr "" "\n" "İpucu: Yapılandırmaları içe aktarmadan önce ilgili yazıcıyı eklediğinizden " @@ -5070,10 +5055,8 @@ msgid "Please confirm if the printer is connected." msgstr "Lütfen yazıcının bağlı olup olmadığını onaylayın." msgid "" -"The printer is currently busy downloading. Please try again after it " -"finishes." -msgstr "" -"Yazıcı şu anda indirmeyle meşgul. Lütfen bittikten sonra tekrar deneyin." +"The printer is currently busy downloading. Please try again after it finishes." +msgstr "Yazıcı şu anda indirmeyle meşgul. Lütfen bittikten sonra tekrar deneyin." msgid "Printer camera is malfunctioning." msgstr "Yazıcı kamerası arızalı." @@ -5082,8 +5065,7 @@ msgid "Problem occurred. Please update the printer firmware and try again." msgstr "" "Sorun oluştu. Lütfen yazıcının ürün yazılımını güncelleyin ve tekrar deneyin." -msgid "" -"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgid "LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" "Yalnızca LAN Canlı İzleme kapalı. Lütfen yazıcı ekranındaki canlı " "görüntülemeyi açın." @@ -5098,8 +5080,8 @@ msgid "Connection Failed. Please check the network and try again" msgstr "Bağlantı Başarısız. Lütfen ağı kontrol edip tekrar deneyin" msgid "" -"Please check the network and try again, You can restart or update the " -"printer if the issue persists." +"Please check the network and try again, You can restart or update the printer " +"if the issue persists." msgstr "" "Lütfen ağı kontrol edip tekrar deneyin. Sorun devam ederse yazıcıyı yeniden " "başlatabilir veya güncelleyebilirsiniz." @@ -5242,8 +5224,7 @@ msgid_plural "" "You are going to delete %u files from printer. Are you sure to continue?" msgstr[0] "" "%u dosyasını yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" -msgstr[1] "" -"%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" +msgstr[1] "%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" msgid "Delete files" msgstr "Dosyaları sil" @@ -5268,8 +5249,8 @@ msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" -".gcode.3mf dosyası hiçbir G kodu verisi içermiyor. Lütfen dosyayı Bambu " -"Studio ile dilimleyin ve yeni bir .gcode.3mf dosyasını dışa aktarın." +".gcode.3mf dosyası hiçbir G kodu verisi içermiyor. Lütfen dosyayı Bambu Studio " +"ile dilimleyin ve yeni bir .gcode.3mf dosyasını dışa aktarın." #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -5303,8 +5284,8 @@ msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." msgstr "" -"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha " -"sonra tekrar deneyin." +"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha sonra " +"tekrar deneyin." msgid "File does not exist." msgstr "Dosya bulunmuyor." @@ -5387,8 +5368,8 @@ msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" -"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki " -"derecelendirmenin üzerine yazılacaktır)" +"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki derecelendirmenin " +"üzerine yazılacaktır)" msgid "Rate" msgstr "Derecelendir" @@ -5466,8 +5447,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" -"Filamenti yüklemeden veya boşaltmadan önce lütfen nozulu 170 derecenin " -"üzerine ısıtın." +"Filamenti yüklemeden veya boşaltmadan önce lütfen nozulu 170 derecenin üzerine " +"ısıtın." msgid "Still unload" msgstr "Daha Fazla Boşalt" @@ -5805,8 +5786,7 @@ msgid "Range" msgstr "Aralık" msgid "" -"The application cannot run normally because OpenGL version is lower than " -"2.0.\n" +"The application cannot run normally because OpenGL version is lower than 2.0.\n" msgstr "" "OpenGL sürümü 2.0'dan düşük olduğundan uygulama normal şekilde çalışamıyor.\n" @@ -5845,11 +5825,11 @@ msgid "Enable detection of build plate position" msgstr "Yapı plakası konumunun algılanmasını etkinleştir" msgid "" -"The localization tag of build plate is detected, and printing is paused if " -"the tag is not in predefined range." +"The localization tag of build plate is detected, and printing is paused if the " +"tag is not in predefined range." msgstr "" -"Baskı plakasının yerelleştirme etiketi algılanır ve etiket önceden " -"tanımlanmış aralıkta değilse yazdırma duraklatılır." +"Baskı plakasının yerelleştirme etiketi algılanır ve etiket önceden tanımlanmış " +"aralıkta değilse yazdırma duraklatılır." msgid "First Layer Inspection" msgstr "Birinci Katman Denetimi" @@ -5987,8 +5967,8 @@ msgstr "Peletler" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' " -"sayfasında bir yazıcı seçin." +"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' sayfasında " +"bir yazıcı seçin." msgid "Sync filaments with AMS" msgstr "Filamentleri AMS ile senkronize et" @@ -6001,11 +5981,10 @@ msgstr "" "ayarlarını ve renklerini kaldıracaktır. Devam etmek istiyor musun?" msgid "" -"Already did a synchronization, do you want to sync only changes or resync " -"all?" +"Already did a synchronization, do you want to sync only changes or resync all?" msgstr "" -"Zaten bir senkronizasyon yaptınız. Yalnızca değişiklikleri senkronize etmek " -"mi yoksa tümünü yeniden senkronize etmek mi istiyorsunuz?" +"Zaten bir senkronizasyon yaptınız. Yalnızca değişiklikleri senkronize etmek mi " +"yoksa tümünü yeniden senkronize etmek mi istiyorsunuz?" msgid "Sync" msgstr "Senkronizasyon" @@ -6017,13 +5996,12 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "Uyumlu filament yok ve senkronizasyon gerçekleştirilmiyor." msgid "" -"There are some unknown filaments mapped to generic preset. Please update " -"Orca Slicer or restart Orca Slicer to check if there is an update to system " -"presets." +"There are some unknown filaments mapped to generic preset. Please update Orca " +"Slicer or restart Orca Slicer to check if there is an update to system presets." msgstr "" -"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön " -"ayarlarında bir güncelleme olup olmadığını kontrol etmek için lütfen Orca " -"Slicer'ı güncelleyin veya Orca Slicer'ı yeniden başlatın." +"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön ayarlarında " +"bir güncelleme olup olmadığını kontrol etmek için lütfen Orca Slicer'ı " +"güncelleyin veya Orca Slicer'ı yeniden başlatın." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -6048,26 +6026,26 @@ msgid "Restore" msgstr "Geri Yükleme" msgid "" -"The current hot bed temperature is relatively high. The nozzle may be " -"clogged when printing this filament in a closed enclosure. Please open the " -"front door and/or remove the upper glass." +"The current hot bed temperature is relatively high. The nozzle may be clogged " +"when printing this filament in a closed enclosure. Please open the front door " +"and/or remove the upper glass." msgstr "" -"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir " -"muhafaza içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/" -"veya üst camı çıkarın." +"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir muhafaza " +"içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/veya üst camı " +"çıkarın." msgid "" -"The nozzle hardness required by the filament is higher than the default " -"nozzle hardness of the printer. Please replace the hardened nozzle or " -"filament, otherwise, the nozzle will be attrited or damaged." +"The nozzle hardness required by the filament is higher than the default nozzle " +"hardness of the printer. Please replace the hardened nozzle or filament, " +"otherwise, the nozzle will be attrited or damaged." msgstr "" "Filamentin gerektirdiği nozul sertliği, yazıcının varsayılan nozul " "sertliğinden daha yüksektir. Lütfen sertleşmiş nozulu veya filamenti " "değiştirin, aksi takdirde nozul aşınır veya hasar görür." msgid "" -"Enabling traditional timelapse photography may cause surface imperfections. " -"It is recommended to change to smooth mode." +"Enabling traditional timelapse photography may cause surface imperfections. It " +"is recommended to change to smooth mode." msgstr "" "Geleneksel timelapse etkinleştirilmesi yüzey kusurlarına neden olabilir. " "Yumuşak moda geçilmesi önerilir." @@ -6084,8 +6062,7 @@ msgstr "Dosya yükleniyor: %s" msgid "The 3mf is not supported by OrcaSlicer, load geometry data only." msgstr "" -"OrcaSlicer, 3mf formatını desteklememektedir. Sadece geometri verilerini " -"yükle." +"OrcaSlicer, 3mf formatını desteklememektedir. Sadece geometri verilerini yükle." msgid "Load 3mf" msgstr "3mf yükle" @@ -6117,8 +6094,8 @@ msgstr "Lütfen bunları parametre sekmelerinde düzeltin" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" -"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-" -"kodları bulunmaktadır:" +"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-kodları " +"bulunmaktadır:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " @@ -6348,15 +6325,15 @@ msgstr "İndirme başarısız oldu, Dosya boyutu sorunlu." #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "" -"Proje %d%% indirildiBambu Studio’ya içe aktarma başarısız oldu. Lütfen " -"dosyayı indirin ve manuel olarak içe aktarın." +"Proje %d%% indirildiBambu Studio’ya içe aktarma başarısız oldu. Lütfen dosyayı " +"indirin ve manuel olarak içe aktarın." msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " -"import it." +"Importing to Orca Slicer failed. Please download the file and manually import " +"it." msgstr "" -"Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " -"olarak İçe aktarın." +"Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel olarak " +"İçe aktarın." msgid "Import SLA archive" msgstr "SLA arşivini içe aktar" @@ -6415,8 +6392,8 @@ msgstr "Tüm nesneler kaldırılacak, devam edilsin mi?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"Mevcut projede kaydedilmemiş değişiklikler var. Devam etmeden önce " -"kaydedilsin mi?" +"Mevcut projede kaydedilmemiş değişiklikler var. Devam etmeden önce kaydedilsin " +"mi?" msgid "Number of copies:" msgstr "Kopya sayısı:" @@ -6441,15 +6418,15 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" #, c-format, boost-format msgid "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"The file %s has been sent to the printer's storage space and can be viewed on " +"the printer." msgstr "" "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda " "görüntülenebiliyor." msgid "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be kept. You may fix the meshes and try again." +"Unable to perform boolean operation on model meshes. Only positive parts will " +"be kept. You may fix the meshes and try again." msgstr "" "Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca olumlu kısımlar " "tutulacaktır. Kafesleri düzeltip tekrar deneyebilirsiniz." @@ -6471,8 +6448,8 @@ msgid "Reason: \"%1%\" and another part have no intersection." msgstr "Sebep: “%1%” ile başka bir parçanın kesişimi yok." msgid "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"Unable to perform boolean operation on model meshes. Only positive parts will " +"be exported." msgstr "" "Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca pozitif parçalar " "ihraç edilecektir." @@ -6500,8 +6477,8 @@ msgid "" "Suggest to use auto-arrange to avoid collisions when printing." msgstr "" "Nesneye Göre Yazdır:\n" -"Yazdırma sırasında çarpışmaları önlemek için otomatik düzenlemeyi " -"kullanmanızı önerin." +"Yazdırma sırasında çarpışmaları önlemek için otomatik düzenlemeyi kullanmanızı " +"önerin." msgid "Send G-code" msgstr "G-kodu gönder" @@ -6561,8 +6538,8 @@ msgid "Tips:" msgstr "İpuçları:" msgid "" -"\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"\"Fix Model\" feature is currently only on Windows. Please repair the model on " +"Orca Slicer(windows) or CAD softwares." msgstr "" "\"Modeli Onar\" özelliği şu anda yalnızca Windows'ta bulunmaktadır. Lütfen " "modeli Orca Slicer (windows) veya CAD yazılımlarında onarın." @@ -6570,8 +6547,8 @@ msgstr "" #, c-format, boost-format msgid "" "Plate% d: %s is not suggested to be used to print filament %s(%s). If you " -"still want to do this printing, please set this filament's bed temperature " -"to non zero." +"still want to do this printing, please set this filament's bed temperature to " +"non zero." msgstr "" "Plaka% d: %s'nin %s(%s) filamentinı yazdırmak için kullanılması önerilmez. " "Eğer yine de bu baskıyı yapmak istiyorsanız, lütfen bu filamentin yatak " @@ -6647,8 +6624,8 @@ msgid "Stealth Mode" msgstr "Gizli mod" msgid "" -"This stops the transmission of data to Bambu's cloud services. Users who " -"don't use BBL machines or use LAN mode only can safely turn on this function." +"This stops the transmission of data to Bambu's cloud services. Users who don't " +"use BBL machines or use LAN mode only can safely turn on this function." msgstr "" "Bu, Bambu’nun bulut hizmetlerine veri aktarımını durdurur. BBL makinelerini " "kullanmayan veya yalnızca LAN modunu kullanan kullanıcılar bu işlevi güvenle " @@ -6673,9 +6650,9 @@ msgid "Allow only one OrcaSlicer instance" msgstr "Yalnızca bir OrcaSlicer örneğine izin ver" msgid "" -"On OSX there is always only one instance of app running by default. However " -"it is allowed to run multiple instances of same app from the command line. " -"In such case this settings will allow only one instance." +"On OSX there is always only one instance of app running by default. However it " +"is allowed to run multiple instances of same app from the command line. In " +"such case this settings will allow only one instance." msgstr "" "OSX’te her zaman varsayılan olarak çalışan tek bir uygulama örneği vardır. " "Ancak aynı uygulamanın birden fazla örneğinin komut satırından " @@ -6683,9 +6660,8 @@ msgstr "" "örneğe izin verecektir." msgid "" -"If this is enabled, when starting OrcaSlicer and another instance of the " -"same OrcaSlicer is already running, that instance will be reactivated " -"instead." +"If this is enabled, when starting OrcaSlicer and another instance of the same " +"OrcaSlicer is already running, that instance will be reactivated instead." msgstr "" "Bu etkinleştirilirse, OrcaSlicer başlatıldığında ve aynı OrcaSlicer’ın başka " "bir örneği zaten çalışıyorken, bunun yerine bu örnek yeniden " @@ -6758,8 +6734,7 @@ msgstr "Hacimleri temizleme: Renk her değiştiğinde otomatik olarak hesapla." msgid "If enabled, auto-calculate every time the color changed." msgstr "Etkinleştirilirse, renk her değiştiğinde otomatik hesapla." -msgid "" -"Flushing volumes: Auto-calculate every time when the filament is changed." +msgid "Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" "Yıkama hacimleri: Filament her değiştirildiğinde otomatik olarak hesaplanır." @@ -6777,12 +6752,11 @@ msgstr "" "hatırlayacak ve otomatik olarak değiştirecektir." msgid "Multi-device Management(Take effect after restarting Orca)." -msgstr "" -"Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." +msgstr "Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." msgid "" -"With this option enabled, you can send a task to multiple devices at the " -"same time and manage multiple devices." +"With this option enabled, you can send a task to multiple devices at the same " +"time and manage multiple devices." msgstr "" "Bu seçenek etkinleştirildiğinde, aynı anda birden fazla cihaza bir görev " "gönderebilir ve birden fazla cihazı yönetebilirsiniz." @@ -6827,8 +6801,8 @@ msgstr ".stl dosyalarını OrcaSlicer ile ilişkilendirin" msgid "If enabled, sets OrcaSlicer as default application to open .stl files" msgstr "" -"Etkinleştirilirse OrcaSlicer'ı .stl dosyalarını açmak için varsayılan " -"uygulama olarak ayarlar" +"Etkinleştirilirse OrcaSlicer'ı .stl dosyalarını açmak için varsayılan uygulama " +"olarak ayarlar" msgid "Associate .step/.stp files to OrcaSlicer" msgstr ".step/.stp dosyalarını OrcaSlicer ile ilişkilendirin" @@ -6859,11 +6833,10 @@ msgstr "Değiştirilmiş G-kodları içeren 3MF dosyalarını yüklerken uyarı msgid "Auto-Backup" msgstr "Otomatik yedekleme" -msgid "" -"Backup your project periodically for restoring from the occasional crash." +msgid "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi " -"düzenli aralıklarla yedekleyin." +"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi düzenli " +"aralıklarla yedekleyin." msgid "every" msgstr "her" @@ -7220,8 +7193,7 @@ msgid "Error code" msgstr "Hata kodu" msgid "No login account, only printers in LAN mode are displayed" -msgstr "" -"Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" +msgstr "Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" msgid "Connecting to server" msgstr "Sunucuya baglanıyor" @@ -7249,8 +7221,8 @@ msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"%s filamenti AMS yuvası sayısını aşıyor. AMS yuvası atamasını desteklemek " -"için lütfen yazıcının ürün yazılımını güncelleyin." +"%s filamenti AMS yuvası sayısını aşıyor. AMS yuvası atamasını desteklemek için " +"lütfen yazıcının ürün yazılımını güncelleyin." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " @@ -7289,8 +7261,7 @@ msgstr "" "desteklemek için lütfen yazıcının ürün yazılımını güncelleyin." msgid "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"The printer firmware only supports sequential mapping of filament => AMS slot." msgstr "" "Yazıcı ürün yazılımı yalnızca filament => AMS yuvasının sıralı eşlemesini " "destekler." @@ -7351,8 +7322,8 @@ msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, press \"Confirm\" to " -"start printing." +"they are the required filaments. If they are okay, press \"Confirm\" to start " +"printing." msgstr "" "AMS eşlemelerinde bazı bilinmeyen filamentler var. Lütfen bunların gerekli " "filamentler olup olmadığını kontrol edin. Sorun yoksa, yazdırmayı başlatmak " @@ -7377,15 +7348,13 @@ msgstr "" #, c-format, boost-format msgid "" -"Printing high temperature material(%s material) with %s may cause nozzle " -"damage" +"Printing high temperature material(%s material) with %s may cause nozzle damage" msgstr "" "Yüksek sıcaklıktaki malzemeyi (%s malzeme) %s ile yazdırmak püskürtme ucu " "hasarına neden olabilir" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "" -"Lütfen yukarıdaki hatayı düzeltin, aksi takdirde yazdırma devam edemez." +msgstr "Lütfen yukarıdaki hatayı düzeltin, aksi takdirde yazdırma devam edemez." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -7503,16 +7472,16 @@ msgstr "Şartlar ve koşullar" msgid "" "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -"device, please read the terms and conditions.By clicking to agree to use " -"your Bambu Lab device, you agree to abide by the Privacy Policy and Terms of " +"device, please read the terms and conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policy and Terms of " "Use(collectively, the \"Terms\"). If you do not comply with or agree to the " "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" -"Bir Bambu Lab cihazı satın aldığınız için teşekkür ederiz.Bambu Lab " -"cihazınızı kullanmadan önce lütfen şartlar ve koşulları okuyun.Bambu Lab " -"cihazınızı kullanmayı kabul etmek için tıklayarak, Gizlilik Politikasına ve " -"Kullanım Koşullarına (topluca \"Şartlar\" olarak anılacaktır) uymayı kabul " -"etmiş olursunuz. \"). Bambu Lab Gizlilik Politikasına uymuyorsanız veya bu " +"Bir Bambu Lab cihazı satın aldığınız için teşekkür ederiz.Bambu Lab cihazınızı " +"kullanmadan önce lütfen şartlar ve koşulları okuyun.Bambu Lab cihazınızı " +"kullanmayı kabul etmek için tıklayarak, Gizlilik Politikasına ve Kullanım " +"Koşullarına (topluca \"Şartlar\" olarak anılacaktır) uymayı kabul etmiş " +"olursunuz. \"). Bambu Lab Gizlilik Politikasına uymuyorsanız veya bu " "Politikayı kabul etmiyorsanız lütfen Bambu Lab ekipmanlarını ve hizmetlerini " "kullanmayın." @@ -7536,11 +7505,11 @@ msgid "" "successes and failures of the vast number of prints by our users. We are " "training %s to be smarter by feeding them the real-world data. If you are " "willing, this service will access information from your error logs and usage " -"logs, which may include information described in Privacy Policy. We will " -"not collect any Personal Data by which an individual can be identified " -"directly or indirectly, including without limitation names, addresses, " -"payment information, or phone numbers. By enabling this service, you agree " -"to these terms and the statement about Privacy Policy." +"logs, which may include information described in Privacy Policy. We will not " +"collect any Personal Data by which an individual can be identified directly or " +"indirectly, including without limitation names, addresses, payment " +"information, or phone numbers. By enabling this service, you agree to these " +"terms and the statement about Privacy Policy." msgstr "" "3D Baskı topluluğunda, kendi dilimleme parametrelerimizi ve ayarlarımızı " "düzenlerken birbirimizin başarılarından ve başarısızlıklarından öğreniyoruz. " @@ -7591,20 +7560,19 @@ msgid "Click to reset all settings to the last saved preset." msgstr "Tüm ayarları en son kaydedilen ön ayara sıfırlamak için tıklayın." msgid "" -"Prime tower is required for smooth timelapse. There may be flaws on the " -"model without prime tower. Are you sure you want to disable prime tower?" +"Prime tower is required for smooth timelapse. There may be flaws on the model " +"without prime tower. Are you sure you want to disable prime tower?" msgstr "" "Sorunsuz timeplace için Prime Tower gereklidir. Prime tower olmayan modelde " "kusurlar olabilir. Prime tower'ı devre dışı bırakmak istediğinizden emin " "misiniz?" msgid "" -"Prime tower is required for smooth timelapse. There may be flaws on the " -"model without prime tower. Do you want to enable prime tower?" +"Prime tower is required for smooth timelapse. There may be flaws on the model " +"without prime tower. Do you want to enable prime tower?" msgstr "" -"Sorunsuz hızlandırılmış çekim için Prime Tower gereklidir. Prime tower " -"olmayan modelde kusurlar olabilir. Prime tower'ı etkinleştirmek istiyor " -"musunuz?" +"Sorunsuz hızlandırılmış çekim için Prime Tower gereklidir. Prime tower olmayan " +"modelde kusurlar olabilir. Prime tower'ı etkinleştirmek istiyor musunuz?" msgid "Still print by object?" msgstr "Hala nesneye göre yazdırıyor musunuz?" @@ -7629,12 +7597,12 @@ msgstr "" msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"settings: at least 2 interface layers, at least 0.1mm top z distance or using " +"support materials on interface." msgstr "" -"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en " -"az 2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek " -"malzemeleri kullanılması." +"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en az " +"2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek malzemeleri " +"kullanılması." msgid "" "When using support material for the support interface, We recommend the " @@ -7652,8 +7620,8 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" -"Bu seçeneğin etkinleştirilmesi modelin şeklini değiştirecektir. Baskınız " -"kesin boyutlar gerektiriyorsa veya bir montajın parçasıysa geometrideki bu " +"Bu seçeneğin etkinleştirilmesi modelin şeklini değiştirecektir. Baskınız kesin " +"boyutlar gerektiriyorsa veya bir montajın parçasıysa geometrideki bu " "değişikliğin baskınızın işlevselliğini etkileyip etkilemediğini bir kez daha " "kontrol etmeniz önemlidir." @@ -7668,12 +7636,11 @@ msgstr "" "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." +"Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height " +"limits ,this may cause printing quality issues." msgstr "" -"Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği " -"sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına " -"neden olabilir." +"Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği sınırları " +"bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına neden olabilir." msgid "Adjust to the set range automatically? \n" msgstr "Ayarlanan aralığa otomatik olarak ayarlansın mı? \n" @@ -7687,8 +7654,8 @@ msgstr "Atla" msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " "distance during filament changes to minimize flush.Although it can notably " -"reduce flush, it may also elevate the risk of nozzle clogs or other " -"printing complications." +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications." msgstr "" "Deneysel özellik: Filament değişiklikleri sırasında, floşu en aza indirmek " "için filamanı daha büyük bir mesafeden geri çekmek ve kesmek. Flush’u önemli " @@ -7703,15 +7670,15 @@ msgid "" msgstr "" "Deneysel özellik: Filament değişiklikleri sırasında, filamanın en aza " "indirilmesi için filamanın daha büyük bir mesafeden geri çekilmesi ve " -"kesilmesi. Akmayı önemli ölçüde azaltabilmesine rağmen, aynı zamanda " -"püskürtme uçları tıkanması veya diğer yazdırma komplikasyonları riskini de " -"artırabilir. Lütfen en son yazıcı ürün yazılımını kullanın." +"kesilmesi. Akmayı önemli ölçüde azaltabilmesine rağmen, aynı zamanda püskürtme " +"uçları tıkanması veya diğer yazdırma komplikasyonları riskini de artırabilir. " +"Lütfen en son yazıcı ürün yazılımını kullanın." 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 "" "Araç başlığı olmadan timelapse kaydederken, bir \"Timelapse Wipe Tower\" " "eklenmesi önerilir.\n" @@ -7755,13 +7722,13 @@ msgid "Overhang speed" msgstr "Çıkıntı Hızı" msgid "" -"This is the speed for various overhang degrees. Overhang degrees are " -"expressed as a percentage of line width. 0 speed means no slowing down for " -"the overhang degree range and wall speed is used" +"This is the speed for various overhang degrees. Overhang degrees are expressed " +"as a percentage of line width. 0 speed means no slowing down for the overhang " +"degree range and wall speed is used" msgstr "" "Bu, çeşitli sarkma dereceleri için hızdır. Çıkıntı dereceleri çizgi " -"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı " -"için yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" +"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı için " +"yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" msgid "Bridge" msgstr "Köprü" @@ -7870,29 +7837,31 @@ msgid "Nozzle temperature when printing" msgstr "Yazdırma sırasında nozul sıcaklığı" msgid "Cool Plate (SuperTack)" -msgstr "" +msgstr "Soğuk Plaka (SuperTack)" msgid "" -"Bed temperature when cool plate is installed. Value 0 means the filament " -"does not support to print on the Cool Plate SuperTack" +"Bed temperature when cool plate is installed. Value 0 means the filament does " +"not support to print on the Cool Plate SuperTack" msgstr "" +"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Soğuk Plaka " +"SuperTack üzerine yazdırmayı desteklemediği anlamına gelir" msgid "Cool Plate" msgstr "Soğuk Plaka" msgid "" -"Bed temperature when cool plate is installed. Value 0 means the filament " -"does not support to print on the Cool Plate" +"Bed temperature when cool plate is installed. Value 0 means the filament does " +"not support to print on the Cool Plate" msgstr "" -"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool " -"Plate üzerine yazdırmayı desteklemediği anlamına gelir" +"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool Plate " +"üzerine yazdırmayı desteklemediği anlamına gelir" msgid "Textured Cool plate" msgstr "Dokulu Soğuk Plaka" msgid "" -"Bed temperature when cool plate is installed. Value 0 means the filament " -"does not support to print on the Textured Cool Plate" +"Bed temperature when cool plate is installed. Value 0 means the filament does " +"not support to print on the Textured Cool Plate" msgstr "" "Soğuk plaka takıldığında yatak sıcaklığı. 0 Değeri, filamentin Dokulu Soğuk " "Plaka üzerine yazdırmayı desteklemediği anlamına gelir." @@ -7945,15 +7914,15 @@ msgid "Min fan speed threshold" msgstr "Minimum fan hızı" msgid "" -"Part cooling fan speed will start to run at min speed when the estimated " -"layer time is no longer than the layer time in setting. When layer time is " -"shorter than threshold, fan speed is interpolated between the minimum and " -"maximum fan speed according to layer printing time" +"Part cooling fan speed will start to run at min speed when the estimated layer " +"time is no longer than the layer time in setting. When layer time is shorter " +"than threshold, fan speed is interpolated between the minimum and maximum fan " +"speed according to layer printing time" msgstr "" "Tahmini katman süresi ayardaki katman süresinden uzun olmadığında parça " -"soğutma fanı hızı minimum hızda çalışmaya başlayacaktır. Katman süresi " -"eşikten kısa olduğunda fan hızı, katman yazdırma süresine göre minimum ve " -"maksimum fan hızı arasında enterpole edilir" +"soğutma fanı hızı minimum hızda çalışmaya başlayacaktır. Katman süresi eşikten " +"kısa olduğunda fan hızı, katman yazdırma süresine göre minimum ve maksimum fan " +"hızı arasında enterpole edilir" msgid "Max fan speed threshold" msgstr "Maksimum fan hızı" @@ -8078,13 +8047,13 @@ msgstr "Yazıcının ekstruder sayısı." msgid "" "Single Extruder Multi Material is selected, \n" "and all extruders must have the same diameter.\n" -"Do you want to change the diameter for all extruders to first extruder " -"nozzle diameter value?" +"Do you want to change the diameter for all extruders to first extruder nozzle " +"diameter value?" msgstr "" "Tek Ekstruder Çoklu Malzeme seçilir, \n" "ve tüm ekstrüderlerin aynı çapa sahip olması gerekir.\n" -"Tüm ekstruderlerin çapını ilk ekstruder bozul çapı değerine değiştirmek " -"ister misiniz?" +"Tüm ekstruderlerin çapını ilk ekstruder bozul çapı değerine değiştirmek ister " +"misiniz?" msgid "Nozzle diameter" msgstr "Nozul çapı" @@ -8106,7 +8075,7 @@ msgid "Layer height limits" msgstr "Katman Yüksekliği Sınırları" msgid "Z-Hop" -msgstr "" +msgstr "Z Sıçraması" msgid "Retraction when switching material" msgstr "Malzemeyi Değiştirirken Geri Çekme" @@ -8158,8 +8127,8 @@ msgid "" "please reset the filament information for that slot." msgstr "" "Seçilen ön ayarı silmek istediğinizden emin misiniz? \n" -"Eğer ön ayar, şu anda yazıcınızda kullanılan bir filamente karşılık " -"geliyorsa, lütfen o slot için filament bilgilerini sıfırlayın." +"Eğer ön ayar, şu anda yazıcınızda kullanılan bir filamente karşılık geliyorsa, " +"lütfen o slot için filament bilgilerini sıfırlayın." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -8245,19 +8214,19 @@ msgstr "\"%1%\" ön ayarı aşağıdaki kaydedilmemiş değişiklikleri içeriyo #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new printer profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new printer profile and it contains " +"the following unsaved changes:" msgstr "" "Ön ayar \"%1%\", yeni yazıcı profiliyle uyumlu değil ve aşağıdaki " "kaydedilmemiş değişiklikleri içeriyor:" #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new process profile and it contains " +"the following unsaved changes:" msgstr "" -"Ön ayar \"%1%\", yeni işlem profiliyle uyumlu değil ve aşağıdaki " -"kaydedilmemiş değişiklikleri içeriyor:" +"Ön ayar \"%1%\", yeni işlem profiliyle uyumlu değil ve aşağıdaki kaydedilmemiş " +"değişiklikleri içeriyor:" #, boost-format msgid "You have changed some settings of preset \"%1%\". " @@ -8284,12 +8253,12 @@ msgstr "Daha önce ayarlarınızı değiştirdiniz." msgid "" "\n" -"You can discard the preset values you have modified, or choose to transfer " -"the modified values to the new project" +"You can discard the preset values you have modified, or choose to transfer the " +"modified values to the new project" msgstr "" "\n" -"Değiştirdiğiniz ön ayar değerlerini atabilir veya değiştirilen değerleri " -"yeni projeye aktarmayı seçebilirsiniz." +"Değiştirdiğiniz ön ayar değerlerini atabilir veya değiştirilen değerleri yeni " +"projeye aktarmayı seçebilirsiniz." msgid "Extruders count" msgstr "Ekstruder sayısı" @@ -8313,19 +8282,19 @@ msgstr "" msgid "" "Transfer the selected options from left preset to the right.\n" -"Note: New modified presets will be selected in settings tabs after close " -"this dialog." +"Note: New modified presets will be selected in settings tabs after close this " +"dialog." msgstr "" "Seçilen seçenekleri sol ön ayardan sağa aktarın.\n" -"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde " -"değiştirilen yeni ön ayarlar seçilecektir." +"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde değiştirilen " +"yeni ön ayarlar seçilecektir." msgid "Transfer values from left to right" msgstr "Değerleri soldan sağa aktarın" msgid "" -"If enabled, this dialog can be used for transfer selected values from left " -"to right preset." +"If enabled, this dialog can be used for transfer selected values from left to " +"right preset." msgstr "" "Etkinleştirilirse, bu iletişim kutusu seçilen değerleri soldan sağa ön ayara " "aktarmak için kullanılabilir." @@ -8466,22 +8435,22 @@ msgstr "Sıkıştırma özelleştirme" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" -"extruder MM printer. Its purpose is to properly shape the end of the " -"unloaded filament so it does not prevent insertion of the new filament and " -"can itself be reinserted later. This phase is important and different " -"materials can require different extrusion speeds to get the good shape. For " -"this reason, the extrusion rates during ramming are adjustable.\n" +"extruder MM printer. Its purpose is to properly shape the end of the unloaded " +"filament so it does not prevent insertion of the new filament and can itself " +"be reinserted later. This phase is important and different materials can " +"require different extrusion speeds to get the good shape. For this reason, the " +"extrusion rates during ramming are adjustable.\n" "\n" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" "Sıkıştırma, tek ekstruderli bir MM yazıcıda takım değişiminden hemen önce " -"yapılan hızlı ekstrüzyonu ifade eder. Amacı, yeni filamentin " -"yerleştirilmesini engellememesi ve daha sonra yeniden yerleştirilebilmesi " -"için boşaltılmış filamentin ucunu düzgün bir şekilde şekillendirmektir. Bu " -"aşama önemlidir ve farklı malzemeler iyi bir şekil elde etmek için farklı " -"ekstrüzyon hızları gerektirebilir. Bu nedenle, sıkıştırma sırasındaki " -"ekstrüzyon hızları ayarlanabilir.\n" +"yapılan hızlı ekstrüzyonu ifade eder. Amacı, yeni filamentin yerleştirilmesini " +"engellememesi ve daha sonra yeniden yerleştirilebilmesi için boşaltılmış " +"filamentin ucunu düzgün bir şekilde şekillendirmektir. Bu aşama önemlidir ve " +"farklı malzemeler iyi bir şekil elde etmek için farklı ekstrüzyon hızları " +"gerektirebilir. Bu nedenle, sıkıştırma sırasındaki ekstrüzyon hızları " +"ayarlanabilir.\n" "\n" "Bu uzman düzeyinde bir ayardır, yanlış ayarlama muhtemelen sıkışmalara, " "ekstruder tekerleğinin filamente sürtünmesine vb. yol açacaktır." @@ -8548,22 +8517,22 @@ msgid "To" msgstr "İle" msgid "" -"Windows Media Player is required for this task! Do you want to enable " -"'Windows Media Player' for your operation system?" +"Windows Media Player is required for this task! Do you want to enable 'Windows " +"Media Player' for your operation system?" msgstr "" "Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için " "‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" msgid "" -"BambuSource has not correctly been registered for media playing! Press Yes " -"to re-register it. You will be promoted twice" +"BambuSource has not correctly been registered for media playing! Press Yes to " +"re-register it. You will be promoted twice" msgstr "" -"BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden " -"kaydetmek için Evet’e basın." +"BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden kaydetmek " +"için Evet’e basın." msgid "" -"Missing BambuSource component registered for media playing! Please re-" -"install BambuStudio or seek after-sales help." +"Missing BambuSource component registered for media playing! Please re-install " +"BambuStudio or seek after-sales help." msgstr "" "Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen BambuStudio’yu " "yeniden yükleyin veya satış sonrası yardım isteyin." @@ -8576,9 +8545,9 @@ msgstr "" "çalışmayabilir! Düzeltmek için Evet’e basın." msgid "" -"Your system is missing H.264 codecs for GStreamer, which are required to " -"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" -"libav packages, then restart Orca Slicer?)" +"Your system is missing H.264 codecs for GStreamer, which are required to play " +"video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav " +"packages, then restart Orca Slicer?)" msgstr "" "Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec " "bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav " @@ -8648,9 +8617,9 @@ msgid "Shift+R" msgstr "Shift+R" msgid "" -"Auto orientates selected objects or all objects.If there are selected " -"objects, it just orientates the selected ones.Otherwise, it will orientates " -"all objects in the current disk." +"Auto orientates selected objects or all objects.If there are selected objects, " +"it just orientates the selected ones.Otherwise, it will orientates all objects " +"in the current disk." msgstr "" "Seçilen nesneleri veya tüm nesneleri otomatik olarak yönlendirir. Seçilen " "nesneler varsa, yalnızca seçilenleri yönlendirir. Aksi takdirde, geçerli " @@ -8873,8 +8842,8 @@ msgstr "Ağ eklentisi güncellemesi" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." msgstr "" -"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek " -"için Tamam'a tıklayın." +"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek için " +"Tamam'a tıklayın." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" @@ -8931,8 +8900,7 @@ msgstr "Nozulu Onaylayın ve Güncelleyin" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN Bağlantısı Başarısız (Yazdırma dosyası gönderiliyor)" -msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +msgid "Step 1, please confirm Orca Slicer and your printer are in the same LAN." msgstr "" "Adım 1, lütfen Orca Slicer ile yazıcınızın aynı LAN'da olduğunu doğrulayın." @@ -8940,8 +8908,8 @@ msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Adım 2, aşağıdaki IP ve Erişim Kodu yazıcınızdaki gerçek değerlerden " -"farklıysa lütfen bunları düzeltin." +"Adım 2, aşağıdaki IP ve Erişim Kodu yazıcınızdaki gerçek değerlerden farklıysa " +"lütfen bunları düzeltin." msgid "IP" msgstr "IP" @@ -9001,8 +8969,8 @@ msgid "Updating successful" msgstr "Güncelleme başarılı" msgid "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Are you sure you want to update? This will take about 10 minutes. Do not turn " +"off the power while the printer is updating." msgstr "" "Güncellemek istediğinizden emin misiniz? Bu yaklaşık 10 dakika sürecektir. " "Yazıcı güncellenirken gücü kapatmayın." @@ -9021,10 +8989,9 @@ msgid "" "printing. Do you want to update now? You can also update later on printer or " "update next time starting Orca." msgstr "" -"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme " -"yapılması gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra " -"yazıcıda güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda " -"güncelleyebilirsiniz." +"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme yapılması " +"gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra yazıcıda " +"güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda güncelleyebilirsiniz." msgid "Extension Board" msgstr "Uzatma Kartı" @@ -9096,8 +9063,8 @@ msgid "Open G-code file:" msgstr "G kodu dosyasını açın:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"One object has empty initial layer and can't be printed. Please Cut the bottom " +"or enable supports." msgstr "" "Bir nesnenin başlangıç katmanı boş ve yazdırılamıyor. Lütfen alt kısmı kesin " "veya destekleri etkinleştirin." @@ -9182,8 +9149,8 @@ msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "%1% çizgi genişliği hesaplanamadı. \"%2%\" değeri alınamıyor " msgid "" -"Invalid spacing supplied to Flow::with_spacing(), check your layer height " -"and extrusion width" +"Invalid spacing supplied to Flow::with_spacing(), check your layer height and " +"extrusion width" msgstr "" "Flow::with_spacing()'e sağlanan geçersiz boşluk, kat yüksekliğinizi ve " "ekstrüzyon genişliğinizi kontrol edin" @@ -9316,8 +9283,8 @@ msgstr " dışlama alanına çok yakın ve çarpışmalara neden olacak.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " -"together. Otherwise, the extruder and nozzle may be blocked or damaged " -"during printing" +"together. Otherwise, the extruder and nozzle may be blocked or damaged during " +"printing" msgstr "" "Birlikte büyük sıcaklık farkına sahip birden fazla filament basılamaz. Aksi " "takdirde baskı sırasında ekstruder ve nozul tıkanabilir veya hasar görebilir" @@ -9333,8 +9300,8 @@ msgstr "" "modu desteklenmez." msgid "" -"Please select \"By object\" print sequence to print multiple objects in " -"spiral vase mode." +"Please select \"By object\" print sequence to print multiple objects in spiral " +"vase mode." msgstr "" "Birden fazla nesneyi spiral vazo modunda yazdırmak için lütfen \"Nesneye " "göre\" yazdırma sırasını seçin." @@ -9358,8 +9325,8 @@ msgstr "%1% nesnesi maksimum yapı hacmi yüksekliğini aşıyor." #, boost-format msgid "" -"While the object %1% itself fits the build volume, its last layer exceeds " -"the maximum build volume height." +"While the object %1% itself fits the build volume, its last layer exceeds the " +"maximum build volume height." msgstr "" "%1% nesnesinin kendisi yapı hacmine uysa da, son katmanı maksimum yapı hacmi " "yüksekliğini aşıyor." @@ -9375,9 +9342,9 @@ msgid "Variable layer height is not supported with Organic supports." msgstr "Değişken katman yüksekliği Organik desteklerle desteklenmez." msgid "" -"Different nozzle diameters and different filament diameters may not work " -"well when the prime tower is enabled. It's very experimental, so please " -"proceed with caution." +"Different nozzle diameters and different filament diameters may not work well " +"when the prime tower is enabled. It's very experimental, so please proceed " +"with caution." msgstr "" "Farklı püskürtme ucu çapları ve farklı filaman çapları, ana kule " "etkinleştirildiğinde iyi çalışmayabilir. Oldukça deneysel olduğundan lütfen " @@ -9408,11 +9375,11 @@ msgid "The prime tower is not supported in \"By object\" print." msgstr "Prime tower, \"Nesneye göre\" yazdırmada desteklenmez." msgid "" -"The prime tower is not supported when adaptive layer height is on. It " -"requires that all objects have the same layer height." +"The prime tower is not supported when adaptive layer height is on. It requires " +"that all objects have the same layer height." msgstr "" -"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm " -"nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir." +"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm nesnelerin " +"aynı katman yüksekliğine sahip olmasını gerektirir." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" @@ -9420,12 +9387,11 @@ msgstr "" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını " -"gerektirir" +"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir" msgid "" -"The prime tower requires that all objects are printed over the same number " -"of raft layers" +"The prime tower requires that all objects are printed over the same number of " +"raft layers" msgstr "" "Ana kule, tüm nesnelerin aynı sayıda sal katmanı üzerine yazdırılmasını " "gerektirir" @@ -9438,8 +9404,8 @@ msgstr "" "gerektirir." msgid "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"The prime tower is only supported if all objects have the same variable layer " +"height" msgstr "" "Prime tower yalnızca tüm nesnelerin aynı değişken katman yüksekliğine sahip " "olması durumunda desteklenir" @@ -9453,8 +9419,7 @@ msgstr "Çok büyük çizgi genişliği" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip " -"olmalıdır." +"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip olmalıdır." msgid "" "Organic support tree tip diameter must not be smaller than support material " @@ -9467,8 +9432,8 @@ msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." msgstr "" -"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 " -"katından daha küçük olamaz." +"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 katından " +"daha küçük olamaz." msgid "" "Organic support branch diameter must not be smaller than support tree tip " @@ -9485,34 +9450,32 @@ msgid "Layer height cannot exceed nozzle diameter" msgstr "Katman yüksekliği nozul çapını aşamaz" msgid "" -"Relative extruder addressing requires resetting the extruder position at " -"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"Relative extruder addressing requires resetting the extruder position at each " +"layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" -"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek " -"için her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. " -"Layer_gcode'a \"G92 E0\" ekleyin." +"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek için " +"her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. Layer_gcode'a " +"\"G92 E0\" ekleyin." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" -"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder " -"adreslemeyle uyumsuzdu." +"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder adreslemeyle " +"uyumsuzdu." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." msgstr "" -"Layer_gcode'da mutlak ekstruder adreslemeyle uyumlu olmayan \"G92 E0\" " -"bulundu." +"Layer_gcode'da mutlak ekstruder adreslemeyle uyumlu olmayan \"G92 E0\" bulundu." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Plaka %d: %s, %s filamentini desteklemiyor" -msgid "" -"Setting the jerk speed too low could lead to artifacts on curved surfaces" +msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" msgstr "" "Sarsıntı hızının çok düşük ayarlanması kavisli yüzeylerde bozulmalara neden " "olabilir" @@ -9522,8 +9485,8 @@ msgid "" "machine_max_jerk_y).\n" "Orca will automatically cap the jerk speed to ensure it doesn't surpass the " "printer's capabilities.\n" -"You can adjust the maximum jerk setting in your printer's configuration to " -"get higher speeds." +"You can adjust the maximum jerk setting in your printer's configuration to get " +"higher speeds." msgstr "" "Sarsıntı ayarı yazıcının maksimum sarsıntısını aşıyor (machine_max_jerk_x/" "machine_max_jerk_y).\n" @@ -9537,8 +9500,8 @@ msgid "" "(machine_max_acceleration_extruding).\n" "Orca will automatically cap the acceleration speed to ensure it doesn't " "surpass the printer's capabilities.\n" -"You can adjust the machine_max_acceleration_extruding value in your " -"printer's configuration to get higher speeds." +"You can adjust the machine_max_acceleration_extruding value in your printer's " +"configuration to get higher speeds." msgstr "" "Hızlanma ayarı yazıcının maksimum hızlanmasını aşıyor " "(machine_max_acceleration_extruding).\n" @@ -9550,8 +9513,8 @@ msgstr "" msgid "" "The travel acceleration setting exceeds the printer's maximum travel " "acceleration (machine_max_acceleration_travel).\n" -"Orca will automatically cap the travel acceleration speed to ensure it " -"doesn't surpass the printer's capabilities.\n" +"Orca will automatically cap the travel acceleration speed to ensure it doesn't " +"surpass the printer's capabilities.\n" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" @@ -9566,8 +9529,8 @@ msgid "" "Filament shrinkage will not be used because filament shrinkage for the used " "filaments differs significantly." msgstr "" -"Filament büzülmesi kullanılmayacaktır çünkü kullanılan filamentlerin " -"filament büzülmesi önemli ölçüde farklılık göstermektedir." +"Filament büzülmesi kullanılmayacaktır çünkü kullanılan filamentlerin filament " +"büzülmesi önemli ölçüde farklılık göstermektedir." msgid "Generating skirt & brim" msgstr "Etek ve kenar oluşturma" @@ -9606,8 +9569,7 @@ msgid "Elephant foot compensation" msgstr "Fil ayağı telafi oranı" msgid "" -"Shrink the initial layer on build plate to compensate for elephant foot " -"effect" +"Shrink the initial layer on build plate to compensate for elephant foot effect" msgstr "" "Fil ayağı etkisini telafi etmek için baskı plakasındaki ilk katmanı küçültün" @@ -9631,8 +9593,8 @@ msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"Her katman için dilimleme yüksekliği. Daha küçük katman yüksekliği, daha " -"doğru ve daha fazla baskı süresi anlamına gelir" +"Her katman için dilimleme yüksekliği. Daha küçük katman yüksekliği, daha doğru " +"ve daha fazla baskı süresi anlamına gelir" msgid "Printable height" msgstr "Yazdırılabilir yükseklik" @@ -9656,8 +9618,8 @@ msgstr "3. taraf yazdırma ana bilgisayarını kullanın" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" msgstr "" -"BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla " -"kontrol edilmesine izin ver" +"BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla kontrol " +"edilmesine izin ver" msgid "Hostname, IP or URL" msgstr "Ana bilgisayar adı, IP veya URL" @@ -9666,15 +9628,15 @@ msgid "" "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/" +"user name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" msgstr "" -"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/" +"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ü" @@ -9682,8 +9644,7 @@ msgstr "Cihaz kullanıcı arayüzü" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini " -"belirtin" +"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini belirtin" msgid "API Key / Password" msgstr "API Anahtarı / Şifre" @@ -9692,9 +9653,8 @@ msgid "" "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 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ı" @@ -9704,12 +9664,11 @@ msgstr "HTTPS CA Dosyası" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"in crt/pem format. If left blank, the default OS CA certificate repository is " +"used." msgstr "" -"HTTPS OctoPrint bağlantıları için crt/pem formatında özel CA sertifika " -"dosyası belirtilebilir. Boş bırakılırsa varsayılan OS CA sertifika deposu " -"kullanılır." +"HTTPS OctoPrint bağlantıları için crt/pem formatında özel CA sertifika dosyası " +"belirtilebilir. Boş bırakılırsa varsayılan OS CA sertifika deposu kullanılır." msgid "User" msgstr "Kullanıcı" @@ -9726,8 +9685,8 @@ msgid "" "certificates if connection fails." msgstr "" "Eksik veya çevrimdışı dağıtım noktaları olması durumunda HTTPS sertifikası " -"iptal kontrollerini göz ardı edin. Bağlantı başarısız olursa, kendinden " -"imzalı sertifikalar için bu seçeneğin etkinleştirilmesi istenebilir." +"iptal kontrollerini göz ardı edin. Bağlantı başarısız olursa, kendinden imzalı " +"sertifikalar için bu seçeneğin etkinleştirilmesi istenebilir." msgid "Names of presets related to the physical printer" msgstr "Fiziksel yazıcıyla ilgili ön ayarların adları" @@ -9751,15 +9710,15 @@ msgid "Avoid crossing wall - Max detour length" 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 " -"detour distance is large than this value. Detour length could be specified " -"either as an absolute value or as percentage (for example 50%) of a direct " -"travel path. Zero to disable" +"Maximum detour distance for avoiding crossing wall. Don't detour if the detour " +"distance is large than this value. Detour length could be specified either as " +"an absolute value or as percentage (for example 50%) of a direct travel path. " +"Zero to disable" msgstr "" -"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma " -"mesafesi bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer " -"olarak veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak " -"belirtilebilir. Devre dışı bırakmak için sıfır" +"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma mesafesi " +"bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer olarak " +"veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak belirtilebilir. " +"Devre dışı bırakmak için sıfır" msgid "mm or %" msgstr "mm veya %" @@ -9768,39 +9727,39 @@ msgid "Other layers" msgstr "Diğer katmanlar" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Cool Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Cool Plate" msgstr "" -"İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " -"Cool Plate üzerine yazdırmayı desteklemediği anlamına gelir" +"İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin Cool " +"Plate üzerine yazdırmayı desteklemediği anlamına gelir" msgid "°C" msgstr "°C" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Textured Cool Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Textured Cool Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 Değeri, filamentin " "Dokulu Soğuk Plaka üzerine yazdırmayı desteklemediği anlamına gelir." msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Engineering Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Engineering Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. Değer 0, filamentin " "Mühendislik Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the High Temp Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the High Temp Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Textured PEI Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Textured PEI Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 Değeri, filamentin " "Dokulu PEI Plaka üzerine yazdırmayı desteklemediği anlamına gelir" @@ -9815,6 +9774,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate SuperTack" msgstr "" +"İlk katmanın yatak sıcaklığı. 0 değeri, filamentin Soğuk Plaka SuperTack " +"üzerine yazdırmayı desteklemediği anlamına gelir" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -9827,8 +9788,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured Cool Plate" msgstr "" -"İlk katmanın yatak sıcaklığı. 0 Değeri, filamentin Dokulu Soğuk Plaka " -"üzerine yazdırmayı desteklemediği anlamına gelir." +"İlk katmanın yatak sıcaklığı. 0 Değeri, filamentin Dokulu Soğuk Plaka üzerine " +"yazdırmayı desteklemediği anlamına gelir." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -9899,57 +9860,55 @@ msgstr "Alt katman kalınlığı" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " "calculated by bottom shell layers is thinner than this value. This can avoid " -"having too thin shell when layer height is small. 0 means that this setting " -"is disabled and thickness of bottom shell is absolutely determined by bottom " +"having too thin shell when layer height is small. 0 means that this setting is " +"disabled and thickness of bottom shell is absolutely determined by bottom " "shell layers" msgstr "" -"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " -"yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " -"ayarın devre dışı olduğu ve alt kabuğun kalınlığının mutlaka alt kabuk " -"katmanları tarafından belirlendiği anlamına gelir" +"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " +"yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu ayarın " +"devre dışı olduğu ve alt kabuğun kalınlığının mutlaka alt kabuk katmanları " +"tarafından belirlendiği anlamına gelir" msgid "Apply gap fill" msgstr "Boşluk doldurmayı uygula" msgid "" -"Enables gap fill for the selected solid surfaces. The minimum gap length " -"that will be filled can be controlled from the filter out tiny gaps option " -"below.\n" +"Enables gap fill for the selected solid surfaces. The minimum gap length that " +"will be filled can be controlled from the filter out tiny gaps option below.\n" "\n" "Options:\n" -"1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces " -"for maximum strength\n" -"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces " -"only, balancing print speed, reducing potential over extrusion in the solid " -"infill and making sure the top and bottom surfaces have no pin hole gaps\n" +"1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces for " +"maximum strength\n" +"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only, " +"balancing print speed, reducing potential over extrusion in the solid infill " +"and making sure the top and bottom surfaces have no pin hole gaps\n" "3. Nowhere: Disables gap fill for all solid infill areas. \n" "\n" "Note that if using the classic perimeter generator, gap fill may also be " "generated between perimeters, if a full width line cannot fit between them. " "That perimeter gap fill is not controlled by this setting. \n" "\n" -"If you would like all gap fill, including the classic perimeter generated " -"one, removed, set the filter out tiny gaps value to a large number, like " -"999999. \n" +"If you would like all gap fill, including the classic perimeter generated one, " +"removed, set the filter out tiny gaps value to a large number, like 999999. \n" "\n" -"However this is not advised, as gap fill between perimeters is contributing " -"to the model's strength. For models where excessive gap fill is generated " -"between perimeters, a better option would be to switch to the arachne wall " -"generator and use this option to control whether the cosmetic top and bottom " -"surface gap fill is generated" +"However this is not advised, as gap fill between perimeters is contributing to " +"the model's strength. For models where excessive gap fill is generated between " +"perimeters, a better option would be to switch to the arachne wall generator " +"and use this option to control whether the cosmetic top and bottom surface gap " +"fill is generated" msgstr "" "Seçilen katı yüzeyler için boşluk doldurmayı etkinleştirir. Doldurulacak " "minimum boşluk uzunluğu aşağıdaki küçük boşlukları filtrele seçeneğinden " "kontrol edilebilir.\n" "\n" "Seçenekler:\n" -"1. Her Yerde: Maksimum dayanıklılık için üst, alt ve iç katı yüzeylere " -"boşluk dolgusu uygular\n" +"1. Her Yerde: Maksimum dayanıklılık için üst, alt ve iç katı yüzeylere boşluk " +"dolgusu uygular\n" "2. Üst ve Alt yüzeyler: Boşluk dolgusunu yalnızca üst ve alt yüzeylere " "uygulayarak baskı hızını dengeler, katı dolgudaki aşırı ekstrüzyon " -"potansiyelini azaltır ve üst ve alt yüzeylerde iğne deliği boşluğu " -"kalmamasını sağlar\n" +"potansiyelini azaltır ve üst ve alt yüzeylerde iğne deliği boşluğu kalmamasını " +"sağlar\n" "3. Hiçbir Yer: Tüm katı dolgu alanları için boşluk doldurmayı devre dışı " "bırakır. \n" "\n" @@ -9958,8 +9917,8 @@ msgstr "" "unutmayın. Bu çevre boşluğu dolgusu bu ayarla kontrol edilmez. \n" "\n" "Oluşturulan klasik çevre de dahil olmak üzere tüm boşluk doldurmanın " -"kaldırılmasını istiyorsanız, filtreyi küçük boşluklar dışında değerini " -"999999 gibi büyük bir sayıya ayarlayın. \n" +"kaldırılmasını istiyorsanız, filtreyi küçük boşluklar dışında değerini 999999 " +"gibi büyük bir sayıya ayarlayın. \n" "\n" "Ancak çevreler arasındaki boşluğun doldurulması modelin gücüne katkıda " "bulunduğundan bu önerilmez. Çevreler arasında aşırı boşluk dolgusunun " @@ -9980,19 +9939,19 @@ msgid "Force cooling for overhang and bridge" msgstr "Çıkıntı ve köprüler için soğutmayı zorla" msgid "" -"Enable this option to optimize part cooling fan speed for overhang and " -"bridge to get better cooling" +"Enable this option to optimize part cooling fan speed for overhang and bridge " +"to get better cooling" msgstr "" -"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma " -"fanı hızını optimize etmek amacıyla bu seçeneği etkinleştirin" +"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma fanı " +"hızını optimize etmek amacıyla bu seçeneği etkinleştirin" msgid "Fan speed for overhang" msgstr "Çıkıntılar için fan hızı" msgid "" -"Force part cooling fan to be this speed when printing bridge or overhang " -"wall which has large overhang degree. Forcing cooling for overhang and " -"bridge can get better quality for these part" +"Force part cooling fan to be this speed when printing bridge or overhang wall " +"which has large overhang degree. Forcing cooling for overhang and bridge can " +"get better quality for these part" msgstr "" "Çıkıntı derecesi büyük olan köprü veya çıkıntılı duvara baskı yaparken parça " "soğutma fanını bu hızda olmaya zorlayın. Çıkıntı ve köprü için soğutmayı " @@ -10004,14 +9963,14 @@ msgstr "Çıkıntı soğutması" #, c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " -"exceeds this value. Expressed as percentage which indicates how much width " -"of the line without support from lower layer. 0% means forcing cooling for " -"all outer wall no matter how much overhang degree" +"exceeds this value. Expressed as percentage which indicates how much width of " +"the line without support from lower layer. 0% means forcing cooling for all " +"outer wall no matter how much overhang degree" msgstr "" "Yazdırılan parçanın çıkıntı derecesi bu değeri aştığında soğutma fanını " "belirli bir hıza zorlar. Alt katmandan destek almadan çizginin ne kadar " -"genişlediğini gösteren yüzde olarak ifade edilir. 0, çıkıntı derecesi ne " -"kadar olursa olsun tüm dış duvar için soğutmayı zorlamak anlamına gelir" +"genişlediğini gösteren yüzde olarak ifade edilir. 0, çıkıntı derecesi ne kadar " +"olursa olsun tüm dış duvar için soğutmayı zorlamak anlamına gelir" msgid "Bridge infill direction" msgstr "Köprü dolgu açısı" @@ -10037,8 +9996,8 @@ msgid "Bridge flow ratio" msgstr "Köprülerde akış oranı" msgid "" -"Decrease this value slightly(for example 0.9) to reduce the amount of " -"material for bridge, to improve sag. \n" +"Decrease this value slightly(for example 0.9) to reduce the amount of material " +"for bridge, to improve sag. \n" "\n" "The actual bridge flow used is calculated by multiplying this value with the " "filament flow ratio, and if set, the object's flow ratio." @@ -10054,12 +10013,12 @@ msgstr "İç köprü akış oranı" 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.\n" +"first layer over sparse infill. Decrease this value slightly (for example 0.9) " +"to improve surface quality over sparse infill.\n" "\n" "The actual internal bridge flow used is calculated by multiplying this value " -"with the bridge flow ratio, the filament flow ratio, and if set, the " -"object's flow ratio." +"with the bridge flow ratio, the filament flow ratio, and if set, the object's " +"flow ratio." msgstr "" "Bu değer iç köprü katmanının kalınlığını belirler. Bu, seyrek dolgunun " "üzerindeki ilk katmandır. Seyrek dolguya göre yüzey kalitesini iyileştirmek " @@ -10075,8 +10034,8 @@ msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish. \n" "\n" -"The actual top surface flow used is calculated by multiplying this value " -"with the filament flow ratio, and if set, the object's flow ratio." +"The actual top surface flow used is calculated by multiplying this value with " +"the filament flow ratio, and if set, the object's flow ratio." msgstr "" "Bu faktör üst katı dolgu için malzeme miktarını etkiler. Pürüzsüz bir yüzey " "elde etmek için bunu biraz azaltabilirsiniz. \n" @@ -10104,8 +10063,8 @@ msgstr "Hassas duvar" msgid "" "Improve shell precision by adjusting outer wall spacing. This also improves " "layer consistency.\n" -"Note: This setting will only take effect if the wall sequence is configured " -"to Inner-Outer" +"Note: This setting will only take effect if the wall sequence is configured to " +"Inner-Outer" msgstr "" "Dış duvar aralığını ayarlayarak kabuk hassasiyetini artırın. Bu aynı zamanda " "katman tutarlılığını da artırır.\n" @@ -10130,17 +10089,17 @@ msgid "" "If a top surface has to be printed and it's partially covered by another " "layer, it won't be considered at a top layer where its width is below this " "value. This can be useful to not let the 'one perimeter on top' trigger on " -"surface that should be covered only by perimeters. This value can be a mm or " -"a % of the perimeter extrusion width.\n" +"surface that should be covered only by perimeters. This value can be a mm or a " +"% of the perimeter extrusion width.\n" "Warning: If enabled, artifacts can be created if you have some thin features " "on the next layer, like letters. Set this setting to 0 to remove these " "artifacts." msgstr "" -"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından " -"kaplıysa layer genişliği bu değerin altında olan bir üst katman olarak " +"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından kaplıysa " +"layer genişliği bu değerin altında olan bir üst katman olarak " "değerlendirilmeyecek. Yalnızca çevrelerle kaplanması gereken yüzeyde 'bir " -"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya " -"a % çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" +"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya a " +"% çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" "Uyarı: Etkinleştirilirse bir sonraki katmanda harfler gibi bazı ince " "özelliklerin olması durumunda yapay yapılar oluşturulabilir. Bu yapıları " "kaldırmak için bu ayarı 0 olarak ayarlayın." @@ -10159,11 +10118,11 @@ msgid "Extra perimeters on overhangs" msgstr "Çıkıntılarda ekstra çevre (perimeter)" msgid "" -"Create additional perimeter paths over steep overhangs and areas where " -"bridges cannot be anchored. " +"Create additional perimeter paths over steep overhangs and areas where bridges " +"cannot be anchored. " msgstr "" -"Dik çıkıntılar ve köprülerin sabitlenemediği alanlar üzerinde ek çevre " -"yolları (perimeter) oluşturun. " +"Dik çıkıntılar ve köprülerin sabitlenemediği alanlar üzerinde ek çevre yolları " +"(perimeter) oluşturun. " msgid "Reverse on even" msgstr "Çiftleri ters çevirin" @@ -10172,9 +10131,9 @@ msgid "Overhang reversal" msgstr "Çıkıntıyı tersine çevir" msgid "" -"Extrude perimeters that have a part over an overhang in the reverse " -"direction on even layers. This alternating pattern can drastically improve " -"steep overhangs.\n" +"Extrude perimeters that have a part over an overhang in the reverse direction " +"on even layers. This alternating pattern can drastically improve steep " +"overhangs.\n" "\n" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." @@ -10193,11 +10152,10 @@ msgid "" "Apply the reverse perimeters logic only on internal perimeters. \n" "\n" "This setting greatly reduces part stresses as they are now distributed in " -"alternating directions. This should reduce part warping while also " -"maintaining external wall quality. This feature can be very useful for warp " -"prone material, like ABS/ASA, and also for elastic filaments, like TPU and " -"Silk PLA. It can also help reduce warping on floating regions over " -"supports.\n" +"alternating directions. This should reduce part warping while also maintaining " +"external wall quality. This feature can be very useful for warp prone " +"material, like ABS/ASA, and also for elastic filaments, like TPU and Silk PLA. " +"It can also help reduce warping on floating regions over supports.\n" "\n" "For this setting to be the most effective, it is recommended to set the " "Reverse Threshold to 0 so that all internal walls print in alternating " @@ -10212,16 +10170,16 @@ msgstr "" "Ayrıca destekler üzerindeki yüzen bölgelerdeki bükülmenin azaltılmasına da " "yardımcı olabilir.\n" "\n" -"Bu ayarın en etkili olması için, Ters Eşiğin 0’a ayarlanması önerilir; " -"böylece tüm iç duvarlar, çıkıntı derecelerine bakılmaksızın eşit katmanlara " -"alternatif yönlerde yazdırılır." +"Bu ayarın en etkili olması için, Ters Eşiğin 0’a ayarlanması önerilir; böylece " +"tüm iç duvarlar, çıkıntı derecelerine bakılmaksızın eşit katmanlara alternatif " +"yönlerde yazdırılır." msgid "Bridge counterbore holes" msgstr "Köprü havşa delikleri" msgid "" -"This option creates bridges for counterbore holes, allowing them to be " -"printed without support. Available modes include:\n" +"This option creates bridges for counterbore holes, allowing them to be printed " +"without support. Available modes include:\n" "1. None: No bridge is created.\n" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." @@ -10229,8 +10187,7 @@ msgstr "" "Bu seçenek, havşa delikleri için köprüler oluşturarak bunların desteksiz " "yazdırılmasına olanak tanır. Mevcut modlar şunları içerir:\n" "1. Yok: Köprü oluşturulmaz.\n" -"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı " -"köprülenecek.\n" +"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı köprülenecek.\n" "3. Feda Katman: Tam bir feda köprü katmanı oluşturulur." msgid "Partially bridged" @@ -10247,12 +10204,17 @@ msgstr "Çıkıntıyı tersine çevirme eşiği" #, no-c-format, no-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" +"Number of mm the overhang need to be for the reversal to be considered useful. " +"Can be a % of the perimeter width.\n" "Value 0 enables reversal on every even layers regardless.\n" -"When Detect overhang wall is not enabled, this option is ignored and " -"reversal happens on every even layers regardless." +"When Detect overhang wall is not enabled, this option is ignored and reversal " +"happens on every even layers regardless." msgstr "" +"Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması gerekir. " +"Çevre genişliğinin %’si olabilir.\n" +"0 değeri ne olursa olsun her çift katmanda ters çevirmeyi mümkün kılar.\n" +"Çıkıntı duvarını algıla etkinleştirilmediğinde, bu seçenek göz ardı edilir ve " +"geri dönüş, her çift katmanda gerçekleşir." msgid "Classic mode" msgstr "Klasik mod" @@ -10274,16 +10236,16 @@ msgstr "Kıvrılmış çevre çizgilerinde yavaşlat" #, fuzzy, no-c-format, no-boost-format msgid "" "Enable this option to slow down printing in areas where perimeters may have " -"curled upwards.For example, additional slowdown will be applied when " -"printing overhangs on sharp corners like the front of the Benchy hull, " -"reducing curling which compounds over multiple layers.\n" +"curled upwards.For example, additional slowdown will be applied when printing " +"overhangs on sharp corners like the front of the Benchy hull, reducing curling " +"which compounds over multiple layers.\n" "\n" " It is generally recommended to have this option switched on unless your " "printer cooling is powerful enough or the print speed slow enough that " -"perimeter curling does not happen. If printing with a high external " -"perimeter speed, this parameter may introduce slight artifacts when slowing " -"down due to the large variance in print speeds. If you notice artifacts, " -"ensure your pressure advance is tuned correctly.\n" +"perimeter curling does not happen. If printing with a high external perimeter " +"speed, this parameter may introduce slight artifacts when slowing down due to " +"the large variance in print speeds. If you notice artifacts, ensure your " +"pressure advance is tuned correctly.\n" "\n" "Note: When this option is enabled, overhang perimeters are treated like " "overhangs, meaning the overhang speed is applied even if the overhanging " @@ -10300,14 +10262,14 @@ msgstr "" "kıvrılmasını önleyecek kadar yavaş olmadığı sürece, genellikle bu seçeneğin " "açık olması önerilir. Yüksek harici çevre hızıyla yazdırılıyorsa, bu " "parametre, yazdırma hızlarındaki büyük farklılıklar nedeniyle yavaşlama " -"sırasında hafif bozulmalara neden olabilir. Artefaktlar fark ederseniz " -"basınç ilerlemenizin doğru şekilde ayarlandığından emin olun.\n" +"sırasında hafif bozulmalara neden olabilir. Artefaktlar fark ederseniz basınç " +"ilerlemenizin doğru şekilde ayarlandığından emin olun.\n" "\n" "Not: Bu seçenek etkinleştirildiğinde, çıkıntı çevreleri çıkıntılar gibi ele " -"alınır; bu, çıkıntının çevresi bir köprünün parçası olsa bile çıkıntı " -"hızının uygulandığı anlamına gelir. Örneğin, çevreler 100% çıkıntılı " -"olduğunda ve onları alttan destekleyen bir duvar olmadığında 100% çıkıntı " -"hızı uygulanacaktır." +"alınır; bu, çıkıntının çevresi bir köprünün parçası olsa bile çıkıntı hızının " +"uygulandığı anlamına gelir. Örneğin, çevreler 100% çıkıntılı olduğunda ve " +"onları alttan destekleyen bir duvar olmadığında 100% çıkıntı hızı " +"uygulanacaktır." msgid "mm/s or %" msgstr "mm/s veya %" @@ -10327,8 +10289,8 @@ msgstr "" "\n" "Ayrıca, kıvrılmış çevreler için yavaşlama devre dışı bırakılırsa veya Klasik " "çıkıntı modu etkinleştirilirse, ister bir köprünün ister bir çıkıntının " -"parçası olsun, %13’ten daha az desteklenen çıkıntılı duvarların yazdırma " -"hızı olacaktır." +"parçası olsun, %13’ten daha az desteklenen çıkıntılı duvarların yazdırma hızı " +"olacaktır." msgid "mm/s" msgstr "mm/s" @@ -10337,8 +10299,8 @@ msgid "Internal" msgstr "Dahili" msgid "" -"Speed of internal bridges. If the value is expressed as a percentage, it " -"will be calculated based on the bridge_speed. Default value is 150%." +"Speed of internal bridges. If the value is expressed as a percentage, it will " +"be calculated based on the bridge_speed. Default value is 150%." msgstr "" "İç köprülerin hızı. Değer yüzde olarak ifade edilirse köprü hızına göre " "hesaplanacaktır. Varsayılan değer %150’dir." @@ -10353,8 +10315,8 @@ msgid "Brim type" msgstr "Kenar tipi" msgid "" -"This controls the generation of the brim at outer and/or inner side of " -"models. Auto means the brim width is analyzed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of models. " +"Auto means the brim width is analyzed and calculated automatically." msgstr "" "Bu, modellerin dış ve/veya iç kısmındaki Kenar oluşumunu kontrol eder. " "Otomatik, kenar genişliğinin otomatik olarak analiz edilip hesaplandığı " @@ -10439,13 +10401,13 @@ msgstr "Daha iyi katman soğutması için baskıyı yavaşlat" msgid "" "Enable this option to slow printing speed down to make the final layer time " "not shorter than the layer time threshold in \"Max fan speed threshold\", so " -"that layer can be cooled for longer time. This can improve the cooling " -"quality for needle and small details" +"that layer can be cooled for longer time. This can improve the cooling quality " +"for needle and small details" msgstr "" -"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi " -"eşiğinden kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için " -"bu seçeneği etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, " -"iğne ve küçük detaylar için soğutma kalitesini artırabilir" +"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi eşiğinden " +"kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için bu seçeneği " +"etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, iğne ve küçük " +"detaylar için soğutma kalitesini artırabilir" msgid "Normal printing" msgstr "Normal baskı" @@ -10454,8 +10416,7 @@ msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan " -"ivmesi" +"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan ivmesi" msgid "mm/s²" msgstr "mm/s²" @@ -10499,8 +10460,8 @@ msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı " -"plakası yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" +"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı plakası " +"yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" msgid "Don't support bridges" msgstr "Köprülerde destek olmasın" @@ -10509,16 +10470,16 @@ 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 "" -"Desteği çok büyük yapan tüm köprü alanını desteklemeyin. Bridge genellikle " -"çok uzun olmasa da destek olmadan doğrudan yazdırılabilir" +"Desteği çok büyük yapan tüm köprü alanını desteklemeyin. Bridge genellikle çok " +"uzun olmasa da destek olmadan doğrudan yazdırılabilir" msgid "Thick bridges" msgstr "Kalın köprüler" 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." +"look worse. If disabled, bridges look better but are reliable just for shorter " +"bridged distances." msgstr "" "Etkinleştirilirse köprüler daha güvenilir olur, daha uzun mesafeler arasında " "köprü kurabilir ancak daha kötü görünebilir. Devre dışı bırakıldığında " @@ -10530,8 +10491,8 @@ msgstr "Kalın iç köprüler" 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." +"have this feature turned on. However, consider turning it off if you are using " +"large nozzles." msgstr "" "Etkinleştirilirse kalın iç köprüler kullanılacaktır. Genellikle bu özelliğin " "açık olması önerilir. Ancak büyük nozul uçları kullanıyorsanız kapatmayı " @@ -10541,8 +10502,8 @@ msgid "Filter out small internal bridges (beta)" msgstr "Küçük iç köprüleri filtreleyin (beta)" msgid "" -"This option can help reducing pillowing on top surfaces in heavily slanted " -"or curved models.\n" +"This option can help reducing pillowing on top surfaces in heavily slanted or " +"curved models.\n" "\n" "By default, small internal bridges are filtered out and the internal solid " "infill is printed directly over the sparse infill. This works well in most " @@ -10561,12 +10522,12 @@ msgid "" "most cases.\n" "\n" "Limited filtering - creates internal bridges on heavily slanted surfaces, " -"while avoiding creating unnecessary internal bridges. This works well for " -"most difficult models.\n" +"while avoiding creating unnecessary internal bridges. This works well for most " +"difficult models.\n" "\n" -"No filtering - creates internal bridges on every potential internal " -"overhang. This option is useful for heavily slanted top surface models. " -"However, in most cases it creates too many unnecessary bridges." +"No filtering - creates internal bridges on every potential internal overhang. " +"This option is useful for heavily slanted top surface models. However, in most " +"cases it creates too many unnecessary bridges." msgstr "" "Bu seçenek, aşırı eğimli veya kavisli modellerde üst yüzeylerdeki " "yastıklamanın azaltılmasına yardımcı olabilir.\n" @@ -10718,8 +10679,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 "" -"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek " -"için iç duvar hızından daha yavaş olması kullanılır." +"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek için " +"iç duvar hızından daha yavaş olması kullanılır." msgid "Small perimeters" msgstr "Küçük çevre (perimeter)" @@ -10727,8 +10688,8 @@ msgstr "Küçük çevre (perimeter)" msgid "" "This separate setting will affect the speed of perimeters having radius <= " "small_perimeter_threshold (usually holes). If expressed as percentage (for " -"example: 80%) it will be calculated on the outer wall speed setting above. " -"Set to zero for auto." +"example: 80%) it will be calculated on the outer wall speed setting above. Set " +"to zero for auto." msgstr "" "Bu ayrı ayar, yarıçapı <= küçük_çevre_eşiği olan çevrelerin (genellikle " "delikler) hızını etkileyecektir. Yüzde olarak ifade edilirse (örneğin: %80), " @@ -10748,8 +10709,8 @@ msgstr "Duvar baskı sırası" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" "\n" -"Use Inner/Outer for best overhangs. This is because the overhanging walls " -"can adhere to a neighbouring perimeter while printing. However, this option " +"Use Inner/Outer for best overhangs. This is because the overhanging walls can " +"adhere to a neighbouring perimeter while printing. However, this option " "results in slightly reduced surface quality as the external perimeter is " "deformed by being squashed to the internal perimeter.\n" "\n" @@ -10759,13 +10720,12 @@ msgid "" "perimeter to print the external wall against. This option requires a minimum " "of 3 walls to be effective as it prints the internal walls from the 3rd " "perimeter onwards first, then the external perimeter and, finally, the first " -"internal perimeter. This option is recommended against the Outer/Inner " -"option in most cases. \n" +"internal perimeter. This option is recommended against the Outer/Inner option " +"in most cases. \n" "\n" "Use Outer/Inner for the same external wall quality and dimensional accuracy " "benefits of Inner/Outer/Inner option. However, the z seams will appear less " -"consistent as the first extrusion of a new layer starts on a visible " -"surface.\n" +"consistent as the first extrusion of a new layer starts on a visible surface.\n" "\n" " " msgstr "" @@ -10780,14 +10740,14 @@ msgstr "" "kalitesi ve boyutsal doğruluk için İç/Dış/İç seçeneğini kullanın. Ancak, dış " "duvarın üzerine baskı yapılacak bir iç çevre olmadığından sarkma performansı " "düşecektir. Bu seçenek, önce 3. çevreden itibaren iç duvarları, ardından dış " -"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması " -"için en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine " -"karşı önerilir. \n" +"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması için " +"en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine karşı " +"önerilir. \n" "\n" -"İç/Dış/İç seçeneğinin aynı dış duvar kalitesi ve boyutsal doğruluk " -"avantajları için Dış/İç seçeneğini kullanın. Bununla birlikte, yeni bir " -"katmanın ilk ekstrüzyonu görünür bir yüzey üzerinde başladığından z " -"dikişleri daha az tutarlı görünecektir.\n" +"İç/Dış/İç seçeneğinin aynı dış duvar kalitesi ve boyutsal doğruluk avantajları " +"için Dış/İç seçeneğini kullanın. Bununla birlikte, yeni bir katmanın ilk " +"ekstrüzyonu görünür bir yüzey üzerinde başladığından z dikişleri daha az " +"tutarlı görünecektir.\n" "\n" " " @@ -10809,18 +10769,17 @@ msgid "" "\n" "Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slightly push out " -"the printed walls where it is attached to them, resulting in a worse " -"external surface finish. It can also cause the infill to shine through the " -"external surfaces of the part." +"the printed walls where it is attached to them, resulting in a worse external " +"surface finish. It can also cause the infill to shine through the external " +"surfaces of the part." msgstr "" "Duvar/dolgu sırası. Onay kutusu işaretlenmediğinde duvarlar önce yazdırılır, " "bu çoğu durumda en iyi şekilde çalışır.\n" "\n" "Dolgunun önce yazdırılması, aşırı sarkmalarda yardımcı olabilir, çünkü " -"duvarlar komşu dolgulara yapışır. Ancak, dolgu duvarlara bağlı olduğu " -"yerlerde onları biraz dışarı iterek daha kötü bir dış yüzey bitişine neden " -"olabilir. Ayrıca, dolgunun parçanın dış yüzeylerinden parlamasına da sebep " -"olabilir." +"duvarlar komşu dolgulara yapışır. Ancak, dolgu duvarlara bağlı olduğu yerlerde " +"onları biraz dışarı iterek daha kötü bir dış yüzey bitişine neden olabilir. " +"Ayrıca, dolgunun parçanın dış yüzeylerinden parlamasına da sebep olabilir." msgid "Wall loop direction" msgstr "Duvar döngüsü yönü" @@ -10829,18 +10788,18 @@ msgid "" "The direction which the wall loops are extruded when looking down from the " "top.\n" "\n" -"By default all walls are extruded in counter-clockwise, unless Reverse on " -"even is enabled. Set this to any option other than Auto will force the wall " +"By default all walls are extruded in counter-clockwise, unless Reverse on even " +"is enabled. Set this to any option other than Auto will force the wall " "direction regardless of the Reverse on even.\n" "\n" "This option will be disabled if spiral vase mode is enabled." msgstr "" "Yukarıdan aşağıya bakıldığında duvar döngülerinin ekstrüzyona uğradığı yön.\n" "\n" -"Çift yönlü ters çevirme seçeneği etkinleştirilmediği sürece, varsayılan " -"olarak tüm duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik " -"dışında herhangi bir seçeneğe ayarlayın, Ters çevirmeden bağımsız olarak " -"duvar yönünü eşit olarak zorlayacaktır.\n" +"Çift yönlü ters çevirme seçeneği etkinleştirilmediği sürece, varsayılan olarak " +"tüm duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında " +"herhangi bir seçeneğe ayarlayın, Ters çevirmeden bağımsız olarak duvar yönünü " +"eşit olarak zorlayacaktır.\n" "\n" "Spiral vazo modu etkinse bu seçenek devre dışı bırakılacaktır." @@ -10867,8 +10826,8 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı " -"önlemek için kullanılır." +"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı önlemek " +"için kullanılır." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " @@ -10888,46 +10847,44 @@ msgstr "Minimum yatak ağı" msgid "" "This option sets the min point for the allowed bed mesh area. Due to the " -"probe's XY offset, most printers are unable to probe the entire bed. To " -"ensure the probe point does not go outside the bed area, the minimum and " -"maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (-99999, -99999), which " -"means there are no limits, thus allowing probing across the entire bed." +"probe's XY offset, most printers are unable to probe the entire bed. To ensure " +"the probe point does not go outside the bed area, the minimum and maximum " +"points of the bed mesh should be set appropriately. OrcaSlicer ensures that " +"adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " +"points. This information can usually be obtained from your printer " +"manufacturer. The default setting is (-99999, -99999), which means there are " +"no limits, thus allowing probing across the entire bed." msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob " -"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " -"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve " -"maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (-99999, -99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob XY " +"ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının yatak " +"alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(-99999, -99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına " +"gelir, dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Bed mesh max" msgstr "Maksimum yatak ağı" msgid "" "This option sets the max point for the allowed bed mesh area. Due to the " -"probe's XY offset, most printers are unable to probe the entire bed. To " -"ensure the probe point does not go outside the bed area, the minimum and " -"maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (99999, 99999), which " -"means there are no limits, thus allowing probing across the entire bed." +"probe's XY offset, most printers are unable to probe the entire bed. To ensure " +"the probe point does not go outside the bed area, the minimum and maximum " +"points of the bed mesh should be set appropriately. OrcaSlicer ensures that " +"adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " +"points. This information can usually be obtained from your printer " +"manufacturer. The default setting is (99999, 99999), which means there are no " +"limits, thus allowing probing across the entire bed." msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. " -"Probun XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob " -"noktasının yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum " -"ve maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (99999, 99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. Probun " +"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " +"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(99999, 99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına gelir, " +"dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Probe point distance" msgstr "Prob noktası mesafesi" @@ -10944,8 +10901,8 @@ msgid "Mesh margin" msgstr "Yatak ağı boşluğu" msgid "" -"This option determines the additional distance by which the adaptive bed " -"mesh area should be expanded in the XY directions." +"This option determines the additional distance by which the adaptive bed mesh " +"area should be expanded in the XY directions." msgstr "" "Bu seçenek, uyarlanabilir yatak ağ alanının XY yönlerinde genişletilmesi " "gereken ek mesafeyi belirler." @@ -10965,9 +10922,9 @@ msgstr "Akış oranı" msgid "" "The material may have volumetric change after switching between molten state " "and crystalline state. This setting changes all extrusion flow of this " -"filament in gcode proportionally. Recommended value range is between 0.95 " -"and 1.05. Maybe you can tune this value to get nice flat surface when there " -"has slight overflow or underflow" +"filament in gcode proportionally. Recommended value range is between 0.95 and " +"1.05. Maybe you can tune this value to get nice flat surface when there has " +"slight overflow or underflow" msgstr "" "Malzeme, erimiş hal ile kristal hal arasında geçiş yaptıktan sonra hacimsel " "değişime sahip olabilir. Bu ayar, bu filamentin gcode'daki tüm ekstrüzyon " @@ -10978,9 +10935,9 @@ msgstr "" msgid "" "The material may have volumetric change after switching between molten state " "and crystalline state. This setting changes all extrusion flow of this " -"filament in gcode proportionally. Recommended value range is between 0.95 " -"and 1.05. Maybe you can tune this value to get nice flat surface when there " -"has slight overflow or underflow. \n" +"filament in gcode proportionally. Recommended value range is between 0.95 and " +"1.05. Maybe you can tune this value to get nice flat surface when there has " +"slight overflow or underflow. \n" "\n" "The final object flow ratio is this value multiplied by the filament flow " "ratio." @@ -11012,19 +10969,19 @@ msgstr "Uyarlanabilir basınç ilerlemesini etkinleştir (beta)" #, no-c-format, no-boost-format msgid "" -"With increasing print speeds (and hence increasing volumetric flow through " -"the nozzle) and increasing accelerations, it has been observed that the " -"effective PA value typically decreases. This means that a single PA value is " -"not always 100% optimal for all features and a compromise value is usually " -"used that does not cause too much bulging on features with lower flow speed " -"and accelerations while also not causing gaps on faster features.\n" +"With increasing print speeds (and hence increasing volumetric flow through the " +"nozzle) and increasing accelerations, it has been observed that the effective " +"PA value typically decreases. This means that a single PA value is not always " +"100% optimal for all features and a compromise value is usually used that does " +"not cause too much bulging on features with lower flow speed and accelerations " +"while also not causing gaps on faster features.\n" "\n" -"This feature aims to address this limitation by modeling the response of " -"your printer's extrusion system depending on the volumetric flow speed and " +"This feature aims to address this limitation by modeling the response of your " +"printer's extrusion system depending on the volumetric flow speed and " "acceleration it is printing at. Internally, it generates a fitted model that " "can extrapolate the needed pressure advance for any given volumetric flow " -"speed and acceleration, which is then emitted to the printer depending on " -"the current print conditions.\n" +"speed and acceleration, which is then emitted to the printer depending on the " +"current print conditions.\n" "\n" "When enabled, the pressure advance value above is overridden. However, a " "reasonable default value above is strongly recommended to act as a fallback " @@ -11033,11 +10990,11 @@ msgid "" msgstr "" "Baskı hızlarının artmasıyla (ve dolayısıyla püskürtme ucunda hacimsel akışın " "artmasıyla) ve hızlanmaların artmasıyla, etkin basınç değerinin tipik olarak " -"azaldığı gözlemlenmiştir. Bu, tek bir basınç değerinin tüm özellikler için " -"her zaman 100% optimal olmadığı ve genellikle daha düşük akış hızına ve " -"ivmeye sahip özelliklerde çok fazla çıkıntıya neden olmayan ve aynı zamanda " -"daha hızlı özelliklerde boşluklara neden olmayan bir uzlaşma değerinin " -"kullanıldığı anlamına gelir.\n" +"azaldığı gözlemlenmiştir. Bu, tek bir basınç değerinin tüm özellikler için her " +"zaman 100% optimal olmadığı ve genellikle daha düşük akış hızına ve ivmeye " +"sahip özelliklerde çok fazla çıkıntıya neden olmayan ve aynı zamanda daha " +"hızlı özelliklerde boşluklara neden olmayan bir uzlaşma değerinin kullanıldığı " +"anlamına gelir.\n" "\n" "Bu özellik, yazıcınızın ekstrüzyon sisteminin tepkisini hacimsel akış hızına " "ve baskı yaptığı ivmeye bağlı olarak modelleyerek bu sınırlamayı gidermeyi " @@ -11063,27 +11020,27 @@ msgid "" "0.026,7.91,10000\n" "\n" "How to calibrate:\n" -"1. Run the pressure advance test for at least 3 speeds per acceleration " -"value. It is recommended that the test is run for at least the speed of the " -"external perimeters, the speed of the internal perimeters and the fastest " -"feature print speed in your profile (usually its the sparse or solid " -"infill). Then run them for the same speeds for the slowest and fastest print " -"accelerations,and no faster than the recommended maximum acceleration as " -"given by the Klipper input shaper.\n" +"1. Run the pressure advance test for at least 3 speeds per acceleration value. " +"It is recommended that the test is run for at least the speed of the external " +"perimeters, the speed of the internal perimeters and the fastest feature print " +"speed in your profile (usually its the sparse or solid infill). Then run them " +"for the same speeds for the slowest and fastest print accelerations,and no " +"faster than the recommended maximum acceleration as given by the Klipper input " +"shaper.\n" "2. Take note of the optimal PA value for each volumetric flow speed and " "acceleration. You can find the flow number by selecting flow from the color " -"scheme drop down and move the horizontal slider over the PA pattern lines. " -"The number should be visible at the bottom of the page. The ideal PA value " -"should be decreasing the higher the volumetric flow is. If it is not, " -"confirm that your extruder is functioning correctly.The slower and with less " -"acceleration you print, the larger the range of acceptable PA values. If no " -"difference is visible, use the PA value from the faster test.3. Enter the " -"triplets of PA values, Flow and Accelerations in the text box here and save " -"your filament profile\n" +"scheme drop down and move the horizontal slider over the PA pattern lines. The " +"number should be visible at the bottom of the page. The ideal PA value should " +"be decreasing the higher the volumetric flow is. If it is not, confirm that " +"your extruder is functioning correctly.The slower and with less acceleration " +"you print, the larger the range of acceptable PA values. If no difference is " +"visible, use the PA value from the faster test.3. Enter the triplets of PA " +"values, Flow and Accelerations in the text box here and save your filament " +"profile\n" "\n" msgstr "" -"Basınç ilerlemesi (basınç) değerlerinin setlerini, hacimsel akış hızlarını " -"ve ölçüldükleri ivmeleri virgülle ayırarak ekleyin. Satır başına bir değer " +"Basınç ilerlemesi (basınç) değerlerinin setlerini, hacimsel akış hızlarını ve " +"ölçüldükleri ivmeleri virgülle ayırarak ekleyin. Satır başına bir değer " "kümesi. Örneğin\n" "0.04,3.96,3000\n" "0,033,3,96,10000\n" @@ -11091,32 +11048,30 @@ msgstr "" "0.026,7.91,10000\n" "\n" "Nasıl kalibre edilir:\n" -"1. Hızlanma değeri başına en az 3 hız için basınç ilerleme testini " -"çalıştırın. Testin en azından dış çevrelerin hızı, iç çevrelerin hızı ve " -"profilinizdeki en hızlı özellik yazdırma hızı (genellikle seyrek veya katı " -"dolgudur) için çalıştırılması önerilir. Daha sonra bunları, en yavaş ve en " -"hızlı yazdırma hızlanmaları için aynı hızlarda çalıştırın ve klipper giriş " -"şekillendirici tarafından verilen önerilen maksimum hızlanmadan daha hızlı " -"değil.\n" +"1. Hızlanma değeri başına en az 3 hız için basınç ilerleme testini çalıştırın. " +"Testin en azından dış çevrelerin hızı, iç çevrelerin hızı ve profilinizdeki en " +"hızlı özellik yazdırma hızı (genellikle seyrek veya katı dolgudur) için " +"çalıştırılması önerilir. Daha sonra bunları, en yavaş ve en hızlı yazdırma " +"hızlanmaları için aynı hızlarda çalıştırın ve klipper giriş şekillendirici " +"tarafından verilen önerilen maksimum hızlanmadan daha hızlı değil.\n" "2. Her hacimsel akış hızı ve ivme için en uygun PA değerini not edin. Renk " -"şeması açılır menüsünden akışı seçerek ve yatay kaydırıcıyı PA desen " -"çizgileri üzerinde hareket ettirerek akış numarasını bulabilirsiniz. Numara " -"sayfanın altında görünmelidir. İdeal PA değeri hacimsel akış ne kadar yüksek " -"olursa o kadar azalmalıdır. Değilse, ekstruderinizin doğru şekilde " -"çalıştığını doğrulayın. Ne kadar yavaş ve daha az ivmeyle yazdırırsanız, " -"kabul edilebilir PA değerleri aralığı o kadar geniş olur. Hiçbir fark " -"görünmüyorsa, daha hızlı olan testteki PA değerini kullanın.3. Buradaki " -"metin kutusuna PA değerleri, Akış ve Hızlanma üçlüsünü girin ve filament " -"profilinizi kaydedin\n" +"şeması açılır menüsünden akışı seçerek ve yatay kaydırıcıyı PA desen çizgileri " +"üzerinde hareket ettirerek akış numarasını bulabilirsiniz. Numara sayfanın " +"altında görünmelidir. İdeal PA değeri hacimsel akış ne kadar yüksek olursa o " +"kadar azalmalıdır. Değilse, ekstruderinizin doğru şekilde çalıştığını " +"doğrulayın. Ne kadar yavaş ve daha az ivmeyle yazdırırsanız, kabul edilebilir " +"PA değerleri aralığı o kadar geniş olur. Hiçbir fark görünmüyorsa, daha hızlı " +"olan testteki PA değerini kullanın.3. Buradaki metin kutusuna PA değerleri, " +"Akış ve Hızlanma üçlüsünü girin ve filament profilinizi kaydedin\n" msgid "Enable adaptive pressure advance for overhangs (beta)" msgstr "Çıkıntılar için uyarlanabilir basınç ilerlemesini etkinleştirin (beta)" msgid "" -"Enable adaptive PA for overhangs as well as when flow changes within the " -"same feature. This is an experimental option, as if the PA profile is not " -"set accurately, it will cause uniformity issues on the external surfaces " -"before and after overhangs.\n" +"Enable adaptive PA for overhangs as well as when flow changes within the same " +"feature. This is an experimental option, as if the PA profile is not set " +"accurately, it will cause uniformity issues on the external surfaces before " +"and after overhangs.\n" msgstr "" "Aynı özellik içinde akış değiştiğinde ve çıkıntılar için uyarlanabilir PA’yı " "etkinleştirin. Bu deneysel bir seçenektir, sanki basınç profili doğru " @@ -11129,32 +11084,31 @@ msgstr "Köprüler için basınç ilerlemesi" msgid "" "Pressure advance value for bridges. Set to 0 to disable. \n" "\n" -" A lower PA value when printing bridges helps reduce the appearance of " -"slight under extrusion immediately after bridges. This is caused by the " -"pressure drop in the nozzle when printing in the air and a lower PA helps " -"counteract this." +" A lower PA value when printing bridges helps reduce the appearance of slight " +"under extrusion immediately after bridges. This is caused by the pressure drop " +"in the nozzle when printing in the air and a lower PA helps counteract this." msgstr "" "Köprüler için basınç ilerleme değeri. Devre dışı bırakmak için 0’a " "ayarlayın. \n" "\n" " Köprüleri yazdırırken daha düşük bir basınç değeri, köprülerden hemen sonra " -"hafif ekstrüzyon görünümünün azaltılmasına yardımcı olur. Bunun nedeni, " -"havada yazdırma sırasında nozuldaki basınç düşüşüdür ve daha düşük bir " -"basınç, bunu önlemeye yardımcı olur." +"hafif ekstrüzyon görünümünün azaltılmasına yardımcı olur. Bunun nedeni, havada " +"yazdırma sırasında nozuldaki basınç düşüşüdür ve daha düşük bir basınç, bunu " +"önlemeye yardımcı olur." msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Default line width if other line widths are set to 0. If expressed as a %, it " +"will be computed over the nozzle diameter." msgstr "" -"Diğer çizgi genişlikleri 0'a ayarlanmışsa varsayılan çizgi genişliği. % " -"olarak ifade edilirse nozul çapı üzerinden hesaplanacaktır." +"Diğer çizgi genişlikleri 0'a ayarlanmışsa varsayılan çizgi genişliği. % olarak " +"ifade edilirse nozul çapı üzerinden hesaplanacaktır." msgid "Keep fan always on" msgstr "Fanı her zaman açık tut" msgid "" -"If enable this setting, part cooling fan will never be stopped and will run " -"at least at minimum speed to reduce the frequency of starting and stopping" +"If enable this setting, part cooling fan will never be stopped and will run at " +"least at minimum speed to reduce the frequency of starting and stopping" msgstr "" "Bu ayarı etkinleştirirseniz, parça soğutma fanı hiçbir zaman durdurulmayacak " "ve başlatma ve durdurma sıklığını azaltmak için en azından minimum hızda " @@ -11190,9 +11144,9 @@ msgid "Layer time" msgstr "Katman süresi" msgid "" -"Part cooling fan will be enabled for layers of which estimated time is " -"shorter than this value. Fan speed is interpolated between the minimum and " -"maximum fan speeds according to layer printing time" +"Part cooling fan will be enabled for layers of which estimated time is shorter " +"than this value. Fan speed is interpolated between the minimum and maximum fan " +"speeds according to layer printing time" msgstr "" "Tahmini süresi bu değerden kısa olan katlarda parça soğutma fanı devreye " "girecektir. Fan hızı, katman yazdırma süresine göre minimum ve maksimum fan " @@ -11221,9 +11175,9 @@ msgstr "" "kontrol edilmediği anlamına gelir." msgid "" -"This setting stands for how much volume of filament can be melted and " -"extruded per second. Printing speed is limited by max volumetric speed, in " -"case of too high and unreasonable speed setting. Can't be zero" +"This setting stands for how much volume of filament can be melted and extruded " +"per second. Printing speed is limited by max volumetric speed, in case of too " +"high and unreasonable speed setting. Can't be zero" msgstr "" "Bu ayar, saniyede ne kadar miktarda filamentin eritilip ekstrude " "edilebileceğini gösterir. Çok yüksek ve makul olmayan hız ayarı durumunda, " @@ -11241,34 +11195,34 @@ msgid "" "machines, it's typically 0. For statistics only" msgstr "" "Filamenti değiştirdiğinizde yeni filament yükleme zamanı. Genellikle tek " -"ekstruderli çok malzemeli makineler için geçerlidir. Araç değiştiriciler " -"veya çok takımlı makineler için bu değer genellikle 0’dır. Yalnızca " -"istatistikler için." +"ekstruderli çok malzemeli makineler için geçerlidir. Araç değiştiriciler veya " +"çok takımlı makineler için bu değer genellikle 0’dır. Yalnızca istatistikler " +"için." msgid "Filament unload time" msgstr "Filament boşaltma süresi" msgid "" -"Time to unload old filament when switch filament. It's usually applicable " -"for single-extruder multi-material machines. For tool changers or multi-tool " +"Time to unload old filament when switch filament. It's usually applicable for " +"single-extruder multi-material machines. For tool changers or multi-tool " "machines, it's typically 0. For statistics only" msgstr "" "Filamenti değiştirdiğinizde eski filamenti boşaltma zamanı. Genellikle tek " -"ekstruderli çok malzemeli makineler için geçerlidir. Araç değiştiriciler " -"veya çok takımlı makineler için bu değer genellikle 0’dır. Yalnızca " -"istatistikler için." +"ekstruderli çok malzemeli makineler için geçerlidir. Araç değiştiriciler veya " +"çok takımlı makineler için bu değer genellikle 0’dır. Yalnızca istatistikler " +"için." msgid "Tool change time" msgstr "Takım değiştirme süresi" msgid "" -"Time taken to switch tools. It's usually applicable for tool changers or " -"multi-tool machines. For single-extruder multi-material machines, it's " -"typically 0. For statistics only" +"Time taken to switch tools. It's usually applicable for tool changers or multi-" +"tool machines. For single-extruder multi-material machines, it's typically 0. " +"For statistics only" msgstr "" -"Araç değiştirmek için harcanan zaman. Genellikle araç değiştiriciler veya " -"çok araçlı makineler için geçerlidir. Tek ekstruderli çok malzemeli " -"makineler için bu değer genellikle 0’dır. Yalnızca istatistikler için." +"Araç değiştirmek için harcanan zaman. Genellikle araç değiştiriciler veya çok " +"araçlı makineler için geçerlidir. Tek ekstruderli çok malzemeli makineler için " +"bu değer genellikle 0’dır. Yalnızca istatistikler için." msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " @@ -11284,16 +11238,16 @@ msgid "" "Pellet flow coefficient is empirically derived and allows for volume " "calculation for pellet printers.\n" "\n" -"Internally it is converted to filament_diameter. All other volume " -"calculations remain the same.\n" +"Internally it is converted to filament_diameter. All other volume calculations " +"remain the same.\n" "\n" "filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgstr "" "Pelet akış katsayısı ampirik olarak türetilir ve pelet yazıcıları için hacim " "hesaplamasına olanak tanır.\n" "\n" -"Dahili olarak filament_çapına dönüştürülür. Diğer tüm hacim hesaplamaları " -"aynı kalır.\n" +"Dahili olarak filament_çapına dönüştürülür. Diğer tüm hacim hesaplamaları aynı " +"kalır.\n" "\n" "filament_çapı = sqrt( (4 * pellet_akış_katsayısı) / PI )" @@ -11308,11 +11262,11 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" -"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine " -"94 mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " +"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine 94 " +"mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " "Yalnızca çevre için kullanılan filament dikkate alınır.\n" -"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli " -"boşluk bıraktığınızdan emin olun." +"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli boşluk " +"bıraktığınızdan emin olun." msgid "Shrinkage (Z)" msgstr "Büzülme (Z)" @@ -11323,8 +11277,8 @@ msgid "" "if you measure 94mm instead of 100mm). The part will be scaled in Z to " "compensate." msgstr "" -"Filamentin soğuduktan sonra alacağı çekme yüzdesini girin (100 mm yerine 94 " -"mm ölçerseniz %94). Telafi etmek için parça Z olarak ölçeklendirilecektir." +"Filamentin soğuduktan sonra alacağı çekme yüzdesini girin (100 mm yerine 94 mm " +"ölçerseniz %94). Telafi etmek için parça Z olarak ölçeklendirilecektir." msgid "Loading speed" msgstr "Yükleme hızı" @@ -11372,11 +11326,11 @@ msgid "Number of cooling moves" msgstr "Soğutma hareketi sayısı" msgid "" -"Filament is cooled by being moved back and forth in the cooling tubes. " -"Specify desired number of these moves." +"Filament is cooled by being moved back and forth in the cooling tubes. Specify " +"desired number of these moves." msgstr "" -"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. " -"Bu sayısını belirtin." +"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. Bu " +"sayısını belirtin." msgid "Stamping loading speed" msgstr "Damgalama yükleme hızı" @@ -11389,8 +11343,8 @@ msgstr "Soğutma tüpünün merkezinden ölçülen damgalama mesafesi" msgid "" "If set to nonzero value, filament is moved toward the nozzle between the " -"individual cooling moves (\"stamping\"). This option configures how long " -"this movement should be before the filament is retracted again." +"individual cooling moves (\"stamping\"). This option configures how long this " +"movement should be before the filament is retracted again." msgstr "" "Sıfırdan farklı bir değere ayarlanırsa filaman bireysel soğutma hareketleri " "arasında (“damgalama”) nüzule doğru hareket ettirilir. Bu seçenek, filamanın " @@ -11409,16 +11363,15 @@ msgstr "Silme kulesi üzerinde minimum boşaltım" 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, Orca Slicer will always prime this amount of material into the wipe " -"tower to produce successive infill or sacrificial object extrusions reliably." +"stable. 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." 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 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." +"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" msgstr "Son soğutma hareketi hızı" @@ -11440,10 +11393,10 @@ msgid "Enable ramming for multi-tool setups" msgstr "Çoklu araç kurulumları için sıkıştırmayı etkinleştirin" msgid "" -"Perform ramming when using multi-tool printer (i.e. when the 'Single " -"Extruder Multimaterial' in Printer Settings is unchecked). When checked, a " -"small amount of filament is rapidly extruded on the wipe tower just before " -"the toolchange. This option is only used when the wipe tower is enabled." +"Perform ramming when using multi-tool printer (i.e. when the 'Single Extruder " +"Multimaterial' in Printer Settings is unchecked). When checked, a small amount " +"of filament is rapidly extruded on the wipe tower just before the toolchange. " +"This option is only used when the wipe tower is enabled." msgstr "" "Çok takımlı yazıcı kullanırken sıkıştırma gerçekleştirin (yani Yazıcı " "Ayarları'ndaki 'Tek Ekstruder Çoklu Malzeme' işaretli olmadığında). " @@ -11478,17 +11431,14 @@ msgstr "Filament malzeme türü" msgid "Soluble material" msgstr "Çözünür malzeme" -msgid "" -"Soluble material is commonly used to print support and support interface" +msgid "Soluble material is commonly used to print support and support interface" msgstr "" -"Çözünür malzeme genellikle destek ve destek arayüzünü yazdırmak için " -"kullanılır" +"Çözünür malzeme genellikle destek ve destek arayüzünü yazdırmak için kullanılır" msgid "Support material" msgstr "Destek malzemesi" -msgid "" -"Support material is commonly used to print support and support interface" +msgid "Support material is commonly used to print support and support interface" msgstr "" "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için " "kullanılır" @@ -11497,9 +11447,9 @@ msgid "Softening temperature" msgstr "Yumuşama sıcaklığı" msgid "" -"The material softens at this temperature, so when the bed temperature is " -"equal to or greater than it, it's highly recommended to open the front door " -"and/or remove the upper glass to avoid clogging." +"The material softens at this temperature, so when the bed temperature is equal " +"to or greater than it, it's highly recommended to open the front door and/or " +"remove the upper glass to avoid clogging." msgstr "" "Filament bu sıcaklıkta yumuşar, bu nedenle yatak sıcaklığı bununla eşit veya " "daha yüksekse, tıkanmaları önlemek için ön kapağı açmanız ve/veya üst camı " @@ -11527,8 +11477,8 @@ msgid "Sparse infill direction" msgstr "Seyrek dolgu yönü" msgid "" -"Angle for sparse infill pattern, which controls the start or main direction " -"of line" +"Angle for sparse infill pattern, which controls the start or main direction of " +"line" msgstr "" "Hattın başlangıcını veya ana yönünü kontrol eden seyrek dolgu deseni açısı" @@ -11536,10 +11486,9 @@ msgid "Solid infill direction" msgstr "Katı dolgu yönü" msgid "" -"Angle for solid infill pattern, which controls the start or main direction " -"of line" -msgstr "" -"Hattın başlangıcını veya ana yönünü kontrol eden katı dolgu deseni açısı" +"Angle for solid infill pattern, which controls the start or main direction of " +"line" +msgstr "Hattın başlangıcını veya ana yönünü kontrol eden katı dolgu deseni açısı" msgid "Rotate solid infill direction" msgstr "Katı dolgu yönünü döndür" @@ -11555,8 +11504,8 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya " -"dönüştürür ve iç katı dolgu modeli kullanılacaktır" +"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür " +"ve iç katı dolgu modeli kullanılacaktır" msgid "Sparse infill pattern" msgstr "Dolgu deseni" @@ -11603,24 +11552,23 @@ 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. 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" +"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. 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 " +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon 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 " "sınırlıdır, ancak çapa_uzunluk_max'tan uzun olamaz.\n" -"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için " -"bu parametreyi sıfıra ayarlayın." +"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için bu " +"parametreyi sıfıra ayarlayın." msgid "0 (no open anchors)" msgstr "0 (açık bağlantı yok)" @@ -11634,24 +11582,23 @@ 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. 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" +"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. 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 " -"ancak bu parametreden daha uzun olamaz.\n" -"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 " -"ve 0 ile aynı sonucu oluşturmalıdır." +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon 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 ancak bu " +"parametreden daha uzun olamaz.\n" +"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 ve " +"0 ile aynı sonucu oluşturmalıdır." msgid "0 (Simple connect)" msgstr "0 (Basit bağlantı)" @@ -11669,26 +11616,26 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması " -"üst yüzey kalitesini iyileştirebilir" +"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması üst " +"yüzey kalitesini iyileştirebilir" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" "Dış duvarın hızlanması. Daha düşük bir değer kullanmak kaliteyi artırabilir" 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." +"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 "" -"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), " -"dış duvar ivmesine göre hesaplanacaktır." +"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), dış " +"duvar ivmesine göre hesaplanacaktır." msgid "mm/s² or %" msgstr "mm/s² veya %" 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." +"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 "" "Seyrek dolgunun hızlandırılması. Değer yüzde olarak ifade edilirse (örn. " "%100), varsayılan ivmeye göre hesaplanacaktır." @@ -11718,10 +11665,8 @@ msgid "accel_to_decel" msgstr "Accel_to_decel" #, c-format, boost-format -msgid "" -"Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" -msgstr "" -"Klipper'ın max_accel_to_decel değeri ivmenin bu %%'sine göre ayarlanacak" +msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" +msgstr "Klipper'ın max_accel_to_decel değeri ivmenin bu %%'sine göre ayarlanacak" msgid "Jerk of outer walls" msgstr "Dış duvar JERK değeri" @@ -11742,8 +11687,8 @@ msgid "Jerk for travel" msgstr "Seyahat için JERK değeri" msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +"Line width of initial layer. If expressed as a %, it will be computed over the " +"nozzle diameter." msgstr "" "İlk katmanın çizgi genişliği. % olarak ifade edilirse Nozul çapı üzerinden " "hesaplanacaktır." @@ -11752,8 +11697,8 @@ msgid "Initial layer height" msgstr "Başlangıç katman yüksekliği" msgid "" -"Height of initial layer. Making initial layer height to be thick slightly " -"can improve build plate adhesion" +"Height of initial layer. Making initial layer height to be thick slightly can " +"improve build plate adhesion" msgstr "" "İlk katmanın yüksekliği. İlk katman yüksekliğini biraz kalın yapmak, baskı " "plakasının yapışmasını iyileştirebilir" @@ -11794,17 +11739,16 @@ msgstr "Maksimum fan hızı" 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 "" "Fan hızı, \"close_fan_the_first_x_layers\" katmanında sıfırdan " "\"ful_fan_speed_layer\" katmanında maksimuma doğrusal olarak artırılacaktır. " -"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden " -"düşükse göz ardı edilecektir; bu durumda fan, " -"\"close_fan_the_first_x_layers\" + 1 katmanında izin verilen maksimum hızda " -"çalışacaktır." +"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden düşükse " +"göz ardı edilecektir; bu durumda fan, \"close_fan_the_first_x_layers\" + 1 " +"katmanında izin verilen maksimum hızda çalışacaktır." msgid "layer" msgstr "katman" @@ -11813,8 +11757,8 @@ msgid "Support interface fan speed" msgstr "Destekler için fan hızı" msgid "" -"This fan speed is enforced during all support interfaces, to be able to " -"weaken their bonding with a high fan speed.\n" +"This fan speed is enforced during all support interfaces, to be able to weaken " +"their bonding with a high fan speed.\n" "Set to -1 to disable this override.\n" "Can only be overridden by disable_fan_first_layers." msgstr "" @@ -11824,8 +11768,8 @@ msgstr "" "Yalnızca devre dışı_fan_first_layers tarafından geçersiz kılınabilir." msgid "" -"Randomly jitter while printing the wall, so that the surface has a rough " -"look. This setting controls the fuzzy position" +"Randomly jitter while printing the wall, so that the surface has a rough look. " +"This setting controls the fuzzy position" 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" @@ -11853,10 +11797,8 @@ msgid "Fuzzy skin point distance" msgstr "Bulanık kaplama noktası mesafesi" msgid "" -"The average distance between the random points introduced on each line " -"segment" -msgstr "" -"Her çizgi parçasına eklenen rastgele noktalar arasındaki ortalama mesafe" +"The average distance between the random points introduced on each line segment" +msgstr "Her çizgi parçasına eklenen rastgele noktalar arasındaki ortalama mesafe" msgid "Apply fuzzy skin to first layer" msgstr "Bulanık cildi ilk katmana uygulayın" @@ -11871,9 +11813,9 @@ msgid "Layers and Perimeters" msgstr "Katmanlar ve Çevreler" msgid "" -"Don't print gap fill with a length is smaller than the threshold specified " -"(in mm). This setting applies to top, bottom and solid infill and, if using " -"the classic perimeter generator, to wall gap fill. " +"Don't print gap fill with a length is smaller than the threshold specified (in " +"mm). This setting applies to top, bottom and solid infill and, if using the " +"classic perimeter generator, to wall gap fill. " msgstr "" "Belirtilen eşikten (mm cinsinden) daha küçük bir uzunluğa sahip boşluk " "dolgusunu yazdırmayın. Bu ayar üst, alt ve katı dolgu için ve klasik çevre " @@ -11883,21 +11825,21 @@ msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"Boşluk doldurma hızı. Boşluk genellikle düzensiz çizgi genişliğine sahiptir " -"ve daha yavaş yazdırılmalıdır" +"Boşluk doldurma hızı. Boşluk genellikle düzensiz çizgi genişliğine sahiptir ve " +"daha yavaş yazdırılmalıdır" msgid "Precise Z height" msgstr "Hassas z yüksekliği" msgid "" "Enable this to get precise z height of object after slicing. It will get the " -"precise object height by fine-tuning the layer heights of the last few " -"layers. Note that this is an experimental parameter." +"precise object height by fine-tuning the layer heights of the last few layers. " +"Note that this is an experimental parameter." msgstr "" "Dilimlemeden sonra nesnenin kesin z yüksekliğini elde etmek için bunu " "etkinleştirin. Son birkaç katmanın katman yüksekliklerine ince ayar yaparak " -"kesin nesne yüksekliğini elde edecektir. Bunun deneysel bir parametre " -"olduğunu unutmayın." +"kesin nesne yüksekliğini elde edecektir. Bunun deneysel bir parametre olduğunu " +"unutmayın." msgid "Arc fitting" msgstr "Ark" @@ -11906,11 +11848,11 @@ msgid "" "Enable this to get a G-code file which has G2 and G3 moves. The fitting " "tolerance is same as the resolution. \n" "\n" -"Note: For Klipper machines, this option is recommended to be disabled. " -"Klipper does not benefit from arc commands as these are split again into " -"line segments by the firmware. This results in a reduction in surface " -"quality as line segments are converted to arcs by the slicer and then back " -"to line segments by the firmware." +"Note: For Klipper machines, this option is recommended to be disabled. Klipper " +"does not benefit from arc commands as these are split again into line segments " +"by the firmware. This results in a reduction in surface quality as line " +"segments are converted to arcs by the slicer and then back to line segments by " +"the firmware." msgstr "" "G2 ve G3 hareketlerine sahip bir G kodu dosyası elde etmek için bunu " "etkinleştirin. Montaj toleransı çözünürlükle aynıdır. \n" @@ -11919,23 +11861,20 @@ msgstr "" "Klipper, yazılım tarafından tekrar çizgi bölümlerine bölündüğü için yay " "komutlarından faydalanmaz. Bu, çizgi bölümlerinin dilimleyici tarafından " "yaylara dönüştürülmesi ve ardından donanım yazılımı tarafından tekrar çizgi " -"bölümlerine dönüştürülmesi nedeniyle yüzey kalitesinde bir azalmaya neden " -"olur." +"bölümlerine dönüştürülmesi nedeniyle yüzey kalitesinde bir azalmaya neden olur." msgid "Add line number" msgstr "Satır numarası ekle" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" msgstr "" -"Her G Kodu satırının başına satır numarası (Nx) eklemek için bunu " -"etkinleştirin" +"Her G Kodu satırının başına satır numarası (Nx) eklemek için bunu etkinleştirin" msgid "Scan first layer" msgstr "İlk katmanı tara" msgid "" -"Enable this to enable the camera on printer to check the quality of first " -"layer" +"Enable this to enable the camera on printer to check the quality of first layer" msgstr "" "Yazıcıdaki kameranın ilk katmanın kalitesini kontrol etmesini sağlamak için " "bunu etkinleştirin" @@ -11947,8 +11886,8 @@ msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür " -"filamentin basılabileceğini belirler" +"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür filamentin " +"basılabileceğini belirler" msgid "Undefine" msgstr "Tanımsız" @@ -12000,8 +11939,8 @@ msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "Yatak şekline göre [0,1] aralığında en iyi otomatik düzenleme konumu." msgid "" -"Enable this option if machine has auxiliary part cooling fan. G-code " -"command: M106 P2 S(0-255)." +"Enable this option if machine has auxiliary part cooling fan. G-code command: " +"M106 P2 S(0-255)." msgstr "" "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin. G-code " "komut: M106 P2 S(0-255)." @@ -12020,8 +11959,7 @@ msgstr "" "Fanı hedef başlangıç zamanından bu kadar saniye önce başlatın (kesirli " "saniyeleri kullanabilirsiniz). Bu süre tahmini için sonsuz ivme varsayar ve " "yalnızca G1 ve G0 hareketlerini hesaba katar (yay uydurma desteklenmez).\n" -"Fan komutlarını özel kodlardan taşımaz (bir çeşit 'bariyer' görevi " -"görürler).\n" +"Fan komutlarını özel kodlardan taşımaz (bir çeşit 'bariyer' görevi görürler).\n" "'Yalnızca özel başlangıç gcode'u etkinleştirilmişse, fan komutları başlangıç " "gcode'una taşınmayacaktır.\n" "Devre dışı bırakmak için 0'ı kullanın." @@ -12044,8 +11982,8 @@ msgid "" msgstr "" "Soğutma fanını başlatmak için hedef hıza düşmeden önce bu süre boyunca " "maksimum fan hızı komutunu verin.\n" -"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın " -"daha hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" +"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın daha " +"hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" "Devre dışı bırakmak için 0'a ayarlayın." msgid "Time cost" @@ -12091,44 +12029,41 @@ msgid "Pellet Modded Printer" msgstr "Pelet modlu yazıcı" msgid "Enable this option if your printer uses pellets instead of filaments" -msgstr "" -"Yazıcınız filament yerine pellet kullanıyorsa bu seçeneği etkinleştirin" +msgstr "Yazıcınız filament yerine pellet kullanıyorsa bu seçeneği etkinleştirin" msgid "Support multi bed types" msgstr "Çoklu plaka" msgid "Enable this option if you want to use multiple bed types" -msgstr "" -"Birden fazla plaka tipi kullanmak istiyorsanız bu seçeneği etkinleştirin" +msgstr "Birden fazla plaka tipi kullanmak istiyorsanız bu seçeneği etkinleştirin" msgid "Label objects" msgstr "Nesneleri etiketle" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " -"object they belong to, which is useful for the Octoprint CancelObject " -"plugin. This settings is NOT compatible with Single Extruder Multi Material " -"setup and Wipe into Object / Wipe into Infill." +"object they belong to, which is useful for the Octoprint CancelObject plugin. " +"This settings is NOT compatible with Single Extruder Multi Material setup and " +"Wipe into Object / Wipe into Infill." msgstr "" "G-Code etiketleme yazdırma hareketlerine ait oldukları nesneyle ilgili " -"yorumlar eklemek için bunu etkinleştirin; bu, Octoprint CancelObject " -"eklentisi için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme " -"kurulumu ve Nesneye Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." +"yorumlar eklemek için bunu etkinleştirin; bu, Octoprint CancelObject eklentisi " +"için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme kurulumu ve Nesneye " +"Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." msgid "Exclude objects" msgstr "Nesneleri hariç tut" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" -"G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" +msgstr "G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" msgid "Verbose G-code" msgstr "Ayrıntılı G kodu" msgid "" "Enable this to get a commented G-code file, with each line explained by a " -"descriptive text. If you print from SD card, the additional weight of the " -"file could make your firmware slow down." +"descriptive text. If you print from SD card, the additional weight of the file " +"could make your firmware slow down." msgstr "" "Her satırın açıklayıcı bir metinle açıklandığı, yorumlu bir G kodu dosyası " "almak için bunu etkinleştirin. SD karttan yazdırırsanız dosyanın ilave " @@ -12151,14 +12086,14 @@ msgstr "Dolgu kombinasyonu - Maksimum katman yüksekliği" msgid "" "Maximum layer height for the combined sparse infill. \n" "\n" -"Set it to 0 or 100% to use the nozzle diameter (for maximum reduction in " -"print time) or a value of ~80% to maximize sparse infill strength.\n" +"Set it to 0 or 100% to use the nozzle diameter (for maximum reduction in print " +"time) or a value of ~80% to maximize sparse infill strength.\n" "\n" -"The number of layers over which infill is combined is derived by dividing " -"this value with the layer height and rounded down to the nearest decimal.\n" +"The number of layers over which infill is combined is derived by dividing this " +"value with the layer height and rounded down to the nearest decimal.\n" "\n" -"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values " -"(eg 80%). This value must not be larger than the nozzle diameter." +"Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values (eg " +"80%). This value must not be larger than the nozzle diameter." msgstr "" "Birleşik seyrek dolgu için maksimum katman yüksekliği. \n" "\n" @@ -12169,15 +12104,15 @@ msgstr "" "Dolgunun birleştirildiği katmanların sayısı, bu değerin katman yüksekliğine " "bölünmesiyle elde edilir ve en yakın ondalık sayıya yuvarlanır.\n" "\n" -"Mutlak mm değerlerini (örn. 0,4 mm’lik nozul için 0,32 mm) veya % " -"değerlerini (örn. %80) kullanın. Bu değer nozul çapından büyük olmamalıdır." +"Mutlak mm değerlerini (örn. 0,4 mm’lik nozul için 0,32 mm) veya % değerlerini " +"(örn. %80) kullanın. Bu değer nozul çapından büyük olmamalıdır." msgid "Filament to print internal sparse infill." msgstr "İç seyrek dolguyu yazdırmak için filament." msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Line width of internal sparse infill. If expressed as a %, it will be computed " +"over the nozzle diameter." msgstr "" "İç seyrek dolgunun çizgi genişliği. % olarak ifade edilirse Nozul çapı " "üzerinden hesaplanacaktır." @@ -12187,15 +12122,15 @@ msgstr "Dolgu/Duvar örtüşmesi" #, no-c-format, no-boost-format msgid "" -"Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill. Set this " -"value to ~10-15% to minimize potential over extrusion and accumulation of " -"material resulting in rough top surfaces." +"Infill area is enlarged slightly to overlap with wall for better bonding. The " +"percentage value is relative to line width of sparse infill. Set this value to " +"~10-15% to minimize potential over extrusion and accumulation of material " +"resulting in rough top surfaces." msgstr "" "Daha iyi yapışma için dolgu alanı duvarla örtüşecek şekilde hafifçe " "genişletilir. Yüzde değeri seyrek dolgunun çizgi genişliğine göredir. Aşırı " -"ekstrüzyon ve pürüzlü üst yüzeylere neden olan malzeme birikmesi " -"potansiyelini en aza indirmek için bu değeri ~%10-15’e ayarlayın." +"ekstrüzyon ve pürüzlü üst yüzeylere neden olan malzeme birikmesi potansiyelini " +"en aza indirmek için bu değeri ~%10-15’e ayarlayın." msgid "Top/Bottom solid infill/wall overlap" msgstr "Üst/Alt katı dolgu/Duvar örtüşmesi" @@ -12203,8 +12138,8 @@ msgstr "Üst/Alt katı dolgu/Duvar örtüşmesi" #, no-c-format, no-boost-format msgid "" "Top solid infill area is enlarged slightly to overlap with wall for better " -"bonding and to minimize the appearance of pinholes where the top infill " -"meets the walls. A value of 25-30% is a good starting point, minimizing the " +"bonding and to minimize the appearance of pinholes where the top infill meets " +"the walls. A value of 25-30% is a good starting point, minimizing the " "appearance of pinholes. The percentage value is relative to line width of " "sparse infill" msgstr "" @@ -12222,12 +12157,12 @@ msgstr "Arayüz kabukları" msgid "" "Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" +"Useful for multi-extruder prints with translucent materials or manual soluble " +"support material" msgstr "" "Bitişik malzemeler/hacimler arasında katı kabuk oluşumunu zorlayın. Yarı " -"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu " -"ekstruder baskıları için kullanışlıdır" +"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu ekstruder " +"baskıları için kullanışlıdır" msgid "Maximum width of a segmented region" msgstr "Bölümlere ayrılmış bir bölgenin maksimum genişliği" @@ -12249,8 +12184,7 @@ msgstr "" "Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. " "“mmu_segmented_region_max_width” sıfırsa veya " "“mmu_segmented_region_interlocking_length”, “mmu_segmented_region_max_width” " -"değerinden büyükse göz ardı edilecektir. Sıfır bu özelliği devre dışı " -"bırakır." +"değerinden büyükse göz ardı edilecektir. Sıfır bu özelliği devre dışı bırakır." msgid "Use beam interlocking" msgstr "Işın kilitlemeyi kullanın" @@ -12294,8 +12228,7 @@ msgid "" "structure, measured in cells. Too few cells will result in poor adhesion." msgstr "" "Hücrelerde ölçülen, birbirine kenetlenen yapıyı oluşturmak için filamentler " -"arasındaki sınırdan mesafe. Çok az hücre yapışmanın zayıf olmasına neden " -"olur." +"arasındaki sınırdan mesafe. Çok az hücre yapışmanın zayıf olmasına neden olur." msgid "Interlocking boundary avoidance" msgstr "Birbirine kenetlenen sınırdan kaçınma" @@ -12314,9 +12247,9 @@ 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 "" -"Ütüleme, düz yüzeyi daha pürüzsüz hale getirmek için aynı yükseklikteki " -"yüzeye tekrar baskı yapmak için küçük akış kullanmaktır. Bu ayar hangi " -"katmanın ütüleneceğini kontrol eder" +"Ütüleme, düz yüzeyi daha pürüzsüz hale getirmek için aynı yükseklikteki yüzeye " +"tekrar baskı yapmak için küçük akış kullanmaktır. Bu ayar hangi katmanın " +"ütüleneceğini kontrol eder" msgid "No ironing" msgstr "Ütüleme yok" @@ -12343,8 +12276,8 @@ 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 "" -"Ütüleme sırasında çıkacak malzeme miktarı. Normal katman yüksekliğindeki " -"akışa göre. Çok yüksek değer yüzeyde aşırı ekstrüzyona neden olur" +"Ütüleme sırasında çıkacak malzeme miktarı. Normal katman yüksekliğindeki akışa " +"göre. Çok yüksek değer yüzeyde aşırı ekstrüzyona neden olur" msgid "Ironing line spacing" msgstr "Ütüleme çizgi aralığı" @@ -12365,8 +12298,8 @@ msgid "" "The angle ironing is done at. A negative number disables this function and " "uses the default method." msgstr "" -"Köşebent ütüleme işlemi yapılır. Negatif bir sayı bu işlevi devre dışı " -"bırakır ve varsayılan yöntemi kullanır." +"Köşebent ütüleme işlemi yapılır. Negatif bir sayı bu işlevi devre dışı bırakır " +"ve varsayılan yöntemi kullanır." msgid "This gcode part is inserted at every layer change after lift z" msgstr "" @@ -12396,11 +12329,11 @@ msgstr "" "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" +"This G-code will be used as a code for the pause print. User can insert pause " +"G-code in gcode viewer" msgstr "" -"Bu G kodu duraklatma yazdırması için bir kod olarak kullanılacaktır. " -"Kullanıcı gcode görüntüleyiciye duraklatma G kodunu ekleyebilir" +"Bu G kodu duraklatma yazdırması için bir kod olarak kullanılacaktır. Kullanıcı " +"gcode görüntüleyiciye duraklatma G kodunu ekleyebilir" msgid "This G-code will be used as a custom code" msgstr "Bu G kodu özel kod olarak kullanılacak" @@ -12528,8 +12461,8 @@ msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" msgstr "Seyahat için maksimum ivme (M204 T), yalnızca Marlin 2 için geçerlidir" msgid "" -"Part cooling fan speed may be increased when auto cooling is enabled. This " -"is the maximum speed limitation of part cooling fan" +"Part cooling fan speed may be increased when auto cooling is enabled. This is " +"the maximum speed limitation of part cooling fan" msgstr "" "Otomatik soğutma etkinleştirildiğinde parça soğutma fanı hızı artırılabilir. " "Bu, parça soğutma fanının maksimum hız sınırlamasıdır" @@ -12541,16 +12474,16 @@ msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" -"Ekstruder için yazdırılabilir en büyük katman yüksekliği. Uyarlanabilir " -"katman yüksekliği etkinleştirildiğinde maksimum katman yüksekliğini " -"sınırlamak için kullanılır" +"Ekstruder için yazdırılabilir en büyük katman yüksekliği. Uyarlanabilir katman " +"yüksekliği etkinleştirildiğinde maksimum katman yüksekliğini sınırlamak için " +"kullanılır" msgid "Extrusion rate smoothing" msgstr "Ekstrüzyon hızını yumuşatma" msgid "" -"This parameter smooths out sudden extrusion rate changes that happen when " -"the printer transitions from printing a high flow (high speed/larger width) " +"This parameter smooths out sudden extrusion rate changes that happen when the " +"printer transitions from printing a high flow (high speed/larger width) " "extrusion to a lower flow (lower speed/smaller width) extrusion and vice " "versa.\n" "\n" @@ -12560,13 +12493,12 @@ msgid "" "\n" "A value of 0 disables the feature. \n" "\n" -"For a high speed, high flow direct drive printer (like the Bambu lab or " -"Voron) this value is usually not needed. However it can provide some " -"marginal benefit in certain cases where feature speeds vary greatly. For " -"example, when there are aggressive slowdowns due to overhangs. In these " -"cases a high value of around 300-350mm3/s2 is recommended as this allows for " -"just enough smoothing to assist pressure advance achieve a smoother flow " -"transition.\n" +"For a high speed, high flow direct drive printer (like the Bambu lab or Voron) " +"this value is usually not needed. However it can provide some marginal benefit " +"in certain cases where feature speeds vary greatly. For example, when there " +"are aggressive slowdowns due to overhangs. In these cases a high value of " +"around 300-350mm3/s2 is recommended as this allows for just enough smoothing " +"to assist pressure advance achieve a smoother flow transition.\n" "\n" "For slower printers without pressure advance, the value should be set much " "lower. A value of 10-15mm3/s2 is a good starting point for direct drive " @@ -12588,13 +12520,13 @@ msgstr "" "\n" "0 değeri özelliği devre dışı bırakır. \n" "\n" -"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab " -"veya Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik " -"hızlarının büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda " -"sağlayabilir. Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. " -"Bu durumlarda 300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, " -"basınç ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı " -"olmak için yeterli yumuşatmaya izin verir.\n" +"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab veya " +"Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik hızlarının " +"büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda sağlayabilir. " +"Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. Bu durumlarda " +"300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, basınç " +"ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı olmak için " +"yeterli yumuşatmaya izin verir.\n" "\n" "Basınç avansı olmayan daha yavaş yazıcılar için değer çok daha düşük " "ayarlanmalıdır. Doğrudan tahrikli ekstruderler için 10-15mm3/s2 ve Bowden " @@ -12634,8 +12566,8 @@ msgstr "Parça soğutma fanı için minimum hız" msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " -"during printing except the first several layers which is defined by no " -"cooling layers.\n" +"during printing except the first several layers which is defined by no cooling " +"layers.\n" "Please enable auxiliary_fan in printer settings to use this feature. G-code " "command: M106 P2 S(0-255)" msgstr "" @@ -12653,20 +12585,20 @@ msgid "" "layer hight when enable adaptive layer height" msgstr "" "Ekstruder için yazdırılabilir en düşük katman yüksekliği. Kullanılan tp, " -"uyarlanabilir katman yüksekliğini etkinleştirirken minimum katman " -"yüksekliğini sınırlar" +"uyarlanabilir katman yüksekliğini etkinleştirirken minimum katman yüksekliğini " +"sınırlar" msgid "Min print speed" msgstr "Minimum baskı hızı" msgid "" "The minimum printing speed that the printer will slow down to to attempt to " -"maintain the minimum layer time above, when slow down for better layer " -"cooling is enabled." +"maintain the minimum layer time above, when slow down for better layer cooling " +"is enabled." msgstr "" "Daha iyi katman soğutması için yavaşlama etkinleştirildiğinde, yukarıdaki " -"minimum katman süresini korumaya çalışmak için yazıcının yavaşlayacağı " -"minimum yazdırma hızı." +"minimum katman süresini korumaya çalışmak için yazıcının yavaşlayacağı minimum " +"yazdırma hızı." msgid "Diameter of nozzle" msgstr "Nozul çapı" @@ -12685,11 +12617,11 @@ msgid "Host Type" msgstr "Bağlantı Türü" msgid "" -"Orca Slicer 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, 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" @@ -12708,8 +12640,7 @@ msgstr "Soğutma borusu uzunluğu" msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" -"İçindeki soğutma hareketleri alanını sınırlamak üzere soğutma tüpünün " -"uzunluğu." +"İçindeki soğutma hareketleri alanını sınırlamak üzere soğutma tüpünün uzunluğu." msgid "High extruder current on filament swap" msgstr "Filament değişiminde yüksek ekstruder akımı" @@ -12719,9 +12650,9 @@ msgid "" "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" -"Hızlı sıkıştırma hızlarına izin vermek ve kötü kesilmiş bir filament " -"yüklerken direncin üstesinden gelmek için filament değişim sırası sırasında " -"ekstruder motor akımını artırmak faydalı olabilir." +"Hızlı sıkıştırma hızlarına izin vermek ve kötü kesilmiş bir filament yüklerken " +"direncin üstesinden gelmek için filament değişim sırası sırasında ekstruder " +"motor akımını artırmak faydalı olabilir." msgid "Filament parking position" msgstr "Filament park konumu" @@ -12730,8 +12661,8 @@ msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" -"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan " -"uzaklığı. Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." +"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan uzaklığı. " +"Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." msgid "Extra loading distance" msgstr "Ekstra yükleme mesafesi" @@ -12739,8 +12670,8 @@ msgstr "Ekstra yükleme mesafesi" msgid "" "When set to zero, the distance the filament is moved from parking position " "during load is exactly the same as it was moved back during unload. When " -"positive, it is loaded further, if negative, the loading move is shorter " -"than unloading." +"positive, it is loaded further, if negative, the loading move is shorter than " +"unloading." msgstr "" "Sıfır olarak ayarlandığında, yükleme sırasında filamentin park konumundan " "taşındığı mesafe, boşaltma sırasında geri taşındığı mesafe ile aynıdır. " @@ -12758,13 +12689,13 @@ msgstr "Dolguda geri çekmeyi azalt" 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" +"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 "" "Hareket kesinlikle dolgu alanına girdiğinde geri çekilmeyin. Bu, sızıntının " "görülemeyeceği anlamına gelir. Bu, karmaşık model için geri çekme sürelerini " -"azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi " -"ve G kodu oluşturmayı yavaşlatır" +"azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi ve " +"G kodu oluşturmayı yavaşlatır" msgid "" "This option will drop the temperature of the inactive extruders to prevent " @@ -12792,22 +12723,22 @@ msgstr "Maksimum yazdırılabilir açı" msgid "" "Maximum angle of overhangs to allow after making more steep overhangs " -"printable.90° will not change the model at all and allow any overhang, while " -"0 will replace all overhangs with conical material." +"printable.90° will not change the model at all and allow any overhang, while 0 " +"will replace all overhangs with conical material." msgstr "" "Daha dik çıkıntıları yazdırılabilir hale getirdikten sonra izin verilen " -"maksimum çıkıntı açısı. 90°, modeli hiçbir şekilde değiştirmez ve herhangi " -"bir çıkıntıya izin vermez, 0 ise tüm çıkıntıları konik malzemeyle değiştirir." +"maksimum çıkıntı açısı. 90°, modeli hiçbir şekilde değiştirmez ve herhangi bir " +"çıkıntıya izin vermez, 0 ise tüm çıkıntıları konik malzemeyle değiştirir." msgid "Make overhangs printable - Hole area" msgstr "Yazdırılabilir çıkıntı delik alanı oluşturun" msgid "" -"Maximum area of a hole in the base of the model before it's filled by " -"conical material.A value of 0 will fill all the holes in the model base." +"Maximum area of a hole in the base of the model before it's filled by conical " +"material.A value of 0 will fill all the holes in the model base." msgstr "" -"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce " -"maksimum alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." +"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce maksimum " +"alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." msgid "mm²" msgstr "mm²" @@ -12817,11 +12748,11 @@ msgstr "Çıkıntılı duvarı algıla" #, c-format, boost-format msgid "" -"Detect the overhang percentage relative to line width and use different " -"speed to print. For 100%% overhang, bridge speed is used." +"Detect the overhang percentage relative to line width and use different speed " +"to print. For 100%% overhang, bridge speed is used." msgstr "" -"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için " -"farklı hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." +"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için farklı " +"hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." msgid "Filament to print walls" msgstr "Duvarları yazdırmak için filament" @@ -12843,11 +12774,11 @@ 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" +"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" +"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." @@ -12858,21 +12789,20 @@ msgstr "" "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." +"İ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 Orca Slicer config settings by reading " -"environment variables." +"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 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 Orca Slicer yapılandırma ayarlarına " -"erişebilirler." +"Çı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 Orca Slicer yapılandırma ayarlarına erişebilirler." msgid "Printer type" msgstr "Yazıcı türü" @@ -12893,8 +12823,7 @@ msgid "Raft contact Z distance" msgstr "Raft kontak Z mesafesi" msgid "Z gap between object and raft. Ignored for soluble interface" -msgstr "" -"Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" +msgstr "Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" msgid "Raft expansion" msgstr "Raft genişletme" @@ -12923,8 +12852,8 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS " -"yazdırırken sarmayı önlemek için bu işlevi kullanın" +"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS yazdırırken " +"sarmayı önlemek için bu işlevi kullanın" msgid "" "G-code path is generated after simplifying the contour of model to avoid too " @@ -12939,8 +12868,7 @@ msgid "Travel distance threshold" msgstr "Seyahat mesafesi" msgid "" -"Only trigger retraction when the travel distance is longer than this " -"threshold" +"Only trigger retraction when the travel distance is longer than this threshold" msgstr "" "Geri çekmeyi yalnızca hareket mesafesi bu eşikten daha uzun olduğunda " "tetikleyin" @@ -12948,8 +12876,7 @@ msgstr "" msgid "Retract amount before wipe" msgstr "Temizleme işlemi öncesi geri çekme miktarı" -msgid "" -"The length of fast retraction before wipe, relative to retraction length" +msgid "The length of fast retraction before wipe, relative to retraction length" msgstr "" "Geri çekme uzunluğuna göre, temizlemeden önce hızlı geri çekilmenin uzunluğu" @@ -12960,12 +12887,14 @@ msgid "Force a retraction when changes layer" msgstr "Katmanı değiştirdiğinde geri çekilmeyi zorla" msgid "Retract on top layer" -msgstr "" +msgstr "Üst katmanda geri çek" msgid "" "Force a retraction on top layer. Disabling could prevent clog on very slow " "patterns with small movements, like Hilbert curve" msgstr "" +"Üst katmanda geri çekilmeye zorlayın. Devre dışı bırakmak, Hilbert eğrisi gibi " +"küçük hareketlerin olduğu çok yavaş modellerde tıkanmayı önleyebilir" msgid "Retraction Length" msgstr "Geri Çekme Uzunluğu" @@ -13002,7 +12931,7 @@ msgstr "" "uzunluğu" msgid "Z-hop height" -msgstr "" +msgstr "Z-Sıçrama yüksekliği" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -13036,7 +12965,7 @@ msgstr "" "altında olduğunda" msgid "Z-hop type" -msgstr "" +msgstr "Z-Sıçrama türü" msgid "Z hop type" msgstr "Z sıçraması türü" @@ -13051,8 +12980,8 @@ msgid "Traveling angle" msgstr "Seyahat açısı" msgid "" -"Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results " -"in Normal Lift" +"Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results in " +"Normal Lift" msgstr "" "Eğim ve Spiral Z atlama tipi için ilerleme açısı. 90°’ye ayarlamak normal " "kaldırmayla sonuçlanır" @@ -13084,8 +13013,8 @@ msgid "" "Enforce Z Hop behavior. This setting is impacted by the above settings (Only " "lift Z above/below)." msgstr "" -"Z Hop davranışını zorunlu kılın. Bu ayar yukarıdaki ayarlardan etkilenir " -"(Z'yi yalnızca yukarıya/aşağıya kaldırın)." +"Z Hop davranışını zorunlu kılın. Bu ayar yukarıdaki ayarlardan etkilenir (Z'yi " +"yalnızca yukarıya/aşağıya kaldırın)." msgid "All Surfaces" msgstr "Tüm Yüzeyler" @@ -13110,8 +13039,8 @@ msgstr "" "filament miktarını itecektir. Bu ayara nadiren ihtiyaç duyulur." msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +"When the retraction is compensated after changing tool, the extruder will push " +"this additional amount of filament." msgstr "" "Takım değiştirildikten sonra geri çekilme telafi edildiğinde, ekstruder bu " "ilave filament miktarını itecektir." @@ -13180,20 +13109,20 @@ msgid "" "This option causes the inner seams to be shifted backwards based on their " "depth, forming a zigzag pattern." msgstr "" -"Bu seçenek, iç dikişlerin derinliklerine göre geriye doğru kaydırılarak " -"zikzak desen oluşturulmasına neden olur." +"Bu seçenek, iç dikişlerin derinliklerine göre geriye doğru kaydırılarak zikzak " +"desen oluşturulmasına neden olur." msgid "Seam gap" msgstr "Dikiş boşluğu" msgid "" -"In order to reduce the visibility of the seam in a closed loop extrusion, " -"the loop is interrupted and shortened by a specified amount.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current extruder diameter. The default value for this parameter is 10%." +"In order to reduce the visibility of the seam in a closed loop extrusion, the " +"loop is interrupted and shortened by a specified amount.\n" +"This amount can be specified in millimeters or as a percentage of the current " +"extruder diameter. The default value for this parameter is 10%." msgstr "" -"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü " -"kesintiye uğrar ve belirli bir miktarda kısaltılır.\n" +"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü kesintiye " +"uğrar ve belirli bir miktarda kısaltılır.\n" "Bu miktar milimetre cinsinden veya mevcut ekstruder çapının yüzdesi olarak " "belirtilebilir. Bu parametrenin varsayılan değeri %10'dur." @@ -13202,8 +13131,8 @@ msgstr "Atkı birleşim dikişi (beta)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" -"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için " -"atkı birleşimini kullanın." +"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için atkı " +"birleşimini kullanın." msgid "Conditional scarf joint" msgstr "Koşullu atkı birleşimi" @@ -13221,9 +13150,9 @@ msgstr "Koşullu açı eşiği" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " "seam.\n" -"If the maximum angle within the perimeter loop exceeds this value " -"(indicating the absence of sharp corners), a scarf joint seam will be used. " -"The default value is 155°." +"If the maximum angle within the perimeter loop exceeds this value (indicating " +"the absence of sharp corners), a scarf joint seam will be used. The default " +"value is 155°." msgstr "" "Bu seçenek, koşullu bir atkı eklem dikişi uygulamak için eşik açısını " "ayarlar.\n" @@ -13238,8 +13167,8 @@ msgstr "Koşullu çıkıntı eşiği" msgid "" "This option determines the overhang threshold for the application of scarf " "joint seams. If the unsupported portion of the perimeter is less than this " -"threshold, scarf joint seams will be applied. The default threshold is set " -"at 40% of the external wall's width. Due to performance considerations, the " +"threshold, scarf joint seams will be applied. The default threshold is set at " +"40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" "Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma eşiğini " @@ -13253,22 +13182,22 @@ msgstr "Atkı birleşim hızı" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " -"print scarf joints at a slow speed (less than 100 mm/s). It's also " -"advisable to enable 'Extrusion rate smoothing' if the set speed varies " -"significantly from the speed of the outer or inner walls. If the speed " -"specified here is higher than the speed of the outer or inner walls, the " -"printer will default to the slower of the two speeds. When specified as a " -"percentage (e.g., 80%), the speed is calculated based on the respective " -"outer or inner wall speed. The default value is set to 100%." +"print scarf joints at a slow speed (less than 100 mm/s). It's also advisable " +"to enable 'Extrusion rate smoothing' if the set speed varies significantly " +"from the speed of the outer or inner walls. If the speed specified here is " +"higher than the speed of the outer or inner walls, the printer will default to " +"the slower of the two speeds. When specified as a percentage (e.g., 80%), the " +"speed is calculated based on the respective outer or inner wall speed. The " +"default value is set to 100%." msgstr "" -"Bu seçenek, atkı bağlantılarının yazdırma hızını ayarlar. Atkı " -"bağlantılarının yavaş bir hızda (100 mm/s'den az) yazdırılması tavsiye " -"edilir. Ayarlanan hızın dış veya iç duvarların hızından önemli ölçüde farklı " -"olması durumunda 'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi " -"de tavsiye edilir. Burada belirtilen hız, dış veya iç duvarların hızından " -"daha yüksekse, yazıcı varsayılan olarak iki hızdan daha yavaş olanı " -"seçecektir. Yüzde olarak belirtildiğinde (örn. %80), hız, ilgili dış veya iç " -"duvar hızına göre hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." +"Bu seçenek, atkı bağlantılarının yazdırma hızını ayarlar. Atkı bağlantılarının " +"yavaş bir hızda (100 mm/s'den az) yazdırılması tavsiye edilir. Ayarlanan hızın " +"dış veya iç duvarların hızından önemli ölçüde farklı olması durumunda " +"'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi de tavsiye edilir. " +"Burada belirtilen hız, dış veya iç duvarların hızından daha yüksekse, yazıcı " +"varsayılan olarak iki hızdan daha yavaş olanı seçecektir. Yüzde olarak " +"belirtildiğinde (örn. %80), hız, ilgili dış veya iç duvar hızına göre " +"hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." msgid "Scarf joint flow ratio" msgstr "Atkı birleşimi akış oranı" @@ -13282,12 +13211,12 @@ msgstr "Atkı başlangıç ​​yüksekliği" msgid "" "Start height of the scarf.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current layer height. The default value for this parameter is 0." +"This amount can be specified in millimeters or as a percentage of the current " +"layer height. The default value for this parameter is 0." msgstr "" "Atkı başlangıç yüksekliği.\n" -"Bu miktar milimetre cinsinden veya geçerli katman yüksekliğinin yüzdesi " -"olarak belirtilebilir. Bu parametrenin varsayılan değeri 0'dır." +"Bu miktar milimetre cinsinden veya geçerli katman yüksekliğinin yüzdesi olarak " +"belirtilebilir. Bu parametrenin varsayılan değeri 0'dır." msgid "Scarf around entire wall" msgstr "Tüm duvarın etrafına atkıla" @@ -13302,8 +13231,8 @@ msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" -"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan " -"devre dışı bırakır." +"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan devre " +"dışı bırakır." msgid "Scarf steps" msgstr "Atkı kademesi" @@ -13325,9 +13254,9 @@ msgid "" "if a wipe action is executed immediately following an outer wall extrusion, " "the speed of the outer wall extrusion will be utilized for the wipe action." msgstr "" -"Temizleme hızı mevcut ekstrüzyon rolünün hızına göre belirlenir; bir dış " -"duvar ekstrüzyonunun hemen ardından bir silme eylemi yürütülürse, silme " -"eylemi için dış duvar ekstrüzyonunun hızı kullanılacaktır." +"Temizleme hızı mevcut ekstrüzyon rolünün hızına göre belirlenir; bir dış duvar " +"ekstrüzyonunun hemen ardından bir silme eylemi yürütülürse, silme eylemi için " +"dış duvar ekstrüzyonunun hızı kullanılacaktır." msgid "Wipe on loops" msgstr "Döngülerde temizleme" @@ -13344,15 +13273,15 @@ msgid "Wipe before external loop" msgstr "Harici döngüden önce silin" msgid "" -"To minimize visibility of potential overextrusion at the start of an " -"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " -"print order, the de-retraction 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" +"To minimize visibility of potential overextrusion at the start of an external " +"perimeter when printing with Outer/Inner or Inner/Outer/Inner wall print " +"order, the de-retraction 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 de-retraction move." +"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 de-retraction 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, " @@ -13360,22 +13289,22 @@ msgstr "" "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." +"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ı" msgid "" "The wipe speed is determined by the speed setting specified in this " -"configuration.If the value is expressed as a percentage (e.g. 80%), it will " -"be calculated based on the travel speed setting above.The default value for " -"this parameter is 80%" +"configuration.If the value is expressed as a percentage (e.g. 80%), it will be " +"calculated based on the travel speed setting above.The default value for this " +"parameter is 80%" msgstr "" "Temizleme hızı, bu konfigürasyonda belirtilen hız ayarına göre belirlenir. " -"Değer yüzde olarak ifade edilirse (örn. %80), yukarıdaki ilerleme hızı " -"ayarına göre hesaplanır. Bu parametrenin varsayılan değeri %80'dir" +"Değer yüzde olarak ifade edilirse (örn. %80), yukarıdaki ilerleme hızı ayarına " +"göre hesaplanır. Bu parametrenin varsayılan değeri %80'dir" msgid "Skirt distance" msgstr "Etek mesafesi" @@ -13410,13 +13339,12 @@ msgid "" "Enabled = skirt is as tall as the highest printed object. Otherwise 'Skirt " "height' is used.\n" "Note: With the draft shield active, the skirt will be printed at skirt " -"distance from the object. Therefore, if brims are active it may intersect " -"with them. To avoid this, increase the skirt distance value.\n" +"distance from the object. Therefore, if brims are active it may intersect with " +"them. To avoid this, increase the skirt distance value.\n" msgstr "" -"Rüzgar taslağı nedeniyle ABS veya ASA baskının eğrilmesine ve baskı " -"yatağından ayrılmasına karşı koruma sağlamak için bir rüzgarlık " -"kullanışlıdır. Genellikle yalnızca açık çerçeveli, yani muhafazasız " -"yazıcılarda gereklidir. \n" +"Rüzgar taslağı nedeniyle ABS veya ASA baskının eğrilmesine ve baskı yatağından " +"ayrılmasına karşı koruma sağlamak için bir rüzgarlık kullanışlıdır. Genellikle " +"yalnızca açık çerçeveli, yani muhafazasız yazıcılarda gereklidir. \n" "\n" "Etkin = etek, yazdırılan en yüksek nesne kadar uzun. Aksi takdirde ‘Etek " "yüksekliği’ kullanılır.\n" @@ -13434,10 +13362,8 @@ msgid "Skirt type" msgstr "Etek tipi" msgid "" -"Combined - single skirt for all objects, Per object - individual object " -"skirt." -msgstr "" -"Birleşik - tüm nesneler için tek etek, Nesneye göre - ayrı nesne eteği." +"Combined - single skirt for all objects, Per object - individual object skirt." +msgstr "Birleşik - tüm nesneler için tek etek, Nesneye göre - ayrı nesne eteği." msgid "Combined" msgstr "Birleşik" @@ -13449,8 +13375,7 @@ msgid "Skirt loops" msgstr "Etek sayısı" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "" -"Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" +msgstr "Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" msgid "Skirt speed" msgstr "Etek hızı" @@ -13469,16 +13394,16 @@ msgid "" "\n" "Using a non zero value is useful if the printer is set up to print without a " "prime line.\n" -"Final number of loops is not taling into account whli arranging or " -"validating objects distance. Increase loop number in such case. " +"Final number of loops is not taling into account whli arranging or validating " +"objects distance. Increase loop number in such case. " msgstr "" -"Etek yazdırılırken mm cinsinden minimum filaman ekstrüzyon uzunluğu. Sıfır, " -"bu özelliğin devre dışı olduğu anlamına gelir.\n" +"Etek yazdırılırken mm cinsinden minimum filaman ekstrüzyon uzunluğu. Sıfır, bu " +"özelliğin devre dışı olduğu anlamına gelir.\n" "\n" "Yazıcı ana hat olmadan yazdırmak üzere ayarlanmışsa sıfır dışında bir değer " "kullanmak yararlı olur.\n" -"Nihai döngü sayısı, nesnelerin mesafesini düzenlerken veya doğrularken " -"dikkate alınmaz. Böyle bir durumda döngü sayısını artırın." +"Nihai döngü sayısı, nesnelerin mesafesini düzenlerken veya doğrularken dikkate " +"alınmaz. Böyle bir durumda döngü sayısını artırın." msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " @@ -13505,33 +13430,33 @@ msgid "Filament to print solid infill" msgstr "Katı dolguyu yazdırmak için filament" msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Line width of internal solid infill. If expressed as a %, it will be computed " +"over the nozzle diameter." msgstr "" -"İç katı dolgunun çizgi genişliği. % olarak ifade edilirse Nozul çapı " -"üzerinden hesaplanacaktır." +"İç katı dolgunun çizgi genişliği. % olarak ifade edilirse Nozul çapı üzerinden " +"hesaplanacaktır." msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Üst ve alt yüzeyin değil, iç katı dolgunun hızı" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " -"model into a single walled print with solid bottom layers. The final " -"generated model has no seam" +"model into a single walled print with solid bottom layers. The final generated " +"model has no seam" 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." +"katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan son " +"modelde dikiş yok." msgid "Smooth Spiral" msgstr "Pürüzsüz spiral" msgid "" -"Smooth Spiral smooths out X and Y moves as well, resulting in no visible " -"seam at all, even in the XY directions on walls that are not vertical" +"Smooth Spiral smooths out X and Y moves as well, resulting 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." +"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 "Maksimum xy yumuşatma" @@ -13544,14 +13469,13 @@ msgstr "" "maksimum mesafe % olarak ifade edilirse nozül çapı üzerinden hesaplanacaktır." msgid "" -"If smooth or traditional mode is selected, a timelapse video will be " -"generated for each print. After each layer is printed, a snapshot is taken " -"with the chamber camera. All of these snapshots are composed into a " -"timelapse video when printing completes. If smooth mode is selected, the " -"toolhead will move to the excess chute after each layer is printed and then " -"take a snapshot. Since the melt filament may leak from the nozzle during the " -"process of taking a snapshot, prime tower is required for smooth mode to " -"wipe nozzle." +"If smooth or traditional mode is selected, a timelapse video will be generated " +"for each print. After each layer is printed, a snapshot is taken with the " +"chamber camera. All of these snapshots are composed into a timelapse video " +"when printing completes. If smooth mode is selected, the toolhead will move to " +"the excess chute after each layer is printed and then take a snapshot. Since " +"the melt filament may leak from the nozzle during the process of taking a " +"snapshot, prime tower is required for smooth mode to wipe nozzle." msgstr "" "Düzgün veya geleneksel mod seçilirse her baskı için bir hızlandırılmış video " "oluşturulacaktır. Her katman basıldıktan sonra oda kamerasıyla anlık görüntü " @@ -13570,9 +13494,9 @@ msgstr "Sıcaklık değişimi" #. TRN PrintSettings : "Ooze prevention" > "Temperature variation" msgid "" -"Temperature difference to be applied when an extruder is not active. The " -"value is not used when 'idle_temperature' in filament settings is set to non " -"zero value." +"Temperature difference to be applied when an extruder is not active. The value " +"is not used when 'idle_temperature' in filament settings is set to non zero " +"value." msgstr "" "Ekstruder aktif olmadığında uygulanacak sıcaklık farkı. Filament ayarlarında " "‘rölanti sıcaklığı’ sıfır olmayan bir değere ayarlandığında bu değer " @@ -13624,14 +13548,12 @@ msgid "" "Enable this option to omit the custom Change filament G-code only at the " "beginning of the print. The tool change command (e.g., T0) will be skipped " "throughout the entire print. This is useful for manual multi-material " -"printing, where we use M600/PAUSE to trigger the manual filament change " -"action." +"printing, where we use M600/PAUSE to trigger the manual filament change action." msgstr "" "Sadece baskının başında özel Filament Değiştirme G-kodu'nu atlamak için bu " -"seçeneği etkinleştirin. Aracı değiştirme komutu (örneğin, T0), baskının " -"tamamı boyunca atlanacaktır. Bu, manuel çoklu malzeme baskısı için " -"kullanışlıdır, burada manuel filament değişim eylemini tetiklemek için M600/" -"PAUSE kullanırız." +"seçeneği etkinleştirin. Aracı değiştirme komutu (örneğin, T0), baskının tamamı " +"boyunca atlanacaktır. Bu, manuel çoklu malzeme baskısı için kullanışlıdır, " +"burada manuel filament değişim eylemini tetiklemek için M600/PAUSE kullanırız." msgid "Purge in prime tower" msgstr "Prime tower'da temizlik" @@ -13646,10 +13568,9 @@ msgid "No sparse layers (beta)" msgstr "Seyrek katman yok (beta)" msgid "" -"If enabled, the wipe tower will not be printed on layers with no " -"toolchanges. On layers with a toolchange, extruder will travel downward to " -"print the wipe tower. User is responsible for ensuring there is no collision " -"with the print." +"If enabled, the wipe tower will not be printed on layers with no toolchanges. " +"On layers with a toolchange, extruder will travel downward to print the wipe " +"tower. User is responsible for ensuring there is no collision with the print." msgstr "" "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda " "yazdırılmayacaktır. Araç değişimi olan katmanlarda, ekstruder silme kulesini " @@ -13670,23 +13591,23 @@ msgid "Slice gap closing radius" msgstr "Dilim aralığı kapanma yarıçapı" msgid "" -"Cracks smaller than 2x gap closing radius are being filled during the " -"triangle mesh slicing. The gap closing operation may reduce the final print " -"resolution, therefore it is advisable to keep the value reasonably low." +"Cracks smaller than 2x gap closing radius are being filled during the triangle " +"mesh slicing. The gap closing operation may reduce the final print resolution, " +"therefore it is advisable to keep the value reasonably low." msgstr "" -"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük " -"çatlaklar doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " +"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük çatlaklar " +"doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " "düşürebilir, bu nedenle değerin oldukça düşük tutulması tavsiye edilir." msgid "Slicing Mode" msgstr "Dilimleme modu" msgid "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close " +"all holes in the model." msgstr "" -"3DLabPrint uçak modelleri için \"Çift-tek\" seçeneğini kullanın. Modeldeki " -"tüm delikleri kapatmak için \"Delikleri kapat\"ı kullanın." +"3DLabPrint uçak modelleri için \"Çift-tek\" seçeneğini kullanın. Modeldeki tüm " +"delikleri kapatmak için \"Delikleri kapat\"ı kullanın." msgid "Regular" msgstr "Düzenli" @@ -13706,11 +13627,10 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" -"Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya " -"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: " -"örneğin, endstop sıfır noktanız aslında nozulu baskı plakasından 0.3mm " -"uzakta bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu " -"düzeltin)." +"Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya çıkarılır)." +"Bu, kötü Z endstop konumunu telafi etmek için kullanılır: örneğin, endstop " +"sıfır noktanız aslında nozulu baskı plakasından 0.3mm uzakta bırakıyorsa, bu " +"değeri -0.3 olarak ayarlayın (veya endstop'unuzu düzeltin)." msgid "Enable support" msgstr "Desteği etkinleştir" @@ -13761,11 +13681,9 @@ msgid "Support critical regions only" msgstr "Yalnızca kritik bölgeleri destekleyin" msgid "" -"Only create support for critical regions including sharp tail, cantilever, " -"etc." +"Only create support for critical regions including sharp tail, cantilever, etc." msgstr "" -"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek " -"oluşturun." +"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek oluşturun." msgid "Remove small overhangs" msgstr "Küçük çıkıntıları kaldır" @@ -13799,11 +13717,9 @@ msgstr "" msgid "Avoid interface filament for base" msgstr "Taban için arayüz filamentini azaltın" -msgid "" -"Avoid using support interface filament to print support base if possible." +msgid "Avoid using support interface filament to print support base if possible." msgstr "" -"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan " -"kaçının" +"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan kaçının" msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -13878,8 +13794,8 @@ msgstr "Arayüz deseni" msgid "" "Line pattern of support interface. Default pattern for non-soluble support " -"interface is Rectilinear, while default pattern for soluble support " -"interface is Concentric" +"interface is Rectilinear, while default pattern for soluble support interface " +"is Concentric" msgstr "" "Destek arayüzünün çizgi deseni. Çözünmeyen destek arayüzü için varsayılan " "model Doğrusaldır, çözünebilir destek arayüzü için varsayılan model ise " @@ -13907,19 +13823,18 @@ msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " "support towers will save material and reduce object scarring.\n" -"For tree support, slim and organic style will merge branches more " -"aggressively and save a lot of material (default organic), while hybrid " -"style will create similar structure to normal support under large flat " -"overhangs." +"For tree support, slim and organic style will merge branches more aggressively " +"and save a lot of material (default organic), while hybrid style will create " +"similar structure to normal support under large flat overhangs." msgstr "" -"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara " -"içine projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı " -"zamanda sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki " -"izleri azaltır.\n" +"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara içine " +"projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı zamanda " +"sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki izleri " +"azaltır.\n" "Ağaç destek için, ince ve organik tarz, dalları daha etkili bir şekilde " "birleştirir ve büyük düz çıkıntılarda normal destekle benzer bir yapı " -"oluştururken birçok malzeme tasarrufu sağlar (varsayılan organik tarz). " -"Hybrid stil, büyük düz çıkıntıların altında normal destekle benzer bir yapı " +"oluştururken birçok malzeme tasarrufu sağlar (varsayılan organik tarz). Hybrid " +"stil, büyük düz çıkıntıların altında normal destekle benzer bir yapı " "oluşturacaktır." msgid "Default (Grid/Organic" @@ -13945,13 +13860,13 @@ msgstr "Bağımsız destek katmanı yüksekliği" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time.This option will be invalid " -"when the prime tower is enabled." +"support customizing z-gap and save print time.This option will be invalid when " +"the prime tower is enabled." msgstr "" "Destek katmanı, nesne katmanından bağımsız olarak katman yüksekliğini " "kullanır. Bu, z aralığının özelleştirilmesine destek olmak ve yazdırma " -"süresinden tasarruf etmek içindir. Prime tower etkinleştirildiğinde bu " -"seçenek geçersiz olacaktır." +"süresinden tasarruf etmek içindir. Prime tower etkinleştirildiğinde bu seçenek " +"geçersiz olacaktır." msgid "Threshold angle" msgstr "Destek açısı" @@ -13965,9 +13880,9 @@ msgid "Tree support branch angle" msgstr "Ağaç desteği dal açısı" msgid "" -"This setting determines the maximum overhang angle that t he branches of " -"tree support allowed to make.If the angle is increased, the branches can be " -"printed more horizontally, allowing them to reach farther." +"This setting determines the maximum overhang angle that t he branches of tree " +"support allowed to make.If the angle is increased, the branches can be printed " +"more horizontally, allowing them to reach farther." msgstr "" "Bu ayar, ağaç desteğinin dallarının oluşmasına izin verilen maksimum çıkıntı " "açısını belirler. Açı artırılırsa, dallar daha yatay olarak basılabilir ve " @@ -13978,13 +13893,13 @@ msgstr "Tercih Edilen Dal Açısı" #. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" msgid "" -"The preferred angle of the branches, when they do not have to avoid the " -"model. Use a lower angle to make them more vertical and more stable. Use a " -"higher angle for branches to merge faster." +"The preferred angle of the branches, when they do not have to avoid the model. " +"Use a lower angle to make them more vertical and more stable. Use a higher " +"angle for branches to merge faster." msgstr "" "Modelden kaçınmak zorunda olmadıklarında dalların tercih edilen açısı. Daha " -"dikey ve daha dengeli olmaları için daha düşük bir açı kullanın. Dalların " -"daha hızlı birleşmesi için daha yüksek bir açı kullanın." +"dikey ve daha dengeli olmaları için daha düşük bir açı kullanın. Dalların daha " +"hızlı birleşmesi için daha yüksek bir açı kullanın." msgid "Tree support branch distance" msgstr "Ağaç destek dal mesafesi" @@ -13998,11 +13913,10 @@ msgstr "Dal Yoğunluğu" #. TRN PrintSettings: "Organic supports" > "Branch Density" msgid "" -"Adjusts the density of the support structure used to generate the tips of " -"the branches. A higher value results in better overhangs but the supports " -"are harder to remove, thus it is recommended to enable top support " -"interfaces instead of a high branch density value if dense interfaces are " -"needed." +"Adjusts the density of the support structure used to generate the tips of the " +"branches. A higher value results in better overhangs but the supports are " +"harder to remove, thus it is recommended to enable top support interfaces " +"instead of a high branch density value if dense interfaces are needed." msgstr "" "Dalların uçlarını oluşturmak için kullanılan destek yapısının yoğunluğunu " "ayarlar. Daha yüksek bir değer daha iyi çıkıntılarla sonuçlanır, ancak " @@ -14014,8 +13928,8 @@ msgid "Adaptive layer height" msgstr "Uyarlanabilir katman yüksekliği" msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " +"Enabling this option means the height of tree support layer except the first " +"will be automatically calculated " msgstr "" "Bu seçeneğin etkinleştirilmesi, ilki hariç ağaç destek katmanının " "yüksekliğinin otomatik olarak hesaplanacağı anlamına gelir " @@ -14070,8 +13984,8 @@ msgstr "Çift duvarlı dal çapı" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" "Branches with area larger than the area of a circle of this diameter will be " -"printed with double walls for stability. Set this value to zero for no " -"double walls." +"printed with double walls for stability. Set this value to zero for no double " +"walls." msgstr "" "Bu çaptaki bir dairenin alanından daha büyük alana sahip dallar, stabilite " "için çift duvarlı olarak basılacaktır. Çift duvar olmaması için bu değeri " @@ -14090,16 +14004,15 @@ msgid "" "This setting specifies whether to add infill inside large hollows of tree " "support" msgstr "" -"Bu ayar, ağaç desteğinin büyük oyuklarının içine dolgu eklenip " -"eklenmeyeceğini belirtir" +"Bu ayar, ağaç desteğinin büyük oyuklarının içine dolgu eklenip eklenmeyeceğini " +"belirtir" msgid "Activate temperature control" msgstr "Sıcaklık kontrolünü etkinleştirin" msgid "" "Enable this option for automated chamber temperature control. This option " -"activates the emitting of an M191 command before the " -"\"machine_start_gcode\"\n" +"activates the emitting of an M191 command before the \"machine_start_gcode\"\n" " which sets the chamber temperature and waits until it is reached. In " "addition, it emits an M141 command at the end of the print to turn off the " "chamber heater, if present. \n" @@ -14108,8 +14021,8 @@ msgid "" "either via macros or natively and is usually used when an active chamber " "heater is installed." msgstr "" -"Otomatik hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Bu " -"seçenek, “yazıcı başlangıç kodu”ndan önce bir M191 komutunun yayınlanmasını " +"Otomatik hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Bu seçenek, " +"“yazıcı başlangıç kodu”ndan önce bir M191 komutunun yayınlanmasını " "etkinleştirir\n" " oda sıcaklığını ayarlar ve bu sıcaklığa ulaşılıncaya kadar bekler. Ayrıca " "baskı sonunda M141 komutu vererek varsa hazne ısıtıcısının kapatılmasını " @@ -14124,41 +14037,39 @@ msgstr "Bölme sıcaklığı" msgid "" "For high-temperature materials like ABS, ASA, PC, and PA, a higher chamber " -"temperature can help suppress or reduce warping and potentially lead to " -"higher interlayer bonding strength. However, at the same time, a higher " -"chamber temperature will reduce the efficiency of air filtration for ABS and " -"ASA. \n" +"temperature can help suppress or reduce warping and potentially lead to higher " +"interlayer bonding strength. However, at the same time, a higher chamber " +"temperature will reduce the efficiency of air filtration for ABS and ASA. \n" "\n" "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option " "should be disabled (set to 0) as the chamber temperature should be low to " "avoid extruder clogging caused by material softening at the heat break.\n" "\n" "If enabled, this parameter also sets a gcode variable named " -"chamber_temperature, which can be used to pass the desired chamber " -"temperature to your print start macro, or a heat soak macro like this: " -"PRINT_START (other variables) CHAMBER_TEMP=[chamber_temperature]. This may " -"be useful if your printer does not support M141/M191 commands, or if you " -"desire to handle heat soaking in the print start macro if no active chamber " -"heater is installed." +"chamber_temperature, which can be used to pass the desired chamber temperature " +"to your print start macro, or a heat soak macro like this: PRINT_START (other " +"variables) CHAMBER_TEMP=[chamber_temperature]. This may be useful if your " +"printer does not support M141/M191 commands, or if you desire to handle heat " +"soaking in the print start macro if no active chamber heater is installed." msgstr "" "ABS, ASA, PC ve PA gibi yüksek sıcaklıktaki malzemeler için daha yüksek bir " -"oda sıcaklığı, bükülmenin bastırılmasına veya azaltılmasına yardımcı " -"olabilir ve potansiyel olarak daha yüksek katmanlar arası bağlanma " -"mukavemetine yol açabilir. Ancak aynı zamanda daha yüksek oda sıcaklığı, ABS " -"ve ASA için hava filtreleme verimliliğini azaltacaktır. \n" +"oda sıcaklığı, bükülmenin bastırılmasına veya azaltılmasına yardımcı olabilir " +"ve potansiyel olarak daha yüksek katmanlar arası bağlanma mukavemetine yol " +"açabilir. Ancak aynı zamanda daha yüksek oda sıcaklığı, ABS ve ASA için hava " +"filtreleme verimliliğini azaltacaktır. \n" "\n" "PLA, PETG, TPU, PVA ve diğer düşük sıcaklıktaki malzemeler için, ısı " "kırılmasında malzemenin yumuşamasından kaynaklanan ekstrüderin tıkanmasını " -"önlemek için oda sıcaklığının düşük olması gerektiğinden bu seçenek devre " -"dışı bırakılmalıdır (0’a ayarlanmalıdır).\n" +"önlemek için oda sıcaklığının düşük olması gerektiğinden bu seçenek devre dışı " +"bırakılmalıdır (0’a ayarlanmalıdır).\n" "\n" -"Etkinleştirilirse, bu parametre aynı zamanda istenen oda sıcaklığını " -"yazdırma başlatma makronuza veya şuna benzer bir ısı emme makrosuna iletmek " -"için kullanılabilecek Chamber_temperature adlı bir gcode değişkenini de " -"ayarlar: PRINT_START (diğer değişkenler) CHAMBER_TEMP=[chamber_temperature]. " -"Yazıcınız M141/M191 komutlarını desteklemiyorsa veya aktif oda ısıtıcısı " -"takılı değilse yazdırma başlatma makrosunda ısı bekletme işlemini " -"gerçekleştirmek istiyorsanız bu yararlı olabilir." +"Etkinleştirilirse, bu parametre aynı zamanda istenen oda sıcaklığını yazdırma " +"başlatma makronuza veya şuna benzer bir ısı emme makrosuna iletmek için " +"kullanılabilecek Chamber_temperature adlı bir gcode değişkenini de ayarlar: " +"PRINT_START (diğer değişkenler) CHAMBER_TEMP=[chamber_temperature]. Yazıcınız " +"M141/M191 komutlarını desteklemiyorsa veya aktif oda ısıtıcısı takılı değilse " +"yazdırma başlatma makrosunda ısı bekletme işlemini gerçekleştirmek " +"istiyorsanız bu yararlı olabilir." msgid "Nozzle temperature for layers after the initial one" msgstr "İlk katmandan sonraki katmanlar için nozul sıcaklığı" @@ -14184,8 +14095,8 @@ msgid "This gcode is inserted when the extrusion role is changed" msgstr "Bu gcode, ekstrüzyon rolü değiştirildiğinde eklenir" msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." +"Line width for top surfaces. If expressed as a %, it will be computed over the " +"nozzle diameter." msgstr "" "Üst yüzeyler için çizgi genişliği. % olarak ifade edilirse Nozul çapı " "üzerinden hesaplanacaktır." @@ -14214,15 +14125,15 @@ msgstr "Üst katman kalınlığı" msgid "" "The number of top solid layers is increased when slicing if the thickness " "calculated by top shell layers is thinner than this value. This can avoid " -"having too thin shell when layer height is small. 0 means that this setting " -"is disabled and thickness of top shell is absolutely determined by top shell " +"having too thin shell when layer height is small. 0 means that this setting is " +"disabled and thickness of top shell is absolutely determined by top shell " "layers" msgstr "" -"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " -"yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " -"ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk " -"katmanları tarafından belirlendiği anlamına gelir" +"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " +"yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu ayarın " +"devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk katmanları " +"tarafından belirlendiği anlamına gelir" msgid "Speed of travel which is faster and without extrusion" msgstr "Daha hızlı ve ekstrüzyonsuz seyahat hızı" @@ -14242,12 +14153,11 @@ msgid "Wipe Distance" msgstr "Temizleme mesafesi" msgid "" -"Describe how long the nozzle will move along the last path when " -"retracting. \n" +"Describe how long the nozzle will move along the last path when retracting. \n" "\n" -"Depending on how long the wipe operation lasts, how fast and long the " -"extruder/filament retraction settings are, a retraction move may be needed " -"to retract the remaining filament. \n" +"Depending on how long the wipe operation lasts, how fast and long the extruder/" +"filament retraction settings are, a retraction move may be needed to retract " +"the remaining filament. \n" "\n" "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." @@ -14255,18 +14165,18 @@ msgstr "" "Geri çekilirken nozulun son yol boyunca ne kadar süre hareket edeceğini " "açıklayın. \n" "\n" -"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme " -"ayarlarının ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı " -"geri çekmek için bir geri çekme hareketine ihtiyaç duyulabilir. \n" +"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme ayarlarının " +"ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı geri çekmek için " +"bir geri çekme hareketine ihtiyaç duyulabilir. \n" "\n" -"Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, " -"silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi " -"takdirde silme işleminden sonra gerçekleştirilecektir." +"Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, silme " +"işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi takdirde " +"silme işleminden sonra gerçekleştirilecektir." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " -"stabilize the chamber pressure inside the nozzle, in order to avoid " -"appearance defects when printing objects." +"stabilize the chamber pressure inside the nozzle, in order to avoid appearance " +"defects when printing objects." msgstr "" "Temizleme kulesi, nesneleri yazdırırken görünüm kusurlarını önlemek amacıyla " "nozul üzerindeki kalıntıları temizlemek ve nozul içindeki oda basıncını " @@ -14279,8 +14189,8 @@ msgid "Flush multiplier" msgstr "Temizleme çarpanı" msgid "" -"The actual flushing volumes is equal to the flush multiplier multiplied by " -"the flushing volumes in the table." +"The actual flushing volumes is equal to the flush multiplier multiplied by the " +"flushing volumes in the table." msgstr "" "Gerçek temizleme hacimleri, tablodaki temizleme hacimleri ile temizleme " "çarpanının çarpımına eşittir." @@ -14304,11 +14214,11 @@ msgid "Stabilization cone apex angle" msgstr "Stabilizasyon konisi tepe açısı" msgid "" -"Angle at the apex of the cone that is used to stabilize the wipe tower. " -"Larger angle means wider base." +"Angle at the apex of the cone that is used to stabilize the wipe tower. Larger " +"angle means wider base." msgstr "" -"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki " -"açı. Daha büyük açı daha geniş taban anlamına gelir." +"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki açı. " +"Daha büyük açı daha geniş taban anlamına gelir." msgid "Maximum wipe tower print speed" msgstr "Maksimum silme kulesi yazdırma hızı" @@ -14316,16 +14226,16 @@ msgstr "Maksimum silme kulesi yazdırma hızı" msgid "" "The maximum print speed when purging in the wipe tower and printing the wipe " "tower sparse layers. When purging, if the sparse infill speed or calculated " -"speed from the filament max volumetric speed is lower, the lowest will be " -"used instead.\n" +"speed from the filament max volumetric speed is lower, the lowest will be used " +"instead.\n" "\n" -"When printing the sparse layers, if the internal perimeter speed or " -"calculated speed from the filament max volumetric speed is lower, the lowest " -"will be used instead.\n" +"When printing the sparse layers, if the internal perimeter speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be used " +"instead.\n" "\n" -"Increasing this speed may affect the tower's stability as well as increase " -"the force with which the nozzle collides with any blobs that may have formed " -"on the wipe tower.\n" +"Increasing this speed may affect the tower's stability as well as increase the " +"force with which the nozzle collides with any blobs that may have formed on " +"the wipe tower.\n" "\n" "Before increasing this parameter beyond the default of 90mm/sec, make sure " "your printer can reliably bridge at the increased speeds and that ooze when " @@ -14335,9 +14245,9 @@ msgid "" "regardless of this setting." msgstr "" "Silme kulesinde temizleme yaparken ve silme kulesi seyrek katmanlarını " -"yazdırırken maksimum yazdırma hızı. Temizleme sırasında seyrek dolum hızı " -"veya filamanın maksimum hacimsel hızından hesaplanan hız daha düşükse, bunun " -"yerine en düşük olanı kullanılacaktır.\n" +"yazdırırken maksimum yazdırma hızı. Temizleme sırasında seyrek dolum hızı veya " +"filamanın maksimum hacimsel hızından hesaplanan hız daha düşükse, bunun yerine " +"en düşük olanı kullanılacaktır.\n" "\n" "Seyrek katmanları yazdırırken iç çevre hızı veya filamanın maksimum hacimsel " "hızından hesaplanan hız daha düşükse bunun yerine en düşük olanı " @@ -14355,8 +14265,8 @@ msgstr "" "kullanılır." msgid "" -"The extruder to use when printing perimeter of the wipe tower. Set to 0 to " -"use the one that is available (non-soluble would be preferred)." +"The extruder to use when printing perimeter of the wipe tower. Set to 0 to use " +"the one that is available (non-soluble would be preferred)." msgstr "" "Silme kulesinin çevresini yazdırırken kullanılacak ekstruder. Mevcut olanı " "kullanmak için 0 olarak ayarlayın (çözünmeyen tercih edilir)." @@ -14369,9 +14279,9 @@ msgid "" "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -"Bu vektör, silme kulesinde kullanılan her bir araçtan/araca geçiş için " -"gerekli hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme " -"hacimlerinin oluşturulmasını basitleştirmek için kullanılır." +"Bu vektör, silme kulesinde kullanılan her bir araçtan/araca geçiş için gerekli " +"hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme hacimlerinin " +"oluşturulmasını basitleştirmek için kullanılır." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -14395,13 +14305,13 @@ msgstr "" msgid "" "This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colours of the objects will be mixed " -"as a result. It will not take effect, unless the prime tower is enabled." +"filament and decrease the print time. Colours of the objects will be mixed as " +"a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için " -"filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için filament " +"değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç olarak " +"nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği sürece " +"etkili olmayacaktır." msgid "Maximal bridging distance" msgstr "Maksimum köprüleme mesafesi" @@ -14410,8 +14320,8 @@ msgid "Maximal distance between supports on sparse infill sections." msgstr "" "Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için bir " "filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"olarak nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği " +"sürece etkili olmayacaktır." msgid "Wipe tower purge lines spacing" msgstr "Silme kulesi temizleme hatları aralığı" @@ -14424,20 +14334,20 @@ msgstr "Temizleme için ekstra akış" msgid "" "Extra flow used for the purging lines on the wipe tower. This makes the " -"purging lines thicker or narrower than they normally would be. The spacing " -"is adjusted automatically." +"purging lines thicker or narrower than they normally would be. The spacing is " +"adjusted automatically." msgstr "" -"Silme kulesindeki temizleme hatları için ekstra akış kullanılır. Bu, " -"temizleme hatlarının normalde olduğundan daha kalın veya daha dar olmasına " -"neden olur. Aralık otomatik olarak ayarlanır." +"Silme kulesindeki temizleme hatları için ekstra akış kullanılır. Bu, temizleme " +"hatlarının normalde olduğundan daha kalın veya daha dar olmasına neden olur. " +"Aralık otomatik olarak ayarlanır." msgid "Idle temperature" msgstr "Boşta sıcaklık" msgid "" -"Nozzle temperature when the tool is currently not used in multi-tool " -"setups.This is only used when 'Ooze prevention' is active in Print Settings. " -"Set to 0 to disable." +"Nozzle temperature when the tool is currently not used in multi-tool setups." +"This is only used when 'Ooze prevention' is active in Print Settings. Set to 0 " +"to disable." msgstr "" "Alet şu anda çoklu alet kurulumlarında kullanılmadığında püskürtme ucu " "sıcaklığı. Bu yalnızca Yazdırma Ayarlarında ‘Sızıntı önleme’ etkin olduğunda " @@ -14452,36 +14362,36 @@ msgid "" "function is used to adjust size slightly when the object has assembling issue" msgstr "" "Nesnenin delikleri XY düzleminde yapılandırılan değer kadar büyütülür veya " -"küçültülür. Pozitif değer delikleri büyütür. Negatif değer delikleri " -"küçültür. Bu fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe " -"ayarlamak için kullanılır" +"küçültülür. Pozitif değer delikleri büyütür. Negatif değer delikleri küçültür. " +"Bu fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " +"kullanılır" msgid "X-Y contour compensation" msgstr "X-Y kontur telafisi" msgid "" -"Contour of object will be grown or shrunk in XY plane by the configured " -"value. Positive value makes contour bigger. Negative value makes contour " -"smaller. This function is used to adjust size slightly when the object has " -"assembling issue" +"Contour of object will be grown or shrunk in XY plane by the configured value. " +"Positive value makes contour bigger. Negative value makes contour smaller. " +"This function is used to adjust size slightly when the object has assembling " +"issue" msgstr "" "Nesnenin konturu XY düzleminde yapılandırılan değer kadar büyütülür veya " -"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. " -"Bu fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " +"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. Bu " +"fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " "kullanılır" msgid "Convert holes to polyholes" msgstr "Delikleri çokgen deliklere dönüştür" msgid "" -"Search for almost-circular holes that span more than one layer and convert " -"the geometry to polyholes. Use the nozzle size and the (biggest) diameter to " +"Search for almost-circular holes that span more than one layer and convert the " +"geometry to polyholes. Use the nozzle size and the (biggest) diameter to " "compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" -"Birden fazla katmana yayılan neredeyse dairesel delikleri arayın ve " -"geometriyi çoklu deliklere dönüştürün. Çoklu deliği hesaplamak için nozul " -"boyutunu ve (en büyük) çapı kullanın.\n" +"Birden fazla katmana yayılan neredeyse dairesel delikleri arayın ve geometriyi " +"çoklu deliklere dönüştürün. Çoklu deliği hesaplamak için nozul boyutunu ve (en " +"büyük) çapı kullanın.\n" "Bakın http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgid "Polyhole detection margin" @@ -14491,14 +14401,14 @@ msgstr "Çokgen delik tespiti marjı" msgid "" "Maximum defection of a point to the estimated radius of the circle.\n" "As cylinders are often exported as triangles of varying size, points may not " -"be on the circle circumference. This setting allows you some leeway to " -"broaden the detection.\n" +"be on the circle circumference. This setting allows you some leeway to broaden " +"the detection.\n" "In mm or in % of the radius." msgstr "" "Bir noktanın dairenin tahmini yarıçapına göre maksimum sapması.\n" "Silindirler genellikle farklı boyutlarda üçgenler olarak ihraç edildiğinden, " -"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz " -"için size biraz alan sağlar.\n" +"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz için " +"size biraz alan sağlar.\n" "inc mm cinsinden veya yarıçapın %'si cinsinden." msgid "Polyhole twist" @@ -14521,11 +14431,11 @@ msgid "Format of G-code thumbnails" msgstr "G kodu küçük resimlerinin formatı" msgid "" -"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " -"QOI for low memory firmware" +"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI " +"for low memory firmware" msgstr "" -"G kodu küçük resimlerinin formatı: En iyi kalite için PNG, en küçük boyut " -"için JPG, düşük bellekli donanım yazılımı için QOI" +"G kodu küçük resimlerinin formatı: En iyi kalite için PNG, en küçük boyut için " +"JPG, düşük bellekli donanım yazılımı için QOI" msgid "Use relative E distances" msgstr "Göreceli (relative) E mesafelerini kullan" @@ -14537,17 +14447,17 @@ msgid "" "printers. Default is checked" msgstr "" "\"label_objects\" seçeneği kullanılırken göreceli ekstrüzyon önerilir. Bazı " -"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." +"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 " -"very thin areas is used gap-fill. Arachne engine produces walls with " -"variable extrusion width" +"very thin areas is used gap-fill. Arachne engine produces walls with variable " +"extrusion width" msgstr "" -"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir " -"ve çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " +"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir ve " +"çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " "ekstrüzyon genişliğine sahip duvarlar üretir" msgid "Classic" @@ -14572,38 +14482,37 @@ msgid "Wall transitioning filter margin" msgstr "Duvar geçiş filtresi oranı" msgid "" -"Prevent transitioning back and forth between one extra wall and one less. " -"This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" +"Prevent transitioning back and forth between one extra wall and one less. This " +"margin extends the range of extrusion widths which follow to [Minimum wall " +"width - margin, 2 * Minimum wall width + margin]. Increasing this margin " +"reduces the number of transitions, which reduces the number of extrusion " +"starts/stops and travel time. However, large extrusion width variation can " +"lead to under- or overextrusion problems. It's expressed as a percentage over " +"nozzle diameter" msgstr "" -"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu " -"kenar boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar " -"genişliği + kenar boşluğu] şeklinde takip eden ekstrüzyon genişlikleri " -"aralığını genişletir. Bu marjın arttırılması geçiş sayısını azaltır, bu da " -"ekstrüzyonun başlama/durma sayısını ve seyahat süresini azaltır. Bununla " -"birlikte, büyük ekstrüzyon genişliği değişimi, yetersiz veya aşırı " -"ekstrüzyon sorunlarına yol açabilir. Nozul çapına göre yüzde olarak ifade " -"edilir" +"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu kenar " +"boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar genişliği " +"+ kenar boşluğu] şeklinde takip eden ekstrüzyon genişlikleri aralığını " +"genişletir. Bu marjın arttırılması geçiş sayısını azaltır, bu da ekstrüzyonun " +"başlama/durma sayısını ve seyahat süresini azaltır. Bununla birlikte, büyük " +"ekstrüzyon genişliği değişimi, yetersiz veya aşırı ekstrüzyon sorunlarına yol " +"açabilir. Nozul çapına göre yüzde olarak ifade edilir" msgid "Wall transitioning threshold angle" msgstr "Duvar geçiş açısı" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " -"shape with an angle greater than this setting will not have transitions and " -"no walls will be printed in the center to fill the remaining space. Reducing " -"this setting reduces the number and length of these center walls, but may " -"leave gaps or overextrude" +"shape with an angle greater than this setting will not have transitions and no " +"walls will be printed in the center to fill the remaining space. Reducing this " +"setting reduces the number and length of these center walls, but may leave " +"gaps or overextrude" msgstr "" -"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? " -"Bu ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak " -"ve kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu " -"ayarın düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır " -"ancak boşluklara veya aşırı çıkıntıya neden olabilir" +"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? Bu " +"ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak ve " +"kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu ayarın " +"düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır ancak " +"boşluklara veya aşırı çıkıntıya neden olabilir" msgid "Wall distribution count" msgstr "Duvar dağılım sayısı" @@ -14619,10 +14528,10 @@ msgid "Minimum feature size" msgstr "Minimum özellik boyutu" msgid "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the Minimum " -"feature size will be widened to the Minimum wall width. It's expressed as a " -"percentage over nozzle diameter" +"Minimum thickness of thin features. Model features that are thinner than this " +"value will not be printed, while features thicker than the Minimum feature " +"size will be widened to the Minimum wall width. It's expressed as a percentage " +"over nozzle diameter" msgstr "" "İnce özellikler için minimum kalınlık. Bu değerden daha ince olan model " "özellikleri yazdırılmayacak, Minimum özellik boyutundan daha kalın olan " @@ -14638,31 +14547,30 @@ msgid "" "\n" "NOTE: Bottom and top surfaces will not be affected by this value to prevent " "visual gaps on the outside of the model. Adjust 'One wall threshold' in the " -"Advanced settings below to adjust the sensitivity of what is considered a " -"top-surface. 'One wall threshold' is only visible if this setting is set " -"above the default value of 0.5, or if single-wall top surfaces is enabled." +"Advanced settings below to adjust the sensitivity of what is considered a top-" +"surface. 'One wall threshold' is only visible if this setting is set above the " +"default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" "Yazdırma süresini artırabilecek kısa, kapatılmamış duvarların yazdırılmasını " -"önlemek için bu değeri ayarlayın. Daha yüksek değerler daha fazla ve daha " -"uzun duvarları kaldırır.\n" +"önlemek için bu değeri ayarlayın. Daha yüksek değerler daha fazla ve daha uzun " +"duvarları kaldırır.\n" "\n" -"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler " -"bu değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin " -"hassasiyetini ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar " -"eşiği'ni ayarlayın. 'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan " -"0,5'in üzerine ayarlandığında veya tek duvarlı üst yüzeyler " -"etkinleştirildiğinde görünür." +"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler bu " +"değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin hassasiyetini " +"ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar eşiği'ni ayarlayın. " +"'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan 0,5'in üzerine " +"ayarlandığında veya tek duvarlı üst yüzeyler etkinleştirildiğinde görünür." msgid "First layer minimum wall width" msgstr "İlk katman minimum duvar genişliği" msgid "" -"The minimum wall width that should be used for the first layer is " -"recommended to be set to the same size as the nozzle. This adjustment is " -"expected to enhance adhesion." +"The minimum wall width that should be used for the first layer is recommended " +"to be set to the same size as the nozzle. This adjustment is expected to " +"enhance adhesion." msgstr "" -"İlk katman için kullanılması gereken minimum duvar genişliğinin nozul ile " -"aynı boyuta ayarlanması tavsiye edilir. Bu ayarlamanın yapışmayı artırması " +"İlk katman için kullanılması gereken minimum duvar genişliğinin nozul ile aynı " +"boyuta ayarlanması tavsiye edilir. Bu ayarlamanın yapışmayı artırması " "beklenmektedir." msgid "Minimum wall width" @@ -14671,21 +14579,21 @@ msgstr "Minimum duvar genişliği" msgid "" "Width of the wall that will replace thin features (according to the Minimum " "feature size) of the model. If the Minimum wall width is thinner than the " -"thickness of the feature, the wall will become as thick as the feature " -"itself. It's expressed as a percentage over nozzle diameter" +"thickness of the feature, the wall will become as thick as the feature itself. " +"It's expressed as a percentage over nozzle diameter" msgstr "" "Modelin ince özelliklerinin yerini alacak duvarın genişliği (Minimum özellik " "boyutuna göre). Minimum duvar genişliği özelliğin kalınlığından daha inceyse " -"duvar, özelliğin kendisi kadar kalın olacaktır. Nozul çapına göre yüzde " -"olarak ifade edilir" +"duvar, özelliğin kendisi kadar kalın olacaktır. Nozul çapına göre yüzde olarak " +"ifade edilir" msgid "Detect narrow internal solid infill" msgstr "Dar iç katı dolguyu tespit et" 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 by default." +"concentric pattern will be used for the area to speed printing up. Otherwise, " +"rectilinear pattern is used by default." msgstr "" "Bu seçenek dar dahili katı dolgu alanını otomatik olarak algılayacaktır. " "Etkinleştirilirse, yazdırmayı hızlandırmak amacıyla alanda eşmerkezli desen " @@ -14731,8 +14639,7 @@ msgstr "Yönlendirme Seçenekleri" msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" -"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-" -"otomatik" +"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-otomatik" msgid "Rotation angle around the Z axis in degrees." msgstr "Z ekseni etrafında derece cinsinden dönüş açısı." @@ -14747,9 +14654,8 @@ msgid "Data directory" msgstr "Veri dizini" msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." +"Load and store settings at the given directory. This is useful for maintaining " +"different profiles or including configurations from a network storage." msgstr "" "Ayarları verilen dizine yükleyin ve saklayın. Bu, farklı profilleri korumak " "veya bir ağ depolama birimindeki yapılandırmaları dahil etmek için " @@ -14772,25 +14678,24 @@ msgid "" "custom G-code travels somewhere else, it should write to this variable so " "OrcaSlicer knows where it travels from when it gets control back." msgstr "" -"Ekstruderin özel G kodu bloğunun başlangıcındaki konumu. Özel G kodu başka " -"bir yere seyahat ederse, Slicer'ın kontrolü geri aldığında nereden seyahat " +"Ekstruderin özel G kodu bloğunun başlangıcındaki konumu. Özel G kodu başka bir " +"yere seyahat ederse, Slicer'ın kontrolü geri aldığında nereden seyahat " "ettiğini bilmesi için bu değişkene yazması gerekir." msgid "" -"Retraction state at the beginning of the custom G-code block. If the custom " -"G-code moves the extruder axis, it should write to this variable so " -"OrcaSlicer de-retracts correctly when it gets control back." +"Retraction state at the beginning of the custom G-code block. If the custom G-" +"code moves the extruder axis, it should write to this variable so OrcaSlicer " +"de-retracts correctly when it gets control back." msgstr "" "Özel G kodu bloğunun başlangıcındaki geri çekilme durumu. Özel G kodu " -"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında " -"doğru şekilde geri çekme yapması için bu değişkene yazması gerekir." +"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında doğru " +"şekilde geri çekme yapması için bu değişkene yazması gerekir." msgid "Extra de-retraction" msgstr "Ekstra deretraksiyon" msgid "Currently planned extra extruder priming after de-retraction." -msgstr "" -"Şu anda, geri çekilmeden sonra ekstra ekstruder hazırlaması planlanıyor." +msgstr "Şu anda, geri çekilmeden sonra ekstra ekstruder hazırlaması planlanıyor." msgid "Absolute E position" msgstr "Mutlak E konumu" @@ -14812,8 +14717,7 @@ msgid "Current object index" msgstr "Geçerli nesne dizini" msgid "" -"Specific for sequential printing. Zero-based index of currently printed " -"object." +"Specific for sequential printing. Zero-based index of currently printed object." msgstr "" "Sıralı yazdırmaya özel. Şu anda yazdırılan nesnenin sıfır tabanlı dizini." @@ -14827,8 +14731,7 @@ msgid "Initial extruder" msgstr "İlk ekstruder" msgid "" -"Zero-based index of the first extruder used in the print. Same as " -"initial_tool." +"Zero-based index of the first extruder used in the print. Same as initial_tool." msgstr "" "Baskıda kullanılan ilk ekstruderin sıfır bazlı indeksi. başlangıç_aracı ile " "aynı." @@ -14840,14 +14743,12 @@ msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" -"Baskıda kullanılan ilk ekstruderin sıfır bazlı indeksi. İlk ekstruder ile " -"aynı." +"Baskıda kullanılan ilk ekstruderin sıfır bazlı indeksi. İlk ekstruder ile aynı." msgid "Is extruder used?" msgstr "Ekstruder kullanılıyor mu?" -msgid "" -"Vector of booleans stating whether a given extruder is used in the print." +msgid "Vector of booleans stating whether a given extruder is used in the print." msgstr "" "Belirli bir ekstruderin baskıda kullanılıp kullanılmadığını belirten bool " "vektörü." @@ -14885,18 +14786,18 @@ msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." msgstr "" -"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. " -"Filament Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." +"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. Filament " +"Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." msgid "Total weight" msgstr "Toplam ağırlık" msgid "" -"Total weight of the print. Calculated from filament_density value in " -"Filament Settings." +"Total weight of the print. Calculated from filament_density value in Filament " +"Settings." msgstr "" -"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu " -"değerinden hesaplanır." +"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu değerinden " +"hesaplanır." msgid "Total layer count" msgstr "Toplam katman sayısı" @@ -14915,8 +14816,7 @@ msgstr "Örnek sayısı" msgid "Total number of object instances in the print, summed over all objects." msgstr "" -"Tüm nesneler üzerinden toplanan, yazdırmadaki nesne örneklerinin toplam " -"sayısı." +"Tüm nesneler üzerinden toplanan, yazdırmadaki nesne örneklerinin toplam sayısı." msgid "Scale per object" msgstr "Nesne başına ölçeklendirme" @@ -14945,8 +14845,8 @@ msgstr "" "cinsindendir." msgid "" -"The vector has two elements: x and y dimension of the bounding box. Values " -"in mm." +"The vector has two elements: x and y dimension of the bounding box. Values in " +"mm." msgstr "" "Vektörün iki öğesi vardır: sınırlayıcı kutunun x ve y boyutu. Değerler mm " "cinsindendir." @@ -14958,8 +14858,8 @@ msgid "" "Vector of points of the first layer convex hull. Each element has the " "following format:'[x, y]' (x and y are floating-point numbers in mm)." msgstr "" -"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu " -"formata sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." +"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu formata " +"sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." msgid "Bottom-left corner of first layer bounding box" msgstr "İlk katman sınırlayıcı kutusunun sol alt köşesi" @@ -15026,8 +14926,8 @@ msgid "Number of extruders" msgstr "Ekstruder sayısı" msgid "" -"Total number of extruders, regardless of whether they are used in the " -"current print." +"Total number of extruders, regardless of whether they are used in the current " +"print." msgstr "" "Geçerli baskıda kullanılıp kullanılmadığına bakılmaksızın ekstrüderlerin " "toplam sayısı." @@ -15165,8 +15065,7 @@ msgstr "Sağlanan dosya boş olduğundan okunamadı" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı " -"olmalıdır." +"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı olmalıdır." msgid "Canceled" msgstr "İptal edildi" @@ -15225,8 +15124,7 @@ msgstr "Bitir" msgid "How to use calibration result?" msgstr "Kalibrasyon sonucu nasıl kullanılır?" -msgid "" -"You could change the Flow Dynamics Calibration Factor in material editing" +msgid "You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" "Malzeme düzenlemede Akış Dinamiği Kalibrasyon Faktörünü değiştirebilirsiniz" @@ -15288,8 +15186,7 @@ msgstr "yeni ön ayar oluşturma başarısız oldu." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" -"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin " -"misiniz?" +"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin misiniz?" msgid "No Printer Connected!" msgstr "Yazıcı Bağlı Değil!" @@ -15304,16 +15201,16 @@ msgid "The input value size must be 3." msgstr "Giriş değeri boyutu 3 olmalıdır." msgid "" -"This machine type can only hold 16 history results per nozzle. You can " -"delete the existing historical results and then start calibration. Or you " -"can continue the calibration, but you cannot create new calibration " -"historical results. \n" +"This machine type can only hold 16 history results per nozzle. You can delete " +"the existing historical results and then start calibration. Or you can " +"continue the calibration, but you cannot create new calibration historical " +"results. \n" "Do you still want to continue the calibration?" msgstr "" "Bu makine tipi, püskürtme ucu başına yalnızca 16 geçmiş sonucu tutabilir. " -"Mevcut geçmiş sonuçları silebilir ve ardından kalibrasyona " -"başlayabilirsiniz. Veya kalibrasyona devam edebilirsiniz ancak yeni " -"kalibrasyon geçmişi sonuçları oluşturamazsınız.\n" +"Mevcut geçmiş sonuçları silebilir ve ardından kalibrasyona başlayabilirsiniz. " +"Veya kalibrasyona devam edebilirsiniz ancak yeni kalibrasyon geçmişi sonuçları " +"oluşturamazsınız.\n" "Hala kalibrasyona devam etmek istiyor musunuz?" msgid "Connecting to printer..." @@ -15327,9 +15224,9 @@ msgstr "Akış Dinamiği Kalibrasyonu sonucu yazıcıya kaydedildi" #, c-format, boost-format msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" +"There is already a historical calibration result with the same name: %s. Only " +"one of the results with the same name is saved. Are you sure you want to " +"override the historical result?" msgstr "" "Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " "sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " @@ -15340,8 +15237,8 @@ msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." msgstr "" -"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir. " -"Bu sonuç kaydedilmeyecek." +"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir. Bu " +"sonuç kaydedilmeyecek." msgid "Internal Error" msgstr "İç hata" @@ -15359,23 +15256,21 @@ msgid "When do you need Flow Dynamics Calibration" msgstr "Akış Dinamiği Kalibrasyonuna ne zaman ihtiyacınız olur" msgid "" -"We now have added the auto-calibration for different filaments, which is " -"fully automated and the result will be saved into the printer for future " -"use. You only need to do the calibration in the following limited cases:\n" -"1. If you introduce a new filament of different brands/models or the " -"filament is damp;\n" +"We now have added the auto-calibration for different filaments, which is fully " +"automated and the result will be saved into the printer for future use. You " +"only need to do the calibration in the following limited cases:\n" +"1. If you introduce a new filament of different brands/models or the filament " +"is damp;\n" "2. if the nozzle is worn out or replaced with a new one;\n" -"3. If the max volumetric speed or print temperature is changed in the " -"filament setting." +"3. If the max volumetric speed or print temperature is changed in the filament " +"setting." msgstr "" "Artık farklı filamentler için tamamen otomatik olan otomatik kalibrasyonu " -"ekledik ve sonuç ileride kullanılmak üzere yazıcıya kaydedilecek. " -"Kalibrasyonu yalnızca aşağıdaki sınırlı durumlarda yapmanız gerekir:\n" -"1. Farklı marka/modelde yeni bir filament taktıysanız veya filament " -"nemliyse;\n" +"ekledik ve sonuç ileride kullanılmak üzere yazıcıya kaydedilecek. Kalibrasyonu " +"yalnızca aşağıdaki sınırlı durumlarda yapmanız gerekir:\n" +"1. Farklı marka/modelde yeni bir filament taktıysanız veya filament nemliyse;\n" "2. Nozul aşınmışsa veya yenisiyle değiştirilmişse;\n" -"3. Filament ayarında maksimum hacimsel hız veya baskı sıcaklığı " -"değiştirilirse." +"3. Filament ayarında maksimum hacimsel hız veya baskı sıcaklığı değiştirilirse." msgid "About this calibration" msgstr "Bu kalibrasyon hakkında" @@ -15383,17 +15278,17 @@ msgstr "Bu kalibrasyon hakkında" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" "\n" -"Usually the calibration is unnecessary. When you start a single color/" -"material print, with the \"flow dynamics calibration\" option checked in the " -"print start menu, the printer will follow the old way, calibrate the " -"filament before the print; When you start a multi color/material print, the " -"printer will use the default compensation parameter for the filament during " -"every filament switch which will have a good result in most cases.\n" +"Usually the calibration is unnecessary. When you start a single color/material " +"print, with the \"flow dynamics calibration\" option checked in the print " +"start menu, the printer will follow the old way, calibrate the filament before " +"the print; When you start a multi color/material print, the printer will use " +"the default compensation parameter for the filament during every filament " +"switch which will have a good result in most cases.\n" "\n" "Please note that there are a few cases that can make the calibration results " "unreliable, such as insufficient adhesion on the build plate. Improving " -"adhesion can be achieved by washing the build plate or applying glue. For " -"more information on this topic, please refer to our Wiki.\n" +"adhesion can be achieved by washing the build plate or applying glue. For more " +"information on this topic, please refer to our Wiki.\n" "\n" "The calibration results have about 10 percent jitter in our test, which may " "cause the result not exactly the same in each calibration. We are still " @@ -15404,15 +15299,15 @@ msgstr "" "Genellikle kalibrasyon gereksizdir. Baskı başlatma menüsünde \"akış " "dinamikleri kalibrasyonu\" seçeneği işaretliyken tek renkli/malzemeli bir " "baskı başlattığınızda, yazıcı eski yolu izleyecek, baskıdan önce filamenti " -"kalibre edecektir; Çok renkli/malzemeli bir baskı başlattığınızda, yazıcı " -"her filament değişimi sırasında filament için varsayılan telafi " -"parametresini kullanacaktır ve bu da çoğu durumda iyi bir sonuç verecektir.\n" +"kalibre edecektir; Çok renkli/malzemeli bir baskı başlattığınızda, yazıcı her " +"filament değişimi sırasında filament için varsayılan telafi parametresini " +"kullanacaktır ve bu da çoğu durumda iyi bir sonuç verecektir.\n" "\n" -"Yapı plakası üzerinde yetersiz yapışma gibi kalibrasyon sonuçlarını " -"güvenilmez hale getirebilecek birkaç durum olduğunu lütfen unutmayın. " -"Yapıştırma plakası yıkanarak veya yapıştırıcı uygulanarak yapışmanın " -"iyileştirilmesi sağlanabilir. Bu konu hakkında daha fazla bilgi için lütfen " -"Wiki sayfamıza bakın.\n" +"Yapı plakası üzerinde yetersiz yapışma gibi kalibrasyon sonuçlarını güvenilmez " +"hale getirebilecek birkaç durum olduğunu lütfen unutmayın. Yapıştırma plakası " +"yıkanarak veya yapıştırıcı uygulanarak yapışmanın iyileştirilmesi " +"sağlanabilir. Bu konu hakkında daha fazla bilgi için lütfen Wiki sayfamıza " +"bakın.\n" "\n" "Kalibrasyon sonuçları testimizde yaklaşık yüzde 10 titremeye sahiptir, bu da " "sonucun her kalibrasyonda tam olarak aynı olmamasına neden olabilir. Yeni " @@ -15426,8 +15321,8 @@ msgid "" "issues, such as:\n" "1. Over-Extrusion: Excess material on your printed object, forming blobs or " "zits, or the layers seem thicker than expected and not uniform.\n" -"2. Under-Extrusion: Very thin layers, weak infill strength, or gaps in the " -"top layer of the model, even when printing slowly.\n" +"2. Under-Extrusion: Very thin layers, weak infill strength, or gaps in the top " +"layer of the model, even when printing slowly.\n" "3. Poor Surface Quality: The surface of your prints seems rough or uneven.\n" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." @@ -15456,10 +15351,10 @@ msgstr "" msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " "volumes. The default setting works well in Bambu Lab printers and official " -"filaments as they were pre-calibrated and fine-tuned. For a regular " -"filament, you usually won't need to perform a Flow Rate Calibration unless " -"you still see the listed defects after you have done other calibrations. For " -"more details, please check out the wiki article." +"filaments as they were pre-calibrated and fine-tuned. For a regular filament, " +"you usually won't need to perform a Flow Rate Calibration unless you still see " +"the listed defects after you have done other calibrations. For more details, " +"please check out the wiki article." msgstr "" "Akış Hızı Kalibrasyonu, beklenen ekstrüzyon hacimlerinin gerçek ekstrüzyon " "hacimlerine oranını ölçer. Varsayılan ayar, önceden kalibre edilmiş ve ince " @@ -15474,25 +15369,24 @@ msgid "" "directly measuring the calibration patterns. However, please be advised that " "the efficacy and accuracy of this method may be compromised with specific " "types of materials. Particularly, filaments that are transparent or semi-" -"transparent, sparkling-particled, or have a high-reflective finish may not " -"be suitable for this calibration and can produce less-than-desirable " -"results.\n" +"transparent, sparkling-particled, or have a high-reflective finish may not be " +"suitable for this calibration and can produce less-than-desirable results.\n" "\n" -"The calibration results may vary between each calibration or filament. We " -"are still improving the accuracy and compatibility of this calibration " -"through firmware updates over time.\n" +"The calibration results may vary between each calibration or filament. We are " +"still improving the accuracy and compatibility of this calibration through " +"firmware updates over time.\n" "\n" -"Caution: Flow Rate Calibration is an advanced process, to be attempted only " -"by those who fully understand its purpose and implications. Incorrect usage " -"can lead to sub-par prints or printer damage. Please make sure to carefully " -"read and understand the process before doing it." +"Caution: Flow Rate Calibration is an advanced process, to be attempted only by " +"those who fully understand its purpose and implications. Incorrect usage can " +"lead to sub-par prints or printer damage. Please make sure to carefully read " +"and understand the process before doing it." msgstr "" "Otomatik Akış Hızı Kalibrasyonu, Bambu Lab'ın Mikro-Lidar teknolojisini " "kullanarak kalibrasyon modellerini doğrudan ölçer. Ancak, bu yöntemin " "etkinliğinin ve doğruluğunun belirli malzeme türleriyle tehlikeye " "girebileceğini lütfen unutmayın. Özellikle şeffaf veya yarı şeffaf, parlak " -"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon " -"için uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" +"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon için " +"uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" "\n" "Kalibrasyon sonuçları her kalibrasyon veya filament arasında farklılık " "gösterebilir. Zaman içinde ürün yazılımı güncellemeleriyle bu kalibrasyonun " @@ -15501,8 +15395,8 @@ msgstr "" "Dikkat: Akış Hızı Kalibrasyonu, yalnızca amacını ve sonuçlarını tam olarak " "anlayan kişiler tarafından denenmesi gereken gelişmiş bir işlemdir. Yanlış " "kullanım, ortalamanın altında baskılara veya yazıcının zarar görmesine neden " -"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup " -"anladığınızdan emin olun." +"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup anladığınızdan " +"emin olun." msgid "When you need Max Volumetric Speed Calibration" msgstr "Maksimum Hacimsel Hız Kalibrasyonuna ihtiyaç duyduğunuzda" @@ -15524,15 +15418,15 @@ msgid "We found the best Flow Dynamics Calibration Factor" msgstr "En iyi Akış Dinamiği Kalibrasyon Faktörünü bulduk" msgid "" -"Part of the calibration failed! You may clean the plate and retry. The " -"failed test result would be dropped." +"Part of the calibration failed! You may clean the plate and retry. The failed " +"test result would be dropped." msgstr "" "Kalibrasyonun bir kısmı başarısız oldu! Plakayı temizleyip tekrar " "deneyebilirsiniz. Başarısız olan test sonucu görmezden gelinir." msgid "" -"*We recommend you to add brand, materia, type, and even humidity level in " -"the Name" +"*We recommend you to add brand, materia, type, and even humidity level in the " +"Name" msgstr "*İsme marka, malzeme, tür ve hatta nem seviyesini eklemenizi öneririz" msgid "Failed" @@ -16104,8 +15998,8 @@ msgstr "" msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" -"Özel satıcı veya seri numarasındaki tüm girişler boşluklardan oluşuyor. " -"Lütfen tekrar girin." +"Özel satıcı veya seri numarasındaki tüm girişler boşluklardan oluşuyor. Lütfen " +"tekrar girin." msgid "The vendor can not be a number. Please re-enter." msgstr "Üretici bir sayı olamaz. Lütfen tekrar girin." @@ -16121,8 +16015,8 @@ msgid "" "name. Do you want to continue?" msgstr "" "Oluşturduğunuz %s Filament adı zaten mevcut.\n" -"Oluşturmaya devam ederseniz oluşturulan ön ayar tam adıyla " -"görüntülenecektir. Devam etmek istiyor musun?" +"Oluşturmaya devam ederseniz oluşturulan ön ayar tam adıyla görüntülenecektir. " +"Devam etmek istiyor musun?" msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Aşağıdaki gibi bazı mevcut ön ayarlar oluşturulamadı:\n" @@ -16135,8 +16029,7 @@ msgstr "" "Yeniden yazmak ister misin?" 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 printers, Please go to printer selection" msgstr "" "Ön ayarları şu şekilde yeniden adlandırırdık: \"Satıcı Türü Seçtiğiniz Seri " @@ -16235,25 +16128,25 @@ msgid "Back Page 1" msgstr "Arka Sayfa 1" msgid "" -"You have not yet chosen which printer preset to create based on. Please " -"choose the vendor and model of the printer" +"You have not yet chosen which printer preset to create based on. Please choose " +"the vendor and model of the printer" msgstr "" -"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen " -"yazıcının satıcısını ve modelini seçin" +"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen yazıcının " +"satıcısını ve modelini seçin" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" -"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. " -"Lütfen oluşturmadan önce kontrol edin." +"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. Lütfen " +"oluşturmadan önce kontrol edin." msgid "The custom printer or model is not entered, please enter it." msgstr "Özel yazıcı veya model girilmedi lütfen giriş yapın." msgid "" -"The printer preset you created already has a preset with the same name. Do " -"you want to overwrite it?\n" +"The printer preset you created already has a preset with the same name. Do you " +"want to overwrite it?\n" "\tYes: Overwrite the printer preset with the same name, and filament and " "process presets with the same preset name will be recreated \n" "and filament and process presets without the same preset name will be " @@ -16263,8 +16156,7 @@ msgstr "" "Oluşturduğunuz yazıcı ön ayarının zaten aynı ada sahip bir ön ayarı var. " "Üzerine yazmak istiyor musunuz?\n" "\tEvet: Aynı adı taşıyan yazıcı ön ayarının üzerine yazın; aynı ön ayar adı " -"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön " -"ayar \n" +"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön ayar \n" "adı olmayan filament ve işlem ön ayarları rezerve edilecektir.\n" "\tİptal: Ön ayar oluşturmayın, oluşturma arayüzüne dönün." @@ -16310,8 +16202,7 @@ msgstr "" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "" -"Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." +msgstr "Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." msgid "Create Printer Successful" msgstr "Yazıcı Oluşturma Başarılı" @@ -16331,8 +16222,8 @@ msgstr "Filament Oluşturuldu" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed has a significant impact on printing quality. Please set " -"them carefully." +"volumetric speed has a significant impact on printing quality. Please set them " +"carefully." msgstr "" "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament ayarına " "gidin.\n" @@ -16394,13 +16285,13 @@ msgstr "Dışa aktarma başarılı" #, c-format, boost-format msgid "" -"The '%s' folder already exists in the current directory. Do you want to " -"clear it and rebuild it.\n" +"The '%s' folder already exists in the current directory. Do you want to clear " +"it and rebuild it.\n" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" -"'%s' klasörü mevcut dizinde zaten mevcut. Onu temizleyip yeniden oluşturmak " -"mı istiyorsunuz?\n" +"'%s' klasörü mevcut dizinde zaten mevcut. Onu temizleyip yeniden oluşturmak mı " +"istiyorsunuz?\n" "Değilse, bir zaman son eki eklenecektir ve oluşturulduktan sonra adı " "değiştirebilirsiniz." @@ -16434,8 +16325,8 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek " -"ve seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." +"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek ve " +"seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." msgid "" "Only the filament names with user filament presets will be displayed, \n" @@ -16443,13 +16334,13 @@ msgid "" "exported as a zip." msgstr "" "Yalnızca kullanıcı filamenti ön ayarlarına sahip filament adları \n" -"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti " -"ön ayarları zip olarak dışa aktarılacaktır." +"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti ön " +"ayarları zip olarak dışa aktarılacaktır." 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." +"and all user process presets in each printer name you select will be exported " +"as a zip." msgstr "" "Yalnızca işlem ön ayarları değiştirilen yazıcı adları görüntülenecek \n" "ve seçtiğiniz her yazıcı adındaki tüm kullanıcı işlem ön ayarları zip olarak " @@ -16473,8 +16364,8 @@ msgid "Filament presets under this filament" msgstr "Bu filamentin altındaki filament ön ayarları" msgid "" -"Note: If the only preset under this filament is deleted, the filament will " -"be deleted after exiting the dialog." +"Note: If the only preset under this filament is deleted, the filament will be " +"deleted after exiting the dialog." msgstr "" "Not: Bu filamentin altındaki tek ön ayar silinirse, diyalogdan çıkıldıktan " "sonra filament silinecektir." @@ -16592,8 +16483,7 @@ msgstr "Aygıt sekmesinde yazdırma ana bilgisayarı web arayüzünü görüntü msgid "Replace the BambuLab's device tab with print host webui" msgstr "" -"BambuLab’ın aygıt sekmesini yazdırma ana bilgisayarı web arayüzüyle " -"değiştirin" +"BambuLab’ın aygıt sekmesini yazdırma ana bilgisayarı web arayüzüyle değiştirin" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" @@ -16613,8 +16503,8 @@ msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" -"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan " -"HTTPS sertifikalarını kullanıyor." +"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan HTTPS " +"sertifikalarını kullanıyor." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " @@ -16669,8 +16559,8 @@ msgid "Could not connect to FlashAir" msgstr "FlashAir'e bağlanılamadı" msgid "" -"Note: FlashAir with firmware 2.00.02 or newer and activated upload function " -"is required." +"Note: FlashAir with firmware 2.00.02 or newer and activated upload function is " +"required." msgstr "" "Not: Firmware 2.00.02 veya daha yeni ve etkinleştirilmiş yükleme işlevine " "sahip FlashAir gereklidir." @@ -16764,36 +16654,34 @@ msgstr "" "Hata: \"%2%\"" msgid "" -"It has a small layer height, and results in almost negligible layer lines " -"and high printing quality. It is suitable for most general printing cases." +"It has a small layer height, and results in almost negligible layer lines and " +"high printing quality. It is suitable for most general printing cases." msgstr "" "Küçük bir katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir katman " "çizgileri ve yüksek baskı kalitesi sağlar. Çoğu genel yazdırma durumu için " "uygundur." msgid "" -"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " -"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " -"much higher printing quality, but a much longer printing time." +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and " +"acceleration, and the sparse infill pattern is Gyroid. So, it results in much " +"higher printing quality, but a much longer printing time." msgstr "" "0,2 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha düşük hız " -"ve ivmeye sahiptir ve seyrek dolgu deseni Gyroid’dir. Böylece çok daha " -"yüksek baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde " -"edilir." +"ve ivmeye sahiptir ve seyrek dolgu deseni Gyroid’dir. Böylece çok daha yüksek " +"baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde edilir." msgid "" -"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " -"bigger layer height, and results in almost negligible layer lines, and " -"slightly shorter printing time." +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger " +"layer height, and results in almost negligible layer lines, and slightly " +"shorter printing time." msgstr "" -"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " -"biraz daha büyük katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir " -"düzeyde katman çizgileri ve biraz daha kısa yazdırma süresi sağlar." +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, biraz " +"daha büyük katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir düzeyde " +"katman çizgileri ve biraz daha kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " -"height, and results in slightly visible layer lines, but shorter printing " -"time." +"height, and results in slightly visible layer lines, but shorter printing time." msgstr "" "0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " "büyük bir katman yüksekliğine sahiptir ve katman çizgilerinin hafifçe " @@ -16804,15 +16692,15 @@ msgid "" "height, and results in almost invisible layer lines and higher printing " "quality, but shorter printing time." msgstr "" -"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " -"katman yüksekliği daha küçüktür ve neredeyse görünmez katman çizgileri ve " -"daha yüksek baskı kalitesi, ancak daha kısa yazdırma süresi sağlar." +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, katman " +"yüksekliği daha küçüktür ve neredeyse görünmez katman çizgileri ve daha yüksek " +"baskı kalitesi, ancak daha kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " -"lines, lower speeds and acceleration, and the sparse infill pattern is " -"Gyroid. So, it results in almost invisible layer lines and much higher " -"printing quality, but much longer printing time." +"lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. " +"So, it results in almost invisible layer lines and much higher printing " +"quality, but much longer printing time." msgstr "" "0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " "katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " @@ -16826,14 +16714,14 @@ msgid "" "shorter printing time." msgstr "" "Varsayılan 0,2 mm püskürtme ucu profiliyle karşılaştırıldığında, daha küçük " -"katman yüksekliğine sahiptir ve minimum katman çizgileri ve daha yüksek " -"baskı kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." +"katman yüksekliğine sahiptir ve minimum katman çizgileri ve daha yüksek baskı " +"kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " -"lines, lower speeds and acceleration, and the sparse infill pattern is " -"Gyroid. So, it results in minimal layer lines and much higher printing " -"quality, but much longer printing time." +"lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. " +"So, it results in minimal layer lines and much higher printing quality, but " +"much longer printing time." msgstr "" "0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " "katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " @@ -16841,8 +16729,8 @@ msgstr "" "kalitesi elde edilir, ancak çok daha uzun baskı süresi elde edilir." msgid "" -"It has a general layer height, and results in general layer lines and " -"printing quality. It is suitable for most general printing cases." +"It has a general layer height, and results in general layer lines and printing " +"quality. It is suitable for most general printing cases." msgstr "" "Genel bir katman yüksekliğine sahiptir ve genel katman çizgileri ve baskı " "kalitesiyle sonuçlanır. Çoğu genel yazdırma durumu için uygundur." @@ -16864,8 +16752,7 @@ msgid "" msgstr "" "0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " "büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " -"daha düşük baskı kalitesi sağlar, ancak biraz daha kısa yazdırma süresi " -"sağlar." +"daha düşük baskı kalitesi sağlar, ancak biraz daha kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " @@ -16878,12 +16765,12 @@ msgstr "" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " -"height, and results in less apparent layer lines and higher printing " -"quality, but longer printing time." +"height, and results in less apparent layer lines and higher printing quality, " +"but longer printing time." msgstr "" "0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " -"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri " -"ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri ve " +"daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -16902,10 +16789,9 @@ msgid "" "height, and results in almost negligible layer lines and higher printing " "quality, but longer printing time." msgstr "" -"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " -"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilir katman " -"çizgileri ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma " -"süresi sağlar." +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, katman " +"yüksekliği daha küçüktür ve neredeyse göz ardı edilebilir katman çizgileri ve " +"daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " @@ -16921,12 +16807,11 @@ msgstr "" msgid "" "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " -"height, and results in almost negligible layer lines and longer printing " -"time." +"height, and results in almost negligible layer lines and longer printing time." msgstr "" -"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " -"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilecek düzeyde " -"katman çizgileri ve daha uzun yazdırma süresi sağlar." +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, katman " +"yüksekliği daha küçüktür ve neredeyse göz ardı edilebilecek düzeyde katman " +"çizgileri ve daha uzun yazdırma süresi sağlar." msgid "" "It has a big layer height, and results in apparent layer lines and ordinary " @@ -16957,13 +16842,13 @@ msgstr "" msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " -"height, and results in much more apparent layer lines and much lower " -"printing quality, but shorter printing time in some printing cases." +"height, and results in much more apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." msgstr "" "0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " "büyük bir katman yüksekliğine sahiptir ve çok daha belirgin katman çizgileri " -"ve çok daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında " -"daha kısa yazdırma süresi sağlar." +"ve çok daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında daha " +"kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " @@ -16971,25 +16856,25 @@ msgid "" "quality, but longer printing time." msgstr "" "0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " -"küçük bir katman yüksekliğine sahiptir ve katman çizgilerinin daha az " -"belirgin olmasına ve biraz daha yüksek baskı kalitesine, ancak daha uzun " -"yazdırma süresine neden olur." +"küçük bir katman yüksekliğine sahiptir ve katman çizgilerinin daha az belirgin " +"olmasına ve biraz daha yüksek baskı kalitesine, ancak daha uzun yazdırma " +"süresine neden olur." msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " -"height, and results in less apparent layer lines and higher printing " -"quality, but longer printing time." +"height, and results in less apparent layer lines and higher printing quality, " +"but longer printing time." msgstr "" "0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " -"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri " -"ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri ve " +"daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." msgid "" -"It has a very big layer height, and results in very apparent layer lines, " -"low printing quality and general printing time." +"It has a very big layer height, and results in very apparent layer lines, low " +"printing quality and general printing time." msgstr "" -"Çok büyük bir katman yüksekliğine sahiptir ve çok belirgin katman " -"çizgilerine, düşük baskı kalitesine ve genel yazdırma süresine neden olur." +"Çok büyük bir katman yüksekliğine sahiptir ve çok belirgin katman çizgilerine, " +"düşük baskı kalitesine ve genel yazdırma süresine neden olur." msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " @@ -16997,9 +16882,9 @@ msgid "" "quality, but shorter printing time in some printing cases." msgstr "" "0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " -"büyük bir katman yüksekliğine sahiptir ve çok belirgin katman çizgileri ve " -"çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma " -"durumlarında daha kısa yazdırma süresi sağlar." +"büyük bir katman yüksekliğine sahiptir ve çok belirgin katman çizgileri ve çok " +"daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma durumlarında daha " +"kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " @@ -17008,8 +16893,8 @@ msgid "" msgstr "" "0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, çok " "daha büyük bir katman yüksekliğine sahiptir ve son derece belirgin katman " -"çizgileri ve çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı " -"yazdırma durumlarında çok daha kısa yazdırma süresi sağlar." +"çizgileri ve çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma " +"durumlarında çok daha kısa yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a slightly " @@ -17017,15 +16902,15 @@ msgid "" "lines and slightly higher printing quality, but longer printing time in some " "printing cases." msgstr "" -"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " -"biraz daha küçük bir katman yüksekliğine sahiptir ve biraz daha az ama yine " -"de görünür katman çizgileri ve biraz daha yüksek baskı kalitesi sağlar, " -"ancak bazı yazdırma durumlarında daha uzun yazdırma süresi sağlar." +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, biraz " +"daha küçük bir katman yüksekliğine sahiptir ve biraz daha az ama yine de " +"görünür katman çizgileri ve biraz daha yüksek baskı kalitesi sağlar, ancak " +"bazı yazdırma durumlarında daha uzun yazdırma süresi sağlar." msgid "" "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " -"height, and results in less but still apparent layer lines and slightly " -"higher printing quality, but longer printing time in some printing cases." +"height, and results in less but still apparent layer lines and slightly higher " +"printing quality, but longer printing time in some printing cases." msgstr "" "0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " "küçük bir katman yüksekliğine sahiptir ve daha az ama yine de görünür katman " @@ -17092,8 +16977,7 @@ msgid "" msgstr "" "Sandviç modu\n" "Modelinizde çok dik çıkıntılar yoksa hassasiyeti ve katman tutarlılığını " -"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor " -"muydunuz?" +"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -17151,18 +17035,18 @@ msgstr "" #: 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." +"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?" +"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?" +"Did you know that Reverse on odd feature can significantly improve the " +"surface quality of your overhangs?" msgstr "" "Tersine çevir\n" "Tersine çevir özelliğinin çıkıntılarınızın yüzey kalitesini önemli " @@ -17175,8 +17059,8 @@ msgid "" "cutting tool?" msgstr "" "Kesme Aleti\n" -"Kesici aletle bir modeli istediğiniz açıda ve konumda kesebileceğinizi " -"biliyor muydunuz?" +"Kesici aletle bir modeli istediğiniz açıda ve konumda kesebileceğinizi biliyor " +"muydunuz?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -17185,8 +17069,8 @@ msgid "" "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?" +"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 "" @@ -17212,15 +17096,15 @@ msgid "" "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?" +"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 "" "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." +"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." msgstr "" "Yüzüstü yatır\n" "Bir modeli, yüzlerinden biri baskı yatağına oturacak şekilde hızla " @@ -17230,12 +17114,12 @@ msgstr "" #: resources/data/hints.ini: [hint:Object List] msgid "" "Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" +"Did you know that you can view all objects/parts in a list and change settings " +"for each object/part?" msgstr "" "Nesne Listesi\n" -"Tüm nesneleri/parçaları bir listede görüntüleyebileceğinizi ve her nesne/" -"parça için ayarları değiştirebileceğinizi biliyor muydunuz?" +"Tüm nesneleri/parçaları bir listede görüntüleyebileceğinizi ve her nesne/parça " +"için ayarları değiştirebileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Search Functionality] msgid "" @@ -17307,26 +17191,26 @@ msgstr "" #: resources/data/hints.ini: [hint:Z seam location] msgid "" "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!" +"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!" msgstr "" "Z dikiş konumu\n" "Z dikişinin konumunu kişiselleştirebileceğinizi ve hatta daha az görünür bir " -"konuma getirmek için baskının üzerine boyayabileceğinizi biliyor muydunuz? " -"Bu, modelinizin genel görünümünü iyileştirir. Buna bir bak!" +"konuma getirmek için baskının üzerine boyayabileceğinizi biliyor muydunuz? Bu, " +"modelinizin genel görünümünü iyileştirir. Buna bir bak!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" "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." +"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." msgstr "" "Akış hızı için ince ayar\n" "Baskıların daha da iyi görünmesi için akış hızına ince ayar yapılabileceğini " -"biliyor muydunuz? Malzemeye bağlı olarak, bazı ince ayarlar yaparak " -"yazdırılan modelin genel yüzeyini iyileştirebilirsiniz." +"biliyor muydunuz? Malzemeye bağlı olarak, bazı ince ayarlar yaparak yazdırılan " +"modelin genel yüzeyini iyileştirebilirsiniz." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -17348,19 +17232,19 @@ msgid "" "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!" +"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 "" "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." +"makes it easy to place the support material only on the sections of the model " +"that actually need it." msgstr "" "Destek boyama\n" -"Desteklerinizin yerini boyayabileceğinizi biliyor muydunuz? Bu özellik, " -"destek malzemesinin yalnızca modelin gerçekten ihtiyaç duyulan bölümlerine " +"Desteklerinizin yerini boyayabileceğinizi biliyor muydunuz? Bu özellik, destek " +"malzemesinin yalnızca modelin gerçekten ihtiyaç duyulan bölümlerine " "yerleştirilmesini kolaylaştırır." #: resources/data/hints.ini: [hint:Different types of supports] @@ -17384,14 +17268,14 @@ msgid "" 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." +"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 "" "Brim for better adhesion\n" -"Did you know that when printing models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" +"Did you know that when printing models have a small contact interface with the " +"printing surface, it's recommended to use a brim?" msgstr "" "Daha iyi yapışma için kenar\n" "Baskı modellerinde baskı yüzeyi ile küçük bir temas arayüzü bulunduğunda " @@ -17422,14 +17306,14 @@ msgid "" "support/objects/infill during filament change?" msgstr "" "Desteğe/nesnelere/dolguya hizalayın\n" -"Filament değişimi sırasında, boşa harcanan filamenti desteğe/nesnelere/" -"dolguya yıkayarak kurtarabileceğinizi biliyor muydunuz?" +"Filament değişimi sırasında, boşa harcanan filamenti desteğe/nesnelere/dolguya " +"yıkayarak kurtarabileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" "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?" +"Did you know that you can use more wall loops and higher sparse infill density " +"to improve the strength of the model?" msgstr "" "Gücü artırın\n" "Modelin gücünü artırmak için daha fazla duvar halkası ve daha yüksek seyrek " @@ -17489,8 +17373,8 @@ msgstr "" #~ "useful. Can be a % of the perimeter width.\n" #~ "Value 0 enables reversal on every even layers regardless." #~ msgstr "" -#~ "Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması " -#~ "gerekir. Çevre genişliğinin %’si olabilir.\n" +#~ "Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması gerekir. " +#~ "Çevre genişliğinin %’si olabilir.\n" #~ "0 değeri ne olursa olsun her çift katmanda ters çevirmeyi mümkün kılar." #~ msgid "Reverse on odd" @@ -17505,8 +17389,8 @@ msgstr "" #~ "stresses in the part walls." #~ msgstr "" #~ "Tek katmanlarda ters yönde bir çıkıntının üzerinde bir kısmı bulunan " -#~ "çevreleri ekstrüzyonla çıkarın. Bu alternatif desen, dik çıkıntıları " -#~ "büyük ölçüde iyileştirebilir.\n" +#~ "çevreleri ekstrüzyonla çıkarın. Bu alternatif desen, dik çıkıntıları büyük " +#~ "ölçüde iyileştirebilir.\n" #~ "\n" #~ "Bu ayar aynı zamanda parça duvarlarındaki gerilimin azalması nedeniyle " #~ "parçanın bükülmesinin azaltılmasına da yardımcı olabilir." @@ -17516,10 +17400,10 @@ msgstr "" #~ "\n" #~ "This setting greatly reduces part stresses as they are now distributed in " #~ "alternating directions. This should reduce part warping while also " -#~ "maintaining external wall quality. This feature can be very useful for " -#~ "warp prone material, like ABS/ASA, and also for elastic filaments, like " -#~ "TPU and Silk PLA. It can also help reduce warping on floating regions " -#~ "over supports.\n" +#~ "maintaining external wall quality. This feature can be very useful for warp " +#~ "prone material, like ABS/ASA, and also for elastic filaments, like TPU and " +#~ "Silk PLA. It can also help reduce warping on floating regions over " +#~ "supports.\n" #~ "\n" #~ "For this setting to be the most effective, it is recommended to set the " #~ "Reverse Threshold to 0 so that all internal walls print in alternating " @@ -17527,16 +17411,16 @@ msgstr "" #~ msgstr "" #~ "Ters çevre mantığını yalnızca iç çevrelere uygulayın. \n" #~ "\n" -#~ "Bu ayar, parçalar artık farklı yönlerde dağıtıldığından parça " -#~ "gerilimlerini büyük ölçüde azaltır. Bu, dış duvar kalitesini korurken " -#~ "parçanın bükülmesini de azaltacaktır. Bu özellik, ABS/ASA gibi eğrilmeye " -#~ "yatkın malzemeler ve ayrıca TPU ve İpek PLA gibi elastik filamentler için " -#~ "çok faydalı olabilir. Ayrıca destekler üzerindeki yüzen bölgelerdeki " -#~ "bükülmenin azaltılmasına da yardımcı olabilir.\n" +#~ "Bu ayar, parçalar artık farklı yönlerde dağıtıldığından parça gerilimlerini " +#~ "büyük ölçüde azaltır. Bu, dış duvar kalitesini korurken parçanın " +#~ "bükülmesini de azaltacaktır. Bu özellik, ABS/ASA gibi eğrilmeye yatkın " +#~ "malzemeler ve ayrıca TPU ve İpek PLA gibi elastik filamentler için çok " +#~ "faydalı olabilir. Ayrıca destekler üzerindeki yüzen bölgelerdeki bükülmenin " +#~ "azaltılmasına da yardımcı olabilir.\n" #~ "\n" #~ "Bu ayarın en etkili olması için, tüm iç duvarların çıkıntı derecelerine " -#~ "bakılmaksızın tek katmanlar üzerine değişen yönlerde yazdırılması için " -#~ "Ters Eşiği 0'a ayarlamanız önerilir." +#~ "bakılmaksızın tek katmanlar üzerine değişen yönlerde yazdırılması için Ters " +#~ "Eşiği 0'a ayarlamanız önerilir." #, no-c-format, no-boost-format #~ msgid "" @@ -17544,25 +17428,25 @@ msgstr "" #~ "useful. Can be a % of the perimeter width.\n" #~ "Value 0 enables reversal on every odd layers regardless." #~ msgstr "" -#~ "Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması " -#~ "gerekir. Çevre genişliğinin %'si olabilir.\n" +#~ "Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması gerekir. " +#~ "Çevre genişliğinin %'si olabilir.\n" #~ "Değer 0 her tek katmanda terslemeyi etkinleştirir." #~ msgid "" -#~ "The direction which the wall loops are extruded when looking down from " -#~ "the top.\n" +#~ "The direction which the wall loops are extruded when looking down from the " +#~ "top.\n" #~ "\n" #~ "By default all walls are extruded in counter-clockwise, unless Reverse on " -#~ "odd is enabled. Set this to any option other than Auto will force the " -#~ "wall direction regardless of the Reverse on odd.\n" +#~ "odd is enabled. Set this to any option other than Auto will force the wall " +#~ "direction regardless of the Reverse on odd.\n" #~ "\n" #~ "This option will be disabled if spiral vase mode is enabled." #~ msgstr "" #~ "Yukarıdan aşağıya bakıldığında duvar döngülerinin ekstrüzyona uğradığı " #~ "yön.\n" #~ "\n" -#~ "Tek sayıyı ters çevir seçeneği etkinleştirilmedikçe, varsayılan olarak " -#~ "tüm duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında " +#~ "Tek sayıyı ters çevir seçeneği etkinleştirilmedikçe, varsayılan olarak tüm " +#~ "duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında " #~ "herhangi bir seçeneğe ayarlayın, Ters açıklığa bakılmaksızın duvar yönünü " #~ "zorlayacaktır.\n" #~ "\n" @@ -17594,9 +17478,9 @@ msgstr "" #~ msgid "" #~ "Start the fan this number of seconds earlier than its target start time " -#~ "(you can use fractional seconds). It assumes infinite acceleration for " -#~ "this time estimation, and will only take into account G1 and G0 moves " -#~ "(arc fitting is unsupported).\n" +#~ "(you can use fractional seconds). It assumes infinite acceleration for this " +#~ "time estimation, and will only take into account G1 and G0 moves (arc " +#~ "fitting is unsupported).\n" #~ "It won't move fan commands from custom gcodes (they act as a sort of " #~ "'barrier').\n" #~ "It won't move fan comands into the start gcode if the 'only custom start " @@ -17604,9 +17488,8 @@ msgstr "" #~ "Use 0 to deactivate." #~ msgstr "" #~ "Fanı hedef başlangıç zamanından bu kadar saniye önce başlatın (kesirli " -#~ "saniyeleri kullanabilirsiniz). Bu süre tahmini için sonsuz ivme varsayar " -#~ "ve yalnızca G1 ve G0 hareketlerini hesaba katar (yay uydurma " -#~ "desteklenmez).\n" +#~ "saniyeleri kullanabilirsiniz). Bu süre tahmini için sonsuz ivme varsayar ve " +#~ "yalnızca G1 ve G0 hareketlerini hesaba katar (yay uydurma desteklenmez).\n" #~ "Fan komutlarını özel kodlardan taşımaz (bir çeşit 'bariyer' görevi " #~ "görürler).\n" #~ "'Yalnızca özel başlangıç gcode'u etkinleştirilmişse, fan komutları " @@ -17615,8 +17498,8 @@ msgstr "" #~ msgid "" #~ "A draft shield is useful to protect an ABS or ASA print from warping and " -#~ "detaching from print bed due to wind draft. It is usually needed only " -#~ "with open frame printers, i.e. without an enclosure. \n" +#~ "detaching from print bed due to wind draft. It is usually needed only with " +#~ "open frame printers, i.e. without an enclosure. \n" #~ "\n" #~ "Options:\n" #~ "Enabled = skirt is as tall as the highest printed object.\n" @@ -17635,68 +17518,67 @@ msgstr "" #~ "Etkin = etek, yazdırılan en yüksek nesne kadar uzundur.\n" #~ "Sınırlı = etek, etek yüksekliğinin belirttiği kadar uzundur.\n" #~ "\n" -#~ "Not: Rüzgarlık etkinken etek, nesneden etek mesafesinde yazdırılacaktır. " -#~ "Bu nedenle eğer kenarlar aktifse onlarla kesişebilir. Bunu önlemek için " -#~ "etek mesafesi değerini artırın.\n" +#~ "Not: Rüzgarlık etkinken etek, nesneden etek mesafesinde yazdırılacaktır. Bu " +#~ "nedenle eğer kenarlar aktifse onlarla kesişebilir. Bunu önlemek için etek " +#~ "mesafesi değerini artırın.\n" #~ msgid "Limited" #~ msgstr "Sınırlı" #~ msgid "" -#~ "Minimum filament extrusion length in mm when printing the skirt. Zero " -#~ "means this feature is disabled.\n" +#~ "Minimum filament extrusion length in mm when printing the skirt. Zero means " +#~ "this feature is disabled.\n" #~ "\n" -#~ "Using a non zero value is useful if the printer is set up to print " -#~ "without a prime line." +#~ "Using a non zero value is useful if the printer is set up to print without " +#~ "a prime line." #~ msgstr "" -#~ "Etek yazdırılırken mm cinsinden minimum filaman ekstrüzyon uzunluğu. " -#~ "Sıfır, bu özelliğin devre dışı olduğu anlamına gelir.\n" +#~ "Etek yazdırılırken mm cinsinden minimum filaman ekstrüzyon uzunluğu. Sıfır, " +#~ "bu özelliğin devre dışı olduğu anlamına gelir.\n" #~ "\n" -#~ "Yazıcı ana hat olmadan yazdırmak üzere ayarlanmışsa sıfır dışında bir " -#~ "değer kullanmak yararlı olur." +#~ "Yazıcı ana hat olmadan yazdırmak üzere ayarlanmışsa sıfır dışında bir değer " +#~ "kullanmak yararlı olur." #~ msgid "" #~ "Adjust this value to prevent short, unclosed walls from being printed, " #~ "which could increase print time. Higher values remove more and longer " #~ "walls.\n" #~ "\n" -#~ "NOTE: Bottom and top surfaces will not be affected by this value to " -#~ "prevent visual gaps on the ouside of the model. Adjust 'One wall " -#~ "threshold' in the Advanced settings below to adjust the sensitivity of " -#~ "what is considered a top-surface. 'One wall threshold' is only visible if " -#~ "this setting is set above the default value of 0.5, or if single-wall top " -#~ "surfaces is enabled." +#~ "NOTE: Bottom and top surfaces will not be affected by this value to prevent " +#~ "visual gaps on the ouside of the model. Adjust 'One wall threshold' in the " +#~ "Advanced settings below to adjust the sensitivity of what is considered a " +#~ "top-surface. 'One wall threshold' is only visible if this setting is set " +#~ "above the default value of 0.5, or if single-wall top surfaces is enabled." #~ msgstr "" #~ "Yazdırma süresini artırabilecek kısa, kapatılmamış duvarların " -#~ "yazdırılmasını önlemek için bu değeri ayarlayın. Daha yüksek değerler " -#~ "daha fazla ve daha uzun duvarları kaldırır.\n" +#~ "yazdırılmasını önlemek için bu değeri ayarlayın. Daha yüksek değerler daha " +#~ "fazla ve daha uzun duvarları kaldırır.\n" #~ "\n" -#~ "NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst " -#~ "yüzeyler bu değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen " -#~ "şeyin hassasiyetini ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek " -#~ "duvar eşiği'ni ayarlayın. 'Tek duvar eşiği' yalnızca bu ayar varsayılan " -#~ "değer olan 0,5'in üzerine ayarlandığında veya tek duvarlı üst yüzeyler " +#~ "NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler " +#~ "bu değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin " +#~ "hassasiyetini ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar " +#~ "eşiği'ni ayarlayın. 'Tek duvar eşiği' yalnızca bu ayar varsayılan değer " +#~ "olan 0,5'in üzerine ayarlandığında veya tek duvarlı üst yüzeyler " #~ "etkinleştirildiğinde görünür." #~ msgid "Don't filter out small internal bridges (beta)" #~ msgstr "Küçük iç köprüleri filtrelemeyin (deneysel)" #~ msgid "" -#~ "This option can help reducing pillowing on top surfaces in heavily " -#~ "slanted or curved models.\n" +#~ "This option can help reducing pillowing on top surfaces in heavily slanted " +#~ "or curved models.\n" #~ "\n" -#~ "By default, small internal bridges are filtered out and the internal " -#~ "solid infill is printed directly over the sparse infill. This works well " -#~ "in most cases, speeding up printing without too much compromise on top " -#~ "surface quality. \n" +#~ "By default, small internal bridges are filtered out and the internal solid " +#~ "infill is printed directly over the sparse infill. This works well in most " +#~ "cases, speeding up printing without too much compromise on top surface " +#~ "quality. \n" #~ "\n" #~ "However, in heavily slanted or curved models especially where too low " #~ "sparse infill density is used, this may result in curling of the " #~ "unsupported solid infill, causing pillowing.\n" #~ "\n" #~ "Enabling this option will print internal bridge layer over slightly " -#~ "unsupported internal solid infill. The options below control the amount " -#~ "of filtering, i.e. the amount of internal bridges created.\n" +#~ "unsupported internal solid infill. The options below control the amount of " +#~ "filtering, i.e. the amount of internal bridges created.\n" #~ "\n" #~ "Disabled - Disables this option. This is the default behavior and works " #~ "well in most cases.\n" @@ -17717,9 +17599,8 @@ msgstr "" #~ "yüzey kalitesinden çok fazla ödün vermeden yazdırmayı hızlandırır. \n" #~ "\n" #~ "Bununla birlikte, özellikle çok düşük seyrek dolgu yoğunluğunun " -#~ "kullanıldığı aşırı eğimli veya kavisli modellerde, bu durum " -#~ "desteklenmeyen katı dolgunun kıvrılmasına ve yastıklanmaya neden olmasına " -#~ "neden olabilir.\n" +#~ "kullanıldığı aşırı eğimli veya kavisli modellerde, bu durum desteklenmeyen " +#~ "katı dolgunun kıvrılmasına ve yastıklanmaya neden olmasına neden olabilir.\n" #~ "\n" #~ "Bu seçeneğin etkinleştirilmesi, iç köprü katmanını hafif desteklenmeyen " #~ "dahili katı dolgu üzerine yazdıracaktır. Aşağıdaki seçenekler filtreleme " @@ -17732,16 +17613,16 @@ msgstr "" #~ "gereksiz iç köprülerin oluşmasını da önler. Bu, çoğu zor modelde işe " #~ "yarar.\n" #~ "\n" -#~ "Filtreleme yok - Her potansiyel dahili çıkıntıda dahili köprüler " -#~ "oluşturur. Bu seçenek, aşırı eğimli üst yüzey modelleri için " -#~ "kullanışlıdır. Ancak çoğu durumda çok fazla gereksiz köprü oluşturur." +#~ "Filtreleme yok - Her potansiyel dahili çıkıntıda dahili köprüler oluşturur. " +#~ "Bu seçenek, aşırı eğimli üst yüzey modelleri için kullanışlıdır. Ancak çoğu " +#~ "durumda çok fazla gereksiz köprü oluşturur." #~ msgid "Shrinkage" #~ msgstr "Büzüşme" #~ msgid "" -#~ "Your object appears to be too large. It will be scaled down to fit the " -#~ "heat bed automatically." +#~ "Your object appears to be too large. It will be scaled down to fit the heat " +#~ "bed automatically." #~ msgstr "" #~ "Nesneniz çok büyük görünüyor. Plakaya otomatik olarak uyacak şekilde " #~ "küçültülecektir." @@ -17758,15 +17639,14 @@ msgstr "" #~ "below.\n" #~ "\n" #~ "Options:\n" -#~ "1. Everywhere: Applies gap fill to top, bottom and internal solid " -#~ "surfaces\n" +#~ "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces\n" #~ "2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces " #~ "only\n" #~ "3. Nowhere: Disables gap fill\n" #~ msgstr "" -#~ "Seçilen yüzeyler için boşluk doldurmayı etkinleştirir. Doldurulacak " -#~ "minimum boşluk uzunluğu aşağıdaki küçük boşlukları filtrele seçeneğinden " -#~ "kontrol edilebilir.\n" +#~ "Seçilen yüzeyler için boşluk doldurmayı etkinleştirir. Doldurulacak minimum " +#~ "boşluk uzunluğu aşağıdaki küçük boşlukları filtrele seçeneğinden kontrol " +#~ "edilebilir.\n" #~ "\n" #~ "Seçenekler:\n" #~ "1. Her Yerde: Üst, alt ve iç katı yüzeylere boşluk doldurma uygular\n" @@ -17782,20 +17662,20 @@ msgstr "" #~ "değeri biraz azaltın (örneğin 0,9)" #~ 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." +#~ "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 "" #~ "Bu değer iç köprü katmanının kalınlığını belirler. Bu, seyrek dolgunun " -#~ "üzerindeki ilk katmandır. Seyrek dolguya göre yüzey kalitesini " -#~ "iyileştirmek için bu değeri biraz azaltın (örneğin 0,9)." +#~ "üzerindeki ilk katmandır. Seyrek dolguya göre yüzey kalitesini iyileştirmek " +#~ "için bu değeri biraz azaltın (örneğin 0,9)." #~ msgid "" #~ "This factor affects the amount of material for top solid infill. You can " #~ "decrease it slightly to have smooth surface finish" #~ msgstr "" -#~ "Bu faktör üst katı dolgu için malzeme miktarını etkiler. Pürüzsüz bir " -#~ "yüzey elde etmek için biraz azaltabilirsiniz" +#~ "Bu faktör üst katı dolgu için malzeme miktarını etkiler. Pürüzsüz bir yüzey " +#~ "elde etmek için biraz azaltabilirsiniz" #~ msgid "This factor affects the amount of material for bottom solid infill" #~ msgstr "Bu faktör alt katı dolgu için malzeme miktarını etkiler" @@ -17822,16 +17702,15 @@ msgstr "" #~ "Filamenti değiştirdiğinizde yeni filament yükleme zamanı. Yalnızca " #~ "istatistikler için" -#~ msgid "" -#~ "Time to unload old filament when switch filament. For statistics only" +#~ msgid "Time to unload old filament when switch filament. For statistics only" #~ msgstr "" #~ "Filamenti değiştirdiğinizde eski filamenti boşaltma zamanı. Yalnızca " #~ "istatistikler için" #~ msgid "" #~ "Time for the printer firmware (or the Multi Material Unit 2.0) to load a " -#~ "new filament during a tool change (when executing the T code). This time " -#~ "is added to the total print time by the G-code time estimator." +#~ "new filament during a tool change (when executing the T code). This time is " +#~ "added to the total print time by the G-code time estimator." #~ msgstr "" #~ "Yazıcı donanım yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım " #~ "değişikliği sırasında (T kodu yürütülürken) yeni bir filament yükleme " @@ -17839,20 +17718,20 @@ msgstr "" #~ "eklenir." #~ msgid "" -#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to unload " -#~ "a filament during a tool change (when executing the T code). This time is " +#~ "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " +#~ "filament during a tool change (when executing the T code). This time is " #~ "added to the total print time by the G-code time estimator." #~ msgstr "" -#~ "Yazıcı ürün yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım " -#~ "değişimi sırasında (T kodu yürütülürken) filamenti boşaltma süresi. Bu " -#~ "süre, G kodu süre tahmincisi tarafından toplam baskı süresine eklenir." +#~ "Yazıcı ürün yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım değişimi " +#~ "sırasında (T kodu yürütülürken) filamenti boşaltma süresi. Bu süre, G kodu " +#~ "süre tahmincisi tarafından toplam baskı süresine eklenir." #~ msgid "Filter out gaps smaller than the threshold specified" #~ msgstr "Belirtilen eşikten daha küçük boşlukları filtrele" #~ msgid "" -#~ "Enable this option for chamber temperature control. An M191 command will " -#~ "be added before \"machine_start_gcode\"\n" +#~ "Enable this option for chamber temperature control. An M191 command will be " +#~ "added before \"machine_start_gcode\"\n" #~ "G-code commands: M141/M191 S(0-255)" #~ msgstr "" #~ "Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 " @@ -17861,24 +17740,24 @@ msgstr "" #~ msgid "" #~ "Higher chamber temperature can help suppress or reduce warping and " -#~ "potentially lead to higher interlayer bonding strength for high " -#~ "temperature materials like ABS, ASA, PC, PA and so on.At the same time, " -#~ "the air filtration of ABS and ASA will get worse.While for PLA, PETG, " -#~ "TPU, PVA and other low temperature materials,the actual chamber " -#~ "temperature should not be high to avoid cloggings, so 0 which stands for " -#~ "turning off is highly recommended" +#~ "potentially lead to higher interlayer bonding strength for high temperature " +#~ "materials like ABS, ASA, PC, PA and so on.At the same time, the air " +#~ "filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +#~ "other low temperature materials,the actual chamber temperature should not " +#~ "be high to avoid cloggings, so 0 which stands for turning off is highly " +#~ "recommended" #~ msgstr "" #~ "Daha yüksek hazne sıcaklığı, eğrilmeyi bastırmaya veya azaltmaya yardımcı " -#~ "olabilir ve ABS, ASA, PC, PA ve benzeri gibi yüksek sıcaklıktaki " -#~ "malzemeler için potansiyel olarak daha yüksek ara katman yapışmasına yol " -#~ "açabilir Aynı zamanda, ABS ve ASA'nın hava filtrasyonu daha da " -#~ "kötüleşecektir. PLA, PETG, TPU, PVA ve diğer düşük sıcaklıktaki " -#~ "malzemeler için, tıkanmaları önlemek için gerçek hazne sıcaklığı yüksek " -#~ "olmamalıdır, bu nedenle kapatma anlamına gelen 0 şiddetle tavsiye edilir" +#~ "olabilir ve ABS, ASA, PC, PA ve benzeri gibi yüksek sıcaklıktaki malzemeler " +#~ "için potansiyel olarak daha yüksek ara katman yapışmasına yol açabilir Aynı " +#~ "zamanda, ABS ve ASA'nın hava filtrasyonu daha da kötüleşecektir. PLA, PETG, " +#~ "TPU, PVA ve diğer düşük sıcaklıktaki malzemeler için, tıkanmaları önlemek " +#~ "için gerçek hazne sıcaklığı yüksek olmamalıdır, bu nedenle kapatma anlamına " +#~ "gelen 0 şiddetle tavsiye edilir" #~ msgid "" -#~ "Different nozzle diameters and different filament diameters is not " -#~ "allowed when prime tower is enabled." +#~ "Different nozzle diameters and different filament diameters is not allowed " +#~ "when prime tower is enabled." #~ msgstr "" #~ "Ana kule etkinleştirildiğinde farklı nozul çaplarına ve farklı filament " #~ "çaplarına izin verilmez." @@ -17891,11 +17770,10 @@ msgstr "" #~ "Height of initial layer. Making initial layer height to be thick slightly " #~ "can improve build plate adhension" #~ msgstr "" -#~ "İlk katmanın yüksekliği. İlk katman yüksekliğini biraz kalın yapmak, " -#~ "baskı plakasının yapışmasını iyileştirebilir" +#~ "İlk katmanın yüksekliği. İlk katman yüksekliğini biraz kalın yapmak, baskı " +#~ "plakasının yapışmasını iyileştirebilir" -#~ msgid "" -#~ "Interlocking depth of a segmented region. Zero disables this feature." +#~ msgid "Interlocking depth of a segmented region. Zero disables this feature." #~ msgstr "" #~ "Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. 0 bu " #~ "özelliği devre dışı bırakır." @@ -17913,8 +17791,8 @@ msgstr "" #~ msgstr "Herhangi bir uygulamayla ilişkili değil" #~ msgid "" -#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " -#~ "models from Printable.com" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +#~ "from Printable.com" #~ msgstr "" #~ "Orca’nın Printable.com’daki modelleri açabilmesi için OrcaSlicer’ı " #~ "prusaslicer:// bağlantılarıyla ilişkilendirin" @@ -17923,8 +17801,8 @@ msgstr "" #~ msgstr "Bambstudio’yu ilişkilendirin://" #~ msgid "" -#~ "Associate OrcaSlicer with bambustudio:// links so that Orca can open " -#~ "models from makerworld.com" +#~ "Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +#~ "from makerworld.com" #~ msgstr "" #~ "Orca’nın makerworld.com’daki modelleri açabilmesi için OrcaSlicer’ı " #~ "bambustudio:// bağlantılarıyla ilişkilendirin" @@ -17971,45 +17849,42 @@ msgstr "" #~ "Usually the calibration is unnecessary. When you start a single color/" #~ "material print, with the \"flow dynamics calibration\" option checked in " #~ "the print start menu, the printer will follow the old way, calibrate the " -#~ "filament before the print; When you start a multi color/material print, " -#~ "the printer will use the default compensation parameter for the filament " -#~ "during every filament switch which will have a good result in most " -#~ "cases.\n" +#~ "filament before the print; When you start a multi color/material print, the " +#~ "printer will use the default compensation parameter for the filament during " +#~ "every filament switch which will have a good result in most cases.\n" #~ "\n" -#~ "Please note there are a few cases that will make the calibration result " -#~ "not reliable: using a texture plate to do the calibration; the build " -#~ "plate does not have good adhesion (please wash the build plate or apply " -#~ "gluestick!) ...You can find more from our wiki.\n" +#~ "Please note there are a few cases that will make the calibration result not " +#~ "reliable: using a texture plate to do the calibration; the build plate does " +#~ "not have good adhesion (please wash the build plate or apply gluestick!) ..." +#~ "You can find more from our wiki.\n" #~ "\n" -#~ "The calibration results have about 10 percent jitter in our test, which " -#~ "may cause the result not exactly the same in each calibration. We are " -#~ "still investigating the root cause to do improvements with new updates." +#~ "The calibration results have about 10 percent jitter in our test, which may " +#~ "cause the result not exactly the same in each calibration. We are still " +#~ "investigating the root cause to do improvements with new updates." #~ msgstr "" #~ "Lütfen Akış Dinamiği Kalibrasyonunun ayrıntılarını wiki'mizden " #~ "bulabilirsiniz.\n" #~ "\n" #~ "Genellikle kalibrasyon gereksizdir. Yazdırma başlat menüsündeki \"akış " -#~ "dinamiği kalibrasyonu\" seçeneği işaretliyken tek renkli/malzeme " -#~ "baskısını başlattığınızda, yazıcı eski yöntemi izleyecek, yazdırmadan " -#~ "önce filamenti kalibre edecektir; Çok renkli/malzeme baskısını " -#~ "başlattığınızda, yazıcı her filament değişiminde filament için varsayılan " -#~ "dengeleme parametresini kullanacaktır ve bu çoğu durumda iyi bir sonuç " -#~ "verecektir.\n" +#~ "dinamiği kalibrasyonu\" seçeneği işaretliyken tek renkli/malzeme baskısını " +#~ "başlattığınızda, yazıcı eski yöntemi izleyecek, yazdırmadan önce filamenti " +#~ "kalibre edecektir; Çok renkli/malzeme baskısını başlattığınızda, yazıcı her " +#~ "filament değişiminde filament için varsayılan dengeleme parametresini " +#~ "kullanacaktır ve bu çoğu durumda iyi bir sonuç verecektir.\n" #~ "\n" -#~ "Kalibrasyon sonucunun güvenilir olmamasına yol açacak birkaç durum " -#~ "olduğunu lütfen unutmayın: kalibrasyonu yapmak için doku plakası " -#~ "kullanmak; baskı plakasının yapışması iyi değil (lütfen baskı plakasını " -#~ "yıkayın veya yapıştırıcı uygulayın!) ...Daha fazlasını wiki'mizden " -#~ "bulabilirsiniz.\n" +#~ "Kalibrasyon sonucunun güvenilir olmamasına yol açacak birkaç durum olduğunu " +#~ "lütfen unutmayın: kalibrasyonu yapmak için doku plakası kullanmak; baskı " +#~ "plakasının yapışması iyi değil (lütfen baskı plakasını yıkayın veya " +#~ "yapıştırıcı uygulayın!) ...Daha fazlasını wiki'mizden bulabilirsiniz.\n" #~ "\n" -#~ "Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim " -#~ "var ve bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden " -#~ "olabilir. Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel " -#~ "nedeni araştırıyoruz." +#~ "Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim var " +#~ "ve bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden " +#~ "olabilir. Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel nedeni " +#~ "araştırıyoruz." #~ msgid "" -#~ "Only one of the results with the same name will be saved. Are you sure " -#~ "you want to overrides the other results?" +#~ "Only one of the results with the same name will be saved. Are you sure you " +#~ "want to overrides the other results?" #~ msgstr "" #~ "Aynı ada sahip sonuçlardan yalnızca biri kaydedilecektir. Diğer sonuçları " #~ "geçersiz kılmak istediğinizden emin misiniz?" @@ -18017,11 +17892,11 @@ msgstr "" #, c-format, boost-format #~ msgid "" #~ "There is already a historical calibration result with the same name: %s. " -#~ "Only one of the results with the same name is saved. Are you sure you " -#~ "want to overrides the historical result?" +#~ "Only one of the results with the same name is saved. Are you sure you want " +#~ "to overrides the historical result?" #~ msgstr "" -#~ "Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada " -#~ "sahip sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " +#~ "Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " +#~ "sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " #~ "istediğinizden emin misiniz?" #~ msgid "Please find the cornor with perfect degree of extrusion" @@ -18044,11 +17919,11 @@ msgstr "" #~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " #~ "first, which works best in most cases.\n" #~ "\n" -#~ "Printing walls first may help with extreme overhangs as the walls have " -#~ "the neighbouring infill to adhere to. However, the infill will slightly " -#~ "push out the printed walls where it is attached to them, resulting in a " -#~ "worse external surface finish. It can also cause the infill to shine " -#~ "through the external surfaces of the part." +#~ "Printing walls first may help with extreme overhangs as the walls have the " +#~ "neighbouring infill to adhere to. However, the infill will slightly push " +#~ "out the printed walls where it is attached to them, resulting in a worse " +#~ "external surface finish. It can also cause the infill to shine through the " +#~ "external surfaces of the part." #~ msgstr "" #~ "Duvar/dolgu sırası. Onay kutusunun işareti kaldırıldığında ilk olarak " #~ "duvarlar yazdırılır ve bu çoğu durumda en iyi sonucu verir.\n" @@ -18056,20 +17931,20 @@ msgstr "" #~ "Duvarların komşu dolgulara yapışması nedeniyle ilk önce duvarların " #~ "basılması aşırı çıkıntılara yardımcı olabilir. Ancak dolgu, baskılı " #~ "duvarları tutturulduğu yerden hafifçe dışarı doğru itecek ve bu da daha " -#~ "kötü bir dış yüzey kalitesine neden olacaktır. Ayrıca dolgunun parçanın " -#~ "dış yüzeylerinden parlamasına da neden olabilir." +#~ "kötü bir dış yüzey kalitesine neden olacaktır. Ayrıca dolgunun parçanın dış " +#~ "yüzeylerinden parlamasına da neden olabilir." #~ msgid "V" #~ msgstr "V" #~ msgid "" -#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " -#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " -#~ "Ranellucci and the RepRap community" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from PrusaSlicer " +#~ "by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and " +#~ "the RepRap community" #~ msgstr "" #~ "Orca Slicer, Prusa Research'ün PrusaSlicer'ından Bambulab'ın " -#~ "BambuStudio'sunu temel alıyor. PrusaSlicer, Alessandro Ranellucci ve " -#~ "RepRap topluluğu tarafından hazırlanan Slic3r'dendir" +#~ "BambuStudio'sunu temel alıyor. PrusaSlicer, Alessandro Ranellucci ve RepRap " +#~ "topluluğu tarafından hazırlanan Slic3r'dendir" #~ msgid "Export &Configs" #~ msgstr "Yapılandırmaları Dışa Aktar" @@ -18085,8 +17960,8 @@ msgstr "" #~ msgstr "Dolgu açısı" #~ msgid "" -#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " -#~ "fitting tolerance is same with resolution" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +#~ "tolerance is same with resolution" #~ msgstr "" #~ "G2 ve G3 hareketlerine sahip bir G kodu dosyası elde etmek için bunu " #~ "etkinleştirin. Ve montaj toleransı çözünürlükle aynıdır" @@ -18132,20 +18007,19 @@ msgstr "" #~ "switching preset?" #~ msgstr "" #~ "\n" -#~ "Ön ayarı değiştirdikten sonra bu değiştirilen ayarları (değiştirilen " -#~ "değer) korumak ister misiniz?" +#~ "Ön ayarı değiştirdikten sonra bu değiştirilen ayarları (değiştirilen değer) " +#~ "korumak ister misiniz?" #~ msgid "" -#~ "You have previously modified your settings and are about to overwrite " -#~ "them with new ones." +#~ "You have previously modified your settings and are about to overwrite them " +#~ "with new ones." #~ msgstr "" -#~ "Ayarlarınızı daha önce değiştirdiniz ve bunların üzerine yenilerini " -#~ "yazmak üzeresiniz." +#~ "Ayarlarınızı daha önce değiştirdiniz ve bunların üzerine yenilerini yazmak " +#~ "üzeresiniz." #~ msgid "" #~ "\n" -#~ "Do you want to keep your current modified settings, or use preset " -#~ "settings?" +#~ "Do you want to keep your current modified settings, or use preset settings?" #~ msgstr "" #~ "\n" #~ "Geçerli değiştirilen ayarlarınızı korumak mı yoksa önceden ayarlanmış " @@ -18165,8 +18039,8 @@ msgstr "" #~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " #~ "automatically load or unload filiament." #~ msgstr "" -#~ "Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası " -#~ "seçin ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." +#~ "Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası seçin " +#~ "ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." #~ msgid "MC" #~ msgstr "MC" @@ -18199,15 +18073,15 @@ msgstr "" #~ "Over 4 studio/handy are using remote access, you can close some and try " #~ "again." #~ msgstr "" -#~ "4’ten fazla stüdyo/kullanışlı uzaktan erişim kullanıyor, bazılarını " -#~ "kapatıp tekrar deneyebilirsiniz." +#~ "4’ten fazla stüdyo/kullanışlı uzaktan erişim kullanıyor, bazılarını kapatıp " +#~ "tekrar deneyebilirsiniz." #~ msgid "" #~ "The 3mf file version is in Beta and it is newer than the current Bambu " #~ "Studio version." #~ msgstr "" -#~ "3mf dosya sürümü Beta aşamasındadır ve mevcut Bambu Studio sürümünden " -#~ "daha yenidir." +#~ "3mf dosya sürümü Beta aşamasındadır ve mevcut Bambu Studio sürümünden daha " +#~ "yenidir." #~ msgid "If you would like to try Bambu Studio Beta, you may click to" #~ msgstr "Bambu Studio Beta’yı denemek isterseniz tıklayabilirsiniz." @@ -18231,12 +18105,12 @@ msgstr "" #~ msgstr "Kabin nemi" #~ msgid "" -#~ "Green means that AMS humidity is normal, orange represent humidity is " -#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ "Green means that AMS humidity is normal, orange represent humidity is high, " +#~ "red represent humidity is too high.(Hygrometer: lower the better.)" #~ msgstr "" -#~ "Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, " -#~ "kırmızı ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar " -#~ "düşükse o kadar iyidir.)" +#~ "Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, kırmızı " +#~ "ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar düşükse o " +#~ "kadar iyidir.)" #~ msgid "Desiccant status" #~ msgstr "Kurutucu durumu" @@ -18246,18 +18120,18 @@ msgstr "" #~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ msgstr "" #~ "İki çubuktan daha düşük bir kurutucu durumu, kurutucunun etkin olmadığını " -#~ "gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa " -#~ "o kadar iyidir.)" +#~ "gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa o " +#~ "kadar iyidir.)" #~ msgid "" #~ "Note: When the lid is open or the desiccant pack is changed, it can take " #~ "hours or a night to absorb the moisture. Low temperatures also slow down " -#~ "the process. During this time, the indicator may not represent the " -#~ "chamber accurately." +#~ "the process. During this time, the indicator may not represent the chamber " +#~ "accurately." #~ msgstr "" #~ "Not: Kapak açıkken veya kurutucu paketi değiştirildiğinde, nemin emilmesi " -#~ "saatler veya bir gece sürebilir. Düşük sıcaklıklar da süreci yavaşlatır. " -#~ "Bu süre zarfında gösterge hazneyi doğru şekilde temsil etmeyebilir." +#~ "saatler veya bir gece sürebilir. Düşük sıcaklıklar da süreci yavaşlatır. Bu " +#~ "süre zarfında gösterge hazneyi doğru şekilde temsil etmeyebilir." #~ msgid "" #~ "Note: if new filament is inserted during printing, the AMS will not " @@ -18326,8 +18200,8 @@ msgstr "" #~ "preset?" #~ msgstr "" #~ "\"%1%\" ön ayarının bazı ayarlarını değiştirdiniz.\n" -#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " -#~ "korumak ister misiniz?" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " +#~ "ister misiniz?" #~ msgid "" #~ "You have changed some preset settings. \n" @@ -18335,8 +18209,8 @@ msgstr "" #~ "preset?" #~ msgstr "" #~ "Bazı ön ayar ayarlarını değiştirdiniz.\n" -#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " -#~ "korumak ister misiniz?" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " +#~ "ister misiniz?" #~ msgid " ℃" #~ msgstr " °C" @@ -18344,14 +18218,14 @@ msgstr "" #~ msgid "" #~ "Please go to filament setting to edit your presets if you need.\n" #~ "Please note that nozzle temperature, hot bed temperature, and maximum " -#~ "volumetric speed have a significant impact on printing quality. Please " -#~ "set them carefully." +#~ "volumetric speed have a significant impact on printing quality. Please set " +#~ "them carefully." #~ msgstr "" -#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament " -#~ "ayarına gidin.\n" +#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament ayarına " +#~ "gidin.\n" #~ "Lütfen püskürtme ucu sıcaklığının, sıcak yatak sıcaklığının ve maksimum " -#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip " -#~ "olduğunu unutmayın. Lütfen bunları dikkatlice ayarlayın." +#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip olduğunu " +#~ "unutmayın. Lütfen bunları dikkatlice ayarlayın." #~ msgid "Studio Version:" #~ msgstr "Stüdyo Sürümü:" @@ -18396,19 +18270,19 @@ msgstr "" #~ msgstr "Depolama Yüklemesini Test Etme" #~ msgid "" -#~ "The speed setting exceeds the printer's maximum speed " -#~ "(machine_max_speed_x/machine_max_speed_y).\n" +#~ "The speed setting exceeds the printer's maximum speed (machine_max_speed_x/" +#~ "machine_max_speed_y).\n" #~ "Orca will automatically cap the print speed to ensure it doesn't surpass " #~ "the printer's capabilities.\n" -#~ "You can adjust the maximum speed setting in your printer's configuration " -#~ "to get higher speeds." +#~ "You can adjust the maximum speed setting in your printer's configuration to " +#~ "get higher speeds." #~ msgstr "" #~ "Hız ayarı yazıcının maksimum hızını aşıyor (machine_max_speed_x/" #~ "machine_max_speed_y).\n" -#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma " -#~ "hızını otomatik olarak sınırlayacaktır.\n" -#~ "Daha yüksek hızlar elde etmek için yazıcınızın yapılandırmasındaki " -#~ "maksimum hız ayarını yapabilirsiniz." +#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma hızını " +#~ "otomatik olarak sınırlayacaktır.\n" +#~ "Daha yüksek hızlar elde etmek için yazıcınızın yapılandırmasındaki maksimum " +#~ "hız ayarını yapabilirsiniz." #~ msgid "" #~ "Alternate extra wall only works with ensure vertical shell thickness " @@ -18432,8 +18306,8 @@ msgstr "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" #~ msgstr "" -#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına " -#~ "katı dolgu ekleyin (üst + alt katı katmanlar)" +#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına katı " +#~ "dolgu ekleyin (üst + alt katı katmanlar)" #~ msgid "Further reduce solid infill on walls (beta)" #~ msgstr "Duvarlardaki katı dolguyu daha da azaltın (deneysel)" @@ -18443,8 +18317,8 @@ msgstr "" #~ "limited infill supporting solid surfaces, make sure that you are using " #~ "adequate number of walls to support the part on sloping surfaces.\n" #~ "\n" -#~ "For heavily sloped surfaces this option is not suitable as it will " -#~ "generate too thin of a top layer and should be disabled." +#~ "For heavily sloped surfaces this option is not suitable as it will generate " +#~ "too thin of a top layer and should be disabled." #~ msgstr "" #~ "Duvarlara uygulanan katı dolguları daha da azaltır. Dolguyu destekleyen " #~ "katı yüzeyler çok sınırlı olacağından, eğimli yüzeylerde parçayı " @@ -18472,8 +18346,8 @@ msgstr "" #~ msgstr "Yapılandırma paketi şu şekilde güncellendi: " #~ msgid "" -#~ "Improve shell precision by adjusting outer wall spacing. This also " -#~ "improves layer consistency." +#~ "Improve shell precision by adjusting outer wall spacing. This also improves " +#~ "layer consistency." #~ msgstr "" #~ "Dış duvar aralığını ayarlayarak kabuk hassasiyetini artırın. Bu aynı " #~ "zamanda katman tutarlılığını da artırır." @@ -18482,13 +18356,13 @@ msgstr "" #~ msgstr "Akış telafisi'ni etkinleştir" #~ msgid "" -#~ "The minimum printing speed for the filament when slow down for better " -#~ "layer cooling is enabled, when printing overhangs and when feature speeds " -#~ "are not specified explicitly." +#~ "The minimum printing speed for the filament when slow down for better layer " +#~ "cooling is enabled, when printing overhangs and when feature speeds are not " +#~ "specified explicitly." #~ msgstr "" #~ "Daha iyi katman soğutması için yavaşlama etkinleştirildiğinde, yazdırma " -#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde " -#~ "filament için minimum yazdırma hızı." +#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde filament " +#~ "için minimum yazdırma hızı." #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "Seyrek katman yok (DENEYSEL)" @@ -18514,16 +18388,15 @@ msgstr "" #~ msgstr "wiki" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" " -#~ "option.Some extruders work better with this option unchecked (absolute " -#~ "extrusion mode). Wipe tower is only compatible with relative mode. It is " -#~ "always enabled on BambuLab printers. Default is checked" +#~ "Relative extrusion is recommended when using \"label_objects\" option.Some " +#~ "extruders work better with this option unchecked (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" +#~ "\"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:" @@ -18628,8 +18501,8 @@ msgstr "" #~ msgid "" #~ "Simplify Model\n" #~ "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. Read more in the documentation." +#~ "the Simplify mesh feature? Right-click the model and select Simplify model. " +#~ "Read more in the documentation." #~ msgstr "" #~ "Modeli Basitleştir\n" #~ "Mesh basitleştirme özelliğini kullanarak bir ağdaki üçgen sayısını " @@ -18638,15 +18511,15 @@ msgstr "" #~ msgid "" #~ "Subtract a Part\n" -#~ "Did you know that you can subtract one mesh from another using the " -#~ "Negative part modifier? That way you can, for example, create easily " -#~ "resizable holes directly in Orca Slicer. Read more in the documentation." +#~ "Did you know that you can subtract one mesh from another using the Negative " +#~ "part modifier? That way you can, for example, create easily resizable holes " +#~ "directly in Orca Slicer. Read more in the documentation." #~ msgstr "" #~ "Bir Parçayı Çıkar\n" #~ "Negatif parça değiştiriciyi kullanarak bir ağı diğerinden " #~ "çıkarabileceğinizi biliyor muydunuz? Bu şekilde örneğin doğrudan Orca " -#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler " -#~ "oluşturabilirsiniz. Daha fazlasını belgelerde okuyun." +#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler oluşturabilirsiniz. " +#~ "Daha fazlasını belgelerde okuyun." #~ msgid "Filling bed " #~ msgstr "Yatak doldurma " @@ -18662,12 +18535,10 @@ msgstr "" #~ msgstr "" #~ "Doğrusal desene geçilsin mi?\n" #~ "Evet - otomatik olarak doğrusal desene geçin\n" -#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere " -#~ "sıfırlayın" +#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere sıfırlayın" #~ msgid "Please heat the nozzle to above 170 degree before loading filament." -#~ msgstr "" -#~ "Filamenti yüklemeden önce lütfen Nozulu 170 derecenin üzerine ısıtın." +#~ msgstr "Filamenti yüklemeden önce lütfen Nozulu 170 derecenin üzerine ısıtın." #~ msgid "Show g-code window" #~ msgstr "G kodu penceresini göster" @@ -18904,8 +18775,8 @@ msgstr "" #~ "load uptodate process/machine settings from the specified file when using " #~ "uptodate" #~ msgstr "" -#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/" -#~ "yazıcıayarlarını yükle" +#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/yazıcıayarlarını " +#~ "yükle" #~ msgid "Output directory" #~ msgstr "Çıkış dizini" @@ -18917,11 +18788,11 @@ msgstr "" #~ msgstr "Hata ayıklama düzeyi" #~ msgid "" -#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, " -#~ "5:trace\n" +#~ "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +#~ "trace\n" #~ msgstr "" -#~ "Hata ayıklama günlüğü düzeyini ayarlar. 0:önemli, 1:hata, 2:uyarı, " -#~ "3:bilgi, 4:hata ayıklama, 5:izleme\n" +#~ "Hata ayıklama günlüğü düzeyini ayarlar. 0:önemli, 1:hata, 2:uyarı, 3:bilgi, " +#~ "4:hata ayıklama, 5:izleme\n" #, boost-format #~ msgid "The selected preset: %1% is not found." @@ -18952,8 +18823,8 @@ msgstr "" #~ "OrcaSlicer configuration file may be corrupted and is not abled to be " #~ "parsed.Please delete the file and try again." #~ msgstr "" -#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması " -#~ "mümkün olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." +#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması mümkün " +#~ "olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." #~ msgid "Online Models" #~ msgstr "Çevrimiçi Modeller" @@ -18965,10 +18836,10 @@ msgstr "" #~ msgstr "Soğutma için yavaşlama durumunda minimum yazdırma hızı" #~ msgid "" -#~ "There are currently no identical spare consumables available, and " -#~ "automatic replenishment is currently not possible. \n" -#~ "(Currently supporting automatic supply of consumables with the same " -#~ "brand, material type, and color)" +#~ "There are currently no identical spare consumables available, and automatic " +#~ "replenishment is currently not possible. \n" +#~ "(Currently supporting automatic supply of consumables with the same brand, " +#~ "material type, and color)" #~ msgstr "" #~ "Şu anda aynı yedek sarf malzemesi mevcut değildir ve otomatik yenileme şu " #~ "anda mümkün değildir.\n" @@ -18996,12 +18867,11 @@ msgstr "" #~ "Material becomes soft at this temperature. Thus the heatbed cannot be " #~ "hotter than this tempature" #~ msgstr "" -#~ "Bu sıcaklıkta malzeme yumuşar. Bu nedenle ısıtma yatağı bu sıcaklıktan " -#~ "daha sıcak olamaz" +#~ "Bu sıcaklıkta malzeme yumuşar. Bu nedenle ısıtma yatağı bu sıcaklıktan daha " +#~ "sıcak olamaz" #~ msgid "Enable this option if machine has auxiliary part cooling fan" -#~ msgstr "" -#~ "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" +#~ msgstr "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" #~ msgid "" #~ "This option is enabled if machine support controlling chamber temperature" @@ -19029,8 +18899,7 @@ msgstr "" #~ "katmanları etkilemez" #~ msgid "Empty layers around bottom are replaced by nearest normal layers." -#~ msgstr "" -#~ "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." +#~ msgstr "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." #~ msgid "The model has too many empty layers." #~ msgstr "Modelde çok fazla boş katman var." @@ -19045,12 +18914,11 @@ msgstr "" #~ msgstr "Tabla" #~ msgid "" -#~ "Bed temperature when high temperature plate is installed. Value 0 means " -#~ "the filament does not support to print on the High Temp Plate" +#~ "Bed temperature when high temperature plate is installed. Value 0 means the " +#~ "filament does not support to print on the High Temp Plate" #~ msgstr "" -#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, " -#~ "filamentin Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına " -#~ "gelir" +#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin " +#~ "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" #~ msgid "" #~ "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" @@ -19061,17 +18929,16 @@ msgstr "" #~ msgstr "Hareket için maksimum hızlanma (M204 T)" #~ msgid "" -#~ "Style and shape of the support. For normal support, projecting the " -#~ "supports into a regular grid will create more stable supports (default), " -#~ "while snug support towers will save material and reduce object scarring.\n" -#~ "For tree support, slim style will merge branches more aggressively and " -#~ "save a lot of material (default), while hybrid style will create similar " +#~ "Style and shape of the support. For normal support, projecting the supports " +#~ "into a regular grid will create more stable supports (default), while snug " +#~ "support towers will save material and reduce object scarring.\n" +#~ "For tree support, slim style will merge branches more aggressively and save " +#~ "a lot of material (default), while hybrid style will create similar " #~ "structure to normal support under large flat overhangs." #~ msgstr "" #~ "Desteğin stili ve şekli. Normal destek için, desteklerin düzenli bir " #~ "ızgaraya yansıtılması daha sağlam destekler oluşturur (varsayılan), rahat " -#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini " -#~ "azaltır.\n" +#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini azaltır.\n" #~ "Ağaç desteği için, ince stil, dalları daha agresif bir şekilde " #~ "birleştirecek ve çok fazla malzeme tasarrufu sağlayacak (varsayılan), " #~ "hibrit stil ise büyük düz çıkıntılar altında normal desteğe benzer yapı " From 06ba32e11708fcb090d2aa4f59c001c1645ccc4a Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 20:52:09 +0800 Subject: [PATCH 093/100] Make sure to move to prime tower before moving down (#8140) Make sure to move to prime tower before moving down (SoftFever/OrcaSlicer#8120) --- src/libslic3r/GCode.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 8ff4519e8a..a1351cb6f5 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -741,6 +741,7 @@ static std::vector get_path_of_change_filament(const Print& print) gcodegen.config().filament_multitool_ramming.get_at(tcr.initial_tool)); const bool should_travel_to_tower = !tcr.priming && (tcr.force_travel // wipe tower says so || !needs_toolchange // this is just finishing the tower with no toolchange + || will_go_down // Make sure to move to prime tower before moving down || is_ramming); if (should_travel_to_tower || gcodegen.m_need_change_layer_lift_z) { From b75473482b5271b2a1ce03f8b2a3f3b14c7ad12a Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 21:50:19 +0800 Subject: [PATCH 094/100] Fix issue that gizmo grabbers stop working (#8141) Fix issue that gizmo grabbers stop working (SoftFever/OrcaSlicer#8139) Follow up of a66fc86e203572f84a0761d607fc7e0170e3afd7 --- src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index 264e1d629e..5475e75520 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -143,7 +143,9 @@ void GLGizmoFlatten::set_flattening_data(const ModelObject* model_object, int in { if (model_object != m_old_model_object || instance_id != m_old_instance_id) { m_planes.clear(); - on_unregister_raycasters_for_picking(); + if (get_state() == On) { // Only touch the raycasters if it's current + on_unregister_raycasters_for_picking(); + } } } From 1b1288c4353afca44edee323061bdd5c87fcafb9 Mon Sep 17 00:00:00 2001 From: liberodark Date: Thu, 23 Jan 2025 01:44:14 +0100 Subject: [PATCH 095/100] Sovol SV06 ACE Improvements (#8025) * Sovol SV06 ACE Improves * Sovol SV06 ACE Improves 1 --- resources/profiles/Sovol.json | 618 +++++++++--------- .../Sovol/filament/Sovol SV06 ACE ABS.json | 5 +- .../Sovol/filament/Sovol SV06 ACE PETG.json | 5 +- .../Sovol/filament/Sovol SV06 ACE PLA.json | 4 +- .../Sovol/filament/Sovol SV06 ACE TPU.json | 5 +- .../machine/Sovol SV06 ACE 0.2 nozzle.json | 127 ++++ .../machine/Sovol SV06 ACE 0.4 nozzle.json | 19 +- .../machine/Sovol SV06 ACE 0.6 nozzle.json | 127 ++++ .../machine/Sovol SV06 ACE 0.8 nozzle.json | 127 ++++ .../Sovol/machine/Sovol SV06 ACE.json | 2 +- .../Sovol SV06 Plus ACE 0.4 nozzle.json | 13 +- ...gh Quality @Sovol SV06 ACE 0.4 nozzle.json | 126 ++++ ...mm Quality @Sovol SV06 ACE 0.4 nozzle.json | 126 ++++ ...m Standard @Sovol SV06 ACE 0.2 nozzle.json | 126 ++++ ...n => 0.20mm Standard @Sovol SV06 ACE.json} | 9 +- ...0.20mm Standard @Sovol SV06 Plus ACE.json} | 9 +- ....28mm Fast @Sovol SV06 ACE 0.4 nozzle.json | 126 ++++ ...m Standard @Sovol SV06 ACE 0.6 nozzle.json | 126 ++++ ...m Standard @Sovol SV06 ACE 0.8 nozzle.json | 126 ++++ 19 files changed, 1501 insertions(+), 325 deletions(-) create mode 100644 resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json create mode 100644 resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json create mode 100644 resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json create mode 100644 resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json create mode 100644 resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json create mode 100644 resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json rename resources/profiles/Sovol/process/{0.20mm Standard @Sovol SV06 ACE - official.json => 0.20mm Standard @Sovol SV06 ACE.json} (95%) rename resources/profiles/Sovol/process/{0.20mm Standard @Sovol SV06 Plus ACE - official.json => 0.20mm Standard @Sovol SV06 Plus ACE.json} (95%) create mode 100644 resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json create mode 100644 resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json create mode 100644 resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index c3bea8bf19..76db1e18e0 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,291 +1,327 @@ -{ - "name": "Sovol", - "url": "", - "version": "02.02.00.04", - "force_update": "0", - "description": "Sovol configurations", - "machine_model_list": [ - { - "name": "Sovol SV01 Pro", - "sub_path": "machine/Sovol SV01 Pro.json" - }, - { - "name": "Sovol SV02", - "sub_path": "machine/Sovol SV02.json" - }, - { - "name": "Sovol SV05", - "sub_path": "machine/Sovol SV05.json" - }, - { - "name": "Sovol SV06", - "sub_path": "machine/Sovol SV06.json" - }, - { - "name": "Sovol SV06 Plus", - "sub_path": "machine/Sovol SV06 Plus.json" - }, - { - "name": "Sovol SV06 ACE", - "sub_path": "machine/Sovol SV06 ACE.json" - }, - { - "name": "Sovol SV06 Plus ACE", - "sub_path": "machine/Sovol SV06 Plus ACE.json" - }, - { - "name": "Sovol SV07", - "sub_path": "machine/Sovol SV07.json" - }, - { - "name": "Sovol SV07 Plus", - "sub_path": "machine/Sovol SV07 Plus.json" - }, - { - "name": "Sovol SV08", - "sub_path": "machine/Sovol SV08.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "0.18mm Optimal @Sovol SV01Pro", - "sub_path": "process/0.18mm Optimal @Sovol SV01Pro.json" - }, - { - "name": "0.18mm Optimal @Sovol SV02", - "sub_path": "process/0.18mm Optimal @Sovol SV02.json" - }, - { - "name": "0.18mm Optimal @Sovol SV05", - "sub_path": "process/0.18mm Optimal @Sovol SV05.json" - }, - { - "name": "0.18mm Optimal @Sovol SV06", - "sub_path": "process/0.18mm Optimal @Sovol SV06.json" - }, - { - "name": "0.18mm Optimal @Sovol SV06Plus", - "sub_path": "process/0.18mm Optimal @Sovol SV06Plus.json" - }, - { - "name": "0.18mm Optimal @Sovol SV07", - "sub_path": "process/0.18mm Optimal @Sovol SV07.json" - }, - { - "name": "0.18mm Optimal @Sovol SV07 Plus", - "sub_path": "process/0.18mm Optimal @Sovol SV07Plus.json" - }, - { - "name": "0.20mm Standard @Sovol SV01Pro", - "sub_path": "process/0.20mm Standard @Sovol SV01Pro.json" - }, - { - "name": "0.20mm Standard @Sovol SV02", - "sub_path": "process/0.20mm Standard @Sovol SV02.json" - }, - { - "name": "0.20mm Standard @Sovol SV05", - "sub_path": "process/0.20mm Standard @Sovol SV05.json" - }, - { - "name": "0.20mm Standard @Sovol SV06", - "sub_path": "process/0.20mm Standard @Sovol SV06.json" - }, - { - "name": "0.20mm Standard @Sovol SV06Plus", - "sub_path": "process/0.20mm Standard @Sovol SV06Plus.json" - }, - { - "name": "0.20mm Standard @Sovol SV06 ACE - official", - "sub_path": "process/0.20mm Standard @Sovol SV06 ACE - official.json" - }, - { - "name": "0.20mm Standard @Sovol SV06 Plus ACE - official", - "sub_path": "process/0.20mm Standard @Sovol SV06 Plus ACE - official.json" - }, - { - "name": "0.20mm Standard @Sovol SV07", - "sub_path": "process/0.20mm Standard @Sovol SV07.json" - }, - { - "name": "0.20mm Standard @Sovol SV07 Plus", - "sub_path": "process/0.20mm Standard @Sovol SV07Plus.json" - }, - { - "name": "0.10mm Standard @Sovol SV08 0.2 nozzle", - "sub_path": "process/0.10mm Standard @Sovol SV08 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Sovol SV08 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Sovol SV08 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Sovol SV08 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Sovol SV08 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Sovol SV08 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Sovol SV08 0.8 nozzle.json" - }, - { - "name": "0.20mm High-Speed @Sovol SV06", - "sub_path": "process/0.20mm High-Speed @Sovol SV06.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.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": "Sovol Generic ABS", - "sub_path": "filament/Sovol Generic ABS.json" - }, - { - "name": "Sovol Generic PETG", - "sub_path": "filament/Sovol Generic PETG.json" - }, - { - "name": "Sovol Generic PLA", - "sub_path": "filament/Sovol Generic PLA.json" - }, - { - "name": "Sovol Generic TPU", - "sub_path": "filament/Sovol Generic TPU.json" - }, - { - "name": "Sovol SV06 ACE PLA", - "sub_path": "filament/Sovol SV06 ACE PLA.json" - }, - { - "name": "Sovol SV06 ACE ABS", - "sub_path": "filament/Sovol SV06 ACE ABS.json" - }, - { - "name": "Sovol SV06 ACE PETG", - "sub_path": "filament/Sovol SV06 ACE PETG.json" - }, - { - "name": "Sovol SV06 ACE TPU", - "sub_path": "filament/Sovol SV06 ACE TPU.json" - }, - { - "name": "Sovol SV06 Plus ACE PLA", - "sub_path": "filament/Sovol SV06 Plus ACE PLA.json" - }, - { - "name": "Sovol SV06 Plus ACE ABS", - "sub_path": "filament/Sovol SV06 Plus ACE ABS.json" - }, - { - "name": "Sovol SV06 Plus ACE PETG", - "sub_path": "filament/Sovol SV06 Plus ACE PETG.json" - }, - { - "name": "Sovol SV06 Plus ACE TPU", - "sub_path": "filament/Sovol SV06 Plus ACE TPU.json" - }, - { - "name": "Sovol SV07 PLA", - "sub_path": "filament/Sovol SV07 PLA.json" - }, - { - "name": "Sovol SV08 PLA", - "sub_path": "filament/Sovol SV08 PLA.json" - }, - { - "name": "Sovol SV08 PLA @SV08 0.2 nozzle", - "sub_path": "filament/Sovol SV08 PLA @SV08 0.2 nozzle.json" - }, - { - "name": "Sovol SV08 ABS", - "sub_path": "filament/Sovol SV08 ABS.json" - }, - { - "name": "Sovol SV08 PETG", - "sub_path": "filament/Sovol SV08 PETG.json" - }, - { - "name": "Sovol SV08 TPU", - "sub_path": "filament/Sovol SV08 TPU.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "Sovol SV01 Pro 0.4 nozzle", - "sub_path": "machine/Sovol SV01 Pro 0.4 nozzle.json" - }, - { - "name": "Sovol SV02 0.4 nozzle", - "sub_path": "machine/Sovol SV02 0.4 nozzle.json" - }, - { - "name": "Sovol SV05 0.4 nozzle", - "sub_path": "machine/Sovol SV05 0.4 nozzle.json" - }, - { - "name": "Sovol SV06 0.4 nozzle", - "sub_path": "machine/Sovol SV06 0.4 nozzle.json" - }, - { - "name": "Sovol SV06 Plus 0.4 nozzle", - "sub_path": "machine/Sovol SV06 Plus 0.4 nozzle.json" - }, - { - "name": "Sovol SV06 ACE 0.4 nozzle", - "sub_path": "machine/Sovol SV06 ACE 0.4 nozzle.json" - }, - { - "name": "Sovol SV06 Plus ACE 0.4 nozzle", - "sub_path": "machine/Sovol SV06 Plus ACE 0.4 nozzle.json" - }, - { - "name": "Sovol SV07 0.4 nozzle", - "sub_path": "machine/Sovol SV07 0.4 nozzle.json" - }, - { - "name": "Sovol SV07 Plus 0.4 nozzle", - "sub_path": "machine/Sovol SV07 Plus 0.4 nozzle.json" - }, - { - "name": "Sovol SV08 0.2 nozzle", - "sub_path": "machine/Sovol SV08 0.2 nozzle.json" - }, - { - "name": "Sovol SV08 0.4 nozzle", - "sub_path": "machine/Sovol SV08 0.4 nozzle.json" - }, - { - "name": "Sovol SV08 0.6 nozzle", - "sub_path": "machine/Sovol SV08 0.6 nozzle.json" - }, - { - "name": "Sovol SV08 0.8 nozzle", - "sub_path": "machine/Sovol SV08 0.8 nozzle.json" - } - ] -} +{ + "name": "Sovol", + "url": "", + "version": "02.02.00.04", + "force_update": "0", + "description": "Sovol configurations", + "machine_model_list": [ + { + "name": "Sovol SV01 Pro", + "sub_path": "machine/Sovol SV01 Pro.json" + }, + { + "name": "Sovol SV02", + "sub_path": "machine/Sovol SV02.json" + }, + { + "name": "Sovol SV05", + "sub_path": "machine/Sovol SV05.json" + }, + { + "name": "Sovol SV06", + "sub_path": "machine/Sovol SV06.json" + }, + { + "name": "Sovol SV06 Plus", + "sub_path": "machine/Sovol SV06 Plus.json" + }, + { + "name": "Sovol SV06 ACE", + "sub_path": "machine/Sovol SV06 ACE.json" + }, + { + "name": "Sovol SV06 Plus ACE", + "sub_path": "machine/Sovol SV06 Plus ACE.json" + }, + { + "name": "Sovol SV07", + "sub_path": "machine/Sovol SV07.json" + }, + { + "name": "Sovol SV07 Plus", + "sub_path": "machine/Sovol SV07 Plus.json" + }, + { + "name": "Sovol SV08", + "sub_path": "machine/Sovol SV08.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.18mm Optimal @Sovol SV01Pro", + "sub_path": "process/0.18mm Optimal @Sovol SV01Pro.json" + }, + { + "name": "0.18mm Optimal @Sovol SV02", + "sub_path": "process/0.18mm Optimal @Sovol SV02.json" + }, + { + "name": "0.18mm Optimal @Sovol SV05", + "sub_path": "process/0.18mm Optimal @Sovol SV05.json" + }, + { + "name": "0.18mm Optimal @Sovol SV06", + "sub_path": "process/0.18mm Optimal @Sovol SV06.json" + }, + { + "name": "0.18mm Optimal @Sovol SV06Plus", + "sub_path": "process/0.18mm Optimal @Sovol SV06Plus.json" + }, + { + "name": "0.18mm Optimal @Sovol SV07", + "sub_path": "process/0.18mm Optimal @Sovol SV07.json" + }, + { + "name": "0.18mm Optimal @Sovol SV07 Plus", + "sub_path": "process/0.18mm Optimal @Sovol SV07Plus.json" + }, + { + "name": "0.20mm Standard @Sovol SV01Pro", + "sub_path": "process/0.20mm Standard @Sovol SV01Pro.json" + }, + { + "name": "0.20mm Standard @Sovol SV02", + "sub_path": "process/0.20mm Standard @Sovol SV02.json" + }, + { + "name": "0.20mm Standard @Sovol SV05", + "sub_path": "process/0.20mm Standard @Sovol SV05.json" + }, + { + "name": "0.20mm Standard @Sovol SV06", + "sub_path": "process/0.20mm Standard @Sovol SV06.json" + }, + { + "name": "0.20mm Standard @Sovol SV06Plus", + "sub_path": "process/0.20mm Standard @Sovol SV06Plus.json" + }, + { + "name": "0.12mm Standard @Sovol SV06 ACE 0.2 nozzle", + "sub_path": "process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json" + }, + { + "name": "0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle", + "sub_path": "process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json" + }, + { + "name": "0.12mm Quality @Sovol SV06 ACE 0.4 nozzle", + "sub_path": "process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Sovol SV06 ACE", + "sub_path": "process/0.20mm Standard @Sovol SV06 ACE.json" + }, + { + "name": "0.28mm Fast @Sovol SV06 ACE 0.4 nozzle", + "sub_path": "process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json" + }, + { + "name": "0.40mm Standard @Sovol SV06 ACE 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json" + }, + { + "name": "0.30mm Standard @Sovol SV06 ACE 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json" + }, + { + "name": "0.20mm Standard @Sovol SV06 Plus ACE", + "sub_path": "process/0.20mm Standard @Sovol SV06 Plus ACE.json" + }, + { + "name": "0.20mm Standard @Sovol SV07", + "sub_path": "process/0.20mm Standard @Sovol SV07.json" + }, + { + "name": "0.20mm Standard @Sovol SV07 Plus", + "sub_path": "process/0.20mm Standard @Sovol SV07Plus.json" + }, + { + "name": "0.10mm Standard @Sovol SV08 0.2 nozzle", + "sub_path": "process/0.10mm Standard @Sovol SV08 0.2 nozzle.json" + }, + { + "name": "0.20mm Standard @Sovol SV08 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Sovol SV08 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Sovol SV08 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Sovol SV08 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Sovol SV08 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Sovol SV08 0.8 nozzle.json" + }, + { + "name": "0.20mm High-Speed @Sovol SV06", + "sub_path": "process/0.20mm High-Speed @Sovol SV06.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.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": "Sovol Generic ABS", + "sub_path": "filament/Sovol Generic ABS.json" + }, + { + "name": "Sovol Generic PETG", + "sub_path": "filament/Sovol Generic PETG.json" + }, + { + "name": "Sovol Generic PLA", + "sub_path": "filament/Sovol Generic PLA.json" + }, + { + "name": "Sovol Generic TPU", + "sub_path": "filament/Sovol Generic TPU.json" + }, + { + "name": "Sovol SV06 ACE PLA", + "sub_path": "filament/Sovol SV06 ACE PLA.json" + }, + { + "name": "Sovol SV06 ACE ABS", + "sub_path": "filament/Sovol SV06 ACE ABS.json" + }, + { + "name": "Sovol SV06 ACE PETG", + "sub_path": "filament/Sovol SV06 ACE PETG.json" + }, + { + "name": "Sovol SV06 ACE TPU", + "sub_path": "filament/Sovol SV06 ACE TPU.json" + }, + { + "name": "Sovol SV06 Plus ACE PLA", + "sub_path": "filament/Sovol SV06 Plus ACE PLA.json" + }, + { + "name": "Sovol SV06 Plus ACE ABS", + "sub_path": "filament/Sovol SV06 Plus ACE ABS.json" + }, + { + "name": "Sovol SV06 Plus ACE PETG", + "sub_path": "filament/Sovol SV06 Plus ACE PETG.json" + }, + { + "name": "Sovol SV06 Plus ACE TPU", + "sub_path": "filament/Sovol SV06 Plus ACE TPU.json" + }, + { + "name": "Sovol SV07 PLA", + "sub_path": "filament/Sovol SV07 PLA.json" + }, + { + "name": "Sovol SV08 PLA", + "sub_path": "filament/Sovol SV08 PLA.json" + }, + { + "name": "Sovol SV08 PLA @SV08 0.2 nozzle", + "sub_path": "filament/Sovol SV08 PLA @SV08 0.2 nozzle.json" + }, + { + "name": "Sovol SV08 ABS", + "sub_path": "filament/Sovol SV08 ABS.json" + }, + { + "name": "Sovol SV08 PETG", + "sub_path": "filament/Sovol SV08 PETG.json" + }, + { + "name": "Sovol SV08 TPU", + "sub_path": "filament/Sovol SV08 TPU.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "Sovol SV01 Pro 0.4 nozzle", + "sub_path": "machine/Sovol SV01 Pro 0.4 nozzle.json" + }, + { + "name": "Sovol SV02 0.4 nozzle", + "sub_path": "machine/Sovol SV02 0.4 nozzle.json" + }, + { + "name": "Sovol SV05 0.4 nozzle", + "sub_path": "machine/Sovol SV05 0.4 nozzle.json" + }, + { + "name": "Sovol SV06 0.4 nozzle", + "sub_path": "machine/Sovol SV06 0.4 nozzle.json" + }, + { + "name": "Sovol SV06 Plus 0.4 nozzle", + "sub_path": "machine/Sovol SV06 Plus 0.4 nozzle.json" + }, + { + "name": "Sovol SV06 ACE 0.2 nozzle", + "sub_path": "machine/Sovol SV06 ACE 0.2 nozzle.json" + }, + { + "name": "Sovol SV06 ACE 0.6 nozzle", + "sub_path": "machine/Sovol SV06 ACE 0.6 nozzle.json" + }, + { + "name": "Sovol SV06 ACE 0.4 nozzle", + "sub_path": "machine/Sovol SV06 ACE 0.4 nozzle.json" + }, + { + "name": "Sovol SV06 ACE 0.8 nozzle", + "sub_path": "machine/Sovol SV06 ACE 0.8 nozzle.json" + }, + { + "name": "Sovol SV06 Plus ACE 0.4 nozzle", + "sub_path": "machine/Sovol SV06 Plus ACE 0.4 nozzle.json" + }, + { + "name": "Sovol SV07 0.4 nozzle", + "sub_path": "machine/Sovol SV07 0.4 nozzle.json" + }, + { + "name": "Sovol SV07 Plus 0.4 nozzle", + "sub_path": "machine/Sovol SV07 Plus 0.4 nozzle.json" + }, + { + "name": "Sovol SV08 0.2 nozzle", + "sub_path": "machine/Sovol SV08 0.2 nozzle.json" + }, + { + "name": "Sovol SV08 0.4 nozzle", + "sub_path": "machine/Sovol SV08 0.4 nozzle.json" + }, + { + "name": "Sovol SV08 0.6 nozzle", + "sub_path": "machine/Sovol SV08 0.6 nozzle.json" + }, + { + "name": "Sovol SV08 0.8 nozzle", + "sub_path": "machine/Sovol SV08 0.8 nozzle.json" + } + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json index 93d30e325c..e7e6b637b9 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json @@ -12,7 +12,10 @@ "3" ], "compatible_printers": [ - "Sovol SV06 ACE 0.4 nozzle" + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" ], "fan_min_speed": [ "30" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json index 27284f6f72..ddf4172297 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json @@ -12,7 +12,10 @@ "3" ], "compatible_printers": [ - "Sovol SV06 ACE 0.4 nozzle" + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" ], "fan_min_speed": [ "30" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json index 27ab175790..d9c1cdf709 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json @@ -12,7 +12,9 @@ "3" ], "compatible_printers": [ - "Sovol SV06 ACE 0.4 nozzle" + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" ], "fan_min_speed": [ "50" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json index 3379e27463..0582b407e8 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json @@ -12,7 +12,10 @@ "3" ], "compatible_printers": [ - "Sovol SV06 ACE 0.4 nozzle" + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" ], "fan_min_speed": [ "100" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json new file mode 100644 index 0000000000..51f2fe45b3 --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json @@ -0,0 +1,127 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV06 ACE 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV06 ACE", + "default_print_profile": "0.12mm Standard @Sovol SV06 ACE 0.2 nozzle", + "printer_variant": "0.2", + "nozzle_diameter": [ + "0.2" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "thumbnails": [ + "96x96", + "160x160" + ], + "thumbnails_format": "PNG", + "retraction_length": [ + "0.6" + ], + "retraction_minimum_travel": [ + "0.5" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_e": [ + "25", + "25" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "z_hop": [ + "0.2" + ], + "z_hop_types":[ + "Auto Lift" + ], + "max_layer_height": [ + "0.16", + "0.16" + ], + "retract_lift_below": [ + "248", + "248" + ], + "retraction_speed": [ + "35", + "35" + ], + "deretraction_speed": [ + "35", + "35" + ], + "wipe_distance": [ + "1" + ], + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2", + "2" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "gcode_flavor": "klipper", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nSTART_PRINT\nG90\nG1 X0 F6000\nG1 Y20\nG1 Z0.200 F600\nG1 Y-4 F6000\nM400\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG91\nM83\nG1 E-0.100 Z5 F600\nG1 X{print_bed_max[1] / 3} F6000\nG1 Z-4.800 F600\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 Y1 E0.16 F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 Y1 E0.24 F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 E-0.200 Z1 F600\nM400\n\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV06 ACE PLA" + ] +} diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json index 88ded0ba49..eef703056e 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json @@ -6,7 +6,8 @@ "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Sovol SV06 ACE", - "default_print_profile": "0.20mm Standard @Sovol SV06 ACE - official", + "default_print_profile": "0.20mm Standard @Sovol SV06 ACE", + "printer_variant": "0.4", "nozzle_diameter": [ "0.4" ], @@ -25,6 +26,9 @@ "retraction_length": [ "0.8" ], + "retraction_minimum_travel": [ + "1" + ], "machine_max_acceleration_e": [ "5000", "5000" @@ -70,7 +74,6 @@ "10" ], "z_hop": [ - "0.4", "0.4" ], "z_hop_types":[ @@ -93,16 +96,10 @@ "40" ], "wipe_distance": [ - "2", - "2" + "2" ], - "retract_minimum_trave": [ - "1", - "1" - ], "retract_before_wipe": [ - "100", - "100" + "100%" ], "retract_length_toolchange": [ "2", @@ -122,7 +119,7 @@ ], "gcode_flavor": "klipper", "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", - "machine_start_gcode": "START_PRINT\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nG90\nG1 X0 F6000\nG1 Y20\nG1 Z0.400 F600\nG1 Y-4 F6000\nM400\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG91\nM83\nG1 E-0.200 Z5 F600\nG1 X{print_bed_max[1] / 3} F6000\nG1 Z-4.800 F600\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 Y1 E0.16 F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 Y1 E0.24 F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 E-0.200 Z1 F600\nM400\n\n", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nSTART_PRINT\nG90\nG1 X0 F6000\nG1 Y20\nG1 Z0.400 F600\nG1 Y-4 F6000\nM400\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG91\nM83\nG1 E-0.200 Z5 F600\nG1 X{print_bed_max[1] / 3} F6000\nG1 Z-4.800 F600\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 Y1 E0.16 F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 Y1 E0.24 F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 E-0.200 Z1 F600\nM400\n\n", "machine_end_gcode": "END_PRINT\n", "default_filament_profile": [ "Sovol SV06 ACE PLA" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json new file mode 100644 index 0000000000..015f9871e6 --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json @@ -0,0 +1,127 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV06 ACE 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV06 ACE", + "default_print_profile": "0.30mm Standard @Sovol SV06 ACE 0.6 nozzle", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "thumbnails": [ + "96x96", + "160x160" + ], + "thumbnails_format": "PNG", + "retraction_length": [ + "1.0" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "z_hop": [ + "0.6" + ], + "z_hop_types":[ + "Auto Lift" + ], + "max_layer_height": [ + "0.48", + "0.48" + ], + "retract_lift_below": [ + "248", + "248" + ], + "retraction_speed": [ + "45", + "45" + ], + "deretraction_speed": [ + "45", + "45" + ], + "wipe_distance": [ + "3" + ], + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2", + "2" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "gcode_flavor": "klipper", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nSTART_PRINT\nG90\nG1 X0 F6000\nG1 Y20\nG1 Z0.600 F600\nG1 Y-4 F6000\nM400\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG91\nM83\nG1 E-0.300 Z5 F600\nG1 X{print_bed_max[1] / 3} F6000\nG1 Z-4.800 F600\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 Y1 E0.16 F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 Y1 E0.24 F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 E-0.200 Z1 F600\nM400\n\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV06 ACE PLA" + ] +} diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json new file mode 100644 index 0000000000..ddfc77be1c --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json @@ -0,0 +1,127 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV06 ACE 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV06 ACE", + "default_print_profile": "0.40mm Standard @Sovol SV06 ACE 0.8 nozzle", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "thumbnails": [ + "96x96", + "160x160" + ], + "thumbnails_format": "PNG", + "retraction_length": [ + "1.2" + ], + "retraction_minimum_travel": [ + "2" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_e": [ + "70", + "70" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "z_hop": [ + "0.8" + ], + "z_hop_types":[ + "Auto Lift" + ], + "max_layer_height": [ + "0.64", + "0.64" + ], + "retract_lift_below": [ + "248", + "248" + ], + "retraction_speed": [ + "45", + "45" + ], + "deretraction_speed": [ + "45", + "45" + ], + "wipe_distance": [ + "4" + ], + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2", + "2" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "gcode_flavor": "klipper", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nSTART_PRINT\nG90\nG1 X0 F6000\nG1 Y20\nG1 Z0.800 F600\nG1 Y-4 F6000\nM400\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG91\nM83\nG1 E-0.300 Z5 F600\nG1 X{print_bed_max[1] / 3} F6000\nG1 Z-4.800 F600\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 Y1 E0.16 F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 X-{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 Y1 E0.24 F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.24} F3000\nG1 X{print_bed_max[1] / 6} E{print_bed_max[1] / 6 * 0.16} F3000\nG1 E-0.200 Z1 F600\nM400\n\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV06 ACE PLA" + ] +} diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json index be25128279..fe567994d4 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Sovol SV06 ACE", "model_id": "Sovol-SV06-ACE", - "nozzle_diameter": "0.4", + "nozzle_diameter": "0.2;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Sovol", "bed_model": "sovol_sv06_ace_buildplate_model.stl", diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json index 2223662fc5..1cf12b8eef 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json @@ -6,7 +6,7 @@ "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Sovol SV06 Plus ACE", - "default_print_profile": "0.20mm Standard @Sovol SV06 Plus ACE - official", + "default_print_profile": "0.20mm Standard @Sovol SV06 Plus ACE", "nozzle_diameter": [ "0.4" ], @@ -73,7 +73,6 @@ "10" ], "z_hop": [ - "0.4", "0.4" ], "z_hop_types":[ @@ -96,16 +95,10 @@ "40" ], "wipe_distance": [ - "2", - "2" + "2" ], - "retract_minimum_trave": [ - "1", - "1" - ], "retract_before_wipe": [ - "100", - "100" + "100%" ], "retract_length_toolchange": [ "2", diff --git a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json new file mode 100644 index 0000000000..ceccf574ed --- /dev/null +++ b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm High Quality @Sovol SV06 ACE", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.08", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "6000", + "top_surface_acceleration": "6000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "2000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "8000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.4", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "20", + "initial_layer_infill_speed": "40", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "150", + "inner_wall_speed": "200", + "internal_solid_infill_speed": "140", + "top_surface_speed": "150", + "gap_infill_speed": "200", + "sparse_infill_speed": "250", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json new file mode 100644 index 0000000000..f67d1d699c --- /dev/null +++ b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Quality @Sovol SV06 ACE", + "from": "system", + "inherits": "fdm_process_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": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "6000", + "top_surface_acceleration": "6000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "2000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "8000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.4", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "25", + "initial_layer_infill_speed": "40", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "180", + "inner_wall_speed": "240", + "internal_solid_infill_speed": "160", + "top_surface_speed": "160", + "gap_infill_speed": "200", + "sparse_infill_speed": "280", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json new file mode 100644 index 0000000000..5a69751f77 --- /dev/null +++ b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Standard @Sovol SV06 ACE 0.2 nozzle", + "from": "system", + "inherits": "fdm_process_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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "3000", + "top_surface_acceleration": "3000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.05", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.2", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.2", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "4000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.25", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "10", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.22", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.2", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.2", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "20", + "initial_layer_infill_speed": "25", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "150", + "inner_wall_speed": "200", + "internal_solid_infill_speed": "140", + "top_surface_speed": "150", + "gap_infill_speed": "200", + "sparse_infill_speed": "250", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.2 nozzle" + ] +} diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE - official.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json similarity index 95% rename from resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE - official.json rename to resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json index 6bfdda69af..22dccda48e 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE - official.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV06 ACE - official", + "name": "0.20mm Standard @Sovol SV06 ACE", "from": "system", "inherits": "fdm_process_common", "instantiation": "true", @@ -27,13 +27,14 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", + "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", "wall_sequence": "inner-outer-inner wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2000", "travel_acceleration": "10000", "inner_wall_acceleration": "8000", @@ -61,9 +62,9 @@ "raft_layers": "0", "seam_position": "aligned", "seam_gap": "5%", - "skirt_distance": "0", + "skirt_distance": "5", "skirt_height": "1", - "skirt_loops": "1", + "skirt_loops": "0", "skirt_speed": "30", "minimum_sparse_infill_area": "10", "internal_solid_infill_line_width": "0.4", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE - official.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json similarity index 95% rename from resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE - official.json rename to resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json index 671915ee36..30a5e8cc66 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE - official.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV06 Plus ACE - official", + "name": "0.20mm Standard @Sovol SV06 Plus ACE", "from": "system", "inherits": "fdm_process_common", "instantiation": "true", @@ -27,13 +27,14 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", + "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", "wall_sequence": "inner-outer-inner wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2000", "travel_acceleration": "8000", "inner_wall_acceleration": "6000", @@ -61,9 +62,9 @@ "raft_layers": "0", "seam_position": "aligned", "seam_gap": "5%", - "skirt_distance": "0", + "skirt_distance": "5", "skirt_height": "1", - "skirt_loops": "1", + "skirt_loops": "0", "skirt_speed": "50", "minimum_sparse_infill_area": "10", "internal_solid_infill_line_width": "0.4", diff --git a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json new file mode 100644 index 0000000000..8880df809a --- /dev/null +++ b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.28mm Fast @Sovol SV06 ACE", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.28", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "6000", + "top_surface_acceleration": "6000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "2000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "8000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.32", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.4", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "40", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "220", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "240", + "top_surface_speed": "200", + "gap_infill_speed": "200", + "sparse_infill_speed": "320", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json new file mode 100644 index 0000000000..4cf3aae54b --- /dev/null +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Sovol SV06 ACE 0.6 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.30", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "7000", + "top_surface_acceleration": "7000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.6", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.6", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "2500", + "travel_acceleration": "10000", + "inner_wall_acceleration": "9000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.65", + "initial_layer_print_height": "0.35", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "20", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.62", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.6", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.58", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "45", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "220", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "240", + "top_surface_speed": "220", + "gap_infill_speed": "200", + "sparse_infill_speed": "320", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.6 nozzle" + ] +} diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json new file mode 100644 index 0000000000..4893698c15 --- /dev/null +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json @@ -0,0 +1,126 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Sovol SV06 ACE 0.8 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.40", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_type": "auto_brim", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "10000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "8000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "outer_wall_line_width": "0.8", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.8", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "10000", + "bridge_acceleration": "100%", + "initial_layer_line_width": "0.85", + "initial_layer_print_height": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.85", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "25", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "20", + "inner_wall_line_width": "0.82", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_gap": "5%", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "30", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.8", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.78", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "50", + "initial_layer_travel_speed": "60%", + "slow_down_layers": "3", + "outer_wall_speed": "240", + "inner_wall_speed": "320", + "internal_solid_infill_speed": "260", + "top_surface_speed": "240", + "gap_infill_speed": "200", + "sparse_infill_speed": "350", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "wall_generator": "classic", + "top_solid_infill_flow_ratio": "0.8", + "only_one_wall_top": "1", + "minimum_sparse_infill_threshold": "0", + "gcode_label_objects": "1", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "thick_bridges": "1", + "compatible_printers": [ + "Sovol SV06 ACE 0.8 nozzle" + ] +} From 7a5746b1ae290797c9fdb4a88ad919fb9dbc0fee Mon Sep 17 00:00:00 2001 From: Vovodroid Date: Thu, 23 Jan 2025 12:01:38 +0200 Subject: [PATCH 096/100] Support threshold overlap (#6606) * Support threshold overlap * Update tooltip --- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 13 ++++++++++++- src/libslic3r/PrintConfig.hpp | 1 + src/libslic3r/PrintObject.cpp | 1 + src/libslic3r/Support/SupportMaterial.cpp | 4 ++-- src/libslic3r/Support/TreeSupport3D.cpp | 2 +- src/slic3r/GUI/ConfigManipulation.cpp | 1 + src/slic3r/GUI/GUI_Factories.cpp | 6 +++--- src/slic3r/GUI/Tab.cpp | 1 + 9 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index cfc777c8cc..d4610cc961 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -785,7 +785,7 @@ static std::vector s_Preset_print_options { "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed", "bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", "outer_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle", "skirt_height", "draft_shield", - "brim_width", "brim_object_gap", "brim_type", "brim_ears_max_angle", "brim_ears_detection_length", "enable_support", "support_type", "support_threshold_angle", "enforce_support_layers", + "brim_width", "brim_object_gap", "brim_type", "brim_ears_max_angle", "brim_ears_detection_length", "enable_support", "support_type", "support_threshold_angle", "support_threshold_overlap","enforce_support_layers", "raft_layers", "raft_first_layer_density", "raft_first_layer_expansion", "raft_contact_distance", "raft_expansion", "support_base_pattern", "support_base_pattern_spacing", "support_expansion", "support_style", "independent_support_layer_height", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 0fd8c91b78..1c259a028c 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4722,11 +4722,22 @@ void PrintConfigDef::init_fff_params() def->category = L("Support"); def->tooltip = L("Support will be generated for overhangs whose slope angle is below the threshold."); def->sidetext = L("°"); - def->min = 1; + def->min = 0; def->max = 90; def->mode = comSimple; def->set_default_value(new ConfigOptionInt(30)); + def = this->add("support_threshold_overlap", coFloatOrPercent); + def->label = L("Threshold overlap"); + def->category = L("Support"); + def->tooltip = L("If threshold angle is zero, support will be generated for overhangs whose overlap is below the threshold. The smaller this value is, the steeper the overhang that can be printed without support."); + def->sidetext = L("mm or %"); + def->min = 0; + def->max = 100; + def->max_literal = 0.5; + def->mode = comSimple; + def->set_default_value(new ConfigOptionFloatOrPercent(50., true)); + def = this->add("tree_support_branch_angle", coFloat); def->label = L("Tree support branch angle"); def->category = L("Support"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index dc222603b8..88cc8438bf 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -820,6 +820,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionEnum, dont_filter_internal_bridges)) // Overhang angle threshold. ((ConfigOptionInt, support_threshold_angle)) + ((ConfigOptionFloatOrPercent, support_threshold_overlap)) ((ConfigOptionFloat, support_object_xy_distance)) ((ConfigOptionFloat, xy_hole_compensation)) ((ConfigOptionFloat, xy_contour_compensation)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 01d7e242c9..0c5d78de77 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1019,6 +1019,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "support_expansion" //|| opt_key == "independent_support_layer_height" // BBS || opt_key == "support_threshold_angle" + || opt_key == "support_threshold_overlap" || opt_key == "raft_expansion" || opt_key == "raft_first_layer_density" || opt_key == "raft_first_layer_expansion" diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index 4d0aafcffb..3050bd7f6e 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -1517,8 +1517,8 @@ static inline ExPolygons detect_overhangs( (threshold_rad > 0. ? // Overhang defined by an angle. float(scale_(lower_layer.height / tan(threshold_rad))) : - // Overhang defined by half the extrusion width. - 0.5f * fw); + // Overhang defined by overlap. + fw - float(scale_(object_config.support_threshold_overlap.get_abs_value(unscale_(fw))))); // Overhang polygons for this layer and region. Polygons diff_polygons; Polygons layerm_polygons = to_polygons(layerm->slices.surfaces); diff --git a/src/libslic3r/Support/TreeSupport3D.cpp b/src/libslic3r/Support/TreeSupport3D.cpp index c96801e008..fb4dcb2c9a 100644 --- a/src/libslic3r/Support/TreeSupport3D.cpp +++ b/src/libslic3r/Support/TreeSupport3D.cpp @@ -239,7 +239,7 @@ static std::vector>> group_me for (const LayerRegion *layerm : lower_layer.regions()) external_perimeter_width += layerm->flow(frExternalPerimeter).scaled_width(); external_perimeter_width /= lower_layer.region_count(); - lower_layer_offset = float(0.5 * external_perimeter_width); + lower_layer_offset = external_perimeter_width - float(scale_(config.support_threshold_overlap.get_abs_value(unscale_(external_perimeter_width)))); } else lower_layer_offset = scaled(lower_layer.height / tan_threshold); overhangs = lower_layer_offset == 0 ? diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 4bfcf18cf0..44ed3da012 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -599,6 +599,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "support_object_xy_distance"/*, "independent_support_layer_height"*/}) toggle_field(el, have_support_material); toggle_field("support_threshold_angle", have_support_material && is_auto(support_type)); + toggle_field("support_threshold_overlap", config->opt_int("support_threshold_angle") == 0 && have_support_material && is_auto(support_type)); //toggle_field("support_closing_radius", have_support_material && support_style == smsSnug); bool support_is_tree = config->opt_bool("enable_support") && is_tree(support_type); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 8d1452a0fa..416c269905 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -61,7 +61,7 @@ static SettingsFactory::Bundle FREQ_SETTINGS_BUNDLE_FFF = { L("Shell"), { "wall_loops", "top_shell_layers", "bottom_shell_layers"} }, { L("Infill") , { "sparse_infill_density", "sparse_infill_pattern" } }, // BBS - { L("Support") , { "enable_support", "support_type", "support_threshold_angle", + { L("Support") , { "enable_support", "support_type", "support_threshold_angle", "support_threshold_overlap", "support_base_pattern", "support_on_build_plate_only","support_critical_regions_only", "support_remove_small_overhang", "support_base_pattern_spacing", "support_expansion"}}, @@ -88,7 +88,7 @@ std::map> SettingsFactory::OBJECT_C }}, { L("Support"), {{"brim_type", "",1},{"brim_width", "",2},{"brim_object_gap", "",3}, - {"enable_support", "",4},{"support_type", "",5},{"support_threshold_angle", "",6},{"support_on_build_plate_only", "",7}, + {"enable_support", "",4},{"support_type", "",5},{"support_threshold_angle", "",6}, {"support_threshold_overlap", "",6}, {"support_on_build_plate_only", "",7}, {"support_filament", "",8},{"support_interface_filament", "",9},{"support_expansion", "",24},{"support_style", "",25}, {"tree_support_brim_width", "",26}, {"tree_support_branch_angle", "",10},{"tree_support_branch_angle_organic","",10}, {"tree_support_wall_count", "",11},//tree support {"support_top_z_distance", "",13},{"support_bottom_z_distance", "",12},{"support_base_pattern", "",14},{"support_base_pattern_spacing", "",15}, @@ -150,7 +150,7 @@ std::vector SettingsFactory::get_visible_options(const std::s //Quality "layer_height", "initial_layer_print_height", "adaptive_layer_height", "seam_position", "xy_hole_compensation", "xy_contour_compensation", "elefant_foot_compensation", "support_line_width", //Support - "enable_support", "support_type", "support_threshold_angle", "support_on_build_plate_only", "support_critical_regions_only", "enforce_support_layers", + "enable_support", "support_type", "support_threshold_angle", "support_threshold_overlap", "support_on_build_plate_only", "support_critical_regions_only", "enforce_support_layers", //tree support "tree_support_wall_count", //support diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 7ec6d1b976..8005d4ee6d 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2227,6 +2227,7 @@ void TabPrint::build() optgroup->append_single_option_line("support_type", "support#support-types"); optgroup->append_single_option_line("support_style", "support#support-styles"); optgroup->append_single_option_line("support_threshold_angle", "support#threshold-angle"); + optgroup->append_single_option_line("support_threshold_overlap", "support#threshold-angle"); optgroup->append_single_option_line("raft_first_layer_density"); optgroup->append_single_option_line("raft_first_layer_expansion"); optgroup->append_single_option_line("support_on_build_plate_only"); From 251887004fc806ee1568974cf7381a1f3b2ba314 Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:10:15 +0100 Subject: [PATCH 097/100] Preventing nested zipping of the portable Windows build (#7950) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update build_orca.yml Preventing nested zipping of the portable Windows build. 😊 * Update build_orca.yml * uncommented lines 180-184 --- .github/workflows/build_orca.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 87aacd8862..e417b3ef36 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -194,7 +194,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: OrcaSlicer_Windows_${{ env.ver }}_portable - path: ${{ github.workspace }}/build/OrcaSlicer_Windows_${{ env.ver }}_portable.zip + path: ${{ github.workspace }}/build/OrcaSlicer - name: Upload artifacts Win installer if: inputs.os == 'windows-latest' From 85e9d326608d7bc6fb7739377969cab8742a7ad3 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Thu, 23 Jan 2025 22:39:11 +0800 Subject: [PATCH 098/100] =?UTF-8?q?Fix=20issue=20`Preset=20name=20"0.20mm?= =?UTF-8?q?=20Speed=20@MK3S=200.4"=20was=20marked=20as=20renamed=E2=80=A6?= =?UTF-8?q?=20(#8156)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix issue `Preset name "0.20mm Speed @MK3S 0.4" was marked as renamed from "0.20mm Standard @MK3S", though preset name "0.20mm Detail @MK3S 0.6" was marked as renamed from "0.20mm Standard @MK3S" as well.` --- resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json | 1 - resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json | 1 - resources/profiles/Prusa/process/0.20mm Speed @MK3S.json | 1 - 3 files changed, 3 deletions(-) diff --git a/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json b/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json index 6fb6eb99be..37cb00ae79 100644 --- a/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json @@ -3,7 +3,6 @@ "print_settings_id": "0.20mm Detail @MK3S 0.6", "name": "0.20mm Detail @MK3S 0.6", "from": "system", - "renamed_from":"0.20mm Standard @MK3S", "instantiation": "true", "inherits": "process_common_mk3", "bottom_shell_layers": "4", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json index 73355f53c2..7ae485dfef 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json @@ -3,7 +3,6 @@ "print_settings_id": "0.20mm Speed @MK3S 0.4", "name": "0.20mm Speed @MK3S 0.4", "from": "system", - "renamed_from":"0.20mm Standard @MK3S", "instantiation": "true", "inherits": "process_common_mk3", "bottom_shell_layers": "4", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json index f3fbbe4cb1..89f73c7a54 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json @@ -3,7 +3,6 @@ "print_settings_id": "0.20mm Speed @MK3S", "name": "0.20mm Speed @MK3S", "from": "system", - "renamed_from":"0.20mm Standard @MK3S", "instantiation": "true", "inherits": "process_common_mk3", "bottom_shell_layers": "4", From ddef92ccd6fb1260c712d442272c67835a3e7a0d Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jan 2025 16:51:53 +0100 Subject: [PATCH 099/100] Improvements and fixes for Creality K2 Plus (#8154) --- .../Creality Generic ABS @K2-all.json | 1 + .../Creality Generic ASA @K2-all.json | 1 + .../Creality Generic PA-CF @K2-all.json | 1 + .../Creality Generic PETG @K2-all.json | 1 + .../Creality Generic PLA @K2-all.json | 1 + .../Creality Generic TPU @K2-all.json | 1 + .../machine/Creality K2 Plus 0.2 nozzle.json | 16 +++++++++++---- .../machine/Creality K2 Plus 0.4 nozzle.json | 20 +++++++++++++------ .../machine/Creality K2 Plus 0.6 nozzle.json | 16 +++++++++++---- .../machine/Creality K2 Plus 0.8 nozzle.json | 18 ++++++++++++----- ...erDetail @Creality K2 Plus 0.2 nozzle.json | 1 + ...erDetail @Creality K2 Plus 0.4 nozzle.json | 1 + ...ghDetail @Creality K2 Plus 0.2 nozzle.json | 1 + ...m Detail @Creality K2 Plus 0.2 nozzle.json | 1 + ...m Detail @Creality K2 Plus 0.4 nozzle.json | 1 + ... Optimal @Creality K2 Plus 0.2 nozzle.json | 1 + ... Optimal @Creality K2 Plus 0.4 nozzle.json | 1 + ...m Detail @Creality K2 Plus 0.6 nozzle.json | 1 + ...Standard @Creality K2 Plus 0.4 nozzle.json | 1 + ...m Detail @Creality K2 Plus 0.8 nozzle.json | 1 + ...mm Draft @Creality K2 Plus 0.4 nozzle.json | 1 + ... Optimal @Creality K2 Plus 0.6 nozzle.json | 1 + ...perDraft @Creality K2 Plus 0.4 nozzle.json | 1 + ...Standard @Creality K2 Plus 0.6 nozzle.json | 1 + ... Optimal @Creality K2 Plus 0.8 nozzle.json | 1 + ...mm Draft @Creality K2 Plus 0.6 nozzle.json | 1 + ...Standard @Creality K2 Plus 0.8 nozzle.json | 1 + ...perDraft @Creality K2 Plus 0.6 nozzle.json | 1 + ...mm Draft @Creality K2 Plus 0.8 nozzle.json | 1 + ...perDraft @Creality K2 Plus 0.8 nozzle.json | 1 + 30 files changed, 77 insertions(+), 19 deletions(-) diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json index 4a033b3780..83007ba3cd 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json @@ -17,6 +17,7 @@ "slow_down_min_speed": [ "20" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json index 8cb657bdd0..007ea2639d 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json @@ -17,6 +17,7 @@ "slow_down_min_speed": [ "20" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json index 3e0963cc49..639109c4a5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json @@ -14,6 +14,7 @@ "fan_min_speed": [ "30" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json index efe3f28bb7..c01d3e4f3f 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json @@ -50,6 +50,7 @@ "reduce_fan_stop_start_freq": [ "1" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json index 472eef9221..3bbc824e96 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json @@ -44,6 +44,7 @@ "reduce_fan_stop_start_freq": [ "1" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json index 21b4e547a3..1c0d417cc1 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json @@ -32,6 +32,7 @@ "reduce_fan_stop_start_freq": [ "1" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || position[2] > first_layer_height)}\n{if (position[2] +0.4 < printable_height) }\nG2 Z{position[2] + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{position[2] } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}\n"], "compatible_printers": [ "Creality K2 Plus 0.2 nozzle", "Creality K2 Plus 0.4 nozzle", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json index dccdf656fa..533f565db2 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json @@ -20,9 +20,10 @@ ], "printable_height": "350", "nozzle_type": "hardened_steel", + "nozzle_volume": "183", "auxiliary_fan": "1", "support_air_filtration": "1", - "support_multi_bed_types": "0", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -91,7 +92,7 @@ ], "printer_settings_id": "Creality", "retraction_minimum_travel": [ - "2" + "1" ], "retract_before_wipe": [ "70%" @@ -108,7 +109,14 @@ "deretraction_speed": [ "40" ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "349" + ], "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "cooling_tube_length": "0", "cooling_tube_retraction": "0", "parking_pos_retraction": "0", @@ -127,12 +135,12 @@ "default_filament_profile": [ "Creality Generic PLA @K2-all" ], - "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", - "thumbnails_format":"PNG", + "thumbnails_format": "PNG", "thumbnails": [ "300x300", "96x96" diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json index 0b86c46be8..74af66fff6 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json @@ -20,9 +20,10 @@ ], "printable_height": "350", "nozzle_type": "hardened_steel", + "nozzle_volume": "183", "auxiliary_fan": "1", "support_air_filtration": "1", - "support_multi_bed_types": "0", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -91,13 +92,13 @@ ], "printer_settings_id": "Creality", "retraction_minimum_travel": [ - "2" + "1" ], "retract_before_wipe": [ "70%" ], "retraction_length": [ - "0.5" + "0.8" ], "retract_length_toolchange": [ "0" @@ -108,7 +109,14 @@ "deretraction_speed": [ "40" ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "349" + ], "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "cooling_tube_length": "0", "cooling_tube_retraction": "0", "parking_pos_retraction": "0", @@ -120,19 +128,19 @@ "0.4" ], "wipe_distance": [ - "1" + "2" ], "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ "Creality Generic PLA @K2-all" ], - "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", - "thumbnails_format":"PNG", + "thumbnails_format": "PNG", "thumbnails": [ "300x300", "96x96" diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json index ab0c9db164..0653905794 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json @@ -20,9 +20,10 @@ ], "printable_height": "350", "nozzle_type": "hardened_steel", + "nozzle_volume": "183", "auxiliary_fan": "1", "support_air_filtration": "1", - "support_multi_bed_types": "0", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -91,7 +92,7 @@ ], "printer_settings_id": "Creality", "retraction_minimum_travel": [ - "2" + "1" ], "retract_before_wipe": [ "70%" @@ -108,7 +109,14 @@ "deretraction_speed": [ "40" ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "349" + ], "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "cooling_tube_length": "0", "cooling_tube_retraction": "0", "parking_pos_retraction": "0", @@ -127,7 +135,7 @@ "default_filament_profile": [ "Creality Generic PLA @K2-all" ], - "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", @@ -137,4 +145,4 @@ "300x300", "96x96" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json index 72b061807a..b452404086 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json @@ -20,9 +20,10 @@ ], "printable_height": "350", "nozzle_type": "hardened_steel", + "nozzle_volume": "183", "auxiliary_fan": "1", "support_air_filtration": "1", - "support_multi_bed_types": "0", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -91,7 +92,7 @@ ], "printer_settings_id": "Creality", "retraction_minimum_travel": [ - "2" + "1" ], "retract_before_wipe": [ "70%" @@ -108,7 +109,14 @@ "deretraction_speed": [ "40" ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "349" + ], "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "cooling_tube_length": "0", "cooling_tube_retraction": "0", "parking_pos_retraction": "0", @@ -127,14 +135,14 @@ "default_filament_profile": [ "Creality Generic PLA @K2-all" ], - "machine_start_gcode":"M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F1500\nG1 X150 Y0 E15 F1500\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "scan_first_layer": "0", - "thumbnails_format":"PNG", + "thumbnails_format": "PNG", "thumbnails": [ "300x300", "96x96" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json index 3798743496..0aaf929625 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.25", "inner_wall_speed": "150", "wall_loops": "4", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json index 7304c173ae..ee060f244b 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "350", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json index bffb09ca7c..8a1fda49e0 100644 --- a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.25", "inner_wall_speed": "150", "wall_loops": "4", diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json index 437d4c16e5..edbd1dc827 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.25", "inner_wall_speed": "150", "wall_loops": "4", diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json index 2f262bfaea..842b07347f 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "300", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json index 1525dd94f6..cb5884d099 100644 --- a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.25", "inner_wall_speed": "150", "wall_loops": "4", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json index 981862606f..09af514094 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "300", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json index 4d42a50cba..21399d932d 100644 --- a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.65", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json index b90fab60f8..d20935011d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "300", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json index fc3ecfd103..c953b04a2f 100644 --- a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.82", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json index 55e401882c..3220276e29 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "300", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json index c15220e405..274783173b 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.65", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json index 9a2f65b23c..c93d65bcc9 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.45", "inner_wall_speed": "200", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json index 9efc66438c..6207414767 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.65", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json index 02f244ad2b..eeeb765710 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.82", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json index e112eb39c0..30de178e04 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.65", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json index 26477340b0..593e118940 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.82", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json index 4e9594ba20..2b765d102f 100644 --- a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.65", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json index c420d26892..32090d39aa 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.82", "inner_wall_speed": "150", "wall_loops": "2", diff --git a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json index a463fef969..6fe45f83d3 100644 --- a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json @@ -54,6 +54,7 @@ "overhang_3_4_speed": "20", "overhang_4_4_speed": "10", "only_one_wall_top": "1", + "precise_outer_wall": "1", "inner_wall_line_width": "0.82", "inner_wall_speed": "150", "wall_loops": "2", From 02f5bc0d22349ef2386fca8ae88ea88b9e9e2ec6 Mon Sep 17 00:00:00 2001 From: DeltaMaker Date: Thu, 23 Jan 2025 18:11:44 -0500 Subject: [PATCH 100/100] Add profiles for DeltaMaker 3D printers (#7712) * Initial DM2 Profiles Add profiles for DeltaMaker 3D printers * Made changes to machine/fdm_machine_common.json and process/fdm_process_common.json to validate successfully using the Orca profile validator * Update DeltaMaker 2.json Corrected the capitalization of the file name. --------- Co-authored-by: Noisyfox Co-authored-by: SoftFever Co-authored-by: Christian Coleman --- resources/profiles/DeltaMaker.json | 91 ++++++++++++++ .../DeltaMaker/DeltaMaker 2T_cover.png | Bin 0 -> 67085 bytes .../DeltaMaker/DeltaMaker 2XT_cover.png | Bin 0 -> 99489 bytes .../DeltaMaker/DeltaMaker 2_cover.png | Bin 0 -> 64498 bytes .../deltamaker_2_buildplate_model.stl | Bin 0 -> 1084 bytes .../deltamaker_2_buildplate_texture.png | Bin 0 -> 294264 bytes .../deltamaker_2_buildplate_texture.svg | 99 +++++++++++++++ .../filament/DeltaMaker Brand PLA.json | 22 ++++ .../filament/DeltaMaker Generic PETG.json | 23 ++++ .../filament/DeltaMaker Generic PLA.json | 17 +++ .../filament/DeltaMaker Generic TPU.json | 14 +++ .../filament/fdm_filament_common.json | 50 ++++++++ .../DeltaMaker/filament/fdm_filament_pet.json | 24 ++++ .../DeltaMaker/filament/fdm_filament_pla.json | 27 +++++ .../DeltaMaker/filament/fdm_filament_tpu.json | 26 ++++ .../machine/DeltaMaker 2 0.35 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2.json | 11 ++ .../machine/DeltaMaker 2T 0.5 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2T.json | 11 ++ .../machine/DeltaMaker 2XT 0.5 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2XT.json | 11 ++ .../machine/fdm_klipper_common.json | 60 +++++++++ .../machine/fdm_machine_common.json | 54 +++++++++ .../process/0.12mm Fine @DeltaMaker.json | 20 +++ .../process/0.18mm Standard @DeltaMaker.json | 25 ++++ .../process/0.25mm Draft @DeltaMaker.json | 24 ++++ .../process/fdm_process_common.json | 114 ++++++++++++++++++ .../process/fdm_process_klipper_common.json | 23 ++++ 28 files changed, 821 insertions(+) create mode 100755 resources/profiles/DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2XT_cover.png create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2_cover.png create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.png create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_common.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_pet.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_pla.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json create mode 100755 resources/profiles/DeltaMaker/machine/fdm_klipper_common.json create mode 100755 resources/profiles/DeltaMaker/machine/fdm_machine_common.json create mode 100755 resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/fdm_process_common.json create mode 100755 resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json new file mode 100755 index 0000000000..4314c00860 --- /dev/null +++ b/resources/profiles/DeltaMaker.json @@ -0,0 +1,91 @@ +{ + "name": "DeltaMaker", + "url": "", + "version": "02.02.00.04", + "force_update": "0", + "description": "DeltaMaker configurations", + "machine_model_list": [ + { + "name": "DeltaMaker 2", + "sub_path": "machine/DeltaMaker 2.json" + }, + { + "name": "DeltaMaker 2T", + "sub_path": "machine/DeltaMaker 2T.json" + }, + { + "name": "DeltaMaker 2XT", + "sub_path": "machine/DeltaMaker 2XT.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.12mm Fine @DeltaMaker", + "sub_path": "process/0.12mm Fine @DeltaMaker.json" + }, + { + "name": "0.18mm Standard @DeltaMaker", + "sub_path": "process/0.18mm Standard @DeltaMaker.json" + }, + { + "name": "0.25mm Draft @DeltaMaker", + "sub_path": "process/0.25mm Draft @DeltaMaker.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.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": "DeltaMaker Brand PLA", + "sub_path": "filament/DeltaMaker Brand PLA.json" + }, + { + "name": "DeltaMaker Generic PLA", + "sub_path": "filament/DeltaMaker Generic PLA.json" + }, + { + "name": "DeltaMaker Generic PETG", + "sub_path": "filament/DeltaMaker Generic PETG.json" + }, + { + "name": "DeltaMaker Generic TPU", + "sub_path": "filament/DeltaMaker Generic TPU.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "DeltaMaker 2 0.35 nozzle", + "sub_path": "machine/DeltaMaker 2 0.35 nozzle.json" + }, + { + "name": "DeltaMaker 2T 0.5 nozzle", + "sub_path": "machine/DeltaMaker 2T 0.5 nozzle.json" + }, + { + "name": "DeltaMaker 2XT 0.5 nozzle", + "sub_path": "machine/DeltaMaker 2XT 0.5 nozzle.json" + } + ] +} diff --git a/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png b/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png new file mode 100755 index 0000000000000000000000000000000000000000..ff5fcd04ccbe1c41bd09788e03afb34e42cf4c88 GIT binary patch literal 67085 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�Wf;ss@y9_gpWye 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl new file mode 100755 index 0000000000000000000000000000000000000000..8d67fdb68f6984acdc2a2ad4ae4f2972e8b067b9 GIT binary patch literal 1084 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 z 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

    h;Jl~i$hzxXc3!^ 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

    F$$D@UiG(N_9qMPG?f%(c(5Av) z3G~{H=TV-mVMNmv8TnXI_+nV1x!Fr~KpF%i!C;!5&UfSe@%`T0?W+n;WHfo~ zpo004^%X`mIp93I1QR?=QU!A^8V<>*6v)y%`3&X7dPT`{%zhVj&_$c1Rx%oUk}_|;1h zAv!Bnq;RAJVCe@^!E%L4@9fr(d>>SYR?pP<*L~7?3o|6t$0nzuwt*L4A(=s*%m@Ec zpXZvt84~cpnh< z%u7Rrw)nOh{)*dNP5Y{@gO)=umuOzhHNTlSO}nw<5vI08iI9M@?S3;{!(AE~{h{%% zgG_(_3eMvza7HJ()C=>(Xy9AHgNN+6Nv?*kgPa@aU3u9o)1CaEGXuZO2C3>nl~Gi| zF0aM{QX;eIb&UMh1oRFq%6G%%?!?r;>W=Um(QeJa*vjhQJS znhtQ2ctrAi&c21SZsGEiH1LpXp^RK<`AuTE@6q&tRpEpaVk#P8Dn+$JgybSQU~=sm z>tv#e&9JQS*9-~(?Mb06TNi0M&vB_UNO3BN(YPd=tUCU~dcs=vyoGu0&LJR^huy{y zseT`AbT1-d+ux8+rsJ5CyHOjr@2p3!-;qHHu<28p{We8rwsN5X5n4T_6Hco)VfDe= zx=RGQLpS#$pWFL3bf&!?wdHRZMx2T&ah!$k+VL%f;Xb8R0w%f>#`EV7RJbz)~XFOmcXa%Sid9cq9^>tpgPPwG0 zr*X1$GwWy0h7Rc}UTH&4@ z)%RDUbh9}l1njQH7T3Q<#HN0I3$im{ z+36NMTEFqgMU1b{sj`4{t!o(AOEBT-gNs)bq~G%uC%^EBAfyo;S6Th5owjo0?H@%9ENeF07upw0&Nfyv-De~~nQ?P(F zkcNC-s|K7dM9RVBQ+cmM0uUxu zOFtDJ1H@4TTR9<5PcsNHjaPRb|LM^cSt5_M301IQ^dcxf^hQI7l*wFe6Kw>OY_?ED zYZN@BaWp66+#Jrk<{85UumcOEf`a{>-@RMY@EWPj_a)e?Y1BZHNA}TLgVyPh)c*D;jvIvM!ZejRgFWV0NDsB+1n~4yr zCf^)HtZdt`f6ZUeF>G;2b|4By18{=U^G75}?``wJRm&zu>!Y7|`AUXt3nG1O~3e;GCkSZ|_;UK+4H*Ib5mV|D4RG ztJ%E7-)W32+!n18EiA9ici%?6bT6KJGRB5sJiRu7kgzfIj_!{4=WIOMJ#r z_VU-u(n?FJ-8azC`3el?;Q_^K2Z~d1m&vHpr}Gn65#%XS6avHG2q<_ct@=jL*oV0q zG5ndu&10#y?~uhq7&V$*nZ8h~&fAQ^OkMw1&pV)hct)yQFP-gHxYW+x`SjA+8A*%V zarTuYy+~~Bwa*Yh(x|^-B&)ksg+Kf&bWTnmz6)9|zHFB=5vL&UR4`LeyV%AyUPkpgs0w=Alcz+>Ib;yKXv$aj2~^+O>b-WQ1&Jjp95OVu zaqCJUc^iiJ27L@Z9>c7&Wl;@QV6{)lUxf z-05!wZ0}}>qQZBZrH7ar9V?f={!u)<0eLCmY?EhEiOsduz@zC>_93ki&>){l;g_jo zYK|EELI77nzyXnJ4cQ!G-#qDjsB<^B$e{Dv^S2Kw1hP!wInh29HI-*Hp&!}MY34i@ zWaklWwpS}f=9yrFZU+_k;Gw-wjs43_Zp*zplK^Ei$$=%tUe5piQWNpPU93;7>0~qrUBHFz1zCzf R$8=&_ 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg new file mode 100755 index 0000000000..c27a94302d --- /dev/null +++ b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg @@ -0,0 +1,99 @@ + + + + + DM1-Build-Area + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json new file mode 100755 index 0000000000..b368ac417c --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "DeltaMaker Brand PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": ["0.987"], + "filament_max_volumetric_speed": ["12"], + "slow_down_layer_time": ["8"], + "filament_vendor": ["DeltaMaker"], + "nozzle_temperature_range_low": ["210"], + "nozzle_temperature_range_high": ["235"], + "nozzle_temperature": ["230"], + "nozzle_temperature_initial_layer": ["235"], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json new file mode 100755 index 0000000000..5064d61bca --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99", + "name": "DeltaMaker Generic PETG", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": ["1"], + "slow_down_for_layer_cooling": ["1"], + "fan_cooling_layer_time": ["30"], + "overhang_fan_speed": ["90"], + "fan_max_speed": ["40"], + "fan_min_speed": ["20"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["8"], + "filament_flow_ratio": ["0.95"], + "filament_max_volumetric_speed": ["2"], + "filament_start_gcode": ["; filament start gcode\n"], + "compatible_printers": [ + "DeltaMaker Pro 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json new file mode 100755 index 0000000000..14797b6984 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "DeltaMaker Generic PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": ["0.987"], + "filament_max_volumetric_speed": ["10"], + "slow_down_layer_time": ["8"], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json new file mode 100755 index 0000000000..78bdc3273a --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "DeltaMaker Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_flow_ratio": ["0.94"], + "filament_max_volumetric_speed": ["4.5"], + "compatible_printers": [ + "DeltaMaker Pro 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_common.json b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json new file mode 100755 index 0000000000..d2ba9bc380 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : ["0"], + "eng_plate_temp" : ["0"], + "hot_plate_temp" : ["0"], + "textured_plate_temp" : ["0"], + "cool_plate_temp_initial_layer" : ["0"], + "eng_plate_temp_initial_layer" : ["0"], + "hot_plate_temp_initial_layer" : ["0"], + "textured_plate_temp_initial_layer" : ["0"], + "overhang_fan_threshold": ["50%"], + "overhang_fan_speed": ["100"], + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["1"], + "filament_end_gcode": ["; filament end gcode \n"], + "filament_flow_ratio": ["1.0"], + "reduce_fan_stop_start_freq": ["1"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["38"], + "filament_density": ["1.25"], + "filament_deretraction_speed": ["150"], + "filament_diameter": ["1.75"], + "filament_max_volumetric_speed": ["15"], + "filament_minimal_purge_on_wipe_tower": ["15"], + "filament_retraction_minimum_travel": ["3.0"], + "filament_retract_before_wipe": ["1"], + "filament_retract_when_changing_layer": ["0"], + "filament_retraction_length": ["8.0"], + "filament_z_hop": ["0.8"], + "filament_z_hop_types": ["nil"], + "filament_retract_restart_extra": ["0.0"], + "filament_retraction_speed": ["150"], + "filament_settings_id": [""], + "filament_soluble": ["0"], + "filament_type": ["PLA"], + "filament_vendor": ["Generic"], + "filament_wipe": ["1"], + "filament_wipe_distance": ["8.0"], + "bed_type": ["Cool Plate"], + "full_fan_speed_layer": ["0"], + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["8"], + "filament_start_gcode": ["; filament start gcode\n"], + "temperature_vitrification": ["60"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json new file mode 100755 index 0000000000..f71c7e00b4 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["3"], + "fan_cooling_layer_time": ["15"], + "filament_max_volumetric_speed": ["0"], + "filament_type": ["PETG"], + "filament_density": ["1.27"], + "filament_cost": ["30"], + "nozzle_temperature_initial_layer": ["240"], + "reduce_fan_stop_start_freq": ["1"], + "fan_max_speed": ["40"], + "fan_min_speed": ["20"], + "overhang_fan_speed": ["50"], + "nozzle_temperature": ["250"], + "temperature_vitrification": ["80"], + "nozzle_temperature_range_low": ["235"], + "nozzle_temperature_range_high": ["255"], + "filament_start_gcode": ["; filament start gcode\n"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json new file mode 100755 index 0000000000..20ab632a4c --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": "100", + "filament_max_volumetric_speed": ["0"], + "filament_type": ["PLA"], + "filament_density": ["1.24"], + "filament_cost": ["29"], + "nozzle_temperature_initial_layer": ["205"], + "reduce_fan_stop_start_freq": ["1"], + "slow_down_for_layer_cooling": ["1"], + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "overhang_fan_speed": ["100"], + "overhang_fan_threshold": ["50%"], + "close_fan_the_first_x_layers": ["1"], + "nozzle_temperature": ["210"], + "temperature_vitrification": ["60"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["210"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["4"], + "filament_start_gcode": ["; filament start gcode\n"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json new file mode 100755 index 0000000000..92ed40afc9 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["3"], + "fan_cooling_layer_time": ["30"], + "filament_max_volumetric_speed": ["0"], + "filament_type": ["ABS"], + "filament_density": ["1.10"], + "filament_cost": ["20"], + "nozzle_temperature_initial_layer": ["240"], + "reduce_fan_stop_start_freq": ["1"], + "fan_max_speed": ["5"], + "fan_min_speed": ["5"], + "overhang_fan_threshold": ["25%"], + "overhang_fan_speed": ["80"], + "nozzle_temperature": ["235"], + "temperature_vitrification": ["110"], + "nozzle_temperature_range_low": ["235"], + "nozzle_temperature_range_high": ["240"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["15"] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json new file mode 100755 index 0000000000..f14cb56feb --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "DeltaMaker 2 0.35 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2", + "default_print_profile": "0.18mm Standard @DeltaMaker", + "nozzle_diameter": ["0.35"], + "printer_variant": "0.35", + "printable_height": "260", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json new file mode 100755 index 0000000000..31349d707f --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2", + "model_id": "deltamaker-2", + "nozzle_diameter": "0.35", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json new file mode 100755 index 0000000000..5d26bcc52d --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "DeltaMaker 2T 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2T", + "default_print_profile": "0.18mm Standard @DeltaMaker", + "nozzle_diameter": ["0.5"], + "printer_variant": "0.5", + "printable_height": "460", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json new file mode 100755 index 0000000000..f4909fd6a7 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2T", + "model_id": "deltamaker-2t", + "nozzle_diameter": "0.5", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json new file mode 100755 index 0000000000..a6f1ac18f4 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "DeltaMaker 2XT 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2XT", + "default_print_profile": "0.25mm Draft @DeltaMaker", + "nozzle_diameter": ["0.5"], + "printer_variant": "0.5", + "printable_height": "565", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json new file mode 100755 index 0000000000..8ea63e79ab --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2XT", + "model_id": "deltamaker-2xt", + "nozzle_diameter": "0.5", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json new file mode 100755 index 0000000000..fcfe4d6f72 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json @@ -0,0 +1,60 @@ +{ + "type": "machine", + "name": "fdm_klipper_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "gcode_flavor": "klipper", + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["5000", "5000"], + "machine_max_acceleration_retracting": ["5000", "5000"], + "machine_max_acceleration_travel": ["5000", "5000"], + "machine_max_acceleration_x": ["5000", "5000"], + "machine_max_acceleration_y": ["5000", "5000"], + "machine_max_acceleration_z": ["1000", "1000"], + "machine_max_speed_e": ["25", "25"], + "machine_max_speed_x": ["500", "200"], + "machine_max_speed_y": ["500", "200"], + "machine_max_speed_z": ["120", "120"], + "machine_max_jerk_e": ["2.5", "2.5"], + "machine_max_jerk_x": ["9", "9"], + "machine_max_jerk_y": ["9", "9"], + "machine_max_jerk_z": ["2", "2"], + "machine_min_extruding_rate": ["0", "0"], + "machine_min_travel_rate": ["0", "0"], + "max_layer_height": ["0.32"], + "min_layer_height": ["0.08"], + "printable_height": "250", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.5", + "retraction_minimum_travel": ["1"], + "retract_before_wipe": ["70%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["8"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.8"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["60"], + "deretraction_speed": ["30"], + "z_hop_types": "Normal Lift", + "silent_mode": "1", + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": ["1"], + "default_filament_profile": ["DeltaMaker PLA"], + "default_print_profile": "0.20mm Standard @DeltaMaker 2 0.35 nozzle", + "bed_exclude_area": ["0x0"], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nSTART_PRINT EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n", + "machine_end_gcode": "END_PRINT", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_pause_gcode": "PAUSE", + "scan_first_layer": "0", + "nozzle_type": "undefined", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/DeltaMaker/machine/fdm_machine_common.json b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json new file mode 100755 index 0000000000..ae0fda9a5d --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json @@ -0,0 +1,54 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "extruder_colour": ["#FCE94F"], + "extruder_offset": ["0x0"], + "gcode_flavor": "klipper", + "silent_mode": "1", + "machine_max_acceleration_e": ["5000"], + "machine_max_acceleration_extruding": ["5000"], + "machine_max_acceleration_retracting": ["5000"], + "machine_max_acceleration_x": ["3500"], + "machine_max_acceleration_y": ["3500"], + "machine_max_acceleration_z": ["500"], + "machine_max_speed_e": ["120"], + "machine_max_speed_x": ["500"], + "machine_max_speed_y": ["500"], + "machine_max_speed_z": ["150"], + "machine_max_jerk_e": ["2.5"], + "machine_max_jerk_x": ["10"], + "machine_max_jerk_y": ["10"], + "machine_max_jerk_z": ["2"], + "machine_min_extruding_rate": ["0"], + "machine_min_travel_rate": ["0"], + "max_layer_height": ["0.3"], + "min_layer_height": ["0.1"], + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "retraction_minimum_travel": ["2"], + "retract_before_wipe": ["0%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["7"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.8"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["80"], + "deretraction_speed": ["40"], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "z_lift_type": "NormalLift", + "default_print_profile": "", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "machine_pause_gcode": "", + "machine_start_gcode": "M104 S[nozzle_temperature_initial_layer] ; set temp\nG28\nM109 S[nozzle_temperature_initial_layer] ; wait for temp\nG28\nG91 ; relative positioning\nG1 Z-40 F4000\nG90 ; absolute positioning\n", + "machine_end_gcode": "G28\nM104 S0\nM84 ; disable motors" +} diff --git a/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json new file mode 100755 index 0000000000..0c2f9c0d22 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "layer_height": "0.12", + "bottom_shell_layers": "6", + "sparse_infill_density": "15%", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "skirt_distance": "3", + "skirt_height": "1", + "tree_support_branch_angle": "40", + "detect_thin_wall": "1", + "top_shell_layers": "8", + "travel_speed": "150" +} diff --git a/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json new file mode 100755 index 0000000000..97e2e11d25 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Standard @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "layer_height": "0.18", + "sparse_infill_density": "15%", + "initial_layer_print_height": "0.25", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "wall_loops": "3", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_loops": "2", + "detect_thin_wall": "1", + "inner_wall_speed": "40", + "top_surface_speed": "15", + "sparse_infill_speed": "40" +} diff --git a/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json new file mode 100755 index 0000000000..89d4261bfd --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Draft @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "layer_height": "0.25", + "bottom_shell_layers": "3", + "bridge_speed": "60", + "wall_infill_order": "inner wall/outer wall/infill", + "sparse_infill_density": "15%", + "sparse_infill_line_width": "0.40", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "wall_loops": "2", + "print_settings_id": "", + "standby_temperature_delta": "-5", + "detect_thin_wall": "1", + "top_shell_layers": "4" +} diff --git a/resources/profiles/DeltaMaker/process/fdm_process_common.json b/resources/profiles/DeltaMaker/process/fdm_process_common.json new file mode 100755 index 0000000000..2253394cc7 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/fdm_process_common.json @@ -0,0 +1,114 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "20.0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "4", + "brim_object_gap": "0.1", + "print_sequence": "by layer", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "1000", + "inner_wall_acceleration": "1000", + "outer_wall_acceleration": "700", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "50%", + "sparse_infill_pattern": "gyroid", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "line_width": "120%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "top_surface_line_width": "100%", + "sparse_infill_line_width": "100%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "110%", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3.0", + "skirt_height": "2", + "min_skirt_length": "4", + "skirt_loops": "3", + "minimum_sparse_infill_area": "15", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "tree(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "1", + "support_interface_bottom_layers": "0", + "support_interface_spacing": "0.25", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "75", + "support_threshold_angle": "25", + "support_object_xy_distance": "0.8", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "12.0", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "4", + "top_shell_layers": "4", + "bridge_flow": "0.98", + "initial_layer_speed": "20", + "initial_layer_infill_speed": "20", + "initial_layer_travel_speed": "50%", + "slow_down_layers": "2", + "outer_wall_speed": "50", + "inner_wall_speed": "80", + "sparse_infill_speed": "80", + "internal_solid_infill_speed": "75", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "150", + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json new file mode 100755 index 0000000000..1fe8e43149 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "fdm_process_klipper_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "default_acceleration": "5000", + "top_surface_acceleration": "3000", + "travel_acceleration": "6000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "3000", + "initial_layer_acceleration": "500", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "internal_solid_infill_speed": "120", + "top_surface_speed": "100", + "gap_infill_speed": "100", + "sparse_infill_speed": "120", + "travel_speed": "250", + "exclude_object": "1" +}