diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b6d579976..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**3mf File for This Bug** -If it is related to slicing, please append the 3mf file. It could be extremely helpful to solve the issue. - -**To Reproduce** -Steps to reproduce the behavior - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Printer model** - -**Desktop (please complete the following information):** - - OS: [e.g. iOS, Windows] - - Version [e.g. 22] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..17b521e5c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,114 @@ +name: Bug Report +description: File a bug report +labels: bug +body: + - type: markdown + attributes: + value: | + **Thank you for using Bambu Studio and wanting to report a bug.** + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. + - type: input + id: version + attributes: + label: Bambu Studio Version + description: Which version of Bambu Studio are you running? You can see the full version in `Help` -> `About Bambu Studio`. + placeholder: e.g. 1.6.2.4 + validations: + required: true + - type: dropdown + id: app_from + attributes: + label: Where is the application from? + description: please confirm where is your Bambu Studio from + multiple: true + options: + - Bambu Lab Official website + - Bambu Lab github releases + - Built from source by yourself or others + validations: + required: true + - type: input + id: os_info + attributes: + label: OS version + description: Which OS version are you using? + placeholder: | + OS: Windows 7/8/10/11 ... , Ubuntu 22.04/Fedora 36 ... , macOS 10.15/11.1/12.3 ... + validations: + required: true + - type: textarea + id: system_info + attributes: + label: Additional system information + description: For the performance issue, please also show the CPU、Memory information; For the 3D Rendering issue, please also show the Display Card information. + placeholder: | + CPU: 11th gen intel r core tm i7-1185g7/amd ryzen 7 6800h/... + Memory: 32/16 GB... + Display Card: NVIDIA Quadro P400/... + validations: + required: false + - type: input + id: printer + attributes: + label: Printer + description: Which printer was selected + placeholder: Bambu Lab X1 series/Bambu Lab P1P/... + validations: + required: true + - type: textarea + id: reproduce_steps + attributes: + label: How to reproduce + description: Please described the detailed steps to reproduce this issue + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + - type: textarea + id: actual_results + attributes: + label: Actual results + description: What happens after the above steps? Please, enclose a screenshot whenever possible (even when you think the description is clear). + validations: + required: true + - type: textarea + id: expected_results + attributes: + label: Expected results + description: What should happen after the above steps? + validations: + required: true + - type: markdown + id: file_required + attributes: + value: | + Please be sure to add the following files: + * Please upload a ZIP archive containing the **project file** used when the problem arise. Please export it just before or after the problem occurs. Even if you did nothing and/or there is no object, export it! (We need the configurations in project file). + You can export the project file from the application menu in `File`->`Save project as...`, then zip it + * A **log file** for crashes and similar issues. + You can find your log file here: + Windows: `%APPDATA%\BambuStudio\log` or usually `C:\Users\\AppData\Roaming\BambuStudio\log` + MacOS: `$HOME/Library/Application Support/BambuStudio/log` + Linux: `$HOME/.config/BambuStudio/log` + If Bambu Studio still starts, you can also reach this directory from the application menu in `Help` -> `Show Configuration Folder` + You can zip the log directory, or just select the newest logs when this issue happens, and zip them + - type: textarea + id: file_uploads + attributes: + label: Project file & Debug log uploads + description: Drop the project file and debug log here + placeholder: | + Project File: `File` -> `Save project as...` then zip it & drop it here + Log File: `Help` -> `Show Configuration Folder`, then zip the log directory, or just select the newest logs in `log` when this issue happens and zip them, then drop the zip file here + validations: + required: true + - type: checkboxes + id: file_checklist + attributes: + label: Checklist of files to include + options: + - label: Log file + - label: Project file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..88bd4a10c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,12 @@ +contact_links: + - name: Do you need Support? + url: https://bambulab.com/en/support + about: You can find all the entries(FAQ/Official Wiki//General Inquiry/Technical Support/Documentation And Manuals/Official Community Forum) from here + - name: Technical Support + url: https://bambulab.com/en/my/support/tickets/create + about: You can file a ticket directly from here, especially for the printer related hardware/software issues. + - name: Bambu lab Community Forum + url: https://forum.bambulab.com/ + about: Please get in touch on our Bambu lab Community Forum! (Not an official support channel.) + +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md deleted file mode 100644 index 50b6debda..000000000 --- a/.github/ISSUE_TEMPLATE/custom.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Custom issue template -about: For generic ideas such as enhancement of a feature, some questions, and etc. -title: '' -labels: '' -assignees: '' - ---- - - diff --git a/.github/workflows/build_ubuntu.yml b/.github/workflows/build_ubuntu.yml new file mode 100644 index 000000000..b3fb62d5d --- /dev/null +++ b/.github/workflows/build_ubuntu.yml @@ -0,0 +1,117 @@ +name: Build Linux + +on: [pull_request] + +jobs: + appimage-builder: + name: Linux AppImage Build + + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install cmake libgl1-mesa-dev libgtk-3-dev libxkbcommon-dev libunwind-dev libfuse2 -y + - name: Install dependencies from BuildLinux.sh + shell: bash + run: sudo ./BuildLinux.sh -ur + - name: Fix permissions + shell: bash + run: sudo chown $USER -R ./ + - name: Build deps + id: cache_deps + uses: actions/cache@v3 + env: + cache-name: ${{ runner.os }}-cache-bambustudio_deps_x64 + with: + path: ${{ github.workspace }}/deps/build/destdir + key: build-${{ env.cache-name }} + + - if: ${{ steps.cache_deps.outputs.cache-hit != 'true' }} + name: Build deps + working-directory: ${{ github.workspace }} + continue-on-error: true + run: ./BuildLinux.sh -dsr + + - name: Build Studio + shell: bash + run: ./BuildLinux.sh -ir + - uses: actions/upload-artifact@v3 + with: + name: BambuStudio_Linux_ubu64_20.04 + path: './build/BambuStudio_ubu64.AppImage' + + appimage-builder-using-container: + name: Linux AppImage Build Ubuntu 20.04 using container + + runs-on: ubuntu-latest + + # free disk space ref: https://github.com/actions/runner-images/issues/2840#issuecomment-1540506686 + steps: + - name: Check disk space + run: df -h + - name: Free disk space + run: | + sudo docker rmi $(docker image ls -aq) || true + sudo swapoff /swapfile || true + sudo rm -rf /swapfile /usr/share/dotnet /usr/local/lib/android /opt/ghc || true + sudo apt purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \ + clang-6.0 lldb-6.0 lld-6.0 clang-format-6.0 clang-8 lldb-8 lld-8 clang-format-8 \ + clang-9 lldb-9 lld-9 clangd-9 clang-format-9 dotnet-sdk-3.0 dotnet-sdk-3.1=3.1.101-1 \ + esl-erlang firefox g++-8 g++-9 gfortran-8 gfortran-9 google-chrome-stable \ + google-cloud-sdk ghc-8.0.2 ghc-8.2.2 ghc-8.4.4 ghc-8.6.2 ghc-8.6.3 ghc-8.6.4 \ + ghc-8.6.5 ghc-8.8.1 ghc-8.8.2 ghc-8.8.3 ghc-8.10.1 cabal-install-2.0 cabal-install-2.2 \ + cabal-install-2.4 cabal-install-3.0 cabal-install-3.2 heroku imagemagick \ + libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \ + mercurial apt-transport-https mono-complete mysql-client libmysqlclient-dev \ + mysql-server mssql-tools unixodbc-dev yarn bazel chrpath libssl-dev libxft-dev \ + libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev php7.1 php7.1-bcmath \ + php7.1-bz2 php7.1-cgi php7.1-cli php7.1-common php7.1-curl php7.1-dba php7.1-dev \ + php7.1-enchant php7.1-fpm php7.1-gd php7.1-gmp php7.1-imap php7.1-interbase php7.1-intl \ + php7.1-json php7.1-ldap php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-odbc \ + php7.1-opcache php7.1-pgsql php7.1-phpdbg php7.1-pspell php7.1-readline php7.1-recode \ + php7.1-snmp php7.1-soap php7.1-sqlite3 php7.1-sybase php7.1-tidy php7.1-xml \ + php7.1-xmlrpc php7.1-xsl php7.1-zip php7.2 php7.2-bcmath php7.2-bz2 php7.2-cgi \ + php7.2-cli php7.2-common php7.2-curl php7.2-dba php7.2-dev php7.2-enchant php7.2-fpm \ + php7.2-gd php7.2-gmp php7.2-imap php7.2-interbase php7.2-intl php7.2-json php7.2-ldap \ + php7.2-mbstring php7.2-mysql php7.2-odbc php7.2-opcache php7.2-pgsql php7.2-phpdbg \ + php7.2-pspell php7.2-readline php7.2-recode php7.2-snmp php7.2-soap php7.2-sqlite3 \ + php7.2-sybase php7.2-tidy php7.2-xml php7.2-xmlrpc php7.2-xsl php7.2-zip php7.3 \ + php7.3-bcmath php7.3-bz2 php7.3-cgi php7.3-cli php7.3-common php7.3-curl php7.3-dba \ + php7.3-dev php7.3-enchant php7.3-fpm php7.3-gd php7.3-gmp php7.3-imap php7.3-interbase \ + php7.3-intl php7.3-json php7.3-ldap php7.3-mbstring php7.3-mysql php7.3-odbc \ + php7.3-opcache php7.3-pgsql php7.3-phpdbg php7.3-pspell php7.3-readline php7.3-recode \ + php7.3-snmp php7.3-soap php7.3-sqlite3 php7.3-sybase php7.3-tidy php7.3-xml \ + php7.3-xmlrpc php7.3-xsl php7.3-zip php7.4 php7.4-bcmath php7.4-bz2 php7.4-cgi \ + php7.4-cli php7.4-common php7.4-curl php7.4-dba php7.4-dev php7.4-enchant php7.4-fpm \ + php7.4-gd php7.4-gmp php7.4-imap php7.4-interbase php7.4-intl php7.4-json php7.4-ldap \ + php7.4-mbstring php7.4-mysql php7.4-odbc php7.4-opcache php7.4-pgsql php7.4-phpdbg \ + php7.4-pspell php7.4-readline php7.4-snmp php7.4-soap php7.4-sqlite3 php7.4-sybase \ + php7.4-tidy php7.4-xml php7.4-xmlrpc php7.4-xsl php7.4-zip php-amqp php-apcu \ + php-igbinary php-memcache php-memcached php-mongodb php-redis php-xdebug \ + php-zmq snmp pollinate libpq-dev postgresql-client powershell ruby-full \ + sphinxsearch subversion mongodb-org -yq >/dev/null 2>&1 || true + sudo apt-get autoremove -y >/dev/null 2>&1 || true + sudo apt-get autoclean -y >/dev/null 2>&1 || true + - name: Check disk space + run: df -h + - uses: actions/checkout@v3 + - name: Install podman + run: | + sudo apt-get update + sudo apt-get install -y podman + - name: Build + shell: bash + run: | + rm -rf build + podman buildx build --build-arg BUILD_LINUX_EXTRA_ARGS=-r -t bambu-studio-builder:latest . + podman run -d -it --name bambu-studio-builder bambu-studio-builder:latest /bin/bash -c 'tail -f /dev/null' + podman cp bambu-studio-builder:/BambuStudio/build/BambuStudio_ubu64.AppImage ./ + podman stop bambu-studio-builder + podman rm bambu-studio-builder + - uses: actions/upload-artifact@v3 + with: + name: BambuStudio_Linux_ubu64_using_container + path: './BambuStudio_ubu64.AppImage' diff --git a/.gitignore b/.gitignore index 5a1f124d3..758650f5a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Build Build.bat -/build*/ +/build/ +/build2022/ deps/build MYMETA.json MYMETA.yml @@ -18,11 +19,8 @@ local-lib /src/TAGS /.vscode/ build-linux/* -deps/build*/* +deps/build-linux/* **/.DS_Store install_* build_*/ SVG -src/OrcaSlicer-doc/ -.idea/ -/.cache/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/OrcaSlicer.iml b/.idea/OrcaSlicer.iml new file mode 100644 index 000000000..f08604bb6 --- /dev/null +++ b/.idea/OrcaSlicer.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 000000000..f60388162 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..79ee123c2 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..79b3c9483 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..b80725f1d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f292811b..201e9a407 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,6 +280,11 @@ if (APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new") endif () +if(MSVC) +# 添加编译选项,忽略警告 C4305 (格式转换截断) +add_compile_options(/wd4305) +endif() + # Where all the bundled libraries reside? set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(LIBDIR_BIN ${CMAKE_CURRENT_BINARY_DIR}/src) @@ -671,7 +676,6 @@ function(orcaslicer_copy_dlls target config postfix output_dlls) ${_out_dir}/TKXSBase.dll ${_out_dir}/freetype.dll - PARENT_SCOPE ) diff --git a/Containerfile b/Containerfile new file mode 100644 index 000000000..01d658f99 --- /dev/null +++ b/Containerfile @@ -0,0 +1,72 @@ +# Build Bambu Slicer in a container +# +# Build an AppImage using rootless Podman (refer to https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md): +# rm -rf build; podman build . -t bambu-studio-builder && podman run --rm localhost/bambu-studio-builder /bin/bash -c 'tar -c $(find build | grep ubu64.AppImage | head -1)' | tar -xv +# +# Troubleshooting the build container: +# podman run -it --name bambu-studio-builder localhost/bambu-studio-builder /bin/bash +# +# Debugging the resulting AppImage: +# 1) Install `gdb` +# 2) In a terminal in the same directory as the AppImage, start it with following: +# echo -e "run\nbt\nquit" | gdb ./BambuStudio_ubu64.AppImage +# 3) Find related issue using backtrace output for clues and add backtrace to it on github +# +# Docker alternative AppImage build syntax (use this if you can't install podman): +# rm -rf build; docker build . --file Containerfile -t bambu-studio-builder; docker run --rm bambu-studio-builder /bin/bash -c 'tar -c $(find build | grep ubu64.AppImage | head -1)' | tar -xv +# +# +# TODO: bind mount BambuStudio to inside the container instead of COPY to enable faster rebuilds during dev work. + +FROM docker.io/ubuntu:20.04 +LABEL maintainer "DeftDawg " +ARG BUILD_LINUX_EXTRA_ARGS="" + +# Disable interactive package configuration +RUN apt-get update && \ + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + git \ + build-essential \ + autoconf pkgconf m4 \ + cmake extra-cmake-modules \ + libglu1-mesa-dev libglu1-mesa-dev \ + libwayland-dev libxkbcommon-dev wayland-protocols \ + eglexternalplatform-dev libglew-dev \ + libgtk-3-dev \ + libdbus-1-dev \ + libcairo2-dev \ + libgtk-3-dev libwebkit2gtk-4.0-dev \ + libsoup2.4-dev \ + libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-base1.0-dev libgstreamerd-3-dev \ + libmspack-dev \ + libosmesa6-dev \ + libssl-dev libcurl4-openssl-dev libsecret-1-dev \ + libudev-dev \ + curl \ + wget \ + file \ + sudo + +COPY ./ BambuStudio + +WORKDIR BambuStudio + +# These can run together, but we run them seperate for podman caching +# Update System dependencies +RUN ./BuildLinux.sh -u ${BUILD_LINUX_EXTRA_ARGS} + +# Build dependencies in ./deps +RUN ./BuildLinux.sh -d ${BUILD_LINUX_EXTRA_ARGS} + +# Build slic3r +RUN ./BuildLinux.sh -s ${BUILD_LINUX_EXTRA_ARGS} + +# Build AppImage +ENV container podman +RUN ./BuildLinux.sh -i ${BUILD_LINUX_EXTRA_ARGS} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..ed14e9a71 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,94 @@ +FROM docker.io/ubuntu:20.04 +LABEL maintainer "DeftDawg " + +# Disable interactive package configuration +RUN apt-get update && \ + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + autoconf \ + build-essential \ + cmake \ + curl \ + eglexternalplatform-dev \ + extra-cmake-modules \ + file \ + git \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-libav \ + libcairo2-dev \ + libcurl4-openssl-dev \ + libdbus-1-dev \ + libglew-dev \ + libglu1-mesa-dev \ + libglu1-mesa-dev \ + libgstreamer1.0-dev \ + libgstreamerd-3-dev \ + libgstreamer-plugins-base1.0-dev \ + libgstreamer-plugins-good1.0-dev \ + libgtk-3-dev \ + libgtk-3-dev \ + libmspack-dev \ + libosmesa6-dev \ + libsecret-1-dev \ + libsoup2.4-dev \ + libssl-dev \ + libudev-dev \ + libwayland-dev \ + libwebkit2gtk-4.0-dev \ + libxkbcommon-dev \ + locales \ + locales-all \ + m4 \ + pkgconf \ + sudo \ + wayland-protocols \ + wget + +# Change your locale here if you want. See the output +# of `locale -a` to pick the correct string formatting. +ENV LC_ALL=en_US.utf8 +RUN locale-gen $LC_ALL + +# Set this so that Bambu Studio doesn't complain about +# the CA cert path on every startup +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt + +COPY ./ BambuStudio + +WORKDIR BambuStudio + +# These can run together, but we run them seperate for podman caching +# Update System dependencies +RUN ./BuildLinux.sh -u + +# Build dependencies in ./deps +RUN ./BuildLinux.sh -d + +# Build slic3r +RUN ./BuildLinux.sh -s + +# Build AppImage +ENV container podman +RUN ./BuildLinux.sh -i + +# It's easier to run Bambu Studio as the same username, +# UID and GID as your workstation. Since we bind mount +# your home directory into the container, it's handy +# to keep permissions the same. Just in case, defaults +# are root. +SHELL ["/bin/bash", "-l", "-c"] +ARG USER=root +ARG UID=0 +ARG GID=0 +RUN [[ "$UID" != "0" ]] \ + && groupadd -f -g $GID $USER \ + && useradd -u $UID -g $GID $USER + +# Using an entrypoint instead of CMD because the binary +# accepts several command line arguments. +ENTRYPOINT ["/BambuStudio/build/package/bin/bambu-studio"] diff --git a/README.md b/README.md index b31052171..b6cf48ee5 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,48 @@ +![image](https://user-images.githubusercontent.com/106916061/179006347-497d24c0-9bd6-45b7-8c49-d5cc8ecfe5d7.png) +# Work with us! +If you are interested in working with us in China, please apply to our open positions below by simply sending your resume to our mailbox [zhaopin at bambulab.com]. +- [Graphics Algorithm Engineer](https://bambulab.jobs.feishu.cn/experienced/position/7139785303246637342/detail) +- [Software Engineer C++](https://bambulab.jobs.feishu.cn/experienced/position/7088880036707420446/detail) +# BambuStudio +Bambu Studio is a cutting-edge, feature-rich slicing software. +It contains project-based workflows, systematically optimized slicing algorithms, and an easy-to-use graphic interface, bringing users an incredibly smooth printing experience. -[![Build Win64](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_win.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_win.yml) -[![Build Mac AppleSilicon](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_arm64.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_arm64.yml) -[![Build Mac Intel](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_x64.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_mac_x64.yml) -[![Build Linux](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_linux.yml/badge.svg)](https://github.com/SoftFever/OrcaSlicer/actions/workflows/build_linux.yml) +Prebuilt Windows, macOS 64-bit and Linux releases are available through the [github releases page](https://github.com/bambulab/BambuStudio/releases/). -# Orca Slicer -Orca Slicer is an open source slicer for FDM printers. -You can download Orca Slicer here: [github releases page](https://github.com/SoftFever/OrcaSlicer/releases/). -![discord-mark-blue](https://github.com/SoftFever/OrcaSlicer/assets/103989404/b97d5ffc-072d-4d0a-bbda-e67ef373876f) Join community: [OrcaSlicer Official Discord Server](https://discord.gg/WTEkCR6SnV) +Bambu Studio is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community. -# Main features -- Auto calibrations for all printers -- Sandwich(inner-outer-inner) mode - an improved version of the `External perimeters first` mode -- Precise wall -- Klipper support -- More granular controls -- More features can be found in [change notes](https://github.com/SoftFever/OrcaSlicer/releases/) +See the [wiki](https://github.com/bambulab/BambuStudio/wiki) and the [documentation directory](https://github.com/bambulab/BambuStudio/tree/master/doc) for more informations. -### Some background -OrcaSlicer is fork of Bambu Studio -It was previously known as BambuStudio-SoftFever -Bambu Studio is forked from [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community. -Orca Slicer incorporates a lot of features from SuperSlicer by @supermerill -Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr) +# What are Bambu Studio's main features? +Key features are: +- Basic slicing features & GCode viewer +- Multiple plates management +- Remote control & monitoring +- Auto-arrange objects +- Auto-orient objects +- Hybrid/Tree/Normal support types, Customized support +- multi-material printing and rich painting tools +- multi-platform (Win/Mac/Linux) support +- Global/Object/Part level slicing parameters -# How to install -**Windows**: -1. Unzip the binaries to any folder you prefer, then execute orca-slicer.exe to start the application. - - *If you have troubles to run the build, you might need to install following runtimes:* - - [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe) - - [vcredist2019_x64](https://github.com/SoftFever/BambuStudio-SoftFever/releases/download/v1.0.10-sf2/vcredist2019_x64.exe) +Other major features are: +- Advanced cooling logic controlling fan speed and dynamic print speed +- Auto brim according to mechanical analysis +- Support arc path(G2/G3) +- Support STEP format +- Assembly & explosion view +- Flushing transition-filament into infill/object during filament change -**Mac**: -1. Download the right binaries for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU. -2. Double click to unzip the package, move OrcaSlicer.app to Application folder. -3. The app is signed but not notarized at the moment due to the proptiery network plugin. - We have two options to make it run on our machines - - Option 1 (You only need to do this once. After that the app can be oppened normally.): - - Step 1: Hold _cmd_ and right click the app, from the context menu choose **Open**. - - Step 2: A warning window will pop up, click _Open_ - - - Option 2: - Execute this command in terminal: `xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app` - ```console - softfever@mac:~$ xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app - ``` - - Option 3: - - Step 1: open the app, a warning window will pop up - ![image](./SoftFever_doc/mac_cant_open.png) - - Step 2: in `System Settings` -> `Privacy & Security`, click `Open Anyway`: - ![image](./SoftFever_doc/mac_security_setting.png) - -**Linux(Ubuntu)**: - 1. If you run into trouble to execute it, try this command in terminal: - `chmod +x /path_to_appimage/OrcaSlicer_ubu64.AppImage` # How to compile -- Windows 64-bit - - Tools needed: Visual Studio 2019, Cmake, git, Strawberry Perl. - - Run `build_release.bat` in `x64 Native Tools Command Prompt for VS 2019` +Following platforms are currently supported to compile: +- Windows 64-bit, [Compile Guide](https://github.com/bambulab/BambuStudio/wiki/Windows-Compile-Guide) +- Mac 64-bit, [Compile Guide](https://github.com/bambulab/BambuStudio/wiki/Mac-Compile-Guide) +- Linux, [Compile Guide](https://github.com/bambulab/BambuStudio/wiki/Linux-Compile-Guide) -- Mac 64-bit - - Tools needed: Xcode, Cmake, git, gettext - - run `build_release_macos.sh` - -- Ubuntu - - run `BuildLinux.sh -udisr` - - -# Note: -If you're running Klipper, it's recommended to add the following configuration to your `printer.cfg` file. -``` -# Enable object exclusion -[exclude_object] - -# Enable arcs support -[gcode_arcs] -resolution: 0.1 -``` +# Report issue +You can add an issue to the [github tracker](https://github.com/bambulab/BambuStudio/issues) if **it isn't already present.** # License -Orca Slicer is licensed under the GNU Affero General Public License, version 3. Orca Slicer is based on Bambu Studio by BambuLab. - Bambu Studio is licensed under the GNU Affero General Public License, version 3. Bambu Studio is based on PrusaSlicer by PrusaResearch. PrusaSlicer is licensed under the GNU Affero General Public License, version 3. PrusaSlicer is owned by Prusa Research. PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci. @@ -89,7 +51,5 @@ Slic3r is licensed under the GNU Affero General Public License, version 3. Slic3 The GNU Affero General Public License, version 3 ensures that if you use any part of this software in any way (even behind a web server), your software must be released under the same license. -Orca Slicer includes a pressure advance calibration pattern test adapted from Andrew Ellis' generator, which is licensed under GNU General Public License, version 3. Ellis' generator is itself adapted from a generator developed by Sineos for Marlin, which is licensed under GNU General Public License, version 3. - -The bambu networking plugin is based on non-free libraries from Bambulab. It is optional to the Orca Slicer and provides extended functionalities for Bambulab printer users. +The bambu networking plugin is based on non-free libraries. It is optional to the Bambu Studio and provides extended functionalities for users. diff --git a/Readme.txt b/Readme.txt deleted file mode 100644 index d6dc53a8b..000000000 --- a/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -Init Version diff --git a/bbl/i18n/ko/BambuStudio_ko.po b/bbl/i18n/ko/BambuStudio_ko.po new file mode 100644 index 000000000..bd5a02ddc --- /dev/null +++ b/bbl/i18n/ko/BambuStudio_ko.po @@ -0,0 +1,11423 @@ +msgid "" +msgstr "" +"Project-Id-Version: Bambu Studio\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: ko\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.3.1\n" + +msgid "Supports Painting" +msgstr "서포트 페인팅" + +msgid "Alt + Mouse wheel" +msgstr "Alt + 마우스 휠" + +msgid "Section view" +msgstr "단면보기" + +msgid "Reset direction" +msgstr "방향 재설정" + +msgid "Ctrl + Mouse wheel" +msgstr "Ctrl + 마우스 휠" + +msgid "Pen size" +msgstr "펜 크기" + +msgid "Left mouse button" +msgstr "마우스 왼쪽 버튼" + +msgid "Enforce supports" +msgstr "커스텀서포트" + +msgid "Right mouse button" +msgstr "마우스 오른쪽 버튼" + +msgid "Block supports" +msgstr "서포트차단" + +msgid "Shift + Left mouse button" +msgstr "Shift + 마우스 왼쪽 버튼" + +msgid "Erase" +msgstr "지우기" + +msgid "Erase all painting" +msgstr "모든 페인팅 지우기" + +msgid "Highlight overhang areas" +msgstr "오버행 강조 표시" + +msgid "Gap fill" +msgstr "갭 채우기" + +msgid "Perform" +msgstr "적용" + +msgid "Gap area" +msgstr "갭 영역" + +msgid "Tool type" +msgstr "도구 유형" + +msgid "Smart fill angle" +msgstr "자동 채우기 각" + +msgid "On overhangs only" +msgstr "오버행에만 해당" + +msgid "Auto support threshold angle: " +msgstr "자동서포트생성 오버행각도" + +msgid "Circle" +msgstr "원" + +msgid "Sphere" +msgstr "구체" + +msgid "Fill" +msgstr "채우기" + +msgid "Gap Fill" +msgstr "갭 채우기" + +#, boost-format +msgid "Allows painting only on facets selected by: \"%1%\"" +msgstr "선택한 면에만 페인팅을 허용합니다: \"%1%\"" + +msgid "Highlight faces according to overhang angle." +msgstr "오버행 각도에 따라 면을 강조표시한다." + +msgid "No auto support" +msgstr "자동서포트 사용하지 않음" + +msgid "Support Generated" +msgstr "생성된 서포트" + +msgid "Lay on face" +msgstr "선택면을 바닥으로" + +#, 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% 필라멘트만 사용가능합니다." + +msgid "Color Painting" +msgstr "컬러 페인팅" + +msgid "Pen shape" +msgstr "펜 모양" + +msgid "Paint" +msgstr "페인팅" + +msgid "Key 1~9" +msgstr "키 1~9" + +msgid "Choose filament" +msgstr "필라멘트 선택" + +msgid "Edge detection" +msgstr "모서리 감지" + +msgid "Triangles" +msgstr "삼각형" + +msgid "Filaments" +msgstr "필라멘트" + +msgid "Brush" +msgstr "붓" + +msgid "Smart fill" +msgstr "스마트 채우기" + +msgid "Bucket fill" +msgstr "동일색면 채우기" + +msgid "Height range" +msgstr "높이 범위" + +msgid "Ctrl + Shift + Enter" +msgstr "Ctrl + Shift + Enter" + +msgid "Toggle Wireframe" +msgstr "와이어프레임 전환" + +msgid "Shortcut Key " +msgstr "단축키 " + +msgid "Triangle" +msgstr "삼각형" + +msgid "Height Range" +msgstr "높이 범위" + +msgid "Remove painted color" +msgstr "페인팅 제거" + +#, boost-format +msgid "Painted using: Filament %1%" +msgstr "페인트 사용: 필라멘트 %1%" + +msgid "Move" +msgstr "이동" + +msgid "Rotate" +msgstr "회전" + +msgid "Optimize orientation" +msgstr "출력방향 최적화" + +msgid "Apply" +msgstr "적용" + +msgid "Scale" +msgstr "스케일" + +msgid "Error: Please close all toolbar menus first" +msgstr "오류: 먼저 모든 도구 모음 메뉴를 닫으십시오." + +msgid "Tool-Lay on Face" +msgstr "도구 - 선택면 바닥놓기" + +msgid "in" +msgstr "인치" + +msgid "mm" +msgstr "mm" + +msgid "Position" +msgstr "위치" + +msgid "Rotation" +msgstr "회전" + +msgid "Scale ratios" +msgstr "스케일 비율" + +msgid "Object Operations" +msgstr "객체 작업" + +msgid "Volume Operations" +msgstr "볼륨 작업" + +msgid "Translate" +msgstr "번역" + +msgid "Group Operations" +msgstr "그룹 작업" + +msgid "Set Position" +msgstr "위치 설정" + +msgid "Set Orientation" +msgstr "방향 설정" + +msgid "Set Scale" +msgstr "스케일 설정" + +msgid "Reset Position" +msgstr "위치 재설정" + +msgid "Reset Rotation" +msgstr "회전 재설정" + +msgid "World coordinates" +msgstr "월드 좌표계" + +msgid "°" +msgstr "°" + +msgid "Size" +msgstr "사이즈" + +msgid "%" +msgstr "%" + +msgid "uniform scale" +msgstr "유니폼 스케일" + +msgid "Left click" +msgstr "왼쪽 클릭" + +msgid "Add connector" +msgstr "커넥터 추가" + +msgid "Right click" +msgstr "오른쪽 클릭" + +msgid "Remove connector" +msgstr "커넥터 제거" + +msgid "Drag" +msgstr "드래그" + +msgid "Move connector" +msgstr "커넥터 이동" + +msgid "Add connector to selection" +msgstr "선택에 커넥터 추가" + +msgid "Remove connector from selection" +msgstr "선택 항목에서 커넥터 제거" + +msgid "Select all connectors" +msgstr "모든 커넥터 선택" + +msgid "Cut" +msgstr "자르기" + +msgid "Connector" +msgstr "커넥터" + +msgid "Movement:" +msgstr "이동:" + +msgid "Movement" +msgstr "이동" + +msgid "Height" +msgstr "높이" + +msgid "Edit connectors" +msgstr "커넥터 편집" + +msgid "Add connectors" +msgstr "커넥터 추가" + +msgid "Upper part" +msgstr "상단 부분" + +msgid "Lower part" +msgstr "하단 부분" + +msgid "Keep" +msgstr "유지" + +msgid "Place on cut" +msgstr "절단면에 놓기" + +msgid "Flip" +msgstr "뒤집기" + +msgid "After cut" +msgstr "컷 이후" + +msgid "Cut to parts" +msgstr "부품으로 자르기" + +msgid "Auto Segment" +msgstr "자동 세그먼트" + +msgid "Perform cut" +msgstr "자르기 실행" + +msgid "Reset" +msgstr "초기화" + +msgid "Connectors" +msgstr "커넥터" + +msgid "Type" +msgstr "유형" + +msgid "Style" +msgstr "스타일" + +msgid "Shape" +msgstr "형태" + +msgid "Depth ratio" +msgstr "깊이 비율" + +msgid "Remove connectors" +msgstr "커넥터 제거" + +msgid "Prizm" +msgstr "Prizm" + +msgid "Frustum" +msgstr "Frustum" + +msgid "Square" +msgstr "정사각형" + +msgid "Hexagon" +msgstr "육각형" + +msgid "Confirm connectors" +msgstr "커넥터 확인" + +msgid "Cancel" +msgstr "취소" + +msgid "Warning" +msgstr "경고" + +msgid "Invalid connectors detected" +msgstr "잘못된 커넥터가 감지됨" + +msgid "connector is out of cut contour" +msgstr "커넥터가 절단 윤곽을 벗어남" + +msgid "connectors are out of cut contour" +msgstr "커넥터가 절단 윤곽에서 벗어남" + +msgid "connector is out of object" +msgstr "커넥터가 객체에서 벗어남" + +msgid "connectors is out of object" +msgstr "커넥터는 객체 표면에 있어야 합니다." + +msgid "Some connectors are overlapped" +msgstr "일부 커넥터가 겹쳐져 있음" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" +"잘못된 상태입니다. \n" +"절단 후 유지할 부품이 하나도 선택되지 않았습니다." + +msgid "Plug" +msgstr "Plug" + +msgid "Dowel" +msgstr "Dowel" + +msgid "Tolerance" +msgstr "공차" + +msgid "Mesh name" +msgstr "메쉬 이름" + +msgid "Detail level" +msgstr "상세 수준" + +msgid "Decimate ratio" +msgstr "단순화 비율" + +#, boost-format +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"100만개 이상의 삼각형 메쉬를 가진 '%1%' 모델을 처리하는데 속도가 느려질 수 있" +"습니다. 모델을 단순화하는 것이 좋습니다." + +msgid "Simplify model" +msgstr "모델 단순화" + +msgid "Simplify" +msgstr "단순화" + +msgid "Simplification is currently only allowed when a single part is selected" +msgstr "단순화는 현재 단일 부품을 선택한 경우에만 허용됩니다." + +msgid "Error" +msgstr "오류" + +msgid "Extra high" +msgstr "매우 높음" + +msgid "High" +msgstr "높음" + +msgid "Medium" +msgstr "중간" + +msgid "Low" +msgstr "낮음" + +msgid "Extra low" +msgstr "매우 낮음" + +#, c-format, boost-format +msgid "%d triangles" +msgstr "%d개의 삼각형" + +msgid "Show wireframe" +msgstr "와이어프레임 보기" + +#, boost-format +msgid "%1%" +msgstr "%1%" + +msgid "Can't apply when proccess preview." +msgstr "미리보기 처리 시 적용 불가" + +msgid "Operation already cancelling. Please wait few seconds." +msgstr "작업이 이미 취소 중입니다. 잠시만 기다려 주십시오." + +msgid "Face recognition" +msgstr "얼굴 인식" + +msgid "Perform Recognition" +msgstr "인식 실행" + +msgid "Brush size" +msgstr "브러시 크기" + +msgid "Brush shape" +msgstr "브러시 모양" + +msgid "Enforce seam" +msgstr "재봉선 지정" + +msgid "Block seam" +msgstr "재봉선 제거" + +msgid "Seam painting" +msgstr "재봉선 페인팅" + +msgid "Remove selection" +msgstr "선택 제거" + +msgid "Shift + Mouse move up or dowm" +msgstr "Shift + 마우스 위 또는 아래로 이동" + +msgid "Rotate text" +msgstr "텍스트 회전" + +msgid "Text shape" +msgstr "텍스트 모양" + +msgid "Font" +msgstr "글꼴" + +msgid "Thickness" +msgstr "두께" + +msgid "Input text" +msgstr "입력 텍스트" + +msgid "Embeded" +msgstr "음각" + +msgid "Text Gap" +msgstr "글자 간격" + +msgid "Angle" +msgstr "각도" + +msgid "" +"Embeded\n" +"depth" +msgstr "음각 깊이" + +msgid "Surface" +msgstr "Surface" + +msgid "Horizontal text" +msgstr "Horizontal text" + +msgid "Ctrl+" +msgstr "Ctrl+" + +msgid "Notice" +msgstr "알림" + +msgid "Undefined" +msgstr "정의되지 않음" + +#, boost-format +msgid "%1% was replaced with %2%" +msgstr "%1%이(가) %2%(으)로 대체되었습니다." + +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "이 설정은 최신 버전의 뱀부 스튜디오에서 생성되었을 수 있습니다." + +msgid "Some values have been replaced. Please check them:" +msgstr "일부 값이 대체되었습니다.확인해 주세요:" + +msgid "Process" +msgstr "프로세스" + +msgid "Filament" +msgstr "필라멘트" + +msgid "Machine" +msgstr "장비" + +msgid "Configuration package was loaded, but some values were not recognized." +msgstr "설정 패키지가 로드되었지만 일부 값을 인식하지 못했습니다." + +#, boost-format +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "설정 파일 \"%1%\"을(를) 로드했지만 일부 값을 인식하지 못했습니다." + +msgid "V" +msgstr "V" + +msgid "Internal Version" +msgstr "내부 버전" + +msgid "Version" +msgstr "버전" + +msgid "" +"BambuStudio 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 "" +"Bambu Studio의 메모리가 부족하여 종료됩니다. 버그일 수 있습니다. 이 오류를 기" +"술 지원팀에 보고하십시오." + +msgid "Fatal error" +msgstr "심각한 오류" + +msgid "" +"BambuStudio will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "현지화 오류가 발생하여 Bambu Studio가 종료됩니다. " + +msgid "Critical error" +msgstr "중대한 오류" + +#, boost-format +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio에 처리되지 않은 예외가 발생했습니다: %1%" + +msgid "Untitled" +msgstr "제목 없음" + +msgid "Downloading Bambu Network Plug-in" +msgstr "뱀부 네트워크 플러그인 다운로드" + +msgid "Login information expired. Please login again." +msgstr "로그인 정보가 만료되었습니다. 다시 로그인하세요." + +msgid "Incorrect password" +msgstr "잘못된 비밀번호" + +#, c-format, boost-format +msgid "Connect %s failed! [SN:%s, code=%s]" +msgstr "%s 연결 실패! [번호:%s, 코드=%s]" + +msgid "" +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." +msgstr "" +"Bambu Studio 설정 파일을 구문 분석할 수 없으며 손상되었을 수 있습니다. 파일" +"을 삭제하고 다시 시도하십시오." + +#, c-format, boost-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" +"%s\n" +"계속하시겠습니까?" + +msgid "Remember my choice" +msgstr "내 선택사항 저장" + +msgid "Loading configuration" +msgstr "설정 불러오는 중" + +#, c-format, boost-format +msgid "Click to download new version in default browser: %s" +msgstr "기본 브라우저에서 새 버전을 다운로드하려면 클릭하십시오: %s" + +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio에 업데이트가 필요합니다" + +msgid "This is the newest version." +msgstr "최신 버전입니다." + +msgid "Info" +msgstr "정보" + +msgid "Rebuild" +msgstr "다시 빌드" + +msgid "Loading current presets" +msgstr "현재 프리셋 불러오는 중" + +msgid "Loading a mode view" +msgstr "모드 뷰 로드" + +msgid "Choose one file (3mf):" +msgstr "하나의 파일 선택(3mf):" + +msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "하나 이상의 파일을 선택합니다 (3mf/step/stl/svg/obj/amf):" + +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "하나의 파일 선택(.gcode/.gco/.g/.ngc/ngc):" + +msgid "Some presets are modified." +msgstr "일부 프리셋이 수정되었습니다." + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"새 프로젝트에 대해 수정된 프리셋을 유지하거나, 변경 사항을 삭제하거나, 새 프" +"리셋으로 저장할 수 있습니다." + +msgid "User logged out" +msgstr "사용자가 로그아웃했습니다." + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" +"슬라이싱 프로세스 중에는 새 프로젝트 나 프로젝트 열기를 할 수 없습니다!" + +msgid "Open Project" +msgstr "프로젝트 열기" + +msgid "" +"The version of Bambu studio is too low and needs to be updated to the latest " +"version before it can be used normally" +msgstr "" +"Bambu Studio 버전이 너무 낮아서 정상적으로 사용하려면 최신 버전으로 업데이트" +"해야 합니다." + +msgid "Privacy Policy Update" +msgstr "개인 정보 보호 정책 업데이트" + +msgid "Loading" +msgstr "로딩 중" + +msgid "Loading user preset" +msgstr "사용자 프리셋 불러오는 중" + +msgid "Switching application language" +msgstr "언어 전환" + +msgid "Select the language" +msgstr "언어 선택" + +msgid "Language" +msgstr "언어" + +msgid "*" +msgstr "*" + +msgid "The uploads are still ongoing" +msgstr "업로드는 계속 진행 중입니다." + +msgid "Stop them and continue anyway?" +msgstr "멈추고 계속 진행하시겠습니까?" + +msgid "Ongoing uploads" +msgstr "진행 중인 업로드" + +msgid "Select a G-code file:" +msgstr "G 코드 파일 선택:" + +msgid "Import File" +msgstr "파일 가져오기" + +msgid "Delete" +msgstr "삭제" + +msgid "Choose files" +msgstr "파일 선택" + +msgid "New Folder" +msgstr "새 폴더" + +msgid "Open" +msgstr "열기" + +msgid "Rename" +msgstr "이름변경" + +msgid "Bambu Studio GUI initialization failed" +msgstr "뱀부 스튜디오 GUI 초기화 실패" + +#, boost-format +msgid "Fatal error, exception catched: %1%" +msgstr "치명적인 오류, 예외: %1%" + +msgid "Quality" +msgstr "품질" + +msgid "Shell" +msgstr "쉘" + +msgid "Infill" +msgstr "내부채움" + +msgid "Support" +msgstr "서포트" + +msgid "Flush options" +msgstr "짜내기 옵션" + +msgid "Speed" +msgstr "속도" + +msgid "Strength" +msgstr "강도" + +msgid "Ironing" +msgstr "다림질" + +msgid "Fuzzy Skin" +msgstr "퍼지스킨" + +msgid "Extruders" +msgstr "압출기" + +msgid "Extrusion Width" +msgstr "압출 폭" + +msgid "Wipe options" +msgstr "닦아내기 설정" + +msgid "Bed adhension" +msgstr "베드 안착" + +msgid "Advanced" +msgstr "고급설정" + +msgid "Add part" +msgstr "부품 추가" + +msgid "Add negative part" +msgstr "네거티브 부품 추가" + +msgid "Add modifier" +msgstr "수정자 추가" + +msgid "Add support blocker" +msgstr "서포트차단기 추가" + +msgid "Add support enforcer" +msgstr "커스텀서포트 추가" + +msgid "Select settings" +msgstr "설정 선택" + +msgid "Hide" +msgstr "숨기기" + +msgid "Show" +msgstr "표시" + +msgid "Del" +msgstr "Del" + +msgid "Delete the selected object" +msgstr "선택한 객체 삭제" + +msgid "Edit Text" +msgstr "텍스트 편집" + +msgid "Load..." +msgstr "로딩..." + +msgid "Cube" +msgstr "큐브" + +msgid "Cylinder" +msgstr "원기둥" + +msgid "Cone" +msgstr "원뿔" + +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + +msgid "Height range Modifier" +msgstr "높이 범위 수정자" + +msgid "Add settings" +msgstr "설정 추가" + +msgid "Change type" +msgstr "유형 변경" + +msgid "Set as an individual object" +msgstr "개별 객체로 설정" + +msgid "Set as individual objects" +msgstr "개별 객체로 설정" + +msgid "Printable" +msgstr "출력가능" + +msgid "Fix model" +msgstr "모델 수정" + +msgid "Export as STL" +msgstr "STL로 내보내기" + +msgid "Reload from disk" +msgstr "디스크에서 다시 불러오기" + +msgid "Reload the selected parts from disk" +msgstr "디스크에서 선택한 부품을 다시 불러오기" + +msgid "Replace with STL" +msgstr "STL로 바꾸기" + +msgid "Replace the selected part with new STL" +msgstr "선택한 부품을 새 STL로 바꾸기" + +msgid "Change filament" +msgstr "필라멘트 교체" + +msgid "Set filament for selected items" +msgstr "선택한 항목의 필라멘트 설정" + +msgid "Default" +msgstr "기본값" + +#, c-format, boost-format +msgid "Filament %d" +msgstr "필라멘트 %d" + +msgid "active" +msgstr "Active" + +msgid "Scale to build volume" +msgstr "최대빌드볼륨에 맞춰 스케일조정" + +msgid "Scale an object to fit the build volume" +msgstr "최대빌드볼륨에 맞춰 객체 스케일조정" + +msgid "Flush Options" +msgstr "짜내기 옵션" + +msgid "Flush into objects' infill" +msgstr "객체의 내부채움에 짜내기" + +msgid "Flush into this object" +msgstr "이 객체에 짜내기" + +msgid "Flush into objects' support" +msgstr "객체의 서포트에 짜내기" + +msgid "Edit in Parameter Table" +msgstr "매개변수 테이블에서 편집" + +msgid "Convert from inch" +msgstr "inch 단위 모델링 변환" + +msgid "Restore to inch" +msgstr "inch 단위로 복원" + +msgid "Convert from meter" +msgstr "미터 단위 모델링 변환 (1000배)" + +msgid "Restore to meter" +msgstr "미터 단위로 복원" + +msgid "Assemble" +msgstr "결합" + +msgid "Assemble the selected objects to an object with multiple parts" +msgstr "선택한 객체들을 여러부품으로 이루어진 하나의 객채로 통합" + +msgid "Assemble the selected objects to an object with single part" +msgstr "선택한 객체들을 하나의 부품으로 이루어진 한 객채로 통합" + +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" + +msgid "Along X axis" +msgstr "X축방향" + +msgid "Mirror along the X axis" +msgstr "X축에 대해 미러" + +msgid "Along Y axis" +msgstr "Y축방향" + +msgid "Mirror along the Y axis" +msgstr "Y축에 대해 미러" + +msgid "Along Z axis" +msgstr "Z축방향" + +msgid "Mirror along the Z axis" +msgstr "Z축에 대해 미러" + +msgid "Mirror" +msgstr "미러" + +msgid "Mirror object" +msgstr "객체 미러" + +msgid "Invalidate cut info" +msgstr "컷 정보 무효화" + +msgid "Add Primitive" +msgstr "기본모델링 추가" + +msgid "Show Labels" +msgstr "레이블 표시" + +msgid "To objects" +msgstr "객체로" + +msgid "Split the selected object into multiple objects" +msgstr "선택한 객체를 여러 객체로 분할" + +msgid "To parts" +msgstr "부품으로" + +msgid "Split the selected object into multiple parts" +msgstr "선택한 객체를 여러 부품으로 분할" + +msgid "Split" +msgstr "분할" + +msgid "Split the selected object" +msgstr "선택한 객체를 분할" + +msgid "Auto orientation" +msgstr "자동 회전" + +msgid "Auto orient the object to improve print quality." +msgstr "출력품질향상을 위해 객체를 자동으로 회전시킵니다." + +msgid "Split the selected object into mutiple objects" +msgstr "선택한 객체를 여러 객체로 분할" + +msgid "Split the selected object into mutiple parts" +msgstr "선택한 객체를 여러 부품으로 분할" + +msgid "Select All" +msgstr "모두 선택" + +msgid "select all objects on current plate" +msgstr "현재 플레이트위의 모든 객체 선택" + +msgid "Delete All" +msgstr "모두 삭제" + +msgid "delete all objects on current plate" +msgstr "현재 플레이트 위의 모든 객체 삭제" + +msgid "Arrange" +msgstr "정렬" + +msgid "arrange current plate" +msgstr "현재 플레이트 정렬" + +msgid "Auto Rotate" +msgstr "자동 회전" + +msgid "auto rotate current plate" +msgstr "현재 플레이트 자동 회전" + +msgid "Delete Plate" +msgstr "플레이트 삭제" + +msgid "Remove the selected plate" +msgstr "선택한 플레이트 제거" + +msgid "Clone" +msgstr "복제" + +msgid "Simplify Model" +msgstr "모델 단순화" + +msgid "Center" +msgstr "중앙" + +msgid "Edit Process Settings" +msgstr "프로세스 설정 편집" + +msgid "Edit print parameters for a single object" +msgstr "단일 객체에 대한 출력 설정값 편집" + +msgid "Change Filament" +msgstr "필라멘트 교체" + +msgid "Set Filament for selected items" +msgstr "선택한 항목에 필라멘트 설정" + +msgid "current" +msgstr "현재" + +msgid "Unlock" +msgstr "잠금 해제" + +msgid "Lock" +msgstr "잠금" + +msgid "Fill bed with copies" +msgstr "복제하여 베드 채우기" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "베드의 나머지 영역을 선택한 객체의 복사본으로 채웁니다." + +msgid "Edit Plate Name" +msgstr "" + +msgid "Name" +msgstr "이름" + +msgid "Fila." +msgstr "Fila." + +#, c-format, boost-format +msgid "%1$d error repaired" +msgid_plural "%1$d errors repaired" +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 비매니폴드 모서리." + +msgid "Remaining errors" +msgstr "남은 오류" + +#, c-format, boost-format +msgid "%1$d non-manifold edge" +msgid_plural "%1$d non-manifold edges" +msgstr[0] "%1$d 비매니폴드 에지" + +msgid "Right click the icon to fix model object" +msgstr "아이콘을 마우스 오른쪽 버튼으로 클릭하여 모델 객체를 수정합니다." + +msgid "Right button click the icon to drop the object settings" +msgstr "아이콘을 마우스 오른쪽 버튼으로 클릭하여 객체 설정을 삭제합니다." + +msgid "Click the icon to reset all settings of the object" +msgstr "아이콘을 클릭하여 객체의 모든 설정을 초기화합니다." + +msgid "Right button click the icon to drop the object printable property" +msgstr "" +"아이콘을 마우스 오른쪽 버튼으로 클릭하여 객체 출력가능 속성을 삭제합니다." + +msgid "Click the icon to toggle printable property of the object" +msgstr "아이콘을 클릭하여 객체의 출력가능 속성을 전환합니다." + +msgid "Click the icon to edit support painting of the object" +msgstr "아이콘을 클릭하여 객체의 서포트 페인팅을 편집합니다." + +msgid "Click the icon to edit color painting of the object" +msgstr "객체의 컬러 페인팅을 수정하기 위해 아이콘을 클릭합니다." + +msgid "Click the icon to shift this object to the bed" +msgstr "이 객체를 베드로 옮기려면 아이콘을 클릭하십시오." + +msgid "Loading file" +msgstr "파일 로드 중" + +msgid "Error!" +msgstr "오류!" + +msgid "Failed to get the model data in the current file." +msgstr "" + +msgid "Generic" +msgstr "일반" + +msgid "Add Modifier" +msgstr "수정자 추가" + +msgid "Switch to per-object setting mode to edit modifier settings." +msgstr "수정자 설정을 편집하려면 객체별 설정 모드로 전환합니다." + +msgid "" +"Switch to per-object setting mode to edit process settings of selected " +"objects." +msgstr "" +"선택한 객체의 프로세스 설정을 편집하려면 객체별 설정 모드로 전환합니다." + +msgid "Delete connector from object which is a part of cut" +msgstr "절단된 객체에서 커넥터 삭제" + +msgid "Delete solid part from object which is a part of cut" +msgstr "절단된 객체에서 솔리드 부분 삭제" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "절단된 객체에서 네거티브 볼륨 삭제" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" +"컷 대응을 저장하려면 관련된 객체들로부터 모든 커넥터를 삭제하면 됩니다." + +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 infornation first." +msgstr "" +"이 작업은 컷 대응을 끊을 것입니다.\n" +"이후 모델 일관성을 보장할 수 없습니다.\n" +"\n" +"솔리드 부품 또는 네거티브 볼륨을 조작하려면 먼저 컷 정보를 무효화해야 합니다." + +msgid "Delete all connectors" +msgstr "모든 커넥터 삭제" + +msgid "Deleting the last solid part is not allowed." +msgstr "마지막 솔리드 부품은 삭제할 수 없습니다." + +msgid "The target object contains only one part and can not be splited." +msgstr "대상 객체는 하나의 부품만 포함하고 있어 분할할 수 없습니다." + +msgid "Assembly" +msgstr "결합" + +msgid "Cut Connectors information" +msgstr "컷 커넥터 정보" + +msgid "Object manipulation" +msgstr "객체 조작" + +msgid "Group manipulation" +msgstr "그룹 조작" + +msgid "Object Settings to modify" +msgstr "수정할 객체 설정" + +msgid "Part Settings to modify" +msgstr "수정할 부품 설정" + +msgid "Layer range Settings to modify" +msgstr "수정할 레이어 범위 설정" + +msgid "Part manipulation" +msgstr "부품 조작" + +msgid "Instance manipulation" +msgstr "인스턴스 조작" + +msgid "Height ranges" +msgstr "높이 범위" + +msgid "Settings for height range" +msgstr "높이 범위 설정" + +msgid "Object" +msgstr "객체" + +msgid "Part" +msgstr "부품" + +msgid "Layer" +msgstr "레이어" + +msgid "Selection conflicts" +msgstr "선택 충돌" + +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "첫 번째로 선택한 항목이 객체인 경우 두 번째 항목도 객체여야 합니다." + +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"첫 번째로 선택한 항목이 부품인 경우 두 번째 항목은 동일한 객체의 부품이어야 " +"합니다." + +msgid "The type of the last solid object part is not to be changed." +msgstr "마지막 단일 객체 부품의 유형은 변경할 수 없습니다." + +msgid "Negative Part" +msgstr "네거티브 부품" + +msgid "Modifier" +msgstr "수정자" + +msgid "Support Blocker" +msgstr "서포트 차단기" + +msgid "Support Enforcer" +msgstr "커스텀 서포트" + +msgid "Type:" +msgstr "유형:" + +msgid "Choose part type" +msgstr "부품유형 선택" + +msgid "Enter new name" +msgstr "새 이름 입력" + +msgid "Renaming" +msgstr "이름 바꾸기" + +msgid "Repairing model object" +msgstr "모델 객체 오류수정" + +msgid "Following model object has been repaired" +msgid_plural "Following model objects have been repaired" +msgstr[0] "다음 모델 객체가 복구되었습니다." + +msgid "Failed to repair folowing model object" +msgid_plural "Failed to repair folowing model objects" +msgstr[0] "다음 모델 객체를 복구하지 못했습니다." + +msgid "Repairing was canceled" +msgstr "오류수정이 취소되었습니다" + +msgid "Additional process preset" +msgstr "추가 프로세스 프리셋" + +msgid "Remove parameter" +msgstr "매개변수 제거" + +msgid "to" +msgstr "까지" + +msgid "Remove height range" +msgstr "높이 범위 제거" + +msgid "Add height range" +msgstr "높이 범위 추가" + +msgid "Invalid numeric." +msgstr "잘못된 숫자" + +msgid "one cell can only be copied to one or multiple cells in the same column" +msgstr "한 셀은 같은 열에 있는 하나 이상의 셀에만 복사할 수 있습니다." + +msgid "multiple cells copy is not supported" +msgstr "여러 셀 복사는 지원되지 않습니다." + +msgid "Outside" +msgstr "외부" + +msgid " " +msgstr "" + +msgid "Layer height" +msgstr "레이어 높이" + +msgid "Wall loops" +msgstr "벽 수" + +msgid "Infill density(%)" +msgstr "내부채움 밀도(%)" + +msgid "Auto Brim" +msgstr "자동 브림" + +msgid "Auto" +msgstr "자동" + +msgid "Outer brim only" +msgstr "바깥쪽만" + +msgid "Inner brim only" +msgstr "안쪽만" + +msgid "Outer and inner brim" +msgstr "바깥과 안쪽모두" + +msgid "No-brim" +msgstr "브림 없음" + +msgid "Outer wall speed" +msgstr "외벽 속도" + +msgid "Plate" +msgstr "플레이트" + +msgid "Brim" +msgstr "브림" + +msgid "Object/Part Setting" +msgstr "객체/부품 설정" + +msgid "Reset parameter" +msgstr "매개변수 재설정" + +msgid "Multicolor Print" +msgstr "멀티컬러 출력" + +msgid "Line Type" +msgstr "라인 유형" + +msgid "More" +msgstr "더 보기" + +msgid "Open Preferences." +msgstr "환경설정 열기" + +msgid "Open next tip." +msgstr "다음 팁 열기" + +msgid "Open Documentation in web browser." +msgstr "웹 브라우저에서 문서 열기" + +msgid "Pause:" +msgstr "일시정지:" + +msgid "Custom Template:" +msgstr "커스텀 템플릿:" + +msgid "Custom G-code:" +msgstr "커스텀 G 코드:" + +msgid "Custom G-code" +msgstr "커스텀 G 코드" + +msgid "Enter Custom G-code used on current layer:" +msgstr "현재 레이어에 사용된 사용자 지정 G 코드 입력:" + +msgid "OK" +msgstr "확인" + +msgid "Jump to Layer" +msgstr "레이어로 이동" + +msgid "Jump to layer" +msgstr "레이어로 이동" + +msgid "Please enter the layer number" +msgstr "레이어 번호를 입력하세요." + +msgid "Add Pause" +msgstr "일시정지 추가" + +msgid "Insert a pause command at the beginning of this layer." +msgstr "이 레이어의 시작 부분에 일시 중지 명령을 삽입합니다." + +msgid "Add Custom G-code" +msgstr "커스텀 G 코드 추가" + +msgid "Insert custom G-code at the beginning of this layer." +msgstr "이 레이어의 시작 부분에 커스텀 G 코드를 삽입합니다." + +msgid "Add Custom Template" +msgstr "커스텀 템플릿 추가" + +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "이 레이어의 시작 부분에 템플릿 커스텀 G 코드를 삽입합니다." + +msgid "Filament " +msgstr "필라멘트 " + +msgid "Change filament at the beginning of this layer." +msgstr "이 레이어의 시작 부분에서 필라멘트를 변경합니다." + +msgid "Delete Pause" +msgstr "" + +msgid "Delete Custom Template" +msgstr "커스텀 템플릿 삭제" + +msgid "Edit Custom G-code" +msgstr "커스텀 G 코드 편집" + +msgid "Delete Custom G-code" +msgstr "커스텀 G 코드 삭제" + +msgid "Delete Filament Change" +msgstr "필라멘트 변경 삭제" + +msgid "No printer" +msgstr "프린터 없음" + +msgid "..." +msgstr "" + +msgid "Failed to connect to the server" +msgstr "서버 연결에 실패했습니다." + +msgid "Check cloud service status" +msgstr "클라우드 서비스 상태 확인" + +msgid "code" +msgstr "코드" + +msgid "Failed to connect to cloud service" +msgstr "클라우드 서비스에 연결하지 못했습니다." + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "클라우드 서비스 상태를 보려면 위의 하이퍼링크를 클릭하십시오." + +msgid "Failed to connect to the printer" +msgstr "프린터에 연결하지 못했습니다." + +msgid "Connection to printer failed" +msgstr "프린터 연결 실패" + +msgid "Please check the network connection of the printer and Studio." +msgstr "프린터와 Studio의 네트워크 연결을 확인하십시오." + +msgid "Connecting..." +msgstr "연결 중…" + +msgid "?" +msgstr "?" + +msgid "Empty" +msgstr "비어 있음" + +msgid "AMS" +msgstr "AMS" + +msgid "Auto Refill" +msgstr "" + +msgid "AMS not connected" +msgstr "AMS가 연결되지 않음" + +msgid "Cali" +msgstr "Cali" + +msgid "Calibration of extrusion" +msgstr "압출 캘리브레이션" + +msgid "Load Filament" +msgstr "로드" + +msgid "Unload Filament" +msgstr "언로드" + +msgid "Ext Spool" +msgstr "Ext Spool" + +msgid "Tips" +msgstr "팁" + +msgid "Guide" +msgstr "가이드" + +msgid "Retry" +msgstr "다시 시도" + +msgid "Calibrating AMS..." +msgstr "AMS 캘리브레이션 중..." + +msgid "A problem occured during calibration. Click to view the solution." +msgstr "캘리브레이션 중에 문제가 발생했습니다. 해결 방법을 보려면 클릭하세요." + +msgid "Calibrate again" +msgstr "다시 캘리브레이션하기" + +msgid "Cancel calibration" +msgstr "캘리브레이션 취소" + +msgid "Heat the nozzle" +msgstr "노즐 가열" + +msgid "Cut filament" +msgstr "필라멘트 컷팅" + +msgid "Pull back current filament" +msgstr "현재 필라멘트를 뒤로 당깁니다." + +msgid "Push new filament into extruder" +msgstr "새 필라멘트를 압출기에 밀어 넣습니다." + +msgid "Purge old filament" +msgstr "이전 필라멘트를 밀어 빼냅니다." + +msgid "Push new filament into the extruder" +msgstr "새 필라멘트를 압출기에 밀어 넣으세요." + +msgid "Grab new filament" +msgstr "새 필라멘트 가져오기" + +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filiament." +msgstr "" +"AMS 슬롯을 선택한 다음 “로드” 또는 “언로드”를 눌러 필라멘트를 자동으로 로드하" +"거나 언로드합니다." + +msgid "Edit" +msgstr "수정" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-arrange on these objects." +msgstr "" +"선택한 모든 객체가 잠긴 플레이트에 있습니다.\n" +"이러한 객체들은 자동 정렬할 수 없습니다." + +msgid "No arrangable objects are selected." +msgstr "정렬 가능한 개체가 선택되지 않았습니다." + +msgid "" +"This plate is locked,\n" +"We can not do auto-arrange on this plate." +msgstr "" +"플레이트가 잠겨 있습니다.\n" +"자동 정렬할 수 없습니다." + +msgid "Arranging..." +msgstr "정렬 중..." + +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "정렬에 실패했습니다.객체 형상을 처리할 때 몇 가지 예외를 발견했습니다." + +msgid "Arranging" +msgstr "정렬 중" + +msgid "Arranging canceled." +msgstr "정렬이 취소되었습니다." + +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"정렬을 마쳤지만 일부 항목을 정렬하지 못했습니다. 간격을 줄이고 다시 시도하세" +"요." + +msgid "Arranging done." +msgstr "정렬이 완료되었습니다." + +#, c-format, boost-format +msgid "" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" +"%s" +msgstr "" +"한 플레이트에 들어가지 않는 객체라서 정렬 되지 않았습니다 : \n" +"%s" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-orient on these objects." +msgstr "" +"선택한 모든 객체는 잠긴 플레이트에 있습니다.\n" +"자동 회전을 사용할 수 없습니다." + +msgid "" +"This plate is locked,\n" +"We can not do auto-orient on this plate." +msgstr "" +"플레이트가 잠겨있습니다.\n" +"자동회전을 사용할 수 없습니다." + +msgid "Orienting..." +msgstr "회전 중..." + +msgid "Orienting" +msgstr "회전 중" + +msgid "Filling bed " +msgstr "베드 채우기" + +msgid "Bed filling canceled." +msgstr "베드 채우기 취소됨" + +msgid "Bed filling done." +msgstr "베드 채우기 완료." + +msgid "Error! Unable to create thread!" +msgstr "오류. 스레드를 생성할 수 없습니다." + +msgid "Exception" +msgstr "예외" + +msgid "Logging in" +msgstr "로그인하는 중" + +msgid "Login failed" +msgstr "로그인 실패" + +msgid "Please check the printer network connection." +msgstr "프린터 네트워크 연결을 확인하십시오." + +msgid "Abnormal print file data. Please slice again." +msgstr "비정상적인 출력 파일 데이터: 다시 슬라이스하십시오." + +msgid "Task canceled." +msgstr "작업 취소됨" + +msgid "Upload task timed out. Please check the network status and try again." +msgstr "" +"업로드 작업 시간이 초과되었습니다.네트워크 상태를 확인하고 다시 시도하십시오." + +msgid "Cloud service connection failed. Please try again." +msgstr "클라우드 서비스 연결에 실패했습니다. 다시 시도하세요." + +msgid "Print file not found. please slice again." +msgstr "출력파일을 찾을 수 없습니다. 다시 슬라이스하세요." + +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." +msgstr "" +"출력 파일이 최대 허용 크기 (1GB) 를 초과했습니다.모델을 단순화하고 다시 슬라" +"이스하세요" + +msgid "Failed to send the print job. Please try again." +msgstr "출력 작업을 전송하지 못했습니다. 다시 시도해 주세요." + +msgid "Failed to upload file to ftp. Please try again." +msgstr "ftp에 파일을 업로드하지 못했습니다.다시 시도해 주세요." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "위의 링크를 클릭하여 Bambu Lab 서버의 현재 상태를 확인하십시오." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"출력 파일의 크기가 너무 큽니다. 파일 크기를 조정한 후 다시 시도하십시오." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "출력 파일을 찾을 수 없습니다. 다시 슬라이스하여 출력전송하십시오." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"FTP를 통한 출력 파일 업로드에 실패했습니다. 네트워크 상태를 확인하고 다시 시" +"도하십시오." + +msgid "Sending print job over LAN" +msgstr "LAN을 통해 출력 작업 보내기" + +msgid "Sending print job through cloud service" +msgstr "클라우드 서비스를 통해 출력 작업 보내기" + +msgid "Service Unavailable" +msgstr "서비스 이용 불가" + +msgid "Unkown Error." +msgstr "알 수 없는 오류" + +msgid "Sending print configuration" +msgstr "출력 설정 보내기" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "성공적으로 전송되었습니다. %ss의 장치 페이지로 자동으로 이동합니다." + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + +msgid "An SD card needs to be inserted before printing via LAN." +msgstr "LAN을 통해 출력하기 전에 microSD 카드를 삽입해야 합니다." + +msgid "Sending gcode file over LAN" +msgstr "LAN을 통해 G 코드 파일 전송" + +msgid "Sending gcode file to sdcard" +msgstr "G 코드 파일을 MicroSD 카드로 전송" + +#, c-format, boost-format +msgid "Successfully sent. Close current page in %s s" +msgstr "성공적으로 전송되었습니다. %s초 안에 현재 페이지를 닫습니다." + +msgid "An SD card needs to be inserted before sending to printer." +msgstr "프린터로 전송하기 전에 microSD 카드를 삽입해야 합니다." + +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 "Importing SLA archive" +msgstr "SLA 아카이브 가져오기" + +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 프린터 프리셋을 먼저 활성화하십시오." + +msgid "Importing canceled." +msgstr "가져오기 취소됨." + +msgid "Importing done." +msgstr "가져오기 완료." + +msgid "" +"The imported SLA archive did not contain any presets. The current SLA " +"presets were used as fallback." +msgstr "" +"가져온 SLA 아카이브에 프리셋이 포함되어 있지 않습니다. 현재 SLA 프리셋이 대체" +"하여 사용됩니다." + +msgid "You cannot load SLA project with a multi-part object on the bed" +msgstr "" +"베드위 여러 부품으로 구성된 객체가 있는 SLA 프로젝트는 불러올 수 없습니다." + +msgid "Please check your object list before preset changing." +msgstr "프리셋을 변경하기 전에 객체 목록을 확인하세요." + +msgid "Attention!" +msgstr "주의!" + +msgid "Downloading" +msgstr "다운로드 중" + +msgid "Download failed" +msgstr "다운로드 실패" + +msgid "Cancelled" +msgstr "취소됨" + +msgid "Install successfully." +msgstr "성공적으로 설치되었습니다." + +msgid "Installing" +msgstr "설치 중" + +msgid "Install failed" +msgstr "설치 실패" + +msgid "Portions copyright" +msgstr "라이선스 정보" + +msgid "Copyright" +msgstr "저작권" + +msgid "License" +msgstr "라이센스" + +msgid "Bambu Studio is licensed under " +msgstr "뱀부 스튜디오의 라이센스는 다음과 같습니다." + +msgid "GNU Affero General Public License, version 3" +msgstr "GNU Affero General Public License, version 3" + +msgid "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" +msgstr "" +"뱀부 스튜디오는 프루사 리서치의 PrusaSlicer를 기반으로 하며, PrusaSlicer는 " +"Alessandro Ranellucci와 RepRap 커뮤니티의 Slic3r을 기반으로 합니다. " + +msgid "Libraries" +msgstr "라이브러리" + +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"이 소프트웨어는 저작권 및 기타 소유권이 해당 소유자에게 있는 오픈 소스 구성 " +"요소를 사용합니다." + +#, c-format, boost-format +msgid "About %s" +msgstr "%s 정보" + +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" +"뱀부 스튜디오는 프루사 리서치의 프루사 슬라이서와 메릴(슈퍼메릴)의 슈퍼슬라이" +"서를 기반으로 합니다." + +msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "PrusaSlicer는 Alessandro Ranellucci의 Slic3r을 기반으로 합니다." + +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" +"Slic3r은 Alessandro Ranellucci가 다른 많은 기여자들의 도움을 받아 만들었습니" +"다." + +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio는 또한 Ultimaker의 Cura에서 얻은 일부 아이디어를 참조했습니다." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"소프트웨어의 많은 부분이 커뮤니티 기여를 통해 만들어졌기 때문에 일일이 나열" +"할 수 없으나, 대신 해당 코드 주석에 출처를 표시합니다." + +msgid "AMS Materials Setting" +msgstr "AMS 재료 설정" + +msgid "Confirm" +msgstr "확인" + +msgid "Close" +msgstr "닫기" + +msgid "Colour" +msgstr "색상" + +msgid "" +"Nozzle\n" +"Temperature" +msgstr "" +"노즐\n" +"온도" + +msgid "max" +msgstr "최대" + +msgid "min" +msgstr "최소" + +#, boost-format +msgid "The input value should be greater than %1% and less than %2%" +msgstr "입력 값은 %1%보다 크고 %2%보다 작아야 합니다." + +msgid "SN" +msgstr "SN" + +msgid "Setting AMS slot information while printing is not supported" +msgstr "출력 중 AMS 슬롯 정보 설정은 지원되지 않습니다." + +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" + +msgid "Factor K" +msgstr "Factor K" + +msgid "Factor N" +msgstr "Factor N" + +msgid "Setting Virtual slot information while printing is not supported" +msgstr "출력 중 가상 슬롯 정보 설정은 지원되지 않습니다." + +msgid "Are you sure you want to clear the filament information?" +msgstr "필라멘트 정보를 지우시겠습니까?" + +msgid "You need to select the material type and color first." +msgstr "재료 유형과 색상을 먼저 선택해야 합니다." + +msgid "Please input a valid value (K in 0~0.5)" +msgstr "유효한 값(0~0.5 단위의 K)을 입력하세요." + +msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "유효한 값을 입력하십시오 (0~0.5의 경우 K, 0.6~2.0의 경우 N)" + +msgid "Other Color" +msgstr "기타 색상" + +msgid "Custom Color" +msgstr "커스텀 색상" + +msgid "Dynamic flow calibration" +msgstr "동적 압출량 캘리브레이션" + +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." +msgstr "" +"노즐 온도와 최대 체적 속도는 캘리브레이션 결과에 영향을 미칩니다. 실제 출력" +"과 동일한 값을 입력하십시오. 필라멘트 프리셋을 선택하여 자동으로 채울 수 있습" +"니다." + +msgid "Nozzle Diameter" +msgstr "노즐 직경" + +msgid "Bed Type" +msgstr "플레이트 유형" + +msgid "Nozzle temperature" +msgstr "노즐 온도" + +msgid "Bed Temperature" +msgstr "베드 온도" + +msgid "Max volumetric speed" +msgstr "최대 체적 속도" + +msgid "℃" +msgstr "" + +msgid "Bed temperature" +msgstr "베드 온도" + +msgid "mm³" +msgstr "mm³" + +msgid "Start calibration" +msgstr "시작" + +msgid "Next" +msgstr "다음" + +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 "" +"캘리브레이션이 완료되었습니다.아래 그림과 같이 가장 균일한 압출 라인을 찾아 " +"왼쪽의 값을 factor K 입력 상자에 입력하십시오." + +msgid "Save" +msgstr "저장" + +msgid "Last Step" +msgstr "뒤로" + +msgid "Example" +msgstr "예시" + +#, c-format, boost-format +msgid "Calibrating... %d%%" +msgstr "캘리브레이션 중...%d%%" + +msgid "Calibration completed" +msgstr "캘리브레이션 완료" + +#, c-format, boost-format +msgid "%s does not support %s" +msgstr "%s는 %s을 (를) 지원하지 않습니다." + +msgid "Dynamic flow Calibration" +msgstr "동적 압출량 캘리브레이션" + +msgid "Step" +msgstr "Step" + +msgid "AMS Slots" +msgstr "AMS 슬롯" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "참고: 동일한 재료 타입 로드된 AMS 슬롯만 선택할 수 있습니다." + +msgid "Enable AMS" +msgstr "AMS 활성화" + +msgid "Print with filaments in the AMS" +msgstr "AMS에서 필라멘트로 출력" + +msgid "Disable AMS" +msgstr "AMS 비활성화" + +msgid "Print with the filament mounted on the back of chassis" +msgstr "외부 스풀의 필라멘트로 출력" + +msgid "Cabin humidity" +msgstr "내부 습도" + +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 "" +"건조제 상태가 막대 2개보다 낮으면 건조제 기능을 못하는 상태일 수 있음을 나타" +"냅니다. 건조제를 교체하세요. (높을수록 좋습니다.)" + +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 "" +"참고: 뚜껑을 열거나 건조제 팩을 교체하면 습기를 흡수하는데 수 시간 또는 하룻" +"밤이 걸릴 수 있습니다. 온도가 낮을 경우 습기 흡수에 시간이 더 걸립니다. 이 시" +"간 동안에는 표시장치가 정확하지 않을 수 있습니다." + +msgid "" +"Config which AMS slot should be used for a filament used in the print job" +msgstr "출력 작업에 사용되는 필라멘트에 사용할 AMS 슬롯을 구성합니다." + +msgid "Filament used in this print job" +msgstr "이 출력 작업에 사용된 필라멘트" + +msgid "AMS slot used for this filament" +msgstr "이 필라멘트에 사용되는 AMS 슬롯" + +msgid "Click to select AMS slot manually" +msgstr "클릭하여 AMS 슬롯을 수동으로 선택합니다." + +msgid "Do not Enable AMS" +msgstr "AMS를 활성화하지 마십시오" + +msgid "Print using materials mounted on the back of the case" +msgstr "외부 스풀에 필라멘트를 걸어 출력" + +msgid "Print with filaments in ams" +msgstr "AMS에서 필라멘트로 출력" + +msgid "Print with filaments mounted on the back of the chassis" +msgstr "외부 스풀의 필라멘트로 출력" + +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" + +msgid "Group" +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 "" + +msgid "AMS Settings" +msgstr "AMS 설정" + +msgid "Insertion update" +msgstr "필라삽입정보 업데이트" + +msgid "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament. This takes about 20 seconds." +msgstr "" +"AMS는 새 Bambu Lab 필라멘트 스풀을 삽입할 때 필라멘트 정보를 자동으로 읽습니" +"다. 이 과정은 약 20초 정도 소요됩니다." + +msgid "" +"Note: if 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가 자동으로 정보를 읽지 않으므로 사용자가 수동으" +"로 입력해야 합니다." + +msgid "Power on update" +msgstr "시작 시 업데이트" + +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 분이 소요됩니" +"다. 읽는 과정에서 필라멘트 스풀이 회전합니다." + +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는 시작 중 삽입된 필라멘트의 정보를 자동으로 읽지 않으며 최근 종료전 저장" +"된 정보를 계속 사용합니다." + +msgid "Update remaining capacity" +msgstr "남은 용량 업데이트" + +msgid "" +"The AMS will estimate Bambu filament's remaining capacity after the filament " +"info is updated. During printing, remaining capacity will be updated " +"automatically." +msgstr "" +"AMS는 필라멘트 정보가 업데이트된 후 뱀부 필라멘트의 남은 용량을 추정합니다. " +"출력하는 동안 남은 용량은 자동으로 업데이트됩니다." + +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는 현재 필라멘트가 소진되면 자동으로 동일한 필라멘트 속성을 가진 다른 스풀" +"로 계속 진행합니다." + +msgid "File" +msgstr "파일" + +msgid "Calibration" +msgstr "캘리브레이션" + +msgid "" +"Failed to download the plug-in. Please check your firewall settings and vpn " +"software, check and retry." +msgstr "" +"플러그인을 다운로드하지 못했습니다. 방화벽 설정 및 VPN 소프트웨어를 확인하고 " +"다시 시도하세요." + +msgid "" +"Failed to install the plug-in. Please check whether it is blocked or deleted " +"by anti-virus software." +msgstr "" +"플러그인을 설치하지 못했습니다. 바이러스 백신 소프트웨어로 차단되었거나 삭제" +"되었는지 확인하십시오." + +msgid "click here to see more info" +msgstr "자세한 정보를 보려면 여기를 클릭하십시오." + +msgid "Please home all axes (click " +msgstr "Please home all axes (click " + +msgid "" +") to locate the toolhead's position. This prevents device moving beyond the " +"printable boundary and causing equipment wear." +msgstr "" +") to locate the toolhead's position. 출력 가능영역을 넘어 출력하게 됨으로써 " +"발생하는 마모를 방지할 수 있습니다." + +msgid "Go Home" +msgstr "홈으로 이동" + +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "에러 발생됨. 시스템 메모리가 부족하거나 버그가 발생했을 수 있습니다." + +msgid "Please save project and restart the program. " +msgstr "프로젝트를 저장하고 프로그램을 다시 시작하십시오." + +msgid "Processing G-Code from Previous file..." +msgstr "이전 파일의 G 코드 처리 중…" + +msgid "Slicing complete" +msgstr "슬라이싱 완료" + +msgid "Access violation" +msgstr "액세스 위반" + +msgid "Illegal instruction" +msgstr "불법 지시" + +msgid "Divide by zero" +msgstr "0으로 나누기" + +msgid "Overflow" +msgstr "오버플로우" + +msgid "Underflow" +msgstr "언더플로우" + +msgid "Floating reserved operand" +msgstr "Floating reserved operand" + +msgid "Stack overflow" +msgstr "Stack overflow" + +msgid "Unknown error when export G-code." +msgstr "G 코드 내보내기 시 알 수 없는 오류" + +#, boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." +msgstr "" +"G코드 파일을 저장하지 못했습니다.\n" +"오류 메시지: %1%.\n" +"소스 파일 %2%." + +#, boost-format +msgid "Succeed to export G-code to %1%" +msgstr "성공! G 코드를 %1%로 내보냈습니다." + +msgid "Running post-processing scripts" +msgstr "포스트 프로세싱 스크립트 실행" + +msgid "Copying of the temporary G-code to the output G-code failed" +msgstr "임시 G 코드를 출력 G 코드로 복사하는데 실패했습니다." + +#, boost-format +msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "'%1%`로 업로드를 예약합니다. 창 -> 호스트 업로드 대기열 출력 참조" + +msgid "Origin" +msgstr "원점" + +msgid "Diameter" +msgstr "직경" + +msgid "Size in X and Y of the rectangular plate." +msgstr "직사각형 베드의 X, Y 크기" + +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "직사각형의 왼쪽 앞 모서리로부터 (0,0) G 코드 좌표까지의 거리." + +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "프린트 베드의 직경. 원점(0,0)이 중앙에 있다고 가정합니다." + +msgid "Rectangular" +msgstr "직사각형" + +msgid "Circular" +msgstr "원형" + +msgid "Custom" +msgstr "커스텀" + +msgid "Load shape from STL..." +msgstr "STL에서 형상 로드..." + +msgid "Settings" +msgstr "설정" + +msgid "Texture" +msgstr "텍스처" + +msgid "Remove" +msgstr "제거" + +msgid "Not found:" +msgstr "찾을 수 없음:" + +msgid "Model" +msgstr "모델" + +msgid "Choose an STL file to import bed shape from:" +msgstr "베드 모양을 가져올 STL 파일을 선택합니다:" + +msgid "Invalid file format." +msgstr "잘못된 파일 형식" + +msgid "Error! Invalid model" +msgstr "오류: 잘못된 모델" + +msgid "The selected file contains no geometry." +msgstr "선택한 파일에 형상이 없습니다." + +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"선택한 파일에 연결이 되지 않은 영역이 포함되어 있습니다. 이는 지원되지 않습니" +"다." + +msgid "Choose a file to import bed texture from (PNG/SVG):" +msgstr "베드 텍스처를 가져올 파일 선택 (PNG/SVG):" + +msgid "Choose an STL file to import bed model from:" +msgstr "베드 모델을 가져올 STL 파일을 선택하십시오:" + +msgid "Bed Shape" +msgstr "베드 모양" + +msgid "" +"Nozzle may be blocked when the temperature is out of recommended range.\n" +"Please make sure whether to use the temperature to print.\n" +"\n" +msgstr "" +"온도가 권장 범위를 벗어나면 노즐이 막힐 수 있습니다.\n" +"이 온도를 사용하여 인쇄할지 여부를 확인하십시오.\n" +"\n" + +#, c-format, boost-format +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "이 필라멘트 타입에 권장되는 노즐 온도는 [%d, %d]도입니다." + +#, 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" +"이로 인해 노즐이 막히거나 출력이 실패할 수 있습니다.\n" +"출력중 공기 순환이 되도록 프린터를 열어두거나 베드의 온도를 낮추십시오." + +msgid "" +"Too small max volumetric speed.\n" +"Reset to 0.5" +msgstr "" +"최대 체적 속도가 너무 작습니다.\n" +"값이 0.5로 재설정되었습니다." + +msgid "" +"Too small layer height.\n" +"Reset to 0.2" +msgstr "" +"레이어 높이가 너무 작음\n" +"0.2로 재설정되었습니다" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"레이어 높이가 너무 큼\n" +"0.2로 재설정되었습니다" + +msgid "" +"Too small ironing spacing.\n" +"Reset to 0.1" +msgstr "" +"다림질 간격이 너무 작음\n" +"0.1로 재설정되었습니다." + +msgid "" +"Zero initial layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." +msgstr "" +"첫 레이어 높이 0은 불가능합니다.\n" +"\n" +"첫 레이어 높이가 0.2로 재설정됩니다." + +msgid "" +"This setting is only used for model size tunning with small value in some " +"cases.\n" +"For example, when model size has small error and hard to be assembled.\n" +"For large size tuning, please use model scale function.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"이 설정은 모델 크기를 미세 조정하는 데만 사용됩니다.\n" +"모델 크기에 작은 오차가 있거나 공차가 잘못된 경우를 예로 들 수 있습니다. 큰 " +"조정의 경우는 스케일 기능을 사용하십시오.\n" +"\n" +"값이 0으로 재설정됩니다." + +msgid "" +"Too large elefant foot compensation is unreasonable.\n" +"If really have serious elephant foot effect, please check other settings.\n" +"For example, whether bed temperature is too high.\n" +"\n" +"The value will be reset to 0." +msgstr "" +"코끼리발 보정값이 너무 큽니다.\n" +"심각한 코끼리발 문제가 있다면 다른 설정을 확인바랍니다.\n" +"예를들어, 베드온도가 너무 높을 수 있습니다.\n" +"\n" +"값이 0으로 재설정됩니다. " + +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"나선형 꽃병모드는 다음 경우에만 작동합니다. 벽 수 1, 서포트 비활성화, 상단 레" +"이어 0, 내부채움 밀도 0, 타임랩스 유형 일반." + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"이 설정을 자동으로 변경하시겠습니까?\n" +"예 - 이 설정을 변경하고 나선형/꽃병 모드를 자동으로 활성화\n" +"아니요 - 나선형 모드 활성화 취소" + +msgid "" +"Prime tower does not work when Adaptive Layer Height or Independent Support " +"Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height and Independent Support Layer Height" +msgstr "" +"어댑티브 레이어 또는 독립 서포트 레이어 높이가 켜져 있으면 프라임 타워가 작동" +"하지 않습니다.\n" +"어떤 것을 유지하시겠습니까?\n" +"예 - 프라임 타워 유지\n" +"아니요 - 어댑티브 레이어 및 독립 서포트 레이어 높이 유지" + +msgid "" +"Prime tower does not work when Adaptive Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Adaptive Layer Height" +msgstr "" +"어댑티브 레이어가 켜져 있으면 프라임 타워가 생성되지 않습니다.\n" +"어느 것을 유지하시겠습니까?\n" +"예 - 프라임 타워 유지\n" +"아니요 - 어댑티브 레이어 유지" + +msgid "" +"Prime tower does not work when Independent Support Layer Height is on.\n" +"Which do you want to keep?\n" +"YES - Keep Prime Tower\n" +"NO - Keep Independent Support Layer Height" +msgstr "" +"독립 서포트 레이어 높이가 켜져 있으면 프라임 타워가 생성되지 않습니다.\n" +"어느 것을 유지하시겠습니까?\n" +"예 - 프라임 타워 유지\n" +"아니요 - 독립 서포트 레이어 높이 유지" + +#, 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 "" +"recilinear 패턴으로 전환하시겠습니까?\n" +"예 - recilinear 패턴으로 자동 전환\n" +"아니요 - 자동으로 밀도를 100% 가 아닌 기본값으로 재설정" + +msgid "" +"While printing by Object, the extruder may collide skirt.\n" +"Thus, reset the skirt layer to 1 to avoid that." +msgstr "" +"객체별로 출력하는 동안 압출기가 스커트와 충돌할 수 있습니다. \n" +"따라서 충돌을 피하기 위해 스커트 레이어를 1로 재설정합니다." + +msgid "Auto bed leveling" +msgstr "오토 베드레벨링" + +msgid "Heatbed preheating" +msgstr "베드 예열" + +msgid "Sweeping XY mech mode" +msgstr "Sweeping XY mech mode" + +msgid "Changing filament" +msgstr "필라멘트 교체" + +msgid "M400 pause" +msgstr "M400 일시정지" + +msgid "Paused due to filament runout" +msgstr "필라멘트 소진으로 일시정지됨" + +msgid "Heating hotend" +msgstr "핫엔드 가열" + +msgid "Calibrating extrusion" +msgstr "압출 캘리브레이션" + +msgid "Scanning bed surface" +msgstr "베드표면 스캐닝" + +msgid "Inspecting first layer" +msgstr "첫레이어 검사" + +msgid "Identifying build plate type" +msgstr "빌드 플레이트 종류 식별" + +msgid "Calibrating Micro Lidar" +msgstr "라이다 센서 캘리브레이션" + +msgid "Homing toolhead" +msgstr "헤드 호밍" + +msgid "Cleaning nozzle tip" +msgstr "노즐 팁 클리닝" + +msgid "Checking extruder temperature" +msgstr "압출기 온도 확인" + +msgid "Printing was paused by the user" +msgstr "출력이 사용자에 의해 일시정지 되었습니다." + +msgid "Pause of front cover falling" +msgstr "헤드커버 벗겨짐으로 일시정지" + +msgid "Calibrating the micro lida" +msgstr "라이다 센서 캘리브레이션" + +msgid "Calibrating extrusion flow" +msgstr "압출량 캘리브레이션" + +msgid "Paused due to nozzle temperature malfunction" +msgstr "노즐 온도 오작동으로 인해 일시정지됨" + +msgid "Paused due to heat bed temperature malfunction" +msgstr "베드 온도 오작동으로 인해 일시정지됨" + +msgid "MC" +msgstr "MC" + +msgid "MainBoard" +msgstr "메인보드" + +msgid "TH" +msgstr "TH" + +msgid "XCam" +msgstr "XCam" + +msgid "Unknown" +msgstr "알 수 없음" + +msgid "Fatal" +msgstr "치명적" + +msgid "Serious" +msgstr "심각한" + +msgid "Common" +msgstr "공통" + +msgid "Update successful." +msgstr "업데이트 성공" + +msgid "Downloading failed." +msgstr "다운로드 실패" + +msgid "Verification failed." +msgstr "인증 실패" + +msgid "Update failed." +msgstr "업데이트 실패" + +msgid "Failed to start printing job" +msgstr "출력 작업을 시작하지 못했습니다." + +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + +msgid "default" +msgstr "기본값" + +msgid "parameter name" +msgstr "매개변수 이름" + +msgid "N/A" +msgstr "N/A" + +#, c-format, boost-format +msgid "%s can't be percentage" +msgstr "%s는 백분율이 될 수 없습니다." + +#, c-format, boost-format +msgid "Value %s is out of range, continue?" +msgstr "%s 값이 범위를 벗어났습니다. 계속하시겠습니까?" + +msgid "Parameter validation" +msgstr "매개변수 유효성 검사" + +msgid "Value is out of range." +msgstr "값이 범위를 벗어났습니다." + +#, c-format, boost-format +msgid "" +"Is it %s%% or %s %s?\n" +"YES for %s%%, \n" +"NO for %s %s." +msgstr "" +"%s%% 또는 %s %s입니까? \n" +"%s%%의 경우 예, \n" +"%s %s의 경우 아니요." + +#, boost-format +msgid "Invalid format. Expected vector format: \"%1%\"" +msgstr "잘못된 형식입니다. 예상 벡터 형식: \"%1%\"" + +msgid "Layer Height" +msgstr "레이어 높이" + +msgid "Line Width" +msgstr "선 폭" + +msgid "Fan Speed" +msgstr "팬 속도" + +msgid "Temperature" +msgstr "온도" + +msgid "Flow" +msgstr "압출속도" + +msgid "Tool" +msgstr "도구" + +msgid "Layer Time" +msgstr "레이어 시간" + +msgid "Height: " +msgstr "높이: " + +msgid "Width: " +msgstr "폭: " + +msgid "Speed: " +msgstr "속도: " + +msgid "Flow: " +msgstr "압출량: " + +msgid "Layer Time: " +msgstr "레이어 시간: " + +msgid "Fan Speed: " +msgstr "팬 속도: " + +msgid "Temperature: " +msgstr "온도: " + +msgid "Loading G-codes" +msgstr "G 코드 불러오기" + +msgid "Generating geometry vertex data" +msgstr "Generating geometry vertex data" + +msgid "Generating geometry index data" +msgstr "Generating geometry index data" + +msgid "Statistics of All Plates" +msgstr "모든 플레이트의 통계" + +msgid "Display" +msgstr "보이기" + +msgid "Flushed" +msgstr "Flushed" + +msgid "Total" +msgstr "합계" + +msgid "Total Time Estimation" +msgstr "총 시간 예상" + +msgid "Total time" +msgstr "총 시간" + +msgid "up to" +msgstr "최대" + +msgid "above" +msgstr "초과" + +msgid "from" +msgstr "부터" + +msgid "Color Scheme" +msgstr "색상으로 보기" + +msgid "Time" +msgstr "시간" + +msgid "Percent" +msgstr "퍼센트" + +msgid "Layer Height (mm)" +msgstr "레이어 높이 (mm)" + +msgid "Line Width (mm)" +msgstr "선 폭 (mm)" + +msgid "Speed (mm/s)" +msgstr "속도 (mm/s)" + +msgid "Fan Speed (%)" +msgstr "팬 속도 (%)" + +msgid "Temperature (°C)" +msgstr "온도 (°C)" + +msgid "Volumetric flow rate (mm³/s)" +msgstr "체적 유량 (mm³/s)" + +msgid "Layer Time (s)" +msgstr "레이어 시간 (s)" + +msgid "Used filament" +msgstr "사용한 필라멘트" + +msgid "Travel" +msgstr "이동" + +msgid "Seams" +msgstr "재봉선" + +msgid "Retract" +msgstr "리트랙션" + +msgid "Unretract" +msgstr "리트랙션 복귀" + +msgid "Filament Changes" +msgstr "필라멘트 변경" + +msgid "Wipe" +msgstr "닦아내기" + +msgid "Options" +msgstr "옵션" + +msgid "travel" +msgstr "이동" + +msgid "Extruder" +msgstr "압출기" + +msgid "Filament change times" +msgstr "필라멘트 교체 시간" + +msgid "Cost" +msgstr "비용" + +msgid "Color change" +msgstr "색상 변경" + +msgid "Print" +msgstr "출력" + +msgid "Pause" +msgstr "일시정지" + +msgid "Printer" +msgstr "프린터" + +msgid "Print settings" +msgstr "출력 설정" + +msgid "Total Estimation" +msgstr "전체 예상치" + +msgid "Time Estimation" +msgstr "시간 예상" + +msgid "Normal mode" +msgstr "일반 모드" + +msgid "Prepare time" +msgstr "준비 시간" + +msgid "Model printing time" +msgstr "모델 출력 시간" + +msgid "Switch to silent mode" +msgstr "저소음모드 전환" + +msgid "Switch to normal mode" +msgstr "일반 모드 전환" + +msgid "Variable layer height" +msgstr "가변 레이어 높이" + +msgid "Adaptive" +msgstr "어댑티브" + +msgid "Quality / Speed" +msgstr "품질/속도" + +msgid "Smooth" +msgstr "Smooth" + +msgid "Radius" +msgstr "반지름" + +msgid "Keep min" +msgstr "최소 유지" + +msgid "Left mouse button:" +msgstr "마우스 왼쪽 버튼:" + +msgid "Add detail" +msgstr "세부 정보 추가" + +msgid "Right mouse button:" +msgstr "마우스 오른쪽 버튼:" + +msgid "Remove detail" +msgstr "세부 정보 제거" + +msgid "Shift + Left mouse button:" +msgstr "Shift + 마우스 왼쪽 버튼:" + +msgid "Reset to base" +msgstr "기본값으로 재설정" + +msgid "Shift + Right mouse button:" +msgstr "Shift + 마우스 오른쪽 버튼:" + +msgid "Smoothing" +msgstr "부드럽게" + +msgid "Mouse wheel:" +msgstr "마우스 휠:" + +msgid "Increase/decrease edit area" +msgstr "편집 영역 늘리기/줄이기" + +msgid "Sequence" +msgstr "순서" + +msgid "Mirror Object" +msgstr "객체 미러" + +msgid "Tool Move" +msgstr "도구 이동" + +msgid "Tool Rotate" +msgstr "도구 회전" + +msgid "Move Object" +msgstr "객체 이동" + +msgid "Auto Orientation options" +msgstr "자동 회전 옵션" + +msgid "Enable rotation" +msgstr "회전 활성화" + +msgid "Optimize support interface area" +msgstr "서포트 접촉면 최적화" + +msgid "Orient" +msgstr "방향" + +msgid "Arrange options" +msgstr "정렬 옵션" + +msgid "Spacing" +msgstr "간격" + +msgid "Auto rotate for arrangement" +msgstr "정렬을 위한 자동 회전" + +msgid "Allow multiple materials on same plate" +msgstr "동일한 빌드 플레이트위에 여러 재료 허용" + +msgid "Avoid extrusion calibration region" +msgstr "" + +msgid "Add" +msgstr "추가" + +msgid "Add plate" +msgstr "빌드 플레이트 추가" + +msgid "Auto orient" +msgstr "자동 회전" + +msgid "Arrange all objects" +msgstr "모든 객체 정렬" + +msgid "Arrange objects on selected plates" +msgstr "선택한 플레이트의 객체 정렬" + +msgid "Split to objects" +msgstr "객체로 분할" + +msgid "Split to parts" +msgstr "부품으로 분할" + +msgid "Assembly View" +msgstr "어셈블리 보기" + +msgid "Select Plate" +msgstr "빌드 플레이트 선택" + +msgid "Assembly Return" +msgstr "이전으로 돌아가기" + +msgid "return" +msgstr "이전화면" + +msgid "Paint Toolbar" +msgstr "페인트 툴바" + +msgid "Explosion Ratio" +msgstr "분해 비율" + +msgid "Section View" +msgstr "단면 뷰" + +msgid "Assemble Control" +msgstr "어셈블리 컨트롤" + +msgid "Total Volume:" +msgstr "총 체적:" + +msgid "Assembly Info" +msgstr "어셈블리 정보" + +msgid "Volume:" +msgstr "체적:" + +msgid "Size:" +msgstr "크기:" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." +msgstr "" +"gcode 경로 충돌이 %d레이어에서 발견되었습니다. 충돌하는 객체를 더 구분하십시" +"오 (%s <-> %s)." + +msgid "An object is layed over the boundary of plate." +msgstr "객체가 빌드 플레이트 경계 위에 놓여 있습니다." + +msgid "A G-code path goes beyond the max print height." +msgstr "" + +msgid "A G-code path goes beyond the boundary of plate." +msgstr "G코드 경로가 빌드플레이트 경계를 넘어갑니다." + +msgid "Only the object being edit is visible." +msgstr "편집 중인 객체만 표시됩니다." + +msgid "" +"An object is laid over the boundary of plate or exceeds the height limit.\n" +"Please solve the problem by moving it totally on or off the plate, and " +"confirming that the height is within the build volume." +msgstr "" +"물체가 판의 경계 위에 놓이거나 높이 제한을 초과합니다.\n" +"플레이트 위 또는 밖으로 완전히 옮기고 높이가 빌드 볼륨 내에 있는지 확인하여 " +"문제를 해결하십시오." + +msgid "Calibration step selection" +msgstr "캘리브레이션 단계 선택" + +msgid "Micro lidar calibration" +msgstr "라이다 센서 캘리브레이션" + +msgid "Bed leveling" +msgstr "베드 레벨링" + +msgid "Resonance frequency identification" +msgstr "공진 주파수 측정" + +msgid "Calibration program" +msgstr "캘리브레이션 프로그램" + +msgid "" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" +"It keeps the device performing optimally." +msgstr "" +"캘리브레이션 프로그램은 프린터의 상태를 자동으로 감지하여 편차를 최소화합니" +"다.\n" +"장치의 성능을 최적으로 유지합니다." + +msgid "Calibration Flow" +msgstr "캘리브레이션 순서" + +msgid "Start Calibration" +msgstr "캘리브레이션 시작" + +msgid "Completed" +msgstr "완료" + +msgid "Calibrating" +msgstr "캘리브레이션 중" + +msgid "Auto-record Monitoring" +msgstr "자동 녹화 모니터링" + +msgid "Go Live" +msgstr "라이브 시작" + +msgid "Resolution" +msgstr "해상도" + +msgid "Show \"Live Video\" guide page." +msgstr "'라이브 동영상' 안내 페이지를 표시합니다." + +msgid "720p" +msgstr "720p" + +msgid "1080p" +msgstr "1080p" + +msgid "ConnectPrinter(LAN)" +msgstr "프린터 연결 (LAN)" + +msgid "Please input the printer access code:" +msgstr "프린터 액세스 코드를 입력하십시오:" + +msgid "" +"You can find it in \"Settings > Network > Connection code\"\n" +"on the printer, as shown in the figure:" +msgstr "" +"그림과 같이 프린터의 \"설정 > 네트워크 > 액세스 코드\"에서 \n" +"찾을 수 있습니다 :" + +msgid "Invalid input." +msgstr "잘못된 입력" + +msgid "New Window" +msgstr "새 창" + +msgid "Open a new window" +msgstr "새 창 열기" + +msgid "Application is closing" +msgstr "프로그램 종료 중…" + +msgid "Closing Application while some presets are modified." +msgstr "일부 프리셋이 수정되는 동안 프로그램을 닫는 중입니다." + +msgid "Logging" +msgstr "기록 중..." + +msgid "Prepare" +msgstr "준비" + +msgid "Preview" +msgstr "미리보기" + +msgid "Device" +msgstr "장치" + +msgid "Project" +msgstr "프로젝트" + +msgid "Yes" +msgstr "예" + +msgid "No" +msgstr "아니요" + +msgid "will be closed before creating a new model. Do you want to continue?" +msgstr "새 모델을 생성하기 전에 닫힙니다. 계속하시겠습니까?" + +msgid "Upload" +msgstr "" + +msgid "Slice plate" +msgstr "플레이트 슬라이스" + +msgid "Print plate" +msgstr "플레이트 출력하기" + +msgid "Slice all" +msgstr "모두 슬라이스" + +msgid "Export G-code file" +msgstr "G 코드 파일 내보내기" + +msgid "Send" +msgstr "보내기" + +msgid "Export plate sliced file" +msgstr "플레이트 슬라이스 파일 내보내기" + +msgid "Export all sliced file" +msgstr "모든 슬라이스 파일 내보내기" + +msgid "Print all" +msgstr "모두 출력" + +msgid "Send all" +msgstr "모두 보내기" + +msgid "Keyboard Shortcuts" +msgstr "키보드 단축키" + +msgid "Show the list of the keyboard shortcuts" +msgstr "키보드 단축키 목록 보기" + +msgid "Setup Wizard" +msgstr "설정 마법사" + +msgid "Show Configuration Folder" +msgstr "설정 폴더 보기" + +msgid "Show Tip of the Day" +msgstr "오늘의 팁 보기" + +msgid "Report issue" +msgstr "문제 보고" + +msgid "Check for Update" +msgstr "업데이트 확인" + +msgid "Open Network Test" +msgstr "네트워크 테스트 열기" + +#, c-format, boost-format +msgid "&About %s" +msgstr "&About %s" + +msgid "Upload Models" +msgstr "모델 업로드" + +msgid "Download Models" +msgstr "모델 다운로드" + +msgid "Default View" +msgstr "기본 보기" + +#. TRN To be shown in the main menu View->Top +msgid "Top" +msgstr "상단" + +msgid "Top View" +msgstr "상단 뷰" + +#. TRN To be shown in the main menu View->Bottom +msgid "Bottom" +msgstr "하단" + +msgid "Bottom View" +msgstr "하단 뷰" + +msgid "Front" +msgstr "전면" + +msgid "Front View" +msgstr "전면 뷰" + +msgid "Rear" +msgstr "후면" + +msgid "Rear View" +msgstr "후면 뷰" + +msgid "Left" +msgstr "왼쪽" + +msgid "Left View" +msgstr "왼쪽 뷰" + +msgid "Right" +msgstr "오른쪽" + +msgid "Right View" +msgstr "오른쪽 뷰" + +msgid "Start a new window" +msgstr "새 창 시작" + +msgid "New Project" +msgstr "새 프로젝트" + +msgid "Start a new project" +msgstr "새 프로젝트를 시작" + +msgid "Open a project file" +msgstr "프로젝트 파일 열기" + +msgid "Recent projects" +msgstr "최근 프로젝트" + +msgid "Save Project" +msgstr "프로젝트 저장" + +msgid "Save current project to file" +msgstr "현재 프로젝트를 파일에 저장" + +msgid "Save Project as" +msgstr "다른 이름으로 프로젝트 저장" + +msgid "Shift+" +msgstr "Shift+" + +msgid "Save current project as" +msgstr "현재 프로젝트를 다른 이름으로 저장" + +msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" + +msgid "Load a model" +msgstr "모델 불러오기" + +msgid "Import Configs" +msgstr "설정 가져오기" + +msgid "Load configs" +msgstr "설정 불러오기" + +msgid "Import" +msgstr "가져오기" + +msgid "Export all objects as STL" +msgstr "모든 객체를 STL로 내보내기" + +msgid "Export Generic 3MF" +msgstr "일반 3MF 내보내기" + +msgid "Export 3mf file without using some 3mf-extensions" +msgstr "일부 3mf 확장자를 사용하지 않고 3mf 파일 내보내기" + +msgid "Export current sliced file" +msgstr "현재 슬라이스된 파일 내보내기" + +msgid "Export all plate sliced file" +msgstr "모든 플레이트 슬라이스 파일 내보내기" + +msgid "Export G-code" +msgstr "G 코드 내보내기" + +msgid "Export current plate as G-code" +msgstr "현재 플레이트를 G 코드로 내보내기" + +msgid "Export &Configs" +msgstr "Export &Configs" + +msgid "Export current configuration to files" +msgstr "현재 설정을 파일로 내보내기" + +msgid "Export" +msgstr "내보내기" + +msgid "Quit" +msgstr "종료" + +msgid "Undo" +msgstr "실행 취소" + +msgid "Redo" +msgstr "다시 실행" + +msgid "Cut selection to clipboard" +msgstr "선택 항목을 클립보드로 잘라내기" + +msgid "Copy" +msgstr "복사" + +msgid "Copy selection to clipboard" +msgstr "선택 항목을 클립보드로 복사" + +msgid "Paste" +msgstr "붙여넣기" + +msgid "Paste clipboard" +msgstr "클립보드 붙여넣기" + +msgid "Delete selected" +msgstr "선택 항목 삭제" + +msgid "Deletes the current selection" +msgstr "현재 선택 항목을 삭제합니다." + +msgid "Delete all" +msgstr "모두 삭제" + +msgid "Deletes all objects" +msgstr "모든 객체를 삭제합니다." + +msgid "Clone selected" +msgstr "선택항목 복제" + +msgid "Clone copies of selections" +msgstr "선택 항목의 복제본" + +msgid "Select all" +msgstr "모두 선택" + +msgid "Selects all objects" +msgstr "모든 개체를 선택합니다." + +msgid "Deselect all" +msgstr "모두 선택 해제" + +msgid "Deselects all objects" +msgstr "모든 객체 선택을 해제합니다." + +msgid "Use Perspective View" +msgstr "원근 보기 사용" + +msgid "Use Orthogonal View" +msgstr "직교 보기 사용" + +msgid "Show &Labels" +msgstr "Show &Labels" + +msgid "Show object labels in 3D scene" +msgstr "3D 장면에 객체 레이블 표시" + +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "3D 장면에서 객체 오버행 하이라이트 표시" + +msgid "Preferences" +msgstr "환경설정" + +msgid "View" +msgstr "보기" + +msgid "Help" +msgstr "도움말" + +msgid "Temperature Calibration" +msgstr "" + +msgid "Pass 1" +msgstr "" + +msgid "Flow rate test - Pass 1" +msgstr "" + +msgid "Pass 2" +msgstr "" + +msgid "Flow rate test - Pass 2" +msgstr "" + +msgid "Flow rate" +msgstr "" + +msgid "Pressure advance" +msgstr "" + +msgid "Retraction test" +msgstr "" + +msgid "Max flowrate" +msgstr "" + +msgid "VFA" +msgstr "" + +msgid "More..." +msgstr "" + +msgid "Tutorial" +msgstr "" + +msgid "Calibration help" +msgstr "" + +msgid "More calibrations" +msgstr "" + +msgid "&Open G-code" +msgstr "&Open G-code" + +msgid "Open a G-code file" +msgstr "G 코드 파일 열기" + +msgid "Re&load from Disk" +msgstr "디스크에서 다시&불러오기" + +msgid "Reload the plater from disk" +msgstr "디스크에서 플래터 다시 불러오기" + +msgid "Export &Toolpaths as OBJ" +msgstr "Export &Toolpaths as OBJ" + +msgid "Export toolpaths as OBJ" +msgstr "도구 경로를 OBJ로 내보내기" + +msgid "Open &Studio" +msgstr "Open &Studio" + +msgid "Open Studio" +msgstr "스튜디오 열기" + +msgid "&Quit" +msgstr "&Quit" + +#, c-format, boost-format +msgid "Quit %s" +msgstr "%s 종료" + +msgid "&File" +msgstr "&File" + +msgid "&View" +msgstr "&View" + +msgid "&Help" +msgstr "&Help" + +#, c-format, boost-format +msgid "A file exists with the same name: %s, do you want to override it." +msgstr "같은 이름의 파일이 있습니다: %s. 덮어쓰시겠습니까?" + +#, 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 "파일 덮어쓰기" + +msgid "Yes to All" +msgstr "모두 예" + +msgid "No to All" +msgstr "모두 아니요" + +msgid "Choose a directory" +msgstr "디렉토리 선택" + +#, c-format, boost-format +msgid "There is %d config exported. (Only non-system configs)" +msgid_plural "There are %d configs exported. (Only non-system configs)" +msgstr[0] "" + +msgid "Export result" +msgstr "결과 내보내기" + +msgid "Select profile to load:" +msgstr "불러올 프로파일 선택:" + +#, c-format, 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)" +msgstr[0] "" + +msgid "Import result" +msgstr "결과 가져오기" + +msgid "File is missing" +msgstr "파일이 누락됨" + +msgid "The project is no longer available." +msgstr "해당 프로젝트는 더 이상 사용할 수 없습니다." + +msgid "Filament Settings" +msgstr "필라멘트 설정" + +msgid "" +"Do you want to synchronize your personal data from Bambu Cloud? \n" +"It contains the following information:\n" +"1. The Process presets\n" +"2. The Filament presets\n" +"3. The Printer presets" +msgstr "" +"Bambu Cloud의 개인 데이터를 동기화하시겠습니까? \n" +"여기에는 다음 정보가 포함됩니다.\n" +"1.프로세스 프리셋\n" +"2.필라멘트 프리셋\n" +"3.프린터 프리셋" + +msgid "Synchronization" +msgstr "동기화" + +msgid "Initialize failed (No Device)!" +msgstr "초기화 실패(장치 없음)!" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "초기화 실패 (장치 연결 준비 안 됨)!" + +msgid "Initialize failed (No Camera Device)!" +msgstr "초기화 실패 (카메라 장치 없음)!" + +msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgstr "프린터가 다운로드 중입니다. 다운로드가 완료될 때까지 기다려 주십시오." + +msgid "Loading..." +msgstr "로드 중…" + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "초기화 실패 (LAN 전용 모드에서는 액세스할 수 없음)!" + +msgid "Initialize failed (Missing LAN ip of printer)!" +msgstr "초기화 실패 (프린터의 LAN IP 누락)!" + +msgid "Initializing..." +msgstr "초기화 중 ..." + +#, c-format, boost-format +msgid "Initialize failed (%s)!" +msgstr "초기화 실패 (%s)!" + +msgid "Network unreachable" +msgstr "네트워크에 연결할 수 없음" + +#, c-format, boost-format +msgid "Stopped [%d]!" +msgstr "중지됨 [%d]!" + +msgid "Stopped." +msgstr "중지됨" + +msgid "LAN Connection Failed (Failed to start liveview)" +msgstr "LAN 연결 실패 (라이브뷰 시작 실패)" + +msgid "" +"Virtual Camera Tools is required for this task!\n" +"Do you want to install them?" +msgstr "" +"이 작업을 수행하려면 가상 카메라 도구가 필요합니다!\n" +"설치하시겠습니까?" + +msgid "Downloading Virtual Camera Tools" +msgstr "가상 카메라 도구 다운로드" + +msgid "" +"Another virtual camera is running.\n" +"Bambu Studio supports only a single virtual camera.\n" +"Do you want to stop this virtual camera?" +msgstr "" +"다른 가상 카메라가 실행 중입니다.\n" +"Bambu Studio는 단일 가상 카메라만 지원합니다.\n" +"이 가상 카메라를 중지하시겠습니까?" + +#, c-format, boost-format +msgid "Virtual camera initialize failed (%s)!" +msgstr "가상 카메라 초기화에 실패했습니다 (%s)!" + +msgid "Information" +msgstr "정보" + +msgid "Playing..." +msgstr "출력 중..." + +#, c-format, boost-format +msgid "Load failed [%d]!" +msgstr "[%d] 불러오기 실패!" + +msgid "Year" +msgstr "년" + +msgid "Month" +msgstr "월" + +msgid "All Files" +msgstr "모든 파일" + +msgid "Group files by year, recent first." +msgstr "최근 파일부터 연도별로 파일을 그룹화합니다." + +msgid "Group files by month, recent first." +msgstr "최근 파일부터 월별로 파일을 그룹화합니다." + +msgid "Show all files, recent first." +msgstr "모든 파일을 최근 파일부터 표시합니다." + +msgid "Timelapse" +msgstr "타임랩스" + +msgid "Switch to timelapse files." +msgstr "타임랩스 파일로 전환합니다." + +msgid "Video" +msgstr "비디오" + +msgid "Switch to video files." +msgstr "비디오 파일로 전환합니다." + +msgid "Switch to 3mf model files." +msgstr "3MF 모델 파일로 전환" + +msgid "Delete selected files from printer." +msgstr "프린터에서 선택한 파일을 삭제합니다." + +msgid "Download" +msgstr "다운로드" + +msgid "Download selected files from printer." +msgstr "프린터에서 선택한 파일을 다운로드합니다." + +msgid "Select" +msgstr "선택" + +msgid "Batch manage files." +msgstr "일괄 관리 파일." + +msgid "No printers." +msgstr "프린터 없음" + +#, c-format, boost-format +msgid "Connect failed [%d]!" +msgstr "연결 실패 [%d]!" + +msgid "Loading file list..." +msgstr "파일 목록 불러오는 중..." + +#, c-format, boost-format +msgid "No files [%d]" +msgstr "파일 없음 [%d]" + +#, c-format, boost-format +msgid "Load failed [%d]" +msgstr "로드 실패 [%d]" + +#, c-format, 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?" +msgstr[0] "" + +msgid "Delete files" +msgstr "파일 삭제" + +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "프린터에서 '%s' 파일을 삭제하시겠습니까?" + +msgid "Delete file" +msgstr "파일 삭제" + +msgid "Fetching model infomations ..." +msgstr "모델 정보 가져오는 중..." + +msgid "Failed to fetching model infomations from printer." +msgstr "프린터에서 모델 정보를 가져오지 못했습니다." + +msgid "Failed to parse model infomations." +msgstr "모델 정보를 해석하지 못했습니다." + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + +#, c-format, boost-format +msgid "File '%s' was lost! Please download it again." +msgstr "파일 '%s'이(가) 손실되었습니다! 다시 다운로드하세요." + +msgid "Download waiting..." +msgstr "다운로드 대기 중..." + +msgid "Play" +msgstr "재생" + +msgid "Open Folder" +msgstr "폴더 열기" + +msgid "Download finished" +msgstr "다운로드 완료." + +#, c-format, boost-format +msgid "Downloading %d%%..." +msgstr "%d%% 다운로드 중..." + +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + +msgid "Speed:" +msgstr "속도:" + +msgid "Deadzone:" +msgstr "데드존:" + +msgid "Options:" +msgstr "옵션:" + +msgid "Zoom" +msgstr "확대" + +msgid "Translation/Zoom" +msgstr "전환/줌" + +msgid "3Dconnexion settings" +msgstr "3Dconnexion 설정" + +msgid "Swap Y/Z axes" +msgstr "Swap Y/Z axes" + +msgid "Printing Progress" +msgstr "출력 진행상황" + +msgid "Resume" +msgstr "재개" + +msgid "Stop" +msgstr "중지" + +msgid "0" +msgstr "0" + +msgid "Layer: N/A" +msgstr "레이어: N/A" + +msgid "Immediately score" +msgstr "즉시 점수 매기기" + +msgid "Clear" +msgstr "지우기" + +msgid "Camera" +msgstr "카메라" + +msgid "SD Card" +msgstr "MicroSD 카드" + +msgid "Camera Setting" +msgstr "카메라 설정" + +msgid "Control" +msgstr "컨트롤" + +msgid "Print Options" +msgstr "출력 옵션" + +msgid "100%" +msgstr "100%" + +msgid "Lamp" +msgstr "램프" + +msgid "Aux" +msgstr "Aux" + +msgid "Cham" +msgstr "Cham" + +msgid "Bed" +msgstr "베드" + +msgid "Unload" +msgstr "언로드" + +msgid "Debug Info" +msgstr "디버그 정보" + +msgid "No SD Card" +msgstr "MicroSD 카드 없음" + +msgid "SD Card Abnormal" +msgstr "MicroSD 카드 이상" + +msgid "Cancel print" +msgstr "출력 취소" + +msgid "Are you sure you want to cancel this print?" +msgstr "이 출력을 취소하시겠습니까?" + +msgid "Done" +msgstr "완료" + +msgid "Downloading..." +msgstr "다운로드 중…" + +msgid "Cloud Slicing..." +msgstr "클라우드 슬라이싱..." + +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "클라우드 슬라이싱 대기열에 %s개의 작업이 있습니다." + +#, c-format, boost-format +msgid "Layer: %s" +msgstr "레이어: %s" + +msgid "Please give a score for your favorite Bambu Market model." +msgstr "좋아하는 Bambu Market 모델에 점수를 매겨주세요." + +msgid "Score" +msgstr "점수" + +#, c-format, boost-format +msgid "Layer: %d/%d" +msgstr "레이어: %d/%d" + +msgid "Please heat the nozzle to above 170 degree before loading filament." +msgstr "필라멘트를 로드하기 전에 노즐을 170도 이상으로 가열하십시오." + +msgid "Still unload" +msgstr "언로드 중" + +msgid "Still load" +msgstr "로드 중" + +msgid "Please select an AMS slot before calibration" +msgstr "캘리브레이션 전에 AMS 슬롯을 선택하십시오." + +msgid "" +"Cannot read filament info: the filament is loaded to the tool head,please " +"unload the filament and try again." +msgstr "" +"필라멘트 정보를 읽을 수 없음: 필라멘트가 툴헤드에 로드되었습니다. 필라멘트를 " +"언로드하고 다시 시도하십시오." + +msgid "This only takes effect during printing" +msgstr "이는 출력 중에만 적용됩니다." + +msgid "Silent" +msgstr "사일런트" + +msgid "Standard" +msgstr "스탠다드" + +msgid "Sport" +msgstr "스포츠" + +msgid "Ludicrous" +msgstr "루디크러스" + +msgid "Can't start this without SD card." +msgstr "microSD 카드 없이는 시작할 수 없습니다." + +msgid "Status" +msgstr "출력상황" + +msgid "Update" +msgstr "업데이트" + +msgid "HMS" +msgstr "HMS" + +msgid "Don't show again" +msgstr "다시 표시하지 않음" + +#, c-format, boost-format +msgid "%s error" +msgstr "%s 오류" + +#, c-format, boost-format +msgid "%s has encountered an error" +msgstr "%s에 오류가 발생했습니다." + +#, c-format, boost-format +msgid "%s warning" +msgstr "%s 경고" + +#, c-format, boost-format +msgid "%s has a warning" +msgstr "%s에 경고가 있습니다." + +#, c-format, boost-format +msgid "%s info" +msgstr "%s 정보" + +#, c-format, boost-format +msgid "%s information" +msgstr "%s 정보" + +msgid "Skip" +msgstr "건너뛰기" + +msgid "3D Mouse disconnected." +msgstr "3D 마우스 연결이 끊겼습니다." + +msgid "Configuration can update now." +msgstr "새로운 설정을 사용할 수 있습니다. 지금 업데이트하시겠습니까?" + +msgid "Detail." +msgstr "더 보기" + +msgid "Integration was successful." +msgstr "연동에 성공했습니다." + +msgid "Integration failed." +msgstr "연동에 실패했습니다." + +msgid "Undo integration was successful." +msgstr "연동 취소에 성공했습니다." + +msgid "New network plug-in available." +msgstr "새로운 네트워크 플러그인 사용 가능" + +msgid "Details" +msgstr "세부정보" + +msgid "Undo integration failed." +msgstr "연동 취소에 실패했습니다." + +msgid "Exporting." +msgstr "내보내는 중…" + +msgid "Software has New version." +msgstr "업데이트가 가능합니다!" + +msgid "Goto download page." +msgstr "다운로드 페이지로 이동" + +msgid "Open Folder." +msgstr "폴더 열기" + +msgid "Safely remove hardware." +msgstr "하드웨어를 안전하게 제거합니다." + +#, c-format, boost-format +msgid "%1$d Object has custom supports." +msgid_plural "%1$d Objects have custom supports." +msgstr[0] "%1$d 객체에는 커스텀 서포트가 있습니다." + +#, c-format, boost-format +msgid "%1$d Object has color painting." +msgid_plural "%1$d Objects have color painting." +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] "" + +msgid "ERROR" +msgstr "오류" + +msgid "CANCELED" +msgstr "취소됨" + +msgid "COMPLETED" +msgstr "완료" + +msgid "Cancel upload" +msgstr "업로드 취소" + +msgid "Slice ok." +msgstr "슬라이스 완료" + +msgid "Jump to" +msgstr "위치로 가기" + +msgid "Error:" +msgstr "오류:" + +msgid "Warning:" +msgstr "경고:" + +msgid "Export successfully." +msgstr "내보내기 성공" + +msgid "Serious warning:" +msgstr "" + +msgid " (Repair)" +msgstr " (Repair)" + +msgid " Click here to install it." +msgstr " 설치하려면 여기를 클릭하십시오." + +msgid "WARNING:" +msgstr "경고:" + +msgid "Your model needs support ! Please make support material enable." +msgstr "출력모델에 서포트가 필요합니다. 서포트를 활성화하십시오." + +msgid "Gcode path overlap" +msgstr "G 코드 경로 겹침" + +msgid "Support painting" +msgstr "서포트 페인팅" + +msgid "Color painting" +msgstr "컬러 페인팅" + +msgid "Cut connectors" +msgstr "컷 커넥터" + +msgid "Layers" +msgstr "레이어" + +msgid "Range" +msgstr "범위" + +msgid "" +"The application cannot run normally because OpenGL version is lower than " +"2.0.\n" +msgstr "" +"OpenGL 버전이 2.0 미만이어서 프로그램을 정상적으로 실행할 수 없습니다.\n" + +msgid "Please upgrade your graphics card driver." +msgstr "그래픽 카드 드라이버를 업그레이드하세요." + +msgid "Unsupported OpenGL version" +msgstr "지원되지 않는 OpenGL 버전" + +#, c-format, boost-format +msgid "" +"Unable to load shaders:\n" +"%s" +msgstr "" +"Unable to load shaders:\n" +"%s" + +msgid "Error loading shaders" +msgstr "Error loading shaders" + +msgctxt "Layers" +msgid "Top" +msgstr "상단" + +msgctxt "Layers" +msgid "Bottom" +msgstr "하단" + +msgid "Enable AI monitoring of printing" +msgstr "출력시 AI 모니터링 사용" + +msgid "Sensitivity of pausing is" +msgstr "일시 중지의 감도는" + +msgid "Enable detection of build plate position" +msgstr "빌드 플레이트 위치 감지 활성화" + +msgid "" +"The localization tag of build plate is detected, and printing is paused if " +"the tag is not in predefined range." +msgstr "" +"빌드 플레이트의 localization tag가 감지되며, tag가 사전 정의된 범위에 있지 않" +"으면 출력이 일시정지됩니다." + +msgid "First Layer Inspection" +msgstr "첫 레이어 검사" + +msgid "Auto-recovery from step loss" +msgstr "스텝 상실시 자동복구" + +msgid "Global" +msgstr "글로벌" + +msgid "Objects" +msgstr "객체별" + +msgid "Advance" +msgstr "고급" + +msgid "Compare presets" +msgstr "프리셋 비교" + +msgid "View all object's settings" +msgstr "모든 객체 설정 보기" + +msgid "Filament settings" +msgstr "필라멘트 설정" + +msgid "Printer settings" +msgstr "프린터 설정" + +#, boost-format +msgid " plate %1%: " +msgstr "" + +msgid "Invalid name, the following characters are not allowed:" +msgstr "이름이 잘못되었습니다. 다음 문자는 사용할 수 없습니다." + +msgid "Sliced Info" +msgstr "슬라이스 정보" + +msgid "Used Filament (m)" +msgstr "사용된 필라멘트 (m)" + +msgid "Used Filament (mm³)" +msgstr "사용된 필라멘트(mm³)" + +msgid "Used Filament (g)" +msgstr "사용된 필라멘트 (g)" + +msgid "Used Materials" +msgstr "사용된 재료" + +msgid "Estimated time" +msgstr "예상 시간" + +msgid "Filament changes" +msgstr "필라멘트 변경" + +msgid "Click to edit preset" +msgstr "프리셋을 수정하려면 클릭하십시오." + +msgid "Connection" +msgstr "연결" + +msgid "Bed type" +msgstr "플레이트 타입" + +msgid "Flushing volumes" +msgstr "짜낸 필라 양" + +msgid "Add one filament" +msgstr "필라멘트 1개 추가" + +msgid "Remove last filament" +msgstr "마지막 필라멘트 제거" + +msgid "Synchronize filament list from AMS" +msgstr "AMS에서 필라멘트 목록 동기화" + +msgid "Set filaments to use" +msgstr "사용할 필라멘트 설정" + +msgid "" +"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +msgstr "" +"AMS 필라멘트가 없습니다.AMS 정보를 불러오려면 '장치' 페이지에서 프린터를 선택" +"하십시오." + +msgid "Sync filaments with AMS" +msgstr "AMS와 필라멘트 동기화" + +msgid "" +"Sync filaments with AMS will drop all current selected filament presets and " +"colors. Do you want to continue?" +msgstr "" +"AMS와 필라멘트를 동기화하면 현재 선택한 필라멘트 프리셋과 색상이 모두 삭제됩" +"니다.계속하시겠습니까?" + +msgid "" +"Already did a synchronization, do you want to sync only changes or resync " +"all?" +msgstr "" +"이미 동기화를 수행했습니다. 변경 사항만 동기화하시겠습니까, 아니면 모두 다시 " +"동기화하시겠습니까?" + +msgid "Sync" +msgstr "동기화" + +msgid "Resync" +msgstr "다시 동기화" + +msgid "There are no compatible filaments, and sync is not performed." +msgstr "호환되는 필라멘트가 없어 동기화가 되지 않습니다." + +msgid "" +"There are some unknown or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." +msgstr "" + +#, boost-format +msgid "Do you want to save changes to \"%1%\"?" +msgstr "변경 내용을 \"%1%\"에 저장하시겠습니까?" + +#, 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 "Previous unsaved project detected, do you want to restore it?" +msgstr "이전에 저장하지 않은 항목이 발견되었습니다. 복원하시겠습니까?" + +msgid "Restore" +msgstr "복원" + +msgid "" +"The bed temperature exceeds filament's vitrification temperature. Please " +"open the front door of printer before printing to avoid nozzle clog." +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 "" +"필라멘트에 필요한 노즐 경도는 프린터의 기본 노즐 경도보다 높습니다. 노즐을 강" +"화된 노즐로 변경하거나 필라멘트를 교체하십시오. 그렇지 않으면 노즐이 마모되거" +"나 손상될 수 있습니다." + +#, c-format, boost-format +msgid "Loading file: %s" +msgstr "파일 불러오기 중: %s" + +msgid "The 3mf is not from Bambu Lab, load geometry data only." +msgstr "이 3mf는 Bambu lab 에서 만들어진게 아닙니다. 형상 데이터만 불러옵니다." + +msgid "Load 3mf" +msgstr "3mf 불러오기" + +msgid "The Config can not be loaded." +msgstr "설정을 불러올 수 없습니다." + +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "" +"3mf는 이전 버전의 Bambu Studio에서 생성되었습니다. 형상 데이터만 불러옵니다." + +#, 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보다 최신 버전입니다. 다음 키를 인식할 수 없" +"습니다:" + +msgid "You'd better upgrade your software.\n" +msgstr "소프트웨어를 업데이트해야 합니다.\n" + +msgid "Newer 3mf version" +msgstr "최신 3mf 버전" + +#, c-format, 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보다 최신 버전이므로 소프트웨어를 업그레이드" +"할 것을 제안합니다." + +msgid "Invalid values found in the 3mf:" +msgstr "3mf에서 잘못된 값이 발견됨:" + +msgid "Please correct them in the param tabs" +msgstr "매개변수 탭에서 수정하세요." + +msgid "The 3mf is not compatible, load geometry data only!" +msgstr "3mf는 호환되지 않으며 형상 데이터만 불러옵니다!" + +msgid "Incompatible 3mf" +msgstr "호환되지 않는 3mf" + +msgid "Name of components inside step file is not UTF8 format!" +msgstr "STEP 파일 내 컴포넌트 이름이 UTF8 형식이 아닙니다!" + +msgid "The name may show garbage characters!" +msgstr "" +"지원되지 않는 텍스트 인코딩으로 인해 이상한 문자들이 나타날 수 있습니다!" + +#, boost-format +msgid "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "\"%1%\" 파일을 불러오지 못했습니다. 잘못된 설정이 발견되었습니다." + +msgid "Objects with zero volume removed" +msgstr "크기 0인 객체가 제거되었습니다." + +msgid "The volume of the object is zero" +msgstr "객체의 체적이 0입니다." + +#, 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 파일의 객체 크기가 너무 작습니다. 미터 또는 인치 단위일 수 있습니다.\n" +" 밀리미터로 크기를 조절하시겠습니까?" + +msgid "Object too small" +msgstr "객체가 너무 작음" + +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" +"이 파일에는 여러 높이에 위치한 여러 객체가 포함되어 있습니다.\n" +"여러 객체로 다루지 않고 \n" +"여러 부품으로 구성된 단일 객체로 로드하시겠습니까?" + +msgid "Multi-part object detected" +msgstr "멀티 부품 객체가 감지됨" + +msgid "Load these files as a single object with multiple parts?\n" +msgstr "이 파일들을 여러 부품을 지닌 단일 객체로 불러오시겠습니까?\n" + +msgid "Object with multiple parts was detected" +msgstr "여러 부품으로 구성된 단일 객체가 발견되었습니다." + +msgid "The file does not contain any geometry data." +msgstr "파일에는 형상 데이터가 포함되어 있지 않습니다." + +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "" +"객체가 너무 큽니다. 프린터 빌드사이즈에 맞춰 스케일을 자동으로 조정하시겠습니" +"까?" + +msgid "Object too large" +msgstr "객체가 너무 큽니다" + +msgid "Export STL file:" +msgstr "STL 파일 내보내기:" + +msgid "Save file as:" +msgstr "다른 이름으로 파일 저장" + +msgid "Delete object which is a part of cut object" +msgstr "잘라낸 객체 일부를 삭제" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"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 "선택한 객체를 분할할 수 없습니다." + +msgid "Another export job is running." +msgstr "다른 내보내기 작업이 실행 중입니다." + +msgid "Select a new file" +msgstr "새 파일 선택" + +msgid "File for the replace wasn't selected" +msgstr "교체할 파일이 선택되지 않았습니다." + +msgid "Error during replace" +msgstr "교체 중 오류" + +msgid "Please select a file" +msgstr "파일을 선택해 주십시오" + +msgid "Slicing" +msgstr "슬라이싱" + +msgid "There are warnings after slicing models:" +msgstr "모델을 슬라이싱한 후 다음과 같은 경고가 있습니다:" + +msgid "warnings" +msgstr "경고" + +msgid "Invalid data" +msgstr "잘못된 데이터" + +msgid "Slicing Canceled" +msgstr "슬라이싱 취소됨" + +#, c-format, boost-format +msgid "Slicing Plate %d" +msgstr "슬라이싱 플레이트 %d" + +msgid "Please resolve the slicing errors and publish again." +msgstr "슬라이싱 오류를 해결하고 다시 게시하십시오." + +msgid "" +"Network Plug-in is not detected. Network related features are unavailable." +msgstr "" +"네트워크 플러그인이 인식되지 않습니다.네트워크 관련 기능을 사용할 수 없습니" +"다." + +msgid "" +"Preview only mode:\n" +"The loaded file contains gcode only, Can not enter the Prepare page" +msgstr "" +"미리 보기 전용 모드:\n" +"불러온 파일에는 G 코드만 포함되어 있으며 준비 페이지에 들어갈 수 없습니다." + +msgid "You can keep the modified presets to the new project or discard them" +msgstr "새 프로젝트를 위해 수정된 프리셋을 유지할 수도 삭제할 수도 있습니다." + +msgid "Creating a new project" +msgstr "새 프로젝트 만들기" + +msgid "Load project" +msgstr "프로젝트 불러오기" + +msgid "" +"Failed to save the project.\n" +"Please check whether the folder exists online or if other programs open the " +"project file." +msgstr "" +"프로젝트를 저장하지 못했습니다.\n" +"폴더가 온라인에 있는지 또는 다른 프로그램에서 프로젝트 파일을 열어 놓았는지 " +"확인하십시오." + +msgid "Save project" +msgstr "프로젝트 저장" + +msgid "Importing Model" +msgstr "모델 가져오기" + +msgid "prepare 3mf file..." +msgstr "3mf 파일 준비 중..." + +msgid "downloading project ..." +msgstr "프로젝트 다운로드 중..." + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "프로젝트 다운로드 %d%%" + +msgid "The selected file" +msgstr "선택한 파일" + +msgid "does not contain valid gcode." +msgstr "유효한 G 코드를 포함하지 않습니다." + +msgid "Error occurs while loading G-code file" +msgstr "G 코드 파일을 불러오는 동안 오류가 발생했습니다." + +msgid "Drop project file" +msgstr "프로젝트 파일 삭제" + +msgid "Please select an action" +msgstr "작업을 선택해 주세요." + +msgid "Open as project" +msgstr "프로젝트로 열기" + +msgid "Import geometry only" +msgstr "모델만 가져오기" + +msgid "Only one G-code file can be opened at the same time." +msgstr "한 번에 하나의 G코드 파일만 열 수 있습니다." + +msgid "G-code loading" +msgstr "Gcode 불러오기" + +msgid "G-code files can not be loaded with models together!" +msgstr "G코드 파일과 모델은 함께 로드할 수 없습니다!" + +msgid "Can not add models when in preview mode!" +msgstr "미리 보기 모드에서 모델을 추가할 수 없습니다." + +msgid "Add Models" +msgstr "모델 추가" + +msgid "All objects will be removed, continue?" +msgstr "모든 객체가 제거됩니다. 계속하시겠습니까?" + +msgid "The current project has unsaved changes, save it before continue?" +msgstr "" +"현재 프로젝트에 저장되지 않은 변경 내용이 있습니다. 계속하기 전에 저장하시겠" +"습니까?" + +msgid "Remember my choice." +msgstr "내 선택 기억하기" + +msgid "Number of copies:" +msgstr "복제 개수:" + +msgid "Copies of the selected object" +msgstr "선택한 객체의 복제품" + +msgid "Save G-code file as:" +msgstr "G코드 파일을 다른 이름으로 저장합니다:" + +msgid "Save Sliced file as:" +msgstr "슬라이스된 파일을 다른 이름으로 저장합니다:" + +#, c-format, boost-format +msgid "" +"The file %s has been sent to the printer's storage space and can be viewed " +"on the printer." +msgstr "" +"파일 %s이(가) 프린터의 저장 공간으로 전송되었으며 프린터에서 볼 수 있습니다." + +msgid "" +"Unable to perform boolean operation on model meshes. Only positive parts " +"will be exported." +msgstr "" +"모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부분만 내보내질 것입니" +"다" + +msgid "" +"Print By Object: \n" +"Suggest to use auto-arrange to avoid collisions when printing." +msgstr "" +"객체별 순차 출력:\n" +"출력시 충돌을 피하려면 자동정렬을 사용하는 것이 좋습니다." + +msgid "Send G-code" +msgstr "G 코드 보내기" + +msgid "Send to printer" +msgstr "프린터로 보내기" + +msgid "Custom supports and color painting were removed before repairing." +msgstr "커스텀 서포트와 컬러 페인팅은 오류수정 전에 제거되었습니다." + +msgid "Invalid number" +msgstr "잘못된 번호" + +msgid "Plate Settings" +msgstr "플레이트 설정" + +#, boost-format +msgid "Number of currently selected parts: %1%\n" +msgstr "현재 선택된 부품 수: %1%\n" + +#, boost-format +msgid "Number of currently selected objects: %1%\n" +msgstr "" + +#, boost-format +msgid "Part name: %1%\n" +msgstr "부품 이름: %1%\n" + +#, boost-format +msgid "Object name: %1%\n" +msgstr "객체 이름: %1%\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% in\n" +msgstr "크기: %1% x %2% x %3% 인치\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% mm\n" +msgstr "크기: %1% x %2% x %3% mm\n" + +#, boost-format +msgid "Volume: %1% in³\n" +msgstr "체적: %1% in³\n" + +#, boost-format +msgid "Volume: %1% mm³\n" +msgstr "체적: %1% mm³\n" + +#, boost-format +msgid "Triangles: %1%\n" +msgstr "삼각형 수: %1%\n" + +msgid "Tips:" +msgstr "팁:" + +msgid "" +"\"Fix Model\" feature is currently only on Windows. Please repair the model " +"on Bambu Studio(windows) or CAD softwares." +msgstr "" +"“모델 수정” 기능은 현재 Windows에서만 사용할 수 있습니다. 뱀부 스튜디오 " +"(Windows) 또는 CAD 소프트웨어로 모델을 복구하십시오." + +#, 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." +msgstr "" +"플레이트% d: %s는 필라멘트 %s (%s) 를 출력하는 데 사용하지 않는 것이 좋습니" +"다. 그래도 이 출력을 진행하려면 이 필라멘트의 베드 온도를 0이 아닌 숫자로 설" +"정하십시오." + +msgid "Switching the language requires application restart.\n" +msgstr "언어를 바꾸려면 프로그램을 다시 시작해야 합니다.\n" + +msgid "Do you want to continue?" +msgstr "계속하시겠습니까?" + +msgid "Language selection" +msgstr "언어 선택" + +msgid "Switching application language while some presets are modified." +msgstr "일부 프리셋이 수정되는 동안 프로그램 언어를 전환합니다." + +msgid "Changing application language" +msgstr "프로그램 언어 변경" + +msgid "Changing the region will log out your account.\n" +msgstr "지역을 변경하면 계정에서 로그아웃됩니다.\n" + +msgid "Region selection" +msgstr "지역 선택" + +msgid "Second" +msgstr "초" + +msgid "Browse" +msgstr "브라우저" + +msgid "Choose Download Directory" +msgstr "다운로드 디렉터리 선택" + +msgid "General Settings" +msgstr "일반 설정" + +msgid "Asia-Pacific" +msgstr "아시아-태평양" + +msgid "China" +msgstr "중국" + +msgid "Europe" +msgstr "유럽" + +msgid "North America" +msgstr "북아메리카" + +msgid "Others" +msgstr "기타" + +msgid "Login Region" +msgstr "로그인 지역" + +msgid "Metric" +msgstr "미터법" + +msgid "Imperial" +msgstr "인치법" + +msgid "Units" +msgstr "단위" + +msgid "Zoom to mouse position" +msgstr "마우스 위치로 확대/축소" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "2D 창 중앙이 아닌 3D 보기에서 마우스 포인터의 위치를 향해 확대합니다." + +msgid "Show \"Tip of the day\" notification after start" +msgstr "시작 후 “오늘의 팁” 알림 표시" + +msgid "If enabled, useful hints are displayed at startup." +msgstr "활성화된 경우 시작 시 유용한 힌트가 표시됩니다." + +msgid "Presets" +msgstr "프리셋" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "사용자 프리셋 자동 동기화 (프린터/필라멘트/프로세스)" + +msgid "User Sync" +msgstr "사용자 동기화" + +msgid "Update built-in Presets automatically." +msgstr "내장 프리셋을 자동으로 업데이트합니다." + +msgid "System Sync" +msgstr "시스템 동기화" + +msgid "Clear my choice on the unsaved presets." +msgstr "저장되지 않은 프리셋에서 내 선택을 지웁니다." + +msgid "Associate files to BambuStudio" +msgstr "파일을 뱀부 스튜디오에 연결" + +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mf 파일을 뱀부 스튜디오에 연결" + +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "" +"활성화하면 뱀부 스튜디오가 .3mf 파일을 여는 기본 프로그램으로 설정됩니다." + +msgid "Associate .stl files to BambuStudio" +msgstr ".stl 파일을 뱀부 스튜디오에 연결" + +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "" +"활성화하면 뱀부 스튜디오가 .stl 파일을 여는 기본 프로그램으로 설정됩니다." + +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stp 파일을 뱀부 스튜디오에 연결" + +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "" +"활성화하면 뱀부 스튜디오가 .step 파일을 여는 기본 프로그램으로 설정됩니다." + +msgid "Online Models" +msgstr "온라인 모델" + +msgid "Show online staff-picked models on the home page" +msgstr "홈페이지에서 추천 온라인 모델 보기" + +msgid "Maximum recent projects" +msgstr "최대 최근 프로젝트 수" + +msgid "Maximum count of recent projects" +msgstr "최근 프로젝트의 최대 개수" + +msgid "Clear my choice on the unsaved projects." +msgstr "저장되지 않은 프로젝트에서 내 선택을 지웁니다." + +msgid "Auto-Backup" +msgstr "자동 백업" + +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" +"간헐적인 충돌로부터 복원하는 데 도움이 되도록 프로젝트를 주기적으로 백업하십" +"시오." + +msgid "every" +msgstr "매" + +msgid "The peroid of backup in seconds." +msgstr "백업주기(초)." + +msgid "Downloads" +msgstr "다운로드" + +msgid "Dark Mode" +msgstr "다크 모드" + +msgid "Enable Dark mode" +msgstr "다크 모드 사용" + +msgid "Develop mode" +msgstr "개발자 모드" + +msgid "Skip AMS blacklist check" +msgstr "AMS 블랙리스트 확인 건너뛰기" + +msgid "Home page and daily tips" +msgstr "홈 화면 및 일일 팁" + +msgid "Show home page on startup" +msgstr "시작 시 홈 화면 표시" + +msgid "Sync settings" +msgstr "동기화 설정" + +msgid "User sync" +msgstr "사용자 동기화" + +msgid "Preset sync" +msgstr "프리셋 동기화" + +msgid "Preferences sync" +msgstr "환경설정 동기화" + +msgid "View control settings" +msgstr "컨트롤 설정 보기" + +msgid "Rotate of view" +msgstr "보기 회전" + +msgid "Move of view" +msgstr "팬 뷰" + +msgid "Zoom of view" +msgstr "줌 뷰" + +msgid "Other" +msgstr "기타" + +msgid "Mouse wheel reverses when zooming" +msgstr "확대/축소 시 역방향 스크롤" + +msgid "Enable SSL(MQTT)" +msgstr "SSL(MQTT) 활성화" + +msgid "Enable SSL(FTP)" +msgstr "SSL(FTP) 활성화" + +msgid "Internal developer mode" +msgstr "내부 개발자 모드" + +msgid "Log Level" +msgstr "Log Level" + +msgid "fatal" +msgstr "fatal" + +msgid "error" +msgstr "error" + +msgid "warning" +msgstr "warning" + +msgid "info" +msgstr "info" + +msgid "debug" +msgstr "debug" + +msgid "trace" +msgstr "trace" + +msgid "Host Setting" +msgstr "호스트 설정" + +msgid "DEV host: api-dev.bambu-lab.com/v1" +msgstr "개발자 호스트: api-dev.bambu-lab.com/v1" + +msgid "QA host: api-qa.bambu-lab.com/v1" +msgstr "QA 호스트: api-qa.bambu-lab.com/v1" + +msgid "PRE host: api-pre.bambu-lab.com/v1" +msgstr "PRE 호스트: api-pre.bambu-lab.com/v1" + +msgid "Product host" +msgstr "제품 호스트" + +msgid "debug save button" +msgstr "디버그 저장 버튼" + +msgid "save debug settings" +msgstr "디버그 설정 저장" + +msgid "DEBUG settings have saved successfully!" +msgstr "디버그 설정이 성공적으로 저장되었습니다!" + +msgid "Switch cloud environment, Please login again!" +msgstr "클라우드 환경이 전환되었습니다. 다시 로그인하세요!" + +msgid "System presets" +msgstr "시스템 프리셋" + +msgid "User presets" +msgstr "사용자 프리셋" + +msgid "Incompatible presets" +msgstr "호환되지 않는 프리셋" + +msgid "AMS filaments" +msgstr "AMS 필라멘트" + +msgid "Click to pick filament color" +msgstr "클릭하여 필라멘트 색상 선택" + +msgid "Please choose the filament colour" +msgstr "필라멘트 색상을 선택하세요" + +msgid "Add/Remove presets" +msgstr "프리셋 추가/제거" + +msgid "Edit preset" +msgstr "프리셋 수정" + +msgid "Project-inside presets" +msgstr "프로젝트 내부 프리셋" + +msgid "Add/Remove filaments" +msgstr "필라멘트 추가/제거" + +msgid "Add/Remove materials" +msgstr "재료 추가/제거" + +msgid "Add/Remove printers" +msgstr "프린터 추가/제거" + +msgid "Incompatible" +msgstr "호환되지 않음" + +msgid "The selected preset is null!" +msgstr "" + +msgid "Same as Global Print Sequence" +msgstr "글로벌 출력 시퀀스와 동일" + +msgid "Print sequence" +msgstr "출력 순서" + +msgid "Customize" +msgstr "" + +msgid "First layer filament sequence" +msgstr "" + +msgid "Same as Global Plate Type" +msgstr "글로벌 플레이트 타입과 동일" + +msgid "Same as Global Bed Type" +msgstr "글로벌 플레이트 타입과 동일" + +msgid "By Layer" +msgstr "레이어별" + +msgid "By Object" +msgstr "객체별" + +msgid "Plate name" +msgstr "플레이트 이름" + +msgid "Accept" +msgstr "동의" + +msgid "Log Out" +msgstr "로그아웃" + +msgid "Slice all plate to obtain time and filament estimation" +msgstr "" +"예상 출력시간 및 필라멘트 값을 얻기 위해 모든 플레이트를 슬라이스합니다." + +msgid "Packing project data into 3mf file" +msgstr "프로젝트 데이터를 3mf 파일로 압축" + +msgid "Uploading 3mf" +msgstr "3mf 업로드" + +msgid "Jump to model publish web page" +msgstr "모델 게시 웹 페이지로 이동" + +msgid "Note: The preparation may takes several minutes. Please be patiant." +msgstr "참고: 준비하는 데 몇 분 정도 걸릴 수 있습니다. 기다려주십시오." + +msgid "Publish" +msgstr "게시" + +msgid "Publish was cancelled" +msgstr "게시가 취소되었습니다." + +msgid "Slicing Plate 1" +msgstr "슬라이싱 플레이트 1" + +msgid "Packing data to 3mf" +msgstr "데이터를 3mf로 압축" + +msgid "Jump to webpage" +msgstr "웹페이지로 이동" + +#, c-format, boost-format +msgid "Save %s as" +msgstr "%s를 다른 이름으로 저장" + +msgid "User Preset" +msgstr "사용자 프리셋" + +msgid "Project Inside Preset" +msgstr "프로젝트 내부 프리셋" + +msgid "Name is invalid;" +msgstr "잘못된 이름입니다;" + +msgid "illegal characters:" +msgstr "잘못된 문자:" + +msgid "illegal suffix:" +msgstr "잘못된 접미사:" + +msgid "Name is unavailable." +msgstr "사용할 수 없는 이름입니다." + +msgid "Overwrite a system profile is not allowed" +msgstr "시스템 프로필을 덮어쓰는 것은 허용되지 않습니다." + +#, boost-format +msgid "Preset \"%1%\" already exists." +msgstr "프리셋 \"%1%\"이(가) 이미 있습니다." + +#, boost-format +msgid "Preset \"%1%\" already exists and is incompatible with current printer." +msgstr "프리셋 \"%1%\"이(가) 이미 존재하며 현재 프린터와 호환되지 않습니다." + +msgid "Please note that saving action will replace this preset" +msgstr "저장하면 현재 프리셋을 덮어쓰게 된다는 점에 유의하세요." + +msgid "The name is not allowed to be empty." +msgstr "이름 필드는 비워 둘 수 없습니다." + +msgid "The name is not allowed to start with space character." +msgstr "이름은 공백으로 시작할 수 없습니다." + +msgid "The name is not allowed to end with space character." +msgstr "이름은 공백으로 끝날 수 없습니다." + +msgid "The name cannot be the same as a preset alias name." +msgstr "이름은 미리 설정된 별칭 이름과 같을 수 없습니다." + +msgid "Save preset" +msgstr "프리셋 저장" + +msgctxt "PresetName" +msgid "Copy" +msgstr "복사" + +#, boost-format +msgid "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "\"%1%\" 프린터가 프리셋 \"%2%\"로 선택되었습니다." + +#, boost-format +msgid "Please choose an action with \"%1%\" preset after saving." +msgstr "저장 후 \"%1%\" 프리셋으로 작업을 선택하세요." + +#, boost-format +msgid "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "\"%1%\"의 경우 \"%2%\"를 \"%3%\"로 변경합니다. " + +#, boost-format +msgid "For \"%1%\", add \"%2%\" as a new preset" +msgstr "\"%1%\"의 경우 \"%2%\"를 새 프리셋으로 추가합니다." + +#, boost-format +msgid "Simply switch to \"%1%\"" +msgstr "\"%1%\"로 전환하기만 하면 됩니다." + +msgid "Task canceled" +msgstr "작업 취소됨" + +msgid "(LAN)" +msgstr "(LAN)" + +msgid "My Device" +msgstr "내 장치" + +msgid "Other Device" +msgstr "기타 장치" + +msgid "Online" +msgstr "온라인" + +msgid "Input access code" +msgstr "액세스 코드 입력" + +msgid "Can't find my devices?" +msgstr "장치를 찾을 수 없습니까?" + +msgid "Log out successful." +msgstr "로그아웃 성공" + +msgid "Offline" +msgstr "오프라인" + +msgid "Busy" +msgstr "Busy" + +msgid "Bambu Cool Plate" +msgstr "Bambu Cool Plate" + +msgid "PLA Plate" +msgstr "PLA 플레이트" + +msgid "Bamabu Engineering Plate" +msgstr "Bambu Engineering Plate" + +msgid "Bamabu High Temperature Plate" +msgstr "Bambu High Temperature Plate" + +msgid "Send print job to" +msgstr "출력 작업 보내기" + +msgid "Refresh" +msgstr "새로고침" + +msgid "Bed Leveling" +msgstr "베드 레벨링" + +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "프린터에 연결할 수 없습니다" + +msgid "send completed" +msgstr "보내기 완료" + +msgid "Error code" +msgstr "오류 코드" + +msgid "Check the status of current system services" +msgstr "현재 시스템 서비스 상태 확인" + +msgid "Printer local connection failed, please try again." +msgstr "프린터 로컬 연결에 실패했습니다. 다시 시도하십시오." + +msgid "No login account, only printers in LAN mode are displayed" +msgstr "로그인 계정 없음, LAN 모드의 프린터만 표시됨" + +msgid "Connecting to server" +msgstr "서버에 연결 중" + +msgid "Synchronizing device information" +msgstr "장치 정보 동기화" + +msgid "Synchronizing device information time out" +msgstr "장치 정보 동기화 시간이 초과되었습니다." + +msgid "Cannot send the print job when the printer is updating firmware" +msgstr "프린터에서 펌웨어를 업데이트하는 동안 출력 작업을 보낼 수 없습니다." + +msgid "" +"The printer is executing instructions. Please restart printing after it ends" +msgstr "프린터가 명령 실행중입니다. 종료 후 다시 출력을 시작하세요." + +msgid "The printer is busy on other print job" +msgstr "프린터가 다른 출력 작업에 사용중입니다." + +#, c-format, 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 슬롯 할당을 지원하도록 프린터 펌" +"웨어를 업데이트하십시오." + +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "" +"필라멘트가 AMS 슬롯 수를 초과합니다. AMS 슬롯 할당을 지원하도록 프린터 펌웨어" +"를 업데이트하십시오." + +msgid "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" +msgstr "" +"AMS 슬롯 매핑에 대한 필라멘트가 설정되었습니다. 위의 필라멘트를 클릭하여 매" +"핑 AMS 슬롯을 변경할 수 있습니다." + +msgid "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" +msgstr "" +"출력 작업을 보내기 전에 위의 각 필라멘트를 클릭하여 매핑 AMS 슬롯을 지정하십" +"시오." + +#, c-format, 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 슬롯 할당을 지" +"원하도록 프린터 펌웨어를 업데이트하십시오." + +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"필라멘트가 AMS 슬롯의 필라멘트와 일치하지 않습니다. AMS 슬롯 할당을 지원하도" +"록 프린터 펌웨어를 업데이트하십시오." + +msgid "" +"The printer firmware only supports sequential mapping of filament => AMS " +"slot." +msgstr "프린터 펌웨어는 필라멘트 => AMS 슬롯의 순차 매핑만 지원합니다." + +msgid "An SD card needs to be inserted before printing." +msgstr "출력 전에 MicroSD 카드를 삽입해야 합니다." + +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + +msgid "An SD card needs to be inserted to record timelapse." +msgstr "타임랩스를 녹화하려면 MicroSD 카드를 삽입해야 합니다." + +msgid "" +"Cannot send the print job to a printer whose firmware is required to get " +"updated." +msgstr "펌웨어를 업데이트해야 하는 프린터로 출력 작업을 보낼 수 없습니다." + +msgid "Cannot send the print job for empty plate" +msgstr "빈 플레이트에 대한 출력 작업을 보낼 수 없습니다." + +msgid "This printer does not support printing all plates" +msgstr "이 프린터는 모든 플레이트 출력을 지원하지 않습니다." + +msgid "Errors" +msgstr "오류" + +msgid "Please check the following:" +msgstr "다음을 확인하십시오." + +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를 생성할 때 선택한 프린터 유형이 현재 선택한 프린터와 일치하지 않습니" +"다. 슬라이싱에 동일한 프린터 유형을 사용하는 것이 좋습니다." + +#, c-format, boost-format +msgid "%s is not supported by AMS." +msgstr "%s은 (는) AMS에서 지원되지 않습니다." + +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 매핑에는 알려지지 않은 필라멘트가 몇 개 있습니다. 필수 필라멘트인지 확인" +"하십시오. 문제가 없으면 “확인”을 클릭하여 출력을 시작하십시오." + +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "출력을 계속 진행하려면 확인 버튼을 클릭하십시오." + +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + +msgid "Preparing print job" +msgstr "출력 작업 준비 중" + +msgid "Abnormal print file data. Please slice again" +msgstr "비정상적인 출력 파일입니다. 다시 슬라이스하세요." + +msgid "The name length exceeds the limit." +msgstr "이름 길이가 제한을 초과합니다." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + +msgid "Modifying the device name" +msgstr "장치 이름 수정" + +msgid "Send to Printer SD card" +msgstr "프린터 MicroSD 카드로 보내기" + +msgid "Cannot send the print task when the upgrade is in progress" +msgstr "업데이트 진행 중에는 출력 작업을 보낼 수 없습니다." + +msgid "An SD card needs to be inserted before send to printer SD card." +msgstr "프린터로 전송하기 전에 MicroSD 카드를 삽입해야 합니다." + +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "프린터는 Bambu Studio와 동일한 LAN에 있어야 합니다." + +msgid "The printer does not support sending to printer SD card." +msgstr "프린터는 프린터 microSD 카드로 전송을 지원하지 않습니다." + +msgid "Failed to create socket" +msgstr "소켓 생성 실패" + +msgid "Failed to connect socket" +msgstr "소켓 연결 실패" + +msgid "Failed to publish login request" +msgstr "로그인 요청 게시에 실패했습니다." + +msgid "Get ticket from device timeout" +msgstr "기기에서 티켓 가져오는데 시간 초과" + +msgid "Get ticket from server timeout" +msgstr "서버에서 티켓 가져오는데 시간 초과" + +msgid "Failed to post ticket to server" +msgstr "서버에 티켓게시 실패" + +msgid "Failed to parse login report reason" +msgstr "로그인 보고서의 원인을 해석하는 데 실패" + +msgid "Receive login report timeout" +msgstr "로그인 보고서 수신 시간 초과" + +msgid "Unknown Failure" +msgstr "알 수 없는 실패" + +msgid "Log in printer" +msgstr "프린터 로그인" + +msgid "Would you like to log in this printer with current account?" +msgstr "현재 계정으로 이 프린터에 로그인하시겠습니까?" + +msgid "Check the reason" +msgstr "이유 확인" + +msgid "Read and accept" +msgstr "읽고 수락" + +msgid "Terms and Conditions" +msgstr "이용약관" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"Bambu Lab 기기를 구매해 주셔서 감사합니다. Bambu Lab 기기를 사용하기 전에 이" +"용약관을 읽어주시기 바랍니다. Bambu Lab 기기 사용에 동의하기 위해 클릭하면 개" +"인정보 보호정책 및 이용약관(이하 통칭하여 \"약관\")을 준수하는 데 동의하는 것" +"입니다. Bambu Lab 개인정보 처리방침을 준수하지 않거나 동의하지 않는 경우, " +"Bambu Lab 장비 및 서비스를 사용하지 마십시오." + +msgid "and" +msgstr "그리고" + +msgid "Privacy Policy" +msgstr "개인정보처리방침" + +msgid "We ask for your help to improve everyone's printer" +msgstr "모든 사람의 프린터 개선을 위해 여러분의 도움을 요청합니다." + +msgid "Statement about User Experience Improvement Program" +msgstr "사용자 경험 개선 프로그램에 대한 설명" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"3D 프린팅 커뮤니티에서는 서로의 성공과 실패로 부터 학습하여 각자의 슬라이싱 " +"매개변수와 설정을 조정합니다. %s는 이와 동일한 원칙을 따르며 머신 러닝을 사용" +"하여 사용자의 방대한 출력 성공과 실패로부터 성능을 개선합니다. 우리는 실제 데" +"이터를 통하여 %s가 더 똑똑해지도록 훈련시킵니다. 동의하신다면 이 서비스는 오" +"류 로그와 사용 로그를 포함할 수 있는 정보에 접근할 것입니다. 당사는 개인이 직" +"접 또는 간접적으로 식별될 수 있는 개인 데이터, 예를 들어 이름, 주소, 결제 정" +"보 또는 전화번호를 포함하여 어떤 개인 데이터도 수집하지 않습니다. 이 서비스" +"를 활성화하면 이 약관과 개인정보 보호정책에 대한 설명에 동의하는 것입니다." + +msgid "Statement on User Experience Improvement Plan" +msgstr "사용자 경험 개선 계획에 대한 성명서" + +msgid "Log in successful." +msgstr "로그인 성공" + +msgid "Log out printer" +msgstr "프린터 로그아웃" + +msgid "Would you like to log out the printer?" +msgstr "프린터에서 로그아웃하시겠습니까?" + +msgid "Please log in first." +msgstr "먼저 로그인하세요." + +msgid "There was a problem connecting to the printer. Please try again." +msgstr "프린터 연결 중 문제가 발생했습니다. 다시 시도해 주세요." + +msgid "Failed to log out." +msgstr "로그아웃 실패" + +#. TRN "Save current Settings" +#, c-format, boost-format +msgid "Save current %s" +msgstr "현재 %s 저장" + +msgid "Delete this preset" +msgstr "이 프리셋 삭제" + +msgid "Search in preset" +msgstr "프리셋에서 검색" + +msgid "Click to reset all settings to the last saved preset." +msgstr "모든 설정을 마지막으로 저장한 프리셋으로 재설정하려면 클릭합니다." + +msgid "" +"Prime tower is required for smooth timeplase. There may be flaws on the " +"model without prime tower. Are you sure you want to disable prime tower?" +msgstr "" +"smooth 타임랩스 모드를 위해서는 프라임 타워가 필요합니다. 프라임 타워가 없는 " +"모델에는 결함이 있을 수 있습니다. 프라임 타워를 비활성화하시겠습니까?" + +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 "" +"smooth 타임랩스 모드를 위해서는 프라임 타워가 필요합니다. 프라임 타워가 없는 " +"모델에는 결함이 있을 수 있습니다. 프라임 타워를 활성화하시겠습니까?" + +msgid "" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" +"We recommend using it with: 0 interface layers, 0 top distance, 2 walls." +msgstr "" +"부피는 작고 강도는 약한 실험적인 스타일의 '트리 슬림'을 추가했습니다.\n" +"다음 조건에서 사용하는 것을 권장합니다: 인터페이스 레이어 0, 상단 거리 0, 벽 " +"2." + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" +"이 설정을 자동으로 변경하시겠습니까?\n" +"예 - 이 설정으로 자동으로 변경합니다.\n" +"아니요 - 이 설정으로 변경하지 않습니다." + +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." +msgstr "" +"“Tree Strong” 및 “Tree Hybrid” 스타일의 경우 다음 설정을 권장합니다. 최소 2개" +"의 인터페이스 레이어, 최소 0.1mm 상단 z 거리 또는 서포트 전용필라멘트 사용" + +msgid "" +"When using support material for the support interface, We recommend the " +"following settings:\n" +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" +msgstr "" +"서포트 인터페이스에 서포트 재질을 사용할 때는 다음 설정을 권장합니다:\n" +"상단 z 거리 0, 인터페이스 간격 0, 동심 패턴 및 독립 서포트 레이어 높이 비활성" +"화" + +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" +"빌드 플레이트의 빈 위치를 마우스 오른쪽 버튼으로 클릭하고 “기본 모델링 추가”-" +">\"타임랩스 와이프 타워\"를 선택합니다." + +msgid "Line width" +msgstr "선 폭" + +msgid "Seam" +msgstr "재봉선" + +msgid "Precision" +msgstr "정밀도" + +msgid "Wall generator" +msgstr "벽 생성기" + +msgid "Walls" +msgstr "벽" + +msgid "Top/bottom shells" +msgstr "상/하단" + +msgid "Sparse infill" +msgstr "내부채움" + +msgid "Initial layer speed" +msgstr "첫 레이어 속도" + +msgid "Other layers speed" +msgstr "출력 속도" + +msgid "Overhang speed" +msgstr "오버행 속도" + +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" +msgstr "" +"이것은 다양한 오버행 각도에 따른 속도입니다. 오버행 각도는 선 폭의 백분율로 " +"표시됩니다. 속도 0은 오버행 각도에 따라 감속하지 않고 벽 속도 그대로가 사용됨" +"을 의미합니다." + +msgid "Travel speed" +msgstr "이동 속도" + +msgid "Acceleration" +msgstr "가속도" + +msgid "Jerk(XY)" +msgstr "" + +msgid "Raft" +msgstr "라프트" + +msgid "Support filament" +msgstr "서포트 필라멘트" + +msgid "Prime tower" +msgstr "프라임 타워" + +msgid "Special mode" +msgstr "특수 기능" + +msgid "G-code output" +msgstr "G 코드 출력" + +msgid "Post-processing scripts" +msgstr "후처리 스크립트" + +msgid "Frequent" +msgstr "Frequent" + +#, c-format, boost-format +msgid "" +"Following line %s contains reserved keywords.\n" +"Please remove it, or will beat G-code visualization and printing time " +"estimation." +msgid_plural "" +"Following lines %s contain reserved keywords.\n" +"Please remove them, or will beat G-code visualization and printing time " +"estimation." +msgstr[0] "" +"다음 줄 %s에 예약 키워드가 포함되어 있습니다.\n" +"제거하지 않으면 G코드 시각화 및 인쇄 시간 예측이 중단됩니다." + +msgid "Reserved keywords found" +msgstr "예약된 키워드가 발견되었습니다." + +msgid "Setting Overrides" +msgstr "설정 재정의" + +msgid "Retraction" +msgstr "리트렉션" + +msgid "Basic information" +msgstr "기본 정보" + +msgid "Recommended nozzle temperature" +msgstr "권장 노즐 온도" + +msgid "Recommended nozzle temperature range of this filament. 0 means no set" +msgstr "" +"이 필라멘트의 권장 노즐 온도 범위입니다. 0은 설정되지 않았음을 의미합니다." + +msgid "Recommended temperature range" +msgstr "권장 온도 범위" + +msgid "Print temperature" +msgstr "출력 온도" + +msgid "Nozzle" +msgstr "노즐" + +msgid "Nozzle temperature when printing" +msgstr "출력 시 노즐 온도" + +msgid "Cool Plate / PLA Plate" +msgstr "쿨 플레이트 / PLA 플레이트" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate" +msgstr "" +"Cool plate 를 사용할 때의 베드 온도입니다. 값이 0이면 필라멘트가 Cool Plate에" +"서의 출력을 지원하지 않음을 의미합니다." + +msgid "Engineering Plate" +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이면 필라멘트가 엔지" +"니어링 플레이트에서의 출력을 지원하지 않는다는 의미입니다." + +msgid "High Temp Plate" +msgstr "High Temp Plate" + +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 "" +"High temperature plate 를 사용할 때의 베드 온도입니다. 값이 0이면 필라멘트가 " +"High temperature Plate에서의 출력을 지원하지 않음을 의미합니다." + +msgid "Textured PEI Plate" +msgstr "Textured 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 "" +"Textured PEI 플레이트가 설치된 경우 베드 온도. 0은 Textured PEI 플레이트에서 " +"필라멘트가 지원되지 않음을 의미합니다." + +msgid "Volumetric speed limitation" +msgstr "체적 속도 제한" + +msgid "Cooling" +msgstr "냉각" + +msgid "Cooling for specific layer" +msgstr "특정 레이어에 대한 냉각" + +msgid "Part cooling fan" +msgstr "부품 냉각 팬" + +msgid "Min fan speed threshold" +msgstr "최소 팬 속도 임계값" + +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 "최대 팬 속도 임계값" + +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"예상 레이어 시간이 임계값보다 짧을 경우 부품 냉각 팬이 최대 속도로 작동합니" +"다." + +msgid "Auxiliary part cooling fan" +msgstr "보조 부품 냉각 팬" + +msgid "Filament start G-code" +msgstr "필라멘트 시작 G 코드" + +msgid "Filament end G-code" +msgstr "필라멘트 종료 G 코드" + +msgid "Printable space" +msgstr "출력 가능 공간" + +msgid "Extruder Clearance" +msgstr "압출기 클리어런스" + +msgid "Accessory" +msgstr "액세서리" + +msgid "Machine gcode" +msgstr "장치 G 코드" + +msgid "Machine start G-code" +msgstr "장치 시작 G 코드" + +msgid "Machine end G-code" +msgstr "장치 종료 G 코드" + +msgid "Before layer change G-code" +msgstr "레이어 변경 전 G 코드" + +msgid "Layer change G-code" +msgstr "레이어 변경 G 코드" + +msgid "Change filament G-code" +msgstr "필라멘트 변경 G 코드" + +msgid "Pause G-code" +msgstr "일시정지 G 코드" + +msgid "Template Custom G-code" +msgstr "커스텀 G 코드 템플릿" + +msgid "Motion ability" +msgstr "동작 능력" + +msgid "Normal" +msgstr "일반" + +msgid "Speed limitation" +msgstr "속도 제한" + +msgid "Acceleration limitation" +msgstr "가속 제한" + +msgid "Jerk limitation" +msgstr "저크 제한" + +msgid "Layer height limits" +msgstr "레이어 높이 제한" + +msgid "Retraction when switching material" +msgstr "필라멘트 전환시 리트렉션" + +msgid "Detached" +msgstr "분리됨" + +msgid "Following preset will be deleted too." +msgid_plural "Following presets will be deleted too." +msgstr[0] "다음 프리셋도 삭제됩니다." + +#, boost-format +msgid "Are you sure to %1% the selected preset?" +msgstr "선택한 프리셋의 %1% 를 정말로 원하십니까?" + +#. TRN Remove/Delete +#, boost-format +msgid "%1% Preset" +msgstr "%1% 프리셋" + +msgid "All" +msgstr "전체" + +msgid "Set" +msgstr "설정" + +msgid "Click to reset current value and attach to the global value." +msgstr "현재 값을 재설정하고 글로벌 설정값에 연결하려면 클릭합니다." + +msgid "Click to drop current modify and reset to saved value." +msgstr "현재 수정 사항을 삭제하고 저장된 값으로 재설정하려면 클릭하십시오." + +msgid "Process Settings" +msgstr "프로세스 설정" + +msgid "Undef" +msgstr "정의되지 않음" + +msgid "Unsaved Changes" +msgstr "저장 안 된 변경사항" + +msgid "Discard or Keep changes" +msgstr "변경사항 삭제 또는 유지" + +msgid "Old Value" +msgstr "이전 값" + +msgid "New Value" +msgstr "새 값" + +msgid "Transfer" +msgstr "전송" + +msgid "Don't save" +msgstr "저장 안함" + +msgid "Discard" +msgstr "삭제" + +msgid "Click the right mouse button to display the full text." +msgstr "마우스 오른쪽 버튼을 클릭하면 전체 텍스트가 표시됩니다." + +msgid "All changes will not be saved" +msgstr "변경 사항은 저장되지 않습니다." + +msgid "All changes will be discarded." +msgstr "모든 변경 내용이 삭제 됩니다." + +msgid "Save the selected options." +msgstr "선택한 옵션을 저장합니다." + +msgid "Keep the selected options." +msgstr "선택한 옵션을 유지합니다." + +msgid "Transfer the selected options to the newly selected preset." +msgstr "선택한 옵션을 새로 선택한 프리셋으로 전송합니다." + +#, boost-format +msgid "" +"Save the selected options to preset \n" +"\"%1%\"." +msgstr "" +"선택한 옵션을 프리셋에 저장 \n" +"“%1%”." + +#, boost-format +msgid "" +"Transfer the selected options to the newly selected preset \n" +"\"%1%\"." +msgstr "" +"선택한 옵션을 새로 선택한 프리셋으로 전송합니다.\n" +"\"%1%\"." + +#, boost-format +msgid "Preset \"%1%\" contains the following unsaved changes:" +msgstr "프리셋 “%1% “에는 다음과 같은 저장되지 않은 변경 사항이 포함됩니다." + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"프리셋 “%1%“는 새 프린터 프로파일과 호환되지 않으며 다음과 같은 저장되지 않" +"은 변경 사항이 포함되어 있습니다." + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"프리셋 “%1%“는 새 프로세스 프로파일과 호환되지 않으며 다음과 같은 저장되지 않" +"은 변경 사항을 포함합니다:" + +#, 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%\"의 일부 설정을 변경했습니다.\n" +"사전 설정을 전환한 후 변경된 설정(새 값)을 유지하시겠습니까?" + +msgid "" +"You have changed some preset settings. \n" +"Would you like to keep these changed settings (new value) after switching " +"preset?" +msgstr "" +"일부 프리셋 설정을 변경했습니다. \n" +"프리셋을 전환한 후에도 변경된 설정(새 값)을 유지하시겠습니까?" + +msgid "Extruders count" +msgstr "압출기 수" + +msgid "General" +msgstr "일반" + +msgid "Capabilities" +msgstr "기능" + +msgid "Select presets to compare" +msgstr "비교할 프리셋 선택" + +msgid "Show all presets (including incompatible)" +msgstr "모든 프리셋 보기 (호환되지 않는 프리셋 포함)" + +msgid "Add File" +msgstr "파일 추가" + +msgid "Set as cover" +msgstr "커버로 설정" + +msgid "Cover" +msgstr "커버" + +#, boost-format +msgid "The name \"%1%\" already exists." +msgstr "\"%1%\"이라는 이름이 이미 존재합니다." + +msgid "Basic Info" +msgstr "기본 정보" + +msgid "Pictures" +msgstr "사진" + +msgid "Bill of Materials" +msgstr "BOM" + +msgid "Assembly Guide" +msgstr "조립 가이드" + +msgid "Author" +msgstr "작성자" + +msgid "Model Name" +msgstr "모델명" + +#, c-format, boost-format +msgid "%s Update" +msgstr "%s 업데이트" + +msgid "A new version is available" +msgstr "새 버전을 사용할 수 있습니다." + +msgid "Configuration update" +msgstr "설정 업데이트" + +msgid "A new configuration package available, Do you want to install it?" +msgstr "새 설정 패키지를 사용할 수 있습니다. 설치하시겠습니까?" + +msgid "Description:" +msgstr "설명:" + +msgid "Configuration incompatible" +msgstr "호환되지 않는 설정" + +msgid "the configuration package is incompatible with current application." +msgstr "설정 패키지가 현재 응용 프로그램과 호환되지 않습니다." + +#, c-format, 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은 (는) 애플리케이션을 시작할 수 있도록 설정 패키지를 업데이트합니다." + +#, c-format, boost-format +msgid "Exit %s" +msgstr "%s 종료" + +msgid "the Configuration package is incompatible with current APP." +msgstr "설정 패키지는 Bambu Studio의 현재 버전과 호환되지 않습니다." + +msgid "Configuration updates" +msgstr "설정 업데이트" + +msgid "No updates available." +msgstr "사용 가능한 업데이트가 없습니다." + +msgid "The configuration is up to date." +msgstr "설정이 최신 상태입니다." + +msgid "Auto-Calc" +msgstr "자동 계산" + +msgid "Flushing volumes for filament change" +msgstr "필라멘트 교체를 위한 짜내는 양" + +msgid "Multiplier" +msgstr "승수" + +msgid "Flushing volume (mm³) for each filament pair." +msgstr "각 필라멘트 쌍에 대한 짜내기 양(mm³)." + +#, c-format, boost-format +msgid "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "제안: [%d, %d] 범위의 짜내기 볼륨" + +#, c-format, boost-format +msgid "The multiplier should be in range [%.2f, %.2f]." +msgstr "승수는 [%.2f, %.2f] 범위에 있어야 합니다." + +msgid "unloaded" +msgstr "언로드됨" + +msgid "loaded" +msgstr "로드됨" + +msgid "Filament #" +msgstr "필라멘트 #" + +msgid "From" +msgstr "에서" + +msgid "To" +msgstr "까지" + +msgid "Login" +msgstr "로그인" + +msgid "The configuration package is changed in previous Config Guide" +msgstr "설정 패키지는 이전 설정 가이드에서 변경되었습니다." + +msgid "Configuration package changed" +msgstr "설정 패키지가 변경됨" + +msgid "Toolbar" +msgstr "툴바" + +msgid "Objects list" +msgstr "객체 목록" + +msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" +msgstr "STL/STEP/3MF/OBJ/AMF 파일에서 형상 데이터를 가져옵니다." + +msgid "⌘+Shift+G" +msgstr "⌘+Shift+G" + +msgid "Ctrl+Shift+G" +msgstr "Ctrl+Shift+G" + +msgid "Copy to clipboard" +msgstr "클립보드에 복사" + +msgid "Paste from clipboard" +msgstr "클립보드에서 붙여넣기" + +msgid "Show/Hide 3Dconnexion devices settings dialog" +msgstr "3DConnexion 장치 설정 대화상자 표시/숨기기" + +msgid "Show keyboard shortcuts list" +msgstr "키보드 단축키 목록 표시" + +msgid "Global shortcuts" +msgstr "통합 단축키" + +msgid "Rotate View" +msgstr "보기 회전" + +msgid "Pan View" +msgstr "보기 이동" + +msgid "Mouse wheel" +msgstr "마우스 휠" + +msgid "Zoom View" +msgstr "줌 뷰" + +msgid "Shift+A" +msgstr "Shift+A" + +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." +msgstr "" +"선택한 객체 또는 모든 객체의 방향을 자동으로 지정합니다. 선택된 객체가 있는 " +"경우 선택된 객체의 방향만 지정합니다. 그렇지 않으면 현재 플레이트에 있는 모" +"든 객체의 방향을 지정합니다." + +msgid "Shift+Tab" +msgstr "Shift+Tab" + +msgid "Collapse/Expand the sidebar" +msgstr "사이드바 접기/펼치기" + +msgid "⌘+Any arrow" +msgstr "⌘+화살표" + +msgid "Movement in camera space" +msgstr "카메라 공간에서의 이동" + +msgid "⌥+Left mouse button" +msgstr "⌥+마우스 왼쪽 버튼" + +msgid "Select a part" +msgstr "부품 선택" + +msgid "⌘+Left mouse button" +msgstr "⌘+마우스 왼쪽 버튼" + +msgid "Select multiple objects" +msgstr "여러 객체 선택" + +msgid "Ctrl+Any arrow" +msgstr "Ctrl+화살표" + +msgid "Alt+Left mouse button" +msgstr "Alt+마우스 왼쪽 버튼" + +msgid "Ctrl+Left mouse button" +msgstr "Ctrl+마우스 왼쪽 버튼" + +msgid "Shift+Left mouse button" +msgstr "Shift+마우스 왼쪽 버튼" + +msgid "Select objects by rectangle" +msgstr "직사각형으로 객체 선택" + +msgid "Arrow Up" +msgstr "화살표 위" + +msgid "Move selection 10 mm in positive Y direction" +msgstr "선택 항목을 양의 Y 방향으로 10mm 이동" + +msgid "Arrow Down" +msgstr "화살표 아래" + +msgid "Move selection 10 mm in negative Y direction" +msgstr "선택 항목을 음의 Y 방향으로 10mm 이동" + +msgid "Arrow Left" +msgstr "화살표 왼쪽" + +msgid "Move selection 10 mm in negative X direction" +msgstr "선택 항목을 음의 X 방향으로 10mm 이동" + +msgid "Arrow Right" +msgstr "화살표 오른쪽" + +msgid "Move selection 10 mm in positive X direction" +msgstr "선택 항목을 양의 X 방향으로 10mm 이동" + +msgid "Shift+Any arrow" +msgstr "Shift+화살표" + +msgid "Movement step set to 1 mm" +msgstr "이동 간격을 1mm로 설정" + +msgid "Esc" +msgstr "Esc" + +msgid "keyboard 1-9: set filament for object/part" +msgstr "키보드 1-9: 객체/부품에 대한 필라멘트 설정" + +msgid "Camera view - Default" +msgstr "카메라 뷰 - 기본" + +msgid "Camera view - Top" +msgstr "카메라 뷰 - 상단" + +msgid "Camera view - Bottom" +msgstr "카메라 뷰 - 하단" + +msgid "Camera view - Front" +msgstr "카메라 뷰 - 전면" + +msgid "Camera view - Behind" +msgstr "카메라 뷰 - 후면" + +msgid "Camera Angle - Left side" +msgstr "카메라 각도 - 왼쪽" + +msgid "Camera Angle - Right side" +msgstr "카메라 각도 - 오른쪽" + +msgid "Select all objects" +msgstr "모든 객체 선택" + +msgid "Gizmo move" +msgstr "기즈모 이동" + +msgid "Gizmo scale" +msgstr "기즈모 스케일" + +msgid "Gizmo rotate" +msgstr "기즈모 회전" + +msgid "Gizmo cut" +msgstr "기즈모 컷" + +msgid "Gizmo Place face on bed" +msgstr "기즈모 베드에 면으로 놓기" + +msgid "Gizmo SLA support points" +msgstr "기즈모 SLA 서포트 포인트" + +msgid "Gizmo FDM paint-on seam" +msgstr "기즈모 FDM 페인트온 재봉선" + +msgid "Plater" +msgstr "Plater" + +msgid "Move: press to snap by 1mm" +msgstr "이동: 누르면 1mm 간격으로 이동" + +msgid "⌘+Mouse wheel" +msgstr "⌘+마우스 휠" + +msgid "Support/Color Painting: adjust pen radius" +msgstr "서포트/컬러 페인팅: 펜 크기 조정" + +msgid "⌥+Mouse wheel" +msgstr "⌥+마우스 휠" + +msgid "Support/Color Painting: adjust section position" +msgstr "서로트/컬러 페인팅: 자르기 위치 조정" + +msgid "Ctrl+Mouse wheel" +msgstr "Ctrl+마우스 휠" + +msgid "Alt+Mouse wheel" +msgstr "Alt+마우스 휠" + +msgid "Gizmo" +msgstr "도구 아이콘" + +msgid "Set extruder number for the objects and parts" +msgstr "객체 및 부품에 대한 압출기 번호 설정" + +msgid "Delete objects, parts, modifiers " +msgstr "객체, 부품, 수정자 제거" + +msgid "Space" +msgstr "공간" + +msgid "Select the object/part and press space to change the name" +msgstr "객체/부품을 선택하고 스페이스 키를 눌러 이름을 변경합니다." + +msgid "Mouse click" +msgstr "마우스 클릭" + +msgid "Select the object/part and mouse click to change the name" +msgstr "객체/부품을 선택하고 마우스를 클릭하여 이름을 변경합니다." + +msgid "Objects List" +msgstr "객체 목록" + +msgid "Vertical slider - Move active thumb Up" +msgstr "수직 슬라이더 - 위로 이동" + +msgid "Vertical slider - Move active thumb Down" +msgstr "수직 슬라이더 - 아래로 이동" + +msgid "Horizontal slider - Move active thumb Left" +msgstr "수평 슬라이더 - 왼쪽으로 이동" + +msgid "Horizontal slider - Move active thumb Right" +msgstr "수평 슬라이더 - 오른쪽으로 이동" + +msgid "On/Off one layer mode of the vertical slider" +msgstr "수직 슬라이더의 한 레이어 모드 켜기/끄기" + +msgid "Move slider 5x faster" +msgstr "슬라이더를 5배 빠르게 이동" + +msgid "Shift+Mouse wheel" +msgstr "Shift+마우스 휠" + +msgid "Release Note" +msgstr "릴리즈 노트" + +#, c-format, boost-format +msgid "version %s update information :" +msgstr "버전 %s 업데이트 정보:" + +msgid "Network plug-in update" +msgstr "네트워크 플러그인 업데이트" + +msgid "" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "" +"다음 번 Bambu Studio를 시작할 때 네트워크 플러그인을 업데이트하려면 확인을 클" +"릭합니다." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "새 네트워크 플러그인 (%s) 을 사용할 수 있습니다.설치하시겠습니까?" + +msgid "New version of Bambu Studio" +msgstr "뱀부 스튜디오의 새 버전" + +msgid "Don't remind me of this version again" +msgstr "이 버전에 대해 다시 상기시키지 않습니다." + +msgid "LAN Connection Failed (Sending print file)" +msgstr "LAN 연결 실패 (출력 파일 전송 중)" + +msgid "" +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." +msgstr "" +"1단계, Bambu Studio와 프린터가 동일한 인터넷 망에 연결되어 있는지 확인하십시" +"오." + +msgid "" +"Step 2, if the IP and Access Code below are different from the actual values " +"on your printer, please correct them." +msgstr "" +"2단계. 아래의 IP 및 액세스 코드가 프린터의 실제 값과 다른 경우 수정하십시오." + +msgid "IP" +msgstr "IP" + +msgid "Access Code" +msgstr "액세스 코드" + +msgid "Where to find your printer's IP and Access Code?" +msgstr "프린터의 IP 및 액세스 코드는 어디서 찾을 수 있습니까?" + +msgid "Error: IP or Access Code are not correct" +msgstr "오류: IP 또는 액세스 코드가 올바르지 않음" + +msgid "Model:" +msgstr "모델:" + +msgid "Serial:" +msgstr "일련 번호:" + +msgid "Version:" +msgstr "버전:" + +msgid "Update firmware" +msgstr "펌웨어 업데이트" + +msgid "Printing" +msgstr "출력중" + +msgid "Idle" +msgstr "대기중" + +msgid "Latest version" +msgstr "최신 버전" + +msgid "Updating" +msgstr "업데이트 중" + +msgid "Updating failed" +msgstr "업데이트 실패" + +msgid "Updating successful" +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분이 소요됩니다.프린터를 업데이트하" +"는 동안에는 전원을 끄지 마십시오." + +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 "" +"중요 업데이트가 감지되었으며 출력을 계속하려면 먼저 실행해야 합니다. 지금 업" +"데이트하시겠습니까? '펌웨어 업데이트'에서 나중에 업데이트할 수도 있습니다." + +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 the studio." +msgstr "" +"펌웨어 버전이 비정상입니다. 출력 전에 수리 및 업데이트가 필요합니다.지금 업데" +"이트하시겠습니까? 나중에 프린터에서 업데이트하거나 다음에 Bambu Studio를 시작" +"할 때 업데이트할 수도 있습니다." + +msgid "Extension Board" +msgstr "확장 보드" + +msgid "Saving objects into the 3mf failed." +msgstr "객체를 3mf에 저장하는 데 실패했습니다." + +msgid "Only Windows 10 is supported." +msgstr "Windows 10만 지원됩니다." + +msgid "Failed to initialize the WinRT library." +msgstr "WinRT 라이브러리를 초기화하지 못했습니다." + +msgid "Exporting objects" +msgstr "객체 내보내기" + +msgid "Failed loading objects." +msgstr "객체 불러오기에 실패했습니다." + +msgid "Repairing object by Windows service" +msgstr "Windows 서비스로 객체 복구" + +msgid "Repair failed." +msgstr "오류수정 실패" + +msgid "Loading repaired objects" +msgstr "복구된 객체 불러오기" + +msgid "Exporting 3mf file failed" +msgstr "3mf 파일 내보내기 실패" + +msgid "Import 3mf file failed" +msgstr "3mf 파일 가져오기 실패" + +msgid "Repaired 3mf file does not contain any object" +msgstr "복구된 3mf 파일에는 객체가 없습니다." + +msgid "Repaired 3mf file contains more than one object" +msgstr "복구된 3mf 파일에는 둘 이상의 객체가 있습니다." + +msgid "Repaired 3mf file does not contain any volume" +msgstr "복구된 3mf 파일에는 볼륨이 없습니다." + +msgid "Repaired 3mf file contains more than one volume" +msgstr "복구된 3mf 파일에는 둘 이상의 볼륨이 있습니다." + +msgid "Repair finished" +msgstr "오류수정 완료" + +msgid "Repair canceled" +msgstr "오류수정 취소됨" + +#, boost-format +msgid "Copying of file %1% to %2% failed: %3%" +msgstr "파일 %1%을(를) %2%(으)로 복사 실패: %3%" + +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "디렉토리 %1%을(를) %2%에 복사 실패: %3%" + +msgid "Need to check the unsaved changes before configuration updates." +msgstr "설정을 업데이트하기 전에 저장되지 않은 변경 사항을 확인하십시오." + +msgid "Configuration package updated to " +msgstr "설정 패키지가 다음과 같이 업데이트 되었습니다 " + +msgid "Open G-code file:" +msgstr "G 코드 파일 열기:" + +msgid "" +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." +msgstr "" +"다음 객체에는 초기 레이어가 비어 있어 출력할 수 없습니다. 바닥을 잘라내거나 " +"서포트를 활성화하십시오." + +#, boost-format +msgid "Object can't be printed for empty layer between %1% and %2%." +msgstr "%1% 와 %2% 사이에 빈 레이어가 있어 출력할 수 없습니다." + +#, 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 "이 크기에서는 객체의 일부가 너무 얇거나 메시 결함이 있을 수 있습니다." + +msgid "No object can be printed. Maybe too small" +msgstr "출력할 수 없습니다.너무 작기 때문일 수 있습니다." + +msgid "" +"Failed to generate gcode for invalid custom G-code.\n" +"\n" +msgstr "" +"잘못된 커스텀 G 코드로 인해 G 코드생성에 실패했습니다. \n" +"\n" + +msgid "Please check the custom G-code or use the default custom G-code." +msgstr "커스텀 G 코드를 확인하거나 기본 커스텀 G 코드를 사용하십시오." + +#, boost-format +msgid "Generating G-code: layer %1%" +msgstr "G 코드 생성 중: 레이어 %1%" + +msgid "Inner wall" +msgstr "내벽" + +msgid "Outer wall" +msgstr "외벽" + +msgid "Overhang wall" +msgstr "오버행 벽" + +msgid "Internal solid infill" +msgstr "내부면채움" + +msgid "Top surface" +msgstr "상단면" + +msgid "Bottom surface" +msgstr "하단면" + +msgid "Bridge" +msgstr "브릿지" + +msgid "Gap infill" +msgstr "갭 인필" + +msgid "Support interface" +msgstr "서포트 접촉면" + +msgid "Support transition" +msgstr "서포트 전환" + +msgid "Multiple" +msgstr "다중" + +#, boost-format +msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " +msgstr "선 폭 %1%를 계산하지 못했습니다. \"%2%\" 값을 가져올 수 없습니다. " + +msgid "undefined error" +msgstr "정의되지 않은 오류" + +msgid "too many files" +msgstr "파일이 너무 많음" + +msgid "file too large" +msgstr "파일이 너무 큼" + +msgid "unsupported method" +msgstr "지원되지 않는 방법" + +msgid "unsupported encryption" +msgstr "지원되지 않는 암호화" + +msgid "unsupported feature" +msgstr "지원되지 않는 기능" + +msgid "failed finding central directory" +msgstr "중앙 디렉터리를 찾지 못했습니다." + +msgid "not a ZIP archive" +msgstr "ZIP 아카이브가 아님" + +msgid "invalid header or corrupted" +msgstr "잘못된 헤더 또는 손상됨" + +msgid "unsupported multidisk" +msgstr "RAID에 저장하는 기능은 지원되지 않습니다." + +msgid "decompression failed" +msgstr "압축 해제 실패" + +msgid "compression failed" +msgstr "압축 실패" + +msgid "unexpected decompressed size" +msgstr "예상치 못한 압축 해제 크기" + +msgid "CRC check failed" +msgstr "CRC 검사 실패" + +msgid "unsupported central directory size" +msgstr "지원되지 않는 중앙 디렉토리 크기" + +msgid "allocation failed" +msgstr "할당 실패" + +msgid "file open failed" +msgstr "파일 열기 실패" + +msgid "file create failed" +msgstr "파일 생성 실패" + +msgid "file write failed" +msgstr "파일 쓰기 실패" + +msgid "file read failed" +msgstr "파일 읽기 실패" + +msgid "file close failed" +msgstr "파일 닫기 실패" + +msgid "file seek failed" +msgstr "파일 검색 실패" + +msgid "file stat failed" +msgstr "파일 통계 실패" + +msgid "invalid parameter" +msgstr "잘못된 매개변수" + +msgid "invalid filename" +msgstr "잘못된 파일 이름" + +msgid "buffer too small" +msgstr "버퍼가 너무 작음" + +msgid "internal error" +msgstr "내부 오류" + +msgid "file not found" +msgstr "파일을 찾을 수 없습니다" + +msgid "archive too large" +msgstr "아카이브가 너무 큽니다" + +msgid "validation failed" +msgstr "검증 실패" + +msgid "write callback failed" +msgstr "쓰기 콜백 실패" + +#, boost-format +msgid "" +"%1% is too close to exclusion area, there may be collisions when printing." +msgstr "%1% 는 출력배제영역에 너무 가까워 출력시 충돌이 발생할 수 있습니다." + +#, boost-format +msgid "%1% is too close to others, and collisions may be caused." +msgstr "%1%이(가) 다른 것들과 너무 가까워 충돌이 발생할 수 있습니다." + +#, boost-format +msgid "%1% is too tall, and collisions will be caused." +msgstr "%1%은(는) 너무 커서 충돌이 발생합니다." + +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 "출력배제영역에 너무 가까워 출력시 충돌이 발생할 수 있습니다." + +msgid "Prime Tower" +msgstr "프라임 타워" + +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" + +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 "현재 설정에서는 압출이 안됩니다." + +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" +"“객체별” 시퀀스가 활성화된 경우 smooth 타임랩스 모드가 지원되지 않습니다." + +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"나선형 꽃병 모드에서 여러 객체를 출력하려면 “객체별” 인쇄 순서를 선택하십시" +"오." + +msgid "" +"The spiral vase mode does not work when an object contains more than one " +"materials." +msgstr "나선형(꽃병) 모드는 둘 이상의 재료가 사용될 경우 작동하지 않습니다." + +msgid "The prime tower is not supported in \"By object\" print." +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 "" +"어댑티브 레이어가 켜져 있으면 프라임 타워가 지원되지 않습니다.모든 객체의 레" +"이어 높이가 동일해야 합니다." + +msgid "The prime tower requires \"support gap\" to be multiple of layer height" +msgstr "프라임 타워는 레이어 높이의 배수가 되는 “서포트 갭”이 필요합니다." + +msgid "The prime tower requires that all objects have the same layer heights" +msgstr "프라임 타워를 사용하려면 모든 객체의 레이어 높이가 같아야 합니다." + +msgid "" +"The prime tower requires that all objects are printed over the same number " +"of raft layers" +msgstr "" +"프라임 타워는 모든 객체가 동일한 수의 래프트 레이어 위에 출력되어야만 가능합" +"니다." + +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"프라임 타워는 모든 객체를 동일한 레이어 높이로 슬라이스해야 사용가능합니다." + +msgid "" +"The prime tower is only supported if all objects have the same variable " +"layer height" +msgstr "" +"프라임 타워는 모든 객체의 가변 레이어 높이가 동일한 경우에만 지원됩니다." + +msgid "Too small line width" +msgstr "선폭이 너무 작음" + +msgid "Too large line width" +msgstr "선폭이 너무 큼" + +msgid "" +"The prime tower requires that support has the same layer height with object." +msgstr "프라임 타워는 서포트와 객체의 레이어 높이가 동일해야 사용가능합니다." + +msgid "" +"Support enforcers are used but support is not enabled. Please enable support." +msgstr "" +"커스텀 서포트를 사용하였으나 서포트 기능이 꺼져 있습니다. 서포트기능을 활성해" +"주십시오" + +msgid "Layer height cannot exceed nozzle diameter" +msgstr "레이어 높이는 노즐 직경을 초과할 수 없습니다." + +#, c-format, boost-format +msgid "Plate %d: %s does not support filament %s" +msgstr "플레이트 %d: %s은 (는) 필라멘트 %s을 (를) 지원하지 않습니다." + +msgid "Generating skirt & brim" +msgstr "스커트 및 브림 생성" + +msgid "Exporting G-code" +msgstr "G 코드 내보내기" + +msgid "Generating G-code" +msgstr "G 코드 생성" + +msgid "Failed processing of the filename_format template." +msgstr "filename_format 템플릿 처리에 실패했습니다." + +msgid "Printable area" +msgstr "출력 가능 영역" + +msgid "Bed exclude area" +msgstr "출력배제영역" + +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 "" +"X-Y 평면에서 출력 불가능한 영역. 예를 들어, 왼쪽 전면 영역은 필라멘트 변경시 " +"필라멘트를 자를 때 사용되는 공간입니다. 영역의 크기는 다음 형식을 사용해 점으" +"로 이어진 다각형으로 표현됩니다: \"XxY, XxY, ...\"" + +msgid "Bed custom texture" +msgstr "베드 커스텀 텍스처" + +msgid "Bed custom model" +msgstr "베드 커스텀 모델" + +msgid "Elephant foot compensation" +msgstr "코끼리 발 보정" + +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "" +"이렇게 하면 빌드 플레이트의 첫 레이어가 안으로 줄어들어 코끼리 발 효과를 보정" +"합니다." + +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"각 레이어의 높이입니다.레이어 높이가 작을수록 정확도는 높아지지만 출력 시간" +"이 길어집니다." + +msgid "Printable height" +msgstr "인쇄 가능 높이" + +msgid "Maximum printable height which is limited by mechanism of printer" +msgstr "빌드 영역의 높이에 의해 제한되는 최대 출력 가능 높이입니다." + +msgid "Printer preset names" +msgstr "프린터 프리셋 이름" + +msgid "Hostname, IP or URL" +msgstr "호스트 이름, IP 또는 URL" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the hostname, IP address or URL of the printer host instance. Print host " +"behind HAProxy with basic auth enabled can be accessed by putting the user " +"name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" +msgstr "" +"Slic3r은 G 코드 파일을 프린터 호스트에 업로드할 수 있습니다.이 필드에는 프린" +"터 호스트 인스턴스의 호스트 이름, IP 주소 또는 URL이 포함되어야 합니다.기본 " +"인증이 활성화된 HAProxy 뒤의 출력 호스트는 다음 형식의 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 "" + +msgid "API Key / Password" +msgstr "API 키 / 비밀번호" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field should contain " +"the API Key or the password required for authentication." +msgstr "" +"Slic3r은 G 코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 인증" +"에 필요한 API 키 또는 비밀번호가 포함되어야 합니다." + +msgid "Name of the printer" +msgstr "프린터 이름" + +msgid "HTTPS CA File" +msgstr "HTTPS CA 파일" + +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 연결에 crt/pem 형식으로 사용자 지정 CA 인증서 파일을 지정할 " +"수 있습니다. 비워 두면 기본 OS CA 인증서 저장소가 사용됩니다." + +msgid "User" +msgstr "사용자" + +msgid "Password" +msgstr "비밀번호" + +msgid "Ignore HTTPS certificate revocation checks" +msgstr "HTTPS 인증서 revocation 검사 무시" + +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 인증서 해지 검사를 무시하세" +"요. 연결에 실패할 경우 자체 서명된 인증서에 대해 이 옵션을 활성화하는 것이 좋" +"습니다." + +msgid "Names of presets related to the physical printer" +msgstr "실제 프린터와 관련된 프리셋 이름" + +msgid "Authorization Type" +msgstr "승인 유형" + +msgid "API key" +msgstr "API 키" + +msgid "HTTP digest" +msgstr "HTTP digest" + +msgid "Avoid crossing wall" +msgstr "벽 가로지르기 회피" + +msgid "Detour and avoid to travel across wall which may cause blob on surface" +msgstr "" +"표면 불량을 일으킬 수 있는 벽을 가로질러 이동하는 것을 방지하기 위해 우회 경" +"로를 설정합니다." + +msgid "Avoid crossing wall - Max detour length" +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 " +"travel path. Zero to disable" +msgstr "" +"벽 가로지르기 방지를 위한 최대 우회 거리: 우회 거리가 이 값보다 크면 프린터" +"가 우회하지 않습니다. 우회 길이는 직접 이동 경로의 절대값 또는 백분율 (예: " +"50%) 로 지정할 수 있습니다. 값이 0이면 이 기능이 비활성화됩니다." + +msgid "mm or %" +msgstr "mm 또는 %" + +msgid "Other layers" +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이면 필라멘트가 해당 Plate" +"에서의 출력을 지원하지 않음을 의미합니다." + +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 Engineering Plate" +msgstr "" +"첫 레이어를 제외한 레이어의 베드 온도입니다. 값이 0이면 필라멘트가 해당 Plate" +"에서의 출력을 지원하지 않음을 의미합니다." + +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이면 필라멘트가 해당 Plate" +"에서의 출력을 지원하지 않음을 의미합니다." + +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 플레이트에서 필라멘트가 지원되" +"지 않음을 의미합니다." + +msgid "Initial layer" +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" +msgstr "" +"첫 레이어의 베드 온도입니다. 값이 0이면 필라멘트가 해당 Plate에서의 출력을 지" +"원하지 않음을 의미합니다." + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"첫 레이어의 베드 온도입니다. 값이 0이면 필라멘트가 해당 Plate에서의 출력을 지" +"원하지 않음을 의미합니다." + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"첫 레이어의 베드 온도입니다. 값이 0이면 필라멘트가 해당 Plate에서의 출력을 지" +"원하지 않음을 의미합니다." + +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 플레이트에서 필라멘트가 지원되지 " +"않음을 의미합니다." + +msgid "Bed types supported by the printer" +msgstr "프린터에서 지원되는 플레이트 유형" + +msgid "First layer print sequence" +msgstr "" + +msgid "This G-code is inserted at every layer change before lifting z" +msgstr "이 G 코드는 z를 들어 올리기 전에 모든 레이어 변경시 삽입됩니다." + +msgid "Bottom shell layers" +msgstr "하단 쉘 레이어" + +msgid "" +"This is the number of solid layers of bottom shell, including the bottom " +"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 "하단 쉘 두께" + +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 determained by " +"bottom shell layers" +msgstr "" +"하단 쉘 레이어로 계산한 두께가 이 값보다 얇으면 슬라이스할 때 하단 쉘 두께가 " +"적용됩니다. 이렇게 하면 하단 쉘 레이어 값이 작을 때 쉘이 너무 얇아지는 것을 " +"방지할 수 있습니다. 0은 이 설정이 비활성화되고 하단 쉘 레이어의 수에 따라 하" +"단 쉘의 두께가 결정됨을 의미합니다." + +msgid "Force cooling for overhang and bridge" +msgstr "오버행 및 브리지에서 강제 냉각" + +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"이 옵션을 활성화하면 오버행 및 브리지에 대한 부품 냉각 팬 속도를 최적화하여 " +"냉각 성능을 개선할 수 있습니다." + +msgid "Fan speed for overhang" +msgstr "오버행에서의 팬 속도" + +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 +msgid "" +"Force cooling fan to be specific speed when overhang degree of printed part " +"exceeds this value. Expressed as percentage which indicides 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 direction" +msgstr "브릿지 방향" + +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for " +"external bridges. Use 180°for zero angle." +msgstr "" +"브릿지 각도 오버라이드. 0은 브릿지 각도가 자동으로 계산됨을 의미합니다.그렇" +"지 않으면 기입된 각도가 외부 브릿지에 사용됩니다. 0도 각도에는 180°를 사용하" +"십시오." + +msgid "Bridge flow" +msgstr "브릿지 압출량" + +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"이 값을 약간 줄이면 (예: 0.9) 브릿지에서 압출되는 필라멘트의 양이 줄어들어 처" +"짐을 방지할 수 있습니다." + +msgid "Top surface flow ratio" +msgstr "" + +msgid "" +"This factor affects the amount of material for top solid infill. You can " +"decrease it slightly to have smooth surface finish" +msgstr "" + +msgid "Initial layer flow ratio" +msgstr "" + +msgid "This factor affects the amount of material for the initial layer" +msgstr "" + +msgid "Only one wall on top surfaces" +msgstr "상단면 벽 하나" + +msgid "" +"Use only one wall on flat top surface, to give more space to the top infill " +"pattern. Could be applyed on topmost surface or all top surface." +msgstr "" + +msgid "Not apply" +msgstr "" + +msgid "Top surfaces" +msgstr "모든 상단면" + +msgid "Topmost surface" +msgstr "최상단 표면만" + +msgid "Only one wall on first layer" +msgstr "첫 레이어에 하나의 벽만" + +msgid "Use only one wall on the first layer of model" +msgstr "모델의 첫 레이어에 벽 하나만 사용" + +msgid "Slow down for overhang" +msgstr "오버행구간 감속" + +msgid "Enable this option to slow printing down for different overhang degree" +msgstr "" +"오버행 구간에서 속도를 줄이려면 이 옵션을 활성화하십시오. 다양한 오버행 비율" +"에 대한 속도는 아래와 같이 설정됩니다." + +msgid "mm/s" +msgstr "mm/s" + +msgid "Speed of bridge and completely overhang wall" +msgstr "브릿지와 100% 오버행 벽에 대한 속도입니다." + +msgid "Brim width" +msgstr "브림 폭" + +msgid "Distance from model to the outermost brim line" +msgstr "모델에서 가장 바깥쪽 브림선까지의 거리입니다." + +msgid "Brim type" +msgstr "브림 유형" + +msgid "" +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." +msgstr "" +"모델의 바깥쪽 또는 안쪽 브림 생성을 제어합니다. 자동은 브림 폭이 자동으로 분" +"석 및 계산됨을 의미합니다." + +msgid "Brim-object gap" +msgstr "브림-출력물 간격" + +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "가장안쪽 브림선과 출력물사이에 틈을 주어, 브림제거가 쉽도록 합니다." + +msgid "Compatible machine" +msgstr "호환 가능한 장치" + +msgid "upward compatible machine" +msgstr "upward compatible machine" + +msgid "Compatible machine condition" +msgstr "호환 가능한 장치 상태" + +msgid "Compatible process profiles" +msgstr "호환 가능한 프로세스 프로파일" + +msgid "Compatible process profiles condition" +msgstr "호환 가능한 프로세스 프로파일 조건" + +msgid "Print sequence, layer by layer or object by object" +msgstr "출력 순서를 결정하여 레이어별 또는 객체별로 인쇄할 수 있습니다." + +msgid "By layer" +msgstr "레이어별" + +msgid "By object" +msgstr "객체별" + +msgid "Slow printing down for better layer cooling" +msgstr "레이어 냉각 효과를 높이기 위해 출력 속도를 늦춥니다." + +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" +msgstr "" +"이 옵션을 사용하면 인쇄 속도를 늦추어 최종 레이어 시간이 “최대 팬 속도 임계" +"값”의 레이어 시간 임계값보다 짧지 않도록 하여 레이어를 더 오랫동안 냉각할 수 " +"있습니다.이렇게 하면 작은 디테일의 품질이 향상될 수 있습니다." + +msgid "Normal printing" +msgstr "일반 출력" + +msgid "" +"The default acceleration of both normal printing and travel except initial " +"layer" +msgstr "" +"이것은 일반 출력과 첫 레이어 이후의 이동 모두에 대한 기본 가속도입니다." + +msgid "mm/s²" +msgstr "mm/s²" + +msgid "Default filament profile" +msgstr "기본 필라멘트 프로파일" + +msgid "Default filament profile when switch to this machine profile" +msgstr "이 프린터 프로파일로 전환할 때의 기본 필라멘트 프로파일" + +msgid "Default process profile" +msgstr "기본 프로세스 프로파일" + +msgid "Default process profile when switch to this machine profile" +msgstr "이 프린터 프로파일로 전환할 때의 기본 프로세스 프로파일" + +msgid "No cooling for the first" +msgstr "레이어 초기에 쿨링 안함" + +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 "layers" +msgstr "레이어" + +msgid "Don't support bridges" +msgstr "브리지에 서포트 안함" + +msgid "" +"Don't support the whole bridge area which make support very large. Bridge " +"usually can be printing directly without support if not very long" +msgstr "" +"이렇게 하면 브릿지에 서포트를 안할 수 있어 전체 서포트 양이 줄어듭니다. 적당" +"한 거리만큼 떨어진 브릿지는 일반적으로 서포트 없이 출력할 수 있습니다." + +msgid "Thick bridges" +msgstr "두꺼운 브릿지" + +msgid "" +"If enabled, bridges are more reliable, can bridge longer distances, but may " +"look worse. If disabled, bridges look better but are reliable just for " +"shorter bridged distances." +msgstr "" +"활성화하면 브릿지가 더 안정적이고 더 먼 거리를 브릿지할 수 있지만 더 나빠 보" +"일 수 있습니다. 비활성화하면 브릿지가 더 좋아 보이지만 더 짧은 거리에서만 신" +"뢰할 수 있습니다." + +msgid "Max bridge length" +msgstr "최대 브릿지 길이" + +msgid "" +"Max length of bridges that don't need support. Set it to 0 if you want all " +"bridges to be supported, and set it to a very large value if you don't want " +"any bridges to be supported." +msgstr "" +"서포트가 필요 없는 브릿지의 최대 길이입니다.모든 브릿지에 서포트를 하려면 0으" +"로 설정하고, 어떤 브리지도 서포트 하지 않으려면 매우 큰 값으로 설정하십시오." + +msgid "End G-code" +msgstr "End G-code" + +msgid "End G-code when finish the whole printing" +msgstr "전체 출력을 마치면 end Gcode 를 추가합니다." + +msgid "End G-code when finish the printing of this filament" +msgstr "이 필라멘트로 출력을 마칠 때 end Gcode 가 추가됩니다." + +msgid "Ensure vertical shell thickness" +msgstr "수직 쉘 두께 확인" + +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)" +msgstr "" +"경사진 표면 근처에 솔리드 인필을 추가하여 수직 셸 두께(상단+하단 솔리드 레이" +"어)를 보장합니다." + +msgid "Internal bridge support thickness" +msgstr "내부 브릿지 서포트 두께" + +msgid "" +"If enabled, Studio will generate support loops 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 "" + +msgid "Top surface pattern" +msgstr "상단 표면 패턴" + +msgid "Line pattern of top surface infill" +msgstr "상단 표면 채우기의 선 패턴입니다." + +msgid "Concentric" +msgstr "Concentric" + +msgid "Rectilinear" +msgstr "Rectilinear" + +msgid "Monotonic" +msgstr "모노토닉" + +msgid "Monotonic line" +msgstr "모노토닉 라인" + +msgid "Aligned Rectilinear" +msgstr "Aligned Rectilinear" + +msgid "Hilbert Curve" +msgstr "Hilbert Curve" + +msgid "Archimedean Chords" +msgstr "Archimedean Chords" + +msgid "Octagram Spiral" +msgstr "Octagram Spiral" + +msgid "Bottom surface pattern" +msgstr "바닥 표면 패턴" + +msgid "Line pattern of bottom surface infill, not bridge infill" +msgstr "이것은 브릿지 채우기를 제외한 바닥 표면 채우기의 선 패턴입니다." + +msgid "Internal solid infill pattern" +msgstr "" + +msgid "" +"Line pattern of internal solid infill. if the detect nattow internal solid " +"infill be enabled, the concentric pattern will be used for the small area." +msgstr "" + +msgid "Line width of outer wall" +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 "" +"부품 외벽의 출력 속도입니다.일반적으로 출력품질 향상을 위해 내벽보다 느리게 " +"출력합니다." + +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 "Height to rod" +msgstr "탄소봉 높이" + +msgid "" +"Distance of the nozzle tip to the lower rod. Used for collision avoidance in " +"by-object printing." +msgstr "노즐 끝에서 하단봉까지의 거리. 객체별 출력시 충돌 방지에 사용됩니다." + +msgid "Height to lid" +msgstr "덮개까지 높이" + +msgid "" +"Distance of the nozzle tip to the lid. Used for collision avoidance in by-" +"object printing." +msgstr "" +"노즐 끝에서 뚜껑까지의 거리. 객체별 출력에서 충돌을 피하는 데 사용됩니다." + +msgid "" +"Clearance radius around extruder. Used for collision avoidance in by-object " +"printing." +msgstr "압출기 주변 안전 반경: 객체별 출력에서 충돌 방지를 위해 사용됩니다." + +msgid "Max Radius" +msgstr "최대 반경" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"압출기 주변의 최대 안전거리 반경. 객체별 출력에서 충돌 방지에 사용됩니다." + +msgid "Extruder Color" +msgstr "압출기 색상" + +msgid "Only used as a visual help on UI" +msgstr "UI에서 시각적 표현으로만 사용" + +msgid "Extruder offset" +msgstr "압출기 오프셋" + +msgid "Flow ratio" +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" +msgstr "" +"필라멘트는 고체상태에서 녹은상태 전환 시 체적 변화가 있을 수 있습니다. 이 설" +"정은 이 필라멘트의 모든 압출량을 G 코드에 비례하여 변경합니다. 권장 값 범위" +"는 0.95에서 1.05 사이입니다. 약간의 과압출 또는 압출량 저하가 있는 경우 이 값" +"을 조정하여 평평한 표면을 얻을 수 있습니다." + +msgid "Object flow ratio" +msgstr "객체 압출량 비율" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "객체별로 설정된 압출량 비율로, 의미는 압출량 비율과 동일합니다." + +msgid "Enable pressure advance" +msgstr "" + +msgid "" +"Enable pressure advance, auto calibration result will be overwriten once " +"enabled. Useless for Bambu Printer" +msgstr "" + +msgid "" +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" +msgstr "" + +msgid "Default line width if some line width is set to be zero" +msgstr "선폭이 0으로 설정된 경우의 기본 선폭" + +msgid "Keep fan always on" +msgstr "팬 항상 켜두기" + +msgid "" +"If enable this setting, part cooling fan will never be stoped and will run " +"at least at minimum speed to reduce the frequency of starting and stoping" +msgstr "" +"이 설정을 활성화하면 출력물 냉각 팬이 완전히 멈추지 않고 최소 속도로 작동하" +"여 시작 및 중지 빈도를 줄일 수 있습니다." + +msgid "Layer time" +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 "s" +msgstr "s" + +msgid "Default color" +msgstr "기본 색상" + +msgid "Default filament color" +msgstr "기본 필라멘트 색상" + +msgid "Color" +msgstr "색상" + +msgid "Required nozzle HRC" +msgstr "필수 노즐 HRC" + +msgid "" +"Minimum HRC of nozzle required to print the filament. Zero means no checking " +"of nozzle's HRC." +msgstr "" +"필라멘트 출력에 필요한 노즐의 최소 HRC입니다. 0 값은 노즐의 HRC를 확인하지 않" +"음을 의미합니다." + +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" +"일 수 없습니다." + +msgid "mm³/s" +msgstr "mm³/s" + +msgid "Minimal purge on wipe tower" +msgstr "와이프타워에 최소 짜내기" + +msgid "Filament load time" +msgstr "필라멘트 로드 시간" + +msgid "Time to load new filament when switch filament. For statistics only" +msgstr "" +"필라멘트 교체 시 새 필라멘트를 로드하는 데 걸리는 시간으로, 통계 목적으로만 " +"사용됩니다." + +msgid "Filament unload time" +msgstr "필라멘트 언로드 시간" + +msgid "Time to unload old filament when switch filament. For statistics only" +msgstr "" +"필라멘트 교체 시 기존 필라멘트를 빼내는 시간으로, 통계 목적으로만 사용됩니다." + +msgid "" +"Filament diameter is used to calculate extrusion in gcode, so it's important " +"and should be accurate" +msgstr "" +"필라멘트 직경은 G 코드의 압출값을 계산하는 데 사용되므로 정확하고 정밀해야 합" +"니다." + +msgid "Density" +msgstr "밀도" + +msgid "Filament density. For statistics only" +msgstr "필라멘트 밀도는 통계 목적으로만 사용됩니다." + +msgid "g/cm³" +msgstr "g/cm³" + +msgid "The material type of filament" +msgstr "필라멘트 재료 유형" + +msgid "Soluble material" +msgstr "수용성 재료" + +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "" +"수용성 재료는 일반적으로 서포트 및 서포트 인터페이스를 출력하는 데 사용됩니" +"다." + +msgid "Support material" +msgstr "서포트 재료" + +msgid "" +"Support material is commonly used to print support and support interface" +msgstr "" +"서포트 재료는 일반적으로 서포트 및 서포트 인터페이스를 인쇄하는 데 사용됩니" +"다." + +msgid "Temperature of vitrificaiton" +msgstr "유리화 온도" + +msgid "" +"Material becomes soft at this temperature. Thus the heatbed cannot be hotter " +"than this tempature" +msgstr "" +"이 온도에서 재료의 변형이 시작됩니다. 따라서 히팅베드는 이 온도보다 더 높아서" +"는 안됩니다." + +msgid "Price" +msgstr "가격" + +msgid "Filament price. For statistics only" +msgstr "필라멘트 가격은 통계 목적으로만 사용됩니다." + +msgid "money/kg" +msgstr "원/kg" + +msgid "Vendor" +msgstr "" + +msgid "Vendor of filament. For show only" +msgstr "" + +msgid "(Undefined)" +msgstr "(정의되지 않음)" + +msgid "Infill direction" +msgstr "채우기 방향" + +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "내부채움을 위한 각도입니다. 이 값은 선의 시작과 방향을 결정해줍니다." + +msgid "Sparse infill density" +msgstr "내부채움 밀도" + +#, c-format +msgid "Density of internal sparse infill, 100% means solid throughout" +msgstr "내부채움 밀도입니다. 100%%는 객체 전체가 모두 채워짐을 의미합니다." + +msgid "Sparse infill pattern" +msgstr "내부채움 패턴" + +msgid "Line pattern for internal sparse infill" +msgstr "내부 채움의 선 패턴을 말합니다." + +msgid "Grid" +msgstr "Grid" + +msgid "Line" +msgstr "Line" + +msgid "Cubic" +msgstr "Cubic" + +msgid "Tri-hexagon" +msgstr "Tri-hexagon" + +msgid "Gyroid" +msgstr "Gyroid" + +msgid "Honeycomb" +msgstr "Honeycomb" + +msgid "Adaptive Cubic" +msgstr "Adaptive Cubic" + +msgid "3D Honeycomb" +msgstr "3D Honeycomb" + +msgid "Support Cubic" +msgstr "Support Cubic" + +msgid "Lightning" +msgstr "Lightning" + +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"상단면 채우기 가속도입니다. 낮은 값을 사용하면 상단면 품질을 향상시킬 수 있습" +"니다." + +msgid "Acceleration of outer wall. Using a lower value can improve quality" +msgstr "외벽 가속도: 낮은 값을 사용하면 품질이 향상될 수 있습니다." + +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" +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." +msgstr "" + +msgid "mm/s² or %" +msgstr "" + +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhensive" +msgstr "" +"첫 레이어의 출력 가속도입니다. 제한된 가속을 사용하면 베드 안착력을 향상시킬 " +"수 있습니다." + +msgid "Enable accel_to_decel" +msgstr "" + +msgid "Klipper's max_accel_to_decel will be adjusted automatically" +msgstr "" + +msgid "accel_to_decel" +msgstr "" + +#, c-format, boost-format +msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" +msgstr "" + +msgid "Default jerk" +msgstr "" + +msgid "Jerk of outer walls" +msgstr "" + +msgid "Jerk of inner walls" +msgstr "" + +msgid "Jerk of infill" +msgstr "" + +msgid "Jerk of top surface" +msgstr "" + +msgid "First layer" +msgstr "" + +msgid "Jerk of first layer" +msgstr "" + +msgid "Jerk of travel" +msgstr "" + +msgid "Line width of initial layer" +msgstr "첫레이어 선폭" + +msgid "Initial layer height" +msgstr "첫레이어 높이" + +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "" +"첫레이어의 높이입니다. 첫레이어 높이를 두껍게 하면 베드 안착력을 높일 수 있습" +"니다." + +msgid "Speed of initial layer except the solid infill part" +msgstr "solid 채움영역 을 제외한 첫레이어의 속도." + +msgid "Initial layer infill" +msgstr "첫 레이어 채우기" + +msgid "Speed of solid infill part of initial layer" +msgstr "첫레이어의 solid 채움에 대한 속도." + +msgid "Initial layer nozzle temperature" +msgstr "첫 레이어 노즐 온도" + +msgid "Nozzle temperature to print initial layer when using this filament" +msgstr "이 필라멘트로 첫 레이어 출력시 노즐 온도" + +msgid "Full fan speed at layer" +msgstr "레이어에서 최대 팬 속도" + +msgid "" +"Randomly jitter while printing the wall, so that the surface has a rough " +"look. This setting controls the fuzzy position" +msgstr "" +"이 설정은 벽을 인쇄하는 동안 헤드가 무작위로 왔다갔다 이동하여 거친 질감의 표" +"면을 얻을 수 있습니다. 이 설정은 fuzzy 위치를 제어합니다." + +msgid "None" +msgstr "설정 안 함" + +msgid "Contour" +msgstr "윤곽" + +msgid "Contour and hole" +msgstr "윤곽 및 구멍" + +msgid "All walls" +msgstr "모든 벽" + +msgid "Fuzzy skin thickness" +msgstr "퍼지 스킨 두께" + +msgid "" +"The width within which to jitter. It's adversed to be below outer wall line " +"width" +msgstr "떨림의 폭: 외벽 선폭보다 낮게 유지하는 것이 좋습니다." + +msgid "Fuzzy skin point distance" +msgstr "퍼지 스킨 포인트 거리" + +msgid "" +"The average diatance between the random points introducded on each line " +"segment" +msgstr "각 선 꺽이는 위치에 도입된 임의의 점 사이의 평균 거리입니다." + +msgid "Filter out tiny gaps" +msgstr "" + +msgid "" +"Filter out gaps smaller than the threshold specified. This setting won't " +"affact top/bottom layers" +msgstr "" + +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"이것은 갭 채우기 속도입니다. 갭은 일반적으로 선폭이 불규칙하므로 느리게 출력" +"되어야 합니다." + +msgid "Arc fitting" +msgstr "아크 피팅" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +"tolerance is same with resolution" +msgstr "" +"이 옵션을 활성화하면 G2 및 G3 이동이 포함된 G 코드 파일을 얻을 수 있습니다. " +"피팅 허용오차는 해상도와 동일합니다." + +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 "Scan first layer" +msgstr "첫레이어 스캔" + +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "" +"이 기능을 활성화하면 프린터의 카메라가 첫 레이어의 품질을 확인할 수 있습니다." + +msgid "Nozzle type" +msgstr "노즐 타입" + +msgid "" +"The metallic material of nozzle. This determines the abrasive resistance of " +"nozzle, and what kind of filament can be printed" +msgstr "" +"노즐의 금속 소재: 노즐의 내마모성과 출력할 수 있는 필라멘트의 종류를 결정합니" +"다." + +msgid "Undefine" +msgstr "정의되지 않음" + +msgid "Hardened steel" +msgstr "강화 강철" + +msgid "Stainless steel" +msgstr "스테인레스 스틸" + +msgid "Brass" +msgstr "황동" + +msgid "Enable this option if machine has auxiliary part cooling fan" +msgstr "프린터에 보조 냉각 팬이 있는 경우 이 옵션을 활성화하십시오." + +msgid "G-code flavor" +msgstr "G-code flavor" + +msgid "What kind of gcode the printer is compatible with" +msgstr "프린터와 호환되는 G 코드의 종류" + +msgid "Exclude objects" +msgstr "" + +msgid "" +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" +msgstr "" + +msgid "Infill combination" +msgstr "내부채움 묶음" + +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"시간을 줄이기 위해 자동으로 내부채움 몇개 레이어를 하나로 묶어 출력합니다. 벽" +"은 여전히 원래 레이어 높이로 출력됩니다." + +msgid "Length of sparse infill anchor" +msgstr "내부채움 앵커 길이" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"이렇게 하면 내부채움 선을 내부둘레와 짧은 추가둘레로 연결합니다. 백분율(예: " +"15%)로 표시되는 경우 내부채움 선폭을 기준으로 계산됩니다. Bambu Studio는 두 " +"개의 가까운 내부채움 선을 짧은 둘레 세그먼트에 연결하려고 시도합니다. " +"infill_anchor_max보다 짧은 둘레 세그먼트가 발견되지 않으면 내부채움 라인은 한" +"쪽에만 둘레 세그먼트에 연결되며 이때 사용되는 둘레 세그먼트의 길이는 이 매개" +"변수로 제한되지만 anchor_length_max보다 길어질 수는 없습니다. 단일 내부채움 " +"선에 연결된 둘레를 앵커링하는것을 비활성화하려면 이 매개변수를 0으로 설정합니" +"다." + +msgid "0 (no open anchors)" +msgstr "0(열린 앵커 없음)" + +msgid "1000 (unlimited)" +msgstr "1000 (무제한)" + +msgid "Maximum length of sparse infill anchor" +msgstr "내부채움 앵커의 최대 길이" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"이렇게 하면 내부채움 선을 내부둘레와 짧은 추가둘레로 연결합니다. 백분율(예: " +"15%)로 표시되는 경우 내부채움 선폭을 기준으로 계산됩니다. Bambu Studio는 두 " +"개의 가까운 내부채움 선을 짧은 둘레 세그먼트에 연결하려고 시도합니다. 이 매개" +"변수보다 짧은 둘레 세그먼트가 발견되지 않으면 내부채움 라인은 한쪽에만 둘레 " +"세그먼트에 연결되며 이때 사용되는 둘레 세그먼트의 길이는 infill_anchor로 제한" +"되지만 이 매개변수보다 길어질 수는 없습니다. 앵커링을 비활성하려면 이 매개변" +"수를 0으로 설정합니다." + +msgid "0 (not anchored)" +msgstr "0 (앵커링되지 않음)" + +msgid "Filament to print internal sparse infill." +msgstr "내부 채움을 출력하기 위한 필라멘트입니다." + +msgid "Line width of internal sparse infill" +msgstr "내부채움 선폭" + +msgid "Infill/Wall overlap" +msgstr "내부채움/벽 오버랩" + +msgid "" +"Infill area is enlarged slightly to overlap with wall for better bonding. " +"The percentage value is relative to line width of sparse infill" +msgstr "" +"이렇게 하면 내부채움 영역을 벽과 겹치도록 약간 확대하여 접착력을 높일 수 있습" +"니다.백분율 값은 내부채움 폭을 기준으로 합니다." + +msgid "Speed of internal sparse infill" +msgstr "내부채움 속도입니다." + +msgid "Ironing Type" +msgstr "다림질 유형" + +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 "다림질 안함" + +msgid "All solid layer" +msgstr "모든 솔리드 레이어" + +msgid "Ironing Pattern" +msgstr "다림질 패턴" + +msgid "Ironing flow" +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 "" +"다림질 시 압출되는 필라멘트의 양입니다.이는 일반 레이어 높이의 흐름을 기준으" +"로 합니다.값이 너무 높으면 표면에 과압출될 수 있습니다." + +msgid "Ironing line spacing" +msgstr "다림질 라인 간격" + +msgid "The distance between the lines of ironing" +msgstr "다림질에 사용되는 선 사이의 거리입니다." + +msgid "Ironing speed" +msgstr "다림질 속도" + +msgid "Print speed of ironing lines" +msgstr "다림질의 출력 속도입니다." + +msgid "This gcode part is inserted at every layer change after lift z" +msgstr "이 G 코드는 z 리프트 이후 모든 레이어 변경 시 삽입됩니다." + +msgid "Supports silent mode" +msgstr "사일런트 모드" + +msgid "" +"Whether the machine supports silent mode in which machine use lower " +"acceleration to print" +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 코드는 출력 일시정지 코드로 사용됩니다.사용자는 G 코드 뷰어에 일시정지 " +"G 코드를 삽입할 수 있습니다." + +msgid "This G-code will be used as a custom code" +msgstr "이 G 코드는 커스텀 코드로 사용됩니다." + +msgid "Maximum speed X" +msgstr "최대 속도 X" + +msgid "Maximum speed Y" +msgstr "최대 속도 Y" + +msgid "Maximum speed Z" +msgstr "최대 속도 Z" + +msgid "Maximum speed E" +msgstr "최대 속도 E" + +msgid "Machine limits" +msgstr "기계 한계" + +msgid "Maximum X speed" +msgstr "최대 X 속도" + +msgid "Maximum Y speed" +msgstr "최대 Y 속도" + +msgid "Maximum Z speed" +msgstr "최대 Z 속도" + +msgid "Maximum E speed" +msgstr "최대 E 속도" + +msgid "Maximum acceleration X" +msgstr "최대 가속도 X" + +msgid "Maximum acceleration Y" +msgstr "최대 가속도 Y" + +msgid "Maximum acceleration Z" +msgstr "최대 가속도 Z" + +msgid "Maximum acceleration E" +msgstr "최대 가속도 E" + +msgid "Maximum acceleration of the X axis" +msgstr "X축의 최대 가속도" + +msgid "Maximum acceleration of the Y axis" +msgstr "Y축의 최대 가속도" + +msgid "Maximum acceleration of the Z axis" +msgstr "Z 축의 최대 가속도" + +msgid "Maximum acceleration of the E axis" +msgstr "압출기의 최대 가속도" + +msgid "Maximum jerk X" +msgstr "최대 저크 X" + +msgid "Maximum jerk Y" +msgstr "최대 저크 Y" + +msgid "Maximum jerk Z" +msgstr "최대 저크 Z" + +msgid "Maximum jerk E" +msgstr "최대 저크 E" + +msgid "Maximum jerk of the X axis" +msgstr "X축의 최대 저크" + +msgid "Maximum jerk of the Y axis" +msgstr "Y축의 최대 저크" + +msgid "Maximum jerk of the Z axis" +msgstr "Z축의 최대 저크" + +msgid "Maximum jerk of the E axis" +msgstr "압출기의 최대 저크" + +msgid "Minimum speed for extruding" +msgstr "압출을 위한 최소 속도" + +msgid "Minimum speed for extruding (M205 S)" +msgstr "압출 최소 속도(M205 S)" + +msgid "Minimum travel speed" +msgstr "최소 이동 속도" + +msgid "Minimum travel speed (M205 T)" +msgstr "최소 이동 속도(M205 T)" + +msgid "Maximum acceleration for extruding" +msgstr "압출 시 최대 가속도" + +msgid "Maximum acceleration for extruding (M204 P)" +msgstr "압출 최대 가속도(M204 P)" + +msgid "Maximum acceleration for retracting" +msgstr "리트렉션 최대 가속도" + +msgid "Maximum acceleration for retracting (M204 R)" +msgstr "리트렉션 최대 가속도 (M204 R)" + +msgid "Maximum acceleration for travel" +msgstr "이동 최대 가속도" + +msgid "Maximum acceleration for travel (M204 T)" +msgstr "이동 최대 가속도 (M204 T)" + +msgid "Fan speed" +msgstr "팬 속도" + +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 "최대" + +msgid "" +"The largest printable layer height for extruder. Used tp limits the maximum " +"layer hight when enable adaptive layer height" +msgstr "" +"출력 가능한 최대 레이어 높이: 어댑티브 레이어 높이가 활성화된 경우 최대 레이" +"어 높이를 제한하는 데 사용됩니다." + +msgid "Minimum speed for 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 "Min" +msgstr "최소" + +msgid "" +"The lowest printable layer height for extruder. Used tp limits the minimum " +"layer hight when enable adaptive layer height" +msgstr "" +"출력 가능한 최저 레이어 높이.이는 어댑티브 레이어 높이가 활성화된 경우 최소 " +"레이어 높이를 제한하는 데 사용됩니다." + +msgid "Min print speed" +msgstr "최소 출력 속도" + +msgid "The minimum printing speed when slow down for cooling" +msgstr "냉각을 위해 속도를 늦출 때의 최소 인쇄 속도입니다." + +msgid "Nozzle diameter" +msgstr "노즐 직경" + +msgid "Diameter of nozzle" +msgstr "노즐의 직경" + +msgid "Host Type" +msgstr "호스트 유형" + +msgid "" +"Slic3r can upload G-code files to a printer host. This field must contain " +"the kind of the host." +msgstr "" +"Slic3r은 G 코드 파일을 프린터 호스트에 업로드할 수 있습니다. 이 필드에는 호스" +"트 종류가 포함되어야 합니다." + +msgid "Nozzle volume" +msgstr "노즐 볼륨" + +msgid "Volume of nozzle between the cutter and the end of nozzle" +msgstr "필라멘트 커터와 노즐 끝 사이의 노즐 부피" + +msgid "Start end points" +msgstr "시작 끝 점" + +msgid "The start and end points which is from cutter area to garbage can." +msgstr "커팅 영역에서 부터 똥통까지의 시작과 끝점들" + +msgid "Reduce infill retraction" +msgstr "내부채움 리트랙션 감소" + +msgid "" +"Don't retract when the travel is in infill area absolutely. That means the " +"oozing can't been seen. This can reduce times of retraction for complex " +"model and save printing time, but make slicing and G-code generating slower" +msgstr "" +"이동이 채움영역에서마나 이뤄질때 리트랙션을 하지 마십시오. 흘러내림이 밖으로 " +"보이지 않기 때문입니다. 이렇게 하면 복잡한 모델의 리트랙션 시간을 줄이고 출" +"력 시간을 절약할 수 있지만 슬라이싱 및 G 코드 생성 속도가 느려집니다." + +msgid "Enable" +msgstr "활성화" + +msgid "Filename format" +msgstr "파일 이름 형식" + +msgid "User can self-define the project file name when export" +msgstr "내보낼 때 프로젝트 파일 이름을 결정할 수 있습니다." + +msgid "Detect overhang wall" +msgstr "오버행 벽 감지" + +msgid "" +"Detect the overhang percentage relative to line width and use different " +"speed to print. For 100 percent overhang, bridge speed is used." +msgstr "" + +msgid "Line width of inner wall" +msgstr "내벽 선폭" + +msgid "Speed of inner wall" +msgstr "내벽의 속도입니다." + +msgid "Number of walls of every layer" +msgstr "레이어당 벽 수입니다." + +msgid "Post-processing Scripts" +msgstr "후처리 스크립트" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" +"커스텀 스크립트를 통해 출력 G 코드를 처리하려면 이곳에 절대 경로를 나열하십시" +"오. 여러 스크립트는 세미콜론으로 구분합니다. 스크립트는 첫 번째 인수로 G 코" +"드 파일의 절대 경로를 통해 전달되며 설정 변수도 읽을 수 있습니다." + +msgid "Raft contact Z distance" +msgstr "래프트 접촉 Z 거리" + +msgid "Z gap between object and raft. Ignored for soluble interface" +msgstr "" +"이것은 객체와 라프트 사이의 Z 간격입니다. PVA 필라멘트와 같은 가용성 재료의 " +"인터페이스에서는 무시됩니다." + +msgid "Raft expansion" +msgstr "라프트 확장" + +msgid "Expand all raft layers in XY plane" +msgstr "XY 평면 방향으로 라프트 레이어를 확장합니다." + +msgid "Initial layer density" +msgstr "첫 레이어 밀도" + +msgid "Density of the first raft or support layer" +msgstr "첫 라프트와 서포트 레이어의 밀도입니다." + +msgid "Initial layer expansion" +msgstr "첫 레이어 확장" + +msgid "Expand the first raft or support layer to improve bed plate adhesion" +msgstr "베드 안착을 향상시키기 위해 첫 라프트와 서포트 레이어를 확장시킵니다." + +msgid "Raft layers" +msgstr "라프트 레이어" + +msgid "" +"Object will be raised by this number of support layers. Use this function to " +"avoid wrapping when print ABS" +msgstr "" +"객체가 여기서 설정한 서포트 레이어 수만큼 올라가게 됩니다. ABS 로 출력할 때 " +"워핑을 방지하기 위해 이 기능을 사용하십시오." + +msgid "" +"G-code path is genereated after simplifing 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 코드 경로는 너무 많은 점과 G 코드 라인을 피하기 위해 모델의 윤곽선을 단순화" +"한 후에 생성됩니다. 값이 작을수록 해상도가 높아지고 슬라이스에 더 많은 시간" +"이 소요됩니다." + +msgid "Travel distance threshold" +msgstr "이동 거리 임계값" + +msgid "" +"Only trigger retraction when the travel distance is longer than this " +"threshold" +msgstr "이동 거리가 이 임계값보다 긴 경우에만 리트랙션을 합니다." + +msgid "Retract amount before wipe" +msgstr "닦아내기 전 리트랙션 양" + +msgid "" +"The length of fast retraction before wipe, relative to retraction length" +msgstr "" +"이 값은 리트랙션 길이와 비교되는 닦아내기 전의 빠른 리트랙션 길이입니다." + +msgid "Retract when change layer" +msgstr "레이어 변경 시 리트랙션" + +msgid "Force a retraction when changes layer" +msgstr "이렇게 하면 레이어 변경시 리트랙션이 진행됩니다" + +msgid "Length" +msgstr "길이" + +msgid "Retraction Length" +msgstr "리트랙션 길이" + +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"이는 긴 이동 거리 동안 흘러나오는 것을 방지하기 위해 뒤로 당겨지는 압출기의 " +"필라멘트 양입니다. 리트랙션을 비활성화하려면 0으로 설정합니다." + +msgid "Z hop when retract" +msgstr "리트랙션시 Z hop" + +msgid "" +"Whenever the retraction is done, the nozzle is lifted a little to create " +"clearance between nozzle and the print. It prevents nozzle from hitting the " +"print when travel move. Using spiral line to lift z can prevent stringing" +msgstr "" +"리트랙션시마다 노즐을 약간 들어 올려 노즐과 출력물 사이에 간격을 만듭니다. 이" +"렇게 하면 이동이 길어질 때 노즐이 출력물에 부딪히는 것을 방지할 수 있습니다. " +"Spiral line을 사용하여 z를 들어 올리면 거미줄을 방지할 수 있습니다." + +msgid "Z Hop Type" +msgstr "Z 홉 유형" + +msgid "Slope" +msgstr "경사" + +msgid "Spiral" +msgstr "나선" + +msgid "Direct drive" +msgstr "" + +msgid "Bowden" +msgstr "" + +msgid "Retraction Speed" +msgstr "리트랙션 속도" + +msgid "Speed of retractions" +msgstr "이것이 리트랙션 속도입니다." + +msgid "Deretraction Speed" +msgstr "리트랙션 복원 속도" + +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"리트랙션 후 압출기에 필라멘트를 다시 로드하는 속도입니다. 이 속도를 0으로 설" +"정하면 리트랙션과 동일한 속도가 됩니다." + +msgid "Seam position" +msgstr "재봉선 위치" + +msgid "The start position to print each part of outer wall" +msgstr "외벽의 시작 위치입니다." + +msgid "Nearest" +msgstr "Nearest" + +msgid "Aligned" +msgstr "Aligned" + +msgid "Back" +msgstr "Back" + +msgid "Random" +msgstr "무작위" + +msgid "Seam gap" +msgstr "" + +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 as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" +msgstr "" + +msgid "Wipe speed" +msgstr "" + +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 "" + +msgid "Skirt distance" +msgstr "스커트 거리" + +msgid "Distance from skirt to brim or object" +msgstr "스커트에서 브림 또는 객체까지의 거리입니다." + +msgid "Skirt height" +msgstr "스커트 높이" + +msgid "How many layers of skirt. Usually only one layer" +msgstr "스커트 레이어 수: 일반적으로 하나만" + +msgid "Skirt loops" +msgstr "스커트 수" + +msgid "Number of loops for the skirt. Zero means disabling skirt" +msgstr "스커트를 두른 수입니다. 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 "최소 내부채움 임계값" + +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "이 임계값보다 작은 내부채움 영역은 내부 솔리드 채움으로 대체됩니다." + +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "내부 솔리드 채움의 선폭" + +msgid "Speed of internal solid infill, not the top and bottom surface" +msgstr "상단 또는 하단 표면을 제외한 내부 솔리드 채움 속도입니다." + +msgid "Spiral vase" +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 "" +"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 "" +"smooth 또는 일반 모드를 선택한 경우 각 출력마다 타임랩스 비디오가 생성됩니다." +"각 레이어를 출력한 후 챔버 카메라로 스냅샷을 찍습니다. 출력이 완료되면 이러" +"한 모든 스냅샷이 타임랩스 비디오로 구성됩니다.smooth 모드를 선택하면 각 레이" +"어가 인쇄된 후 툴헤드가 똥통으로 이동한 다음 스냅샷을 찍습니다. 스냅샷을 찍" +"는 과정에서 녹은 필라멘트가 노즐에서 새어 나올 수 있으므로 smooth 모드로 노즐" +"을 닦으려면 프라임 타워가 필요합니다." + +msgid "Traditional" +msgstr "일반" + +msgid "Temperature variation" +msgstr "온도 변화" + +msgid "Start G-code" +msgstr "시작 G 코드" + +msgid "Start G-code when start the whole printing" +msgstr "출력 시작 시 추가되는 G 코드" + +msgid "Start G-code when start the printing of this filament" +msgstr "프린터가 이 필라멘트를 사용하기 시작할 때 추가되는 G 코드" + +msgid "Slice gap closing radius" +msgstr "Slice gap closing radius" + +msgid "" +"Cracks smaller than 2x gap closing radius are being filled during the " +"triangle mesh slicing. The gap closing operation may reduce the final print " +"resolution, therefore it is advisable to keep the value reasonably low." +msgstr "" +"삼각형 메쉬 슬라이싱 중에 갭 클로징 반경의 2배보다 작은 크랙이 메워지고 있습" +"니다.간격을 좁히면 최종 출력 해상도가 낮아질 수 있으므로 값을 적당히 낮게 유" +"지하는 것이 좋습니다." + +msgid "Slicing Mode" +msgstr "슬라이싱 모드" + +msgid "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." +msgstr "" +"3DLabPrint 비행기 모델에는 \"짝수-홀수\"를 사용합니다. 모델의 모든 구멍을 닫" +"으려면 \"구멍 닫기\"를 사용합니다." + +msgid "Regular" +msgstr "일반" + +msgid "Even-odd" +msgstr "짝수 홀수" + +msgid "Close holes" +msgstr "구멍 닫기" + +msgid "Enable support" +msgstr "서포트 활성화" + +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 " +"generated" +msgstr "" +"일반(자동) 및 트리(자동) 는 자동으로 서포트를 생성하는 데 사용됩니다. 일반(수" +"동) 또는 트리(수동) 를 선택한 경우, 커스텀 서포트가 생성됩니다." + +msgid "normal(auto)" +msgstr "일반 (자동)" + +msgid "tree(auto)" +msgstr "트리 (자동)" + +msgid "normal(manual)" +msgstr "일반(수동)" + +msgid "tree(manual)" +msgstr "트리(수동)" + +msgid "Support/object xy distance" +msgstr "서포트/객체 xy 거리" + +msgid "XY separation between an object and its support" +msgstr "서포트와 객체 사이의 XY 방향의 떨어진 거리를 설정합니다." + +msgid "Pattern angle" +msgstr "패턴 각도" + +msgid "Use this setting to rotate the support pattern on the horizontal plane." +msgstr "이 설정을 사용하여 수평면에서 서포트 패턴을 회전합니다." + +msgid "On build plate only" +msgstr "빌드 플레이트 위에만" + +msgid "Don't create support on model surface, only on build plate" +msgstr "이 설정은 빌드 플레이트에서 시작하는 서포트만 생성합니다." + +msgid "Support critical regions only" +msgstr "중요 위치만 서포트" + +msgid "" +"Only create support for critical regions including sharp tail, cantilever, " +"etc." +msgstr "날카로운 꼬리, 캔틸레버 등 중요한 영역에 대해서만 서포트를 생성합니다." + +msgid "Remove small overhangs" +msgstr "" + +msgid "Remove small overhangs that possibly need no supports." +msgstr "" + +msgid "Top Z distance" +msgstr "상단 Z 거리" + +msgid "The z gap between the top support interface and object" +msgstr "서포트 상단과 객체사이의 Z 간격을 결정합니다." + +msgid "Bottom Z distance" +msgstr "하단 Z 거리" + +msgid "The z gap between the bottom support interface and object" +msgstr "하단 서포트 인터페이스와 객체 사이의 z 간격" + +msgid "Support/raft base" +msgstr "서포트/라프트 베이스" + +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"서포트 및 라프트를 출력하기 위한 필라멘트. “기본값”은 서포트 전용필라멘트가 " +"아닌 현재 필라멘트가 사용됨을 의미합니다." + +msgid "Line width of support" +msgstr "서포트 선폭" + +msgid "Interface use loop pattern" +msgstr "루프 패턴 인터페이스" + +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"이렇게 하면 서포트의 상단 접촉 레이어를 루프로 덮을 수 있습니다. 기본적으로 " +"비활성화되어 있습니다." + +msgid "Support/raft interface" +msgstr "서포트/라프트 인터페이스" + +msgid "" +"Filament to print support interface. \"Default\" means no specific filament " +"for support interface and current filament is used" +msgstr "" +"서포트 인터페이스를 위한 필라멘트. “기본값”은 서포트 인터페이스를 위한 특정 " +"필라멘트가 없으며 현재 필라멘트가 사용됨을 의미합니다." + +msgid "Top interface layers" +msgstr "상단 인터페이스 레이어" + +msgid "Number of top interface layers" +msgstr "상단 인터페이스 레이어의 수입니다." + +msgid "Bottom interface layers" +msgstr "하단 인터페이스 레이어" + +msgid "Top interface spacing" +msgstr "상단 인터페이스 간격" + +msgid "Spacing of interface lines. Zero means solid interface" +msgstr "인터페이스 선의 간격입니다. 0은 솔리드 인터페이스를 의미합니다." + +msgid "Bottom interface spacing" +msgstr "하단 인터페이스 간격" + +msgid "Spacing of bottom interface lines. Zero means solid interface" +msgstr "하단 인터페이스 선의 간격입니다. 0은 솔리드 인터페이스를 의미합니다." + +msgid "Speed of support interface" +msgstr "서포트 인터페이스의 속도입니다." + +msgid "Base pattern" +msgstr "기본 패턴" + +msgid "Line pattern of support" +msgstr "서포트의 선 패턴입니다." + +msgid "Rectilinear grid" +msgstr "Rectilinear grid" + +msgid "Hollow" +msgstr "구멍" + +msgid "Interface pattern" +msgstr "인터페이스 패턴" + +msgid "" +"Line pattern of support interface. Default pattern for non-soluble support " +"interface is Rectilinear, while default pattern for soluble support " +"interface is Concentric" +msgstr "" +"서포트 인터페이스의 라인 패턴입니다. 물에녹지 않는 서포트 인터페이스의 기본 " +"패턴은 Rectilinear이고 물에녹는 서포트 인터페이스의 기본 패턴은 Concentric입" +"니다." + +msgid "Rectilinear Interlaced" +msgstr "Rectilinear 인터레이스" + +msgid "Base pattern spacing" +msgstr "기본 패턴 간격" + +msgid "Spacing between support lines" +msgstr "이에 따라 서포트 선 사이의 간격이 결정됩니다." + +msgid "Normal Support expansion" +msgstr "일반 서포트 확장" + +msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "일반 서포터의 수평 범위를 확장 (+) 또는 축소 (-)" + +msgid "Speed of support" +msgstr "서포트 형성의 속도입니다." + +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 "Snug" +msgstr "Snug" + +msgid "Tree Slim" +msgstr "트리 슬림" + +msgid "Tree Strong" +msgstr "트리 스트롱" + +msgid "Tree Hybrid" +msgstr "트리 하이브리드" + +msgid "Independent support layer height" +msgstr "독립 서포트 레이어 높이" + +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-gap 값을 지원하고 출력 시간을 절약하기 위한 것입니다. 프라임 타워가 활성" +"화되면 이 옵션은 사용할 수 없습니다." + +msgid "Threshold angle" +msgstr "임계 각도" + +msgid "" +"Support will be generated for overhangs whose slope angle is below the " +"threshold." +msgstr "경사 각도가 이 임계값 미만인 오버행에 대해서는 서포트가 생성됩니다." + +msgid "Tree support branch angle" +msgstr "트리서포트 가지 각도" + +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 "" +"이 설정은 트리 서포트의 가지가 만들 수 있는 최대 돌출 각도를 결정합니다. 각도" +"를 높이면 가지를 더 수평으로 인쇄할 수 있으므로 가지가 더 멀리 뻗을 수 있습니" +"다." + +msgid "Tree support branch distance" +msgstr "트리 서포트 가지 거리" + +msgid "" +"This setting determines the distance between neighboring tree support nodes." +msgstr "이 설정은 인접한 트리 서포트 분기점 간의 거리를 결정합니다." + +msgid "Tree support branch diameter" +msgstr "트리 서포트 가지 지름" + +msgid "This setting determines the initial diameter of support nodes." +msgstr "이 설정은 서포트 분기점의 초기 지름을 결정합니다." + +msgid "Tree support wall loops" +msgstr "트리서포트 벽 루프" + +msgid "This setting specify the count of walls around tree support" +msgstr "이 설정은 트리 서포트 주위의 벽 수를 지정합니다." + +msgid "Tree support brim width" +msgstr "트리서포트 브림 폭" + +msgid "The brim width around tree support. 0 means auto." +msgstr "트리서포트 주변의 브림 폭. 0은 자동생성을 의미함" + +msgid "Chamber temperature" +msgstr "" + +msgid "Target chamber temperature" +msgstr "" + +msgid "Nozzle temperature for layers after the initial one" +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 "Detect thin wall" +msgstr "얇은 벽 감지" + +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 코드는 툴 체인지를 작동시키는 T 명령을 포함하여 필라멘트가 변경될 때 삽" +"입됩니다." + +msgid "Line width for top surfaces" +msgstr "상단표면 선폭" + +msgid "Speed of top surface infill which is solid" +msgstr "상단면 채우기의 속도입니다." + +msgid "Top shell layers" +msgstr "상단 레이어" + +msgid "" +"This is the number of solid layers of top shell, including the top surface " +"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 "상단레이어" + +msgid "Top shell thickness" +msgstr "상단 쉘 두께" + +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 determained by top " +"shell layers" +msgstr "" +"상단 쉘 레이어로 계산한 두께가 이 값보다 얇으면 슬라이스할 때 상단 솔리드 레" +"이어의 수가 증가합니다.이렇게 하면 레이어 높이가 작을 때 쉘이 너무 얇아지는 " +"것을 방지할 수 있습니다. 0은 이 설정이 비활성화되고 상단 쉘 레이어의 수에 따" +"라 상단 쉘의 두께가 결정됨을 의미합니다." + +msgid "Speed of travel which is faster and without extrusion" +msgstr "이것은 이동이 완료되는 속도입니다." + +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + +msgid "Wipe while retracting" +msgstr "리트랙션시 와이프" + +msgid "" +"Move nozzle along the last extrusion path when retracting to clean leaked " +"material on nozzle. This can minimize blob when print new part after travel" +msgstr "" +"이렇게 하면 리트랙션시 마지막 압출 경로를 따라 압출하지 않은상태에서 노즐만 " +"이동하여 노즐에서 새어 나온 물질을 청소합니다.이렇게 하면 이동 후 새 부품을 " +"출력할 때 지저분하게 튀어나오는 불량을 최소화될 수 있습니다." + +msgid "Wipe Distance" +msgstr "와이프 거리" + +msgid "" +"Discribe how long the nozzle will move along the last path when retracting" +msgstr "" +"이는 노즐이 리트랙션하는 동안 마지막 경로를 따라 이동하는 거리를 나타냅니다." + +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 "짜내기 볼륨" + +msgid "Flush multiplier" +msgstr "짜내기 승수" + +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "" +"실제 짜내기 볼륨은 짜내기 승수 값에 표로 입력된 짜내기 볼륨을 곱한 값과 같습" +"니다." + +msgid "Prime volume" +msgstr "프라임 볼륨" + +msgid "The volume of material to prime extruder on tower." +msgstr "이는 타워에서 압출기가 밀어내는 필라멘트의 부피입니다." + +msgid "Width" +msgstr "폭" + +msgid "Width of prime tower" +msgstr "프라임타워의 폭입니다." + +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 " +"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 "X-Y hole compensation" +msgstr "X-Y 구멍 수평확장" + +msgid "" +"Holes of object will be grown or shrunk in XY plane by the configured value. " +"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 "" +"객체의 구멍은 설정된 값만큼 XY 평면에서 커지거나 축소됩니다. 양수 값은 구멍" +"을 크게, 음수 값은 구멍을 작게 만듭니다. 이 함수는 객체의 조립 문제가 있을 " +"때 크기를 약간 조정하는 데 사용됩니다." + +msgid "X-Y contour compensation" +msgstr "X-Y 수평확장" + +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" +msgstr "" +"객체의 윤곽선은 설정한 값만큼 XY 평면에서 커지거나 줄어듭니다. 양수 값은 윤곽" +"을 더 크게 만들고 음수 값은 윤곽을 더 작게 만듭니다. 이 기능은 객체에 조립 문" +"제가 있을 때 크기를 약간 조정하는 데 사용됩니다." + +msgid "" +"Classic wall generator produces walls with constant extrusion width and for " +"very thin areas is used gap-fill. Arachne engine produces walls with " +"variable extrusion width" +msgstr "" +"클래식 벽 생성은 일정한 선폭으로 벽을 생성하며, 매우 얇은 영역의 경우 갭 채우" +"기가 사용됩니다. 아라크네 엔진은 가변 선폭으로 벽을 생성합니다." + +msgid "Classic" +msgstr "클래식" + +msgid "Arachne" +msgstr "아라크네" + +msgid "Wall transition length" +msgstr "벽 전환 길이" + +msgid "" +"When transitioning between different numbers of walls as the part becomes " +"thinner, a certain amount of space is allotted to split or join the wall " +"segments. It's expressed as a percentage over nozzle diameter" +msgstr "" +"부품이 얇아짐에 따라 서로 다른 수의 벽 사이를 전환할 때 벽 세그먼트를 분할하" +"거나 결합하기 위해 일정량의 공간이 할당됩니다.노즐 직경에 대한 백분율로 표시" +"됩니다." + +msgid "Wall transitioning filter margin" +msgstr "벽 전환 필터 마진" + +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" +msgstr "" +"추가 벽과 한겹 작은벽 사이를 오가는 것을 방지합니다. 이 마진은 [최소 벽 너비 " +"- 마진, 2 * 최소 벽 너비+마진] 에 이어지는 압출 선폭의 범위를 확장합니다. 이 " +"마진을 늘리면 전환 횟수가 줄어들어 압출 시작/중지 횟수와 이동 시간이 줄어듭니" +"다. 그러나 압출 선폭 변화가 크면 과소 압출 또는 과압출 문제가 발생할 수 있습" +"니다. 노즐 직경에 대한 백분율로 표시됩니다." + +msgid "Wall transitioning threshold angle" +msgstr "벽 전환 임계값 각도" + +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" +msgstr "" +"짝수 벽과 홀수 벽 사이 전환을 할 때. 이 설정보다 각도가 큰 쐐기 모양에는 전환" +"이 없으며 중앙에 남은 공간을 채우기 위한 벽이 출력되지 않습니다. 이 설정을 줄" +"이면 이러한 중심의 벽의 수와 길이가 줄어들지만 갭이 발생하거나 과압출 될 수 " +"있습니다." + +msgid "Wall distribution count" +msgstr "벽 분포 개수" + +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 "최소 기능 크기" + +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" +msgstr "" +"얇은 피처의 최소 두께. 이 값보다 얇은 모델 피처는 출력되지 않지만 최소 피처 " +"크기보다 두꺼운 모델 피처는 최소 선폭으로 넓어집니다. 노즐 직경에 대한 백분율" +"로 표시됩니다." + +msgid "Minimum wall width" +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 " +"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 "좁은 내부 솔리드 채우기 감지" + +msgid "" +"This option will auto detect narrow internal solid infill area. If enabled, " +"concentric pattern will be used for the area to speed printing up. " +"Otherwise, rectilinear pattern is used defaultly." +msgstr "" +"이 옵션은 좁은 내부 솔리드 채우기 영역을 자동으로 감지합니다. 활성화하면 출" +"력 속도를 높이기 위해 해당 영역에 동심원 패턴이 사용됩니다. 그렇지 않으면 기" +"본적으로 직선 패턴이 사용됩니다." + +msgid "invalid value " +msgstr "유효하지 않은 값 " + +#, c-format, boost-format +msgid " doesn't work at 100%% density " +msgstr " 100%% 밀도에서 작동하지 않습니다. " + +msgid "Invalid value when spiral vase mode is enabled: " +msgstr "나선형 꽃병 모드가 활성화된 경우 유효하지 않은 값: " + +msgid "too large line width " +msgstr "너무 큰 선 폭 " + +msgid " not in range " +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 "" + +msgid "Export the objects as multiple STL." +msgstr "" + +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 "UpToDate" +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 "mtcpp" +msgstr "mtcpp" + +msgid "max triangle count per plate for slicing." +msgstr "슬라이싱을 위한 플레이트당 최대 삼각형 수" + +msgid "mstpp" +msgstr "mstpp" + +msgid "max slicing time per plate in seconds." +msgstr "플레이트당 최대 슬라이싱 시간 (초)" + +msgid "No check" +msgstr "확인 안 함" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "G-code 경로 충돌 검사와 같은 유효성 검사는 실행하지 않음" + +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 "Orient the model" +msgstr "모델 방향 지정" + +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 "이 출력에서 일부 객체 건너뛰기" + +msgid "load uptodate process/machine settings when using uptodate" +msgstr "" + +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" + +msgid "Error in zip archive" +msgstr "zip 아카이브의 오류" + +msgid "Generating walls" +msgstr "벽 생성" + +msgid "Generating infill regions" +msgstr "채우기 영역 생성" + +msgid "Generating infill toolpath" +msgstr "채우기 도구 경로 생성" + +msgid "Detect overhangs for auto-lift" +msgstr "자동 리프트를 위한 오버행 감지" + +msgid "Generating support" +msgstr "서포트 생성" + +msgid "Checking support necessity" +msgstr "서포트 필요성 확인" + +msgid "floating regions" +msgstr "떠있는 영역" + +msgid "floating cantilever" +msgstr "한쪽이 떠있는 구조" + +msgid "large overhangs" +msgstr "큰 오버행" + +#, c-format, boost-format +msgid "" +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." +msgstr "" +"객체 %s에 %s이(가) 있는 것 같습니다. 물체의 방향을 바꾸거나 서포트 생성을 활" +"성화하십시오." + +msgid "Optimizing toolpath" +msgstr "도구 경로 최적화" + +msgid "Empty layers around bottom are replaced by nearest normal layers." +msgstr "하단 주변의 빈 레이어는 가장 가까운 일반 레이어로 대체됩니다." + +msgid "The model has too many empty layers." +msgstr "모델에 빈 레이어가 너무 많습니다." + +msgid "Slicing mesh" +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 "" +"An object's XY size compensation will not be used because it is also color-" +"painted.\n" +"XY Size compensation can not be combined with color-painting." +msgstr "" +"객체의 XY 크기 보정은 색상으로 칠해져 있기 때문에 사용되지 않습니다.\n" +"XY 크기 보정은 컬러 페인팅과 함께 사용할 수 없습니다." + +#, c-format, boost-format +msgid "Support: generate toolpath at layer %d" +msgstr "서포트: 레이어 %d에서 도구 경로 생성" + +msgid "Support: detect overhangs" +msgstr "서포트: 오버행 감지" + +msgid "Support: generate contact points" +msgstr "서포트: 접점 생성" + +msgid "Support: propagate branches" +msgstr "서포트: 가지 전파" + +msgid "Support: draw polygons" +msgstr "서포트: 폴리곤 그리기" + +msgid "Support: generate toolpath" +msgstr "서포트: 도구 경로 생성" + +#, c-format, boost-format +msgid "Support: generate polygons at layer %d" +msgstr "서포트: 레이어 %d에서 폴리곤 생성" + +#, c-format, boost-format +msgid "Support: fix holes at layer %d" +msgstr "서포트: %d 레이어에 구멍 수정" + +#, c-format, boost-format +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)여야 합" +"니다." + +msgid "Loading of a model file failed." +msgstr "모델 파일 로드에 실패했습니다." + +msgid "The supplied file couldn't be read because it's empty" +msgstr "제공된 파일이 비어 있어 읽을 수 없습니다." + +msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." +msgstr "" +"알 수 없는 파일 형식: 입력 파일의 확장자는.3mf 또는.zip.amf여야 합니다." + +msgid "Canceled" +msgstr "취소됨" + +msgid "load_obj: failed to parse" +msgstr "load_obj: 구문 분석에 실패" + +msgid "The file contains polygons with more than 4 vertices." +msgstr "이 파일에는 꼭짓점이 4개 이상인 다각형이 포함되어 있습니다." + +msgid "The file contains polygons with less than 2 vertices." +msgstr "이 파일에는 꼭짓점이 2개 미만인 다각형이 포함되어 있습니다." + +msgid "The file contains invalid vertex index." +msgstr "파일에 잘못된 꼭짓점 인덱스가 포함되어 있습니다." + +msgid "This OBJ file couldn't be read because it's empty." +msgstr "이 OBJ 파일은 비어 있어서 읽을 수 없습니다." + +msgid "Flow Rate Calibration" +msgstr "" + +msgid "Max Volumetric Speed Calibration" +msgstr "" + +msgid "Manage Result" +msgstr "" + +msgid "Manual Calibration" +msgstr "" + +msgid "Result can be read by human eyes." +msgstr "" + +msgid "Auto-Calibration" +msgstr "" + +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" +msgstr "완료" + +msgid "Wiki" +msgstr "" + +msgid "How to use calibration result?" +msgstr "" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" + +msgid "Calibration not supported" +msgstr "" + +msgid "Flow Dynamics" +msgstr "" + +msgid "Flow Rate" +msgstr "" + +msgid "Max Volumetric Speed" +msgstr "" + +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + +msgid "The name cannot be empty." +msgstr "" + +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "실패" + +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 "" + +msgid "Please find the best line on your plate" +msgstr "" + +msgid "Input Value" +msgstr "" + +msgid "Save to Filament Preset" +msgstr "" + +msgid "Preset" +msgstr "" + +msgid "Record Factor" +msgstr "" + +msgid "We found the best flow ratio for you" +msgstr "" + +msgid "Flow Ratio" +msgstr "" + +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "" + +msgid "Please enter the name of the preset you want to save." +msgstr "" + +msgid "Calibration1" +msgstr "" + +msgid "Calibration2" +msgstr "" + +msgid "Please find the best object on your plate" +msgstr "" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "" + +msgid "Skip Calibration2" +msgstr "" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "플레이트 유형" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" +msgstr "" + +msgid "PA Calibration" +msgstr "" + +msgid "PA Tower" +msgstr "" + +msgid "PA Line" +msgstr "" + +msgid "PA Pattern" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Start PA: " +msgstr "" + +msgid "End PA: " +msgstr "" + +msgid "PA step: " +msgstr "" + +msgid "Print numbers" +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" +msgstr "" + +msgid "Temperature calibration" +msgstr "" + +msgid "PLA" +msgstr "" + +msgid "ABS/ASA" +msgstr "" + +msgid "PETG" +msgstr "" + +msgid "TPU" +msgstr "" + +msgid "PA-CF" +msgstr "" + +msgid "PET-CF" +msgstr "" + +msgid "Filament type" +msgstr "" + +msgid "Start temp: " +msgstr "" + +msgid "End temp: " +msgstr "" + +msgid "Temp step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start temp: <= 350\n" +"End temp: >= 180\n" +"Start temp > End temp + 5)" +msgstr "" + +msgid "Max volumetric speed test" +msgstr "" + +msgid "Start volumetric speed: " +msgstr "" + +msgid "End volumetric speed: " +msgstr "" + +msgid "step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 0 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "VFA test" +msgstr "" + +msgid "Start speed: " +msgstr "" + +msgid "End speed: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 10 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "Start retraction length: " +msgstr "" + +msgid "End retraction length: " +msgstr "" + +msgid "mm/mm" +msgstr "" + +msgid "Network lookup" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Service name" +msgstr "" + +msgid "OctoPrint version" +msgstr "" + +msgid "Searching for devices" +msgstr "" + +msgid "Finished" +msgstr "완료됨" + +msgid "Send to print" +msgstr "" + +msgid "Upload to Printer Host with the following filename:" +msgstr "" + +msgid "Use forward slashes ( / ) as a directory separator if needed." +msgstr "" + +#, c-format, boost-format +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" +msgstr "" + +msgid "Simulate" +msgstr "" + +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "업로드 중..." + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" +msgstr "" + +#: resources/data/hints.ini: [hint:3D Scene Operations] +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 장면에서 마우스와 터치 패널로 보기 및 객체/부품 선택을 제어하는 방법을 알" +"고 있습니까?" + +#: resources/data/hints.ini: [hint:Cut Tool] +msgid "" +"Cut Tool\n" +"Did you know that you can cut a model at any angle and position with the " +"cutting tool?" +msgstr "" +"컷팅 툴\n" +"절삭 공구를 사용하여 어떤 각도와 위치에서든 모델을 절단할 수 있다는 사실을 알" +"고 계셨습니까?" + +#: 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?" +msgstr "" +"모델 수정 \n" +"많은 슬라이싱 문제를 피하기 위해 손상된 3D 모델을 수정할 수 있다는 것을 알고 " +"계셨습니까?" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "" +"Timelapse\n" +"Did you know that you can generate a timelapse video during each print?" +msgstr "" +"타임랩스\n" +"매번 출력할 때마다 타임랩스 비디오를 생성할 수 있다는 사실을 알고 계셨습니까?" + +#: resources/data/hints.ini: [hint:Auto-Arrange] +msgid "" +"Auto-Arrange\n" +"Did you know that you can auto-arrange all objects in your project?" +msgstr "" +"자동 정렬\n" +"프로젝트의 모든 오브젝트를 자동으로 정렬할 수 있다는 사실을 알고 계셨나요?" + +#: 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?" +msgstr "" +"자동 회전\n" +"클릭 한 번으로 객체를 최적의 방향으로 회전하여 출력할 수 있다는 사실을 알고 " +"계셨습니까?" + +#: 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." +msgstr "" +"선택면 바닥으로\n" +"모델의 한 면이 프린트 베드에 오도록 모델의 방향을 빠르게 조정할 수 있다는 사" +"실을 알고 계셨나요?“선택면 바닥에 놓기” 기능을 선택하거나 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?" +msgstr "" +"객체 목록\n" +"모든 객체/부품을 목록으로 볼 수 있고 각 객체/부품의 설정을 변경할 수 있다는 " +"것을 알고 계셨습니까?" + +#: 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. Read " +"more in the documentation." +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?" +msgstr "" +"슬라이싱 파라미터 테이블\n" +"테이블에서 모든 객체/부품을 보고 각 객체/부품의 설정을 변경할 수 있다는 사실" +"을 알고 계셨습니까?" + +#: 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?" +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 Bambu Studio. Read more in the documentation." +msgstr "" +"부품 빼기\n" +"네거티브 부품 수정자를 사용하여 한 메쉬를 다른 메쉬로부터 뺄 수 있다는 것을 " +"알고 계셨나요? 이렇게 하면 예를 들어 Bambu Studio에서 직접 크기를 조정할 수 " +"있는 구멍을 만들 수 있습니다. 자세한 내용은 설명서를 참조하십시오." + +#: 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" +"Bambu Studio supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" +msgstr "" +"STEP\n" +"STL 대신 STEP 파일을 슬라이싱하여 출력 품질을 향상시킬 수 있다는 사실을 알고 " +"계셨나요?\n" +"뱀부 스튜디오는 STEP 파일 슬라이싱을 지원하여 저해상도 STL보다 더 부드러운 결" +"과물을 제공합니다. 한번 사용해 보세요!" + +#: 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!" +msgstr "" +"Z 재봉선 위치\n" +"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." +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." +msgstr "" +"출력물을 여러 플레이트로 분할\n" +"부품이 많은 모델을 개별 플레이트로 분할하여 프린트할 수 있다는 사실을 알고 계" +"셨나요? 이렇게 하면 모든 부품을 추적하는 프로세스가 간소화됩니다." + +#: 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!" +msgstr "" +"어댑티브 레이어 높이로 프린트 속도 향상\n" +"어댑티브 레이어 높이 옵션을 사용하면 모델을 더 빠르게 출력할 수 있다는 사실" +"을 알고 계셨나요? 확인해 보세요!" + +#: 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." +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!" +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." +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?" +msgstr "" +"안착력 향상을 위한 브림\n" +"출력된 모델이 출력 표면과의 접촉 인터페이스가 작은 경우 브림을 사용하는 것이 " +"좋다는 사실을 알고 계셨습니까?" + +#: 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?" +msgstr "" +"여러 객체의 매개 변수 설정\n" +"선택한 모든 객체의 슬라이싱 파라미터를 한 번에 설정할 수 있다는 사실을 알고 " +"계셨나요?" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "" +"Stack objects\n" +"Did you know that you can stack objects as a whole one?" +msgstr "" +"객체 쌓기\n" +"객체들을 하나의 전체로 쌓을 수 있다는 사실을 알고 계셨나요?" + +#: 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?" +msgstr "" +"서포트/객체/인필에 짜내기\n" +"필라멘트 교체 중에 필라멘트를 서포트/객체/인필로 짜냄으로써 낭비되는 필라멘트" +"를 줄일 수 있다는 사실을 알고 계셨습니까?" + +#: 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?" +msgstr "" +"강도 향상\n" +"더 많은 벽 루프와 더 높은 내부채움 밀도를 사용하여 모델의 강도를 높일 수 있다" +"는 사실을 알고 계셨습니까?" + +#~ msgid "" +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" +#~ msgstr "" +#~ "평평한 상단 표면에 하나의 벽만 사용하여 상단 채우기 패턴에 더 많은 공간을 " +#~ "확보합니다." + +#~ msgid "Nozzle HRC" +#~ msgstr "노즐 HRC" + +#~ msgid "" +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." +#~ msgstr "" +#~ "노즐의 경도. 0은 슬라이싱 중에 노즐 경도를 확인할 필요가 없음을 의미합니" +#~ "다." + +#~ msgid "HRC" +#~ msgstr "HRC" + +#, 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." +#~ msgstr "" +#~ "선폭에 비례하여 오버행 비율을 감지하고 다른 속도를 사용하여 출력합니다. " +#~ "100%% 오버행의 경우 브릿지 속도가 사용됩니다." + +#~ msgid "Pause Print" +#~ msgstr "출력 일시정지" + +#~ msgid "Edit Pause Print Message" +#~ msgstr "일시정지 메시지 편집" + +#~ msgid "Delete Pause Print" +#~ msgstr "일시정지 삭제" + +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "동적 압출량 캘리의 요인" + +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Flow Calibration" +#~ msgstr "Flow calibration" + +#~ msgid "" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "\n" +#~ "%1% 는 출력배제영역에 너무 가까워 출력시 충돌이 발생할 수 있습니다." + +#~ msgid "" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "%1% 는 출력배제영역에 너무 가깝습니다; 출력시 충돌이 발생할 수 있습니다. " + +#~ msgid "&Edit" +#~ msgstr "&Edit" + +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "3D Models" +#~ msgstr "3D 모델" + +#~ msgid "AMSMaterialsSetting" +#~ msgstr "AMS 재료 설정" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS 자동 필라멘트 전환" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "현재 AMS 설정은 외부 스풀 사용을 지원하지 않습니다." + +#~ msgid "AWS PRE host" +#~ msgstr "AWS PRE host" + +#~ msgid "AWS host" +#~ msgstr "AWS 호스트" + +#~ msgid "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "실제 볼륨 = 짜내기 볼륨* 승수" + +#~ msgid "Adaptive layer height" +#~ msgstr "어댑티브 레이어" + +#~ msgid "Add Custom Printer" +#~ msgstr "커스텀 프린터 추가" + +#~ msgid "Ams filament backup" +#~ msgstr "AMS 필라멘트 백업" + +#~ msgid "" +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." +#~ msgstr "" +#~ "객체가 빌드플레이트의 가장자리에 놓여 있거나 높이 제한을 초과했습니다.\n" +#~ "문제해결을 위해 빌드 플레이트 위 또는 밖으로 완전히 이동시키고, 높이가 빌" +#~ "드 볼륨 내에 있는지 확인하십시오." + +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "아라크네 엔진은 오버행 감속이 비활성화된 경우에만 작동합니다.\n" +#~ "이 경우 빠르게 출력할 때 오버행 표면의 품질이 저하될 수 있습니다." + +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly\n" +#~ msgstr "" +#~ "아라크네 엔진은 오버행 감속이 비활성화된 경우에만 작동합니다.\n" +#~ "이 경우 빠르게 출력할 때 오버행 표면의 품질이 저하될 수 있습니다.\n" + +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "선택한 부품들을 한 부품으로 결합" + +#~ msgid "Auto arrange" +#~ msgstr "자동 정렬" + +#~ 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 project." +#~ msgstr "" +#~ "선택한 객체 또는 모든 객체의 방향을 자동으로 지정합니다.\n" +#~ "선택된 객체가 있는 경우, 선택된 객체의 방향만 지정합니다. 그렇지 않으면 프" +#~ "로젝트의 모든 객체의 방향을 지정합니다." + +#~ msgid "Auto refill" +#~ msgstr "자동 리필" + +#~ msgid "Aux Cooling" +#~ msgstr "보조 냉각" + +#~ msgid "Avoid crossing wall when travel" +#~ msgstr "이동시 벽 피하기" + +#~ msgid "Backup" +#~ msgstr "백업" + +#~ msgid "Backup interval" +#~ msgstr "백업 주기" + +#~ msgid "" +#~ "Bed exclude area that can't used as printable area in X-Y plane. For " +#~ "example, the bottom left area which is used to cut filament in X1 when " +#~ "printing multi colors with AMS. The area is expressed as polygon by " +#~ "points in following format: \"XxY, XxY, ...\"" +#~ msgstr "" +#~ "베드의 X-Y 평면에서 출력 가능한 영역으로 사용할 수 없는 영역은 제외됩니" +#~ "다. 예를 들어, 왼쪽 하단 영역은 AMS로 멀티 컬러를 출력할 시 필라멘트를 자" +#~ "를 때 사용되는 공간입니다. 영역의 크기는 다음 형식의 점으로 다각형으로 표" +#~ "현됩니다: \"XxY, XxY, ...\"" + +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "베드 온도가 이 필라멘트의 유리화 온도보다 높습니다.\n" +#~ "이는 노즐목 막힘이나 출력실패를 일으킬 수 있습니다. " + +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "하단면 최소두께" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "하단 레이어" + +#~ msgid "" +#~ "Calibration completed. Please select the factors according to the left " +#~ "figure and fill them in the input boxes." +#~ msgstr "" +#~ "캘리브레이션이 완료되었습니다. 왼쪽 그림에 따라 최적값을 선택하고 입력 상" +#~ "자에 기입하십시오.." + +#~ msgid "" +#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " +#~ "same LAN?" +#~ msgstr "" +#~ "%s의 LAN IP 주소를 찾을 수 없습니다. %s과 Bambu Studio가 같은 LAN에 있습니" +#~ "까?" + +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "하나 이상의 파일 선택(3mf/step/stl/obj/amf):" + +#~ msgid "Choose save directory" +#~ msgstr "저장 디렉토리 선택" + +#~ msgid "Clean" +#~ msgstr "지우기" + +#~ msgid "Clear all" +#~ msgstr "모두 지우기" + +#~ msgid "" +#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " +#~ "collision when print object by object" +#~ msgstr "" +#~ "객체별 출력시 충돌 방지를 위해 자동 정렬의 기준값으로 사용되는 압출기 주" +#~ "변 안전거리 반경" + +#~ msgid "Click the pencil icon to edit the filament." +#~ msgstr "필라멘트를 편집하려면 연필 아이콘을 클릭합니다." + +#~ msgid "Clipping of view" +#~ msgstr "보기 클리핑" + +#~ msgid "Color Print" +#~ msgstr "컬러 출력" + +#~ msgid "Comsumption" +#~ msgstr "소모량" + +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "필라멘트가 압출되었는지 확인" + +#~ msgid "Cool Plate" +#~ msgstr "쿨 플레이트/PLA 플레이트" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + +#~ msgid "Creating" +#~ msgstr "생성 중…" + +#~ msgid "Ctrl + Any arrow" +#~ msgstr "Ctrl + 임의 화살표" + +#~ msgid "Ctrl + Left mouse button" +#~ msgstr "Ctrl + 마우스 왼쪽 버튼" + +#~ msgid "Debug" +#~ msgstr "디버그" + +#~ msgid "" +#~ "Desiccant status lower than two bars indicates that desiccant can be " +#~ "inactive. Please change the desiccant.(Higher the better)" +#~ msgstr "" +#~ "건조제 상태가 막대 두 개보다 낮으면 건조제가 비활성 상태일 수 있음을 나타" +#~ "냅니다. 건조제를 교체하세요. (높을수록 좋습니다)" + +#~ msgid "Designer" +#~ msgstr "디자이너" + +#~ msgid "Device:" +#~ msgstr "장치:" + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "오버행 감속을 자동으로 비활성화하시겠습니까?\n" +#~ "예 - 아라크네를 활성화하고 오버행 감속을 비활성화합니다.\n" +#~ "아니요 - 이 출력에 아라크네를 사용하지 않습니다." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "LAN 모드가 비활성화되어 [%s] 프린터와의 연결이 끊겼습니다. 사용자 계정으" +#~ "로 로그인하여 프린터를 다시 연결하십시오." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "LAN 모드가 활성화되어 있기 때문에 [%s] 프린터와의 연결이 끊겼습니다. 프린" +#~ "터 화면에서 받을 수 있는 액세스 코드를 입력하여 프린터를 다시 연결하십시" +#~ "오." + +#~ msgid "Display printable box" +#~ msgstr "출력 가능 영역 표시" + +#~ msgid "Display shadow of objects" +#~ msgstr "객체의 그림자를 표시" + +#~ msgid "Display triangles of models" +#~ msgstr "모델의 메쉬삼각형 표시하기" + +#~ msgid "" +#~ "Do not recommand 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 "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "Contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "뱀부 클라우드로부터 개인 데이터를 동기화하시겠습니까?\n" +#~ "여기에는 다음 정보가 포함됩니다:\n" +#~ "1. 프로세스 프리셋\n" +#~ "2. 필라멘트 프리셋\n" +#~ "3. 프린터 프리셋\n" + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "It contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "Bambu Cloud의 개인 데이터를 동기화하시겠습니까? \n" +#~ "여기에는 다음 정보가 포함됩니다.\n" +#~ "1.프로세스 프리셋\n" +#~ "2.필라멘트 프리셋\n" +#~ "3.프린터 프리셋\n" + +#~ msgid "" +#~ "Don't retract when the travel is in infill area absolutely. That means " +#~ "the oozing can't been seen" +#~ msgstr "" +#~ "완전히 내부채움 영역 내에서 이동이 일어날때 리트랙션을 비활성화합니다." + +#~ msgid "Downloading Bambu Network plug-in" +#~ msgstr "뱀부 네트워크 플러그인 다운로드" + +#~ msgid "Dump video" +#~ msgstr "Dump video" + +#~ msgid "Edit plate setitngs" +#~ msgstr "플레이트 설정 편집" + +#~ msgid "" +#~ "Enabling this option means the height of every layer except the first " +#~ "will be automatically calculated during slicing according to the slope of " +#~ "the model’s surface.\n" +#~ "Note that this option only takes effect if no prime tower is generated in " +#~ "current plate." +#~ msgstr "" +#~ "이 옵션을 활성화하면 첫 레이어 이후의 각 레이어의 높이가 모델 표면의 경사" +#~ "에 따라 자동으로 계산됩니다.\n" +#~ "이 옵션은 현재 플레이트에 프라임 타워가 없는 경우에만 적용됩니다." + +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + +#~ msgid "Enter a search term" +#~ msgstr "검색어를 입력하세요" + +#~ msgid "Entering Seam painting" +#~ msgstr "재봉선 페인팅 들어가기" + +#~ msgid "Erase painting" +#~ msgstr "페인팅 지우기" + +#~ msgid "Error at line %1%:\n" +#~ msgstr "%1% 줄의 오류:\n" + +#~ msgid "Export." +#~ msgstr "내보내기" + +#~ msgid "Export G-Code." +#~ msgstr "G 코드로 내보내기" + +#~ msgid "Export Sliced File" +#~ msgstr "슬라이스 파일 내보내기" + +#~ msgid "Export current Sliced file" +#~ msgstr "슬라이스 파일 내보내기" + +#~ msgid "Export ok." +#~ msgstr "내보내기 확인." + +#~ msgid "Export sliced file" +#~ msgstr "슬라이스 파일 내보내기" + +#~ msgid "Extruder position" +#~ msgstr "압출기 위치" + +#~ msgid "" +#~ "Extrusion compensation calibration is not supported when using Textured " +#~ "PEI Plate" +#~ msgstr "" +#~ "텍스쳐 PEI 플레이트를 사용할 때는 압출보상 캘리브레이션이 지원되지 않습니" +#~ "다." + +#~ msgid "" +#~ "Failed to connect to the printer through LAN. Please enter the correct " +#~ "printer IP address and access code." +#~ msgstr "" +#~ "LAN을 통해 프린터에 연결하지 못했습니다. 올바른 프린터 IP 주소와 액세스 코" +#~ "드를 입력하십시오." + +#~ msgid "Failed to get ticket" +#~ msgstr "티켓을 받지 못했습니다." + +#~ msgid "Failed to parse login report reason111" +#~ msgstr "로그인 보고서의 원인을 해석하는 데 실패" + +#~ msgid "Failed uploading print file" +#~ msgstr "출력파일 업로드 실패" + +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "출력 파일 업로드에 실패했습니다. IP 주소를 다시 입력하십시오." + +#~ msgid "Failure of bind" +#~ msgstr "프린터 연결 실패" + +#~ msgid "Failure of printer login" +#~ msgstr "프린터 로그인 실패" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "외부 스풀에서 새 필라멘트 공급" + +#~ msgid "Filament 1" +#~ msgstr "필라멘트 1" + +#~ msgid "Filament N XX" +#~ msgstr "Filament N XX" + +#~ msgid "" +#~ "Filament index %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 " +#~ "슬롯 할당을 지원하도록 프린터 펌웨어를 업데이트하십시오." + +#~ msgid "" +#~ "Filament index %s exceeds the number of AMS slots. Please update the " +#~ "printer firmware to support AMS slot assignment." +#~ msgstr "" +#~ "필라멘트 인덱스 %s이(가) AMS 슬롯 수를 초과합니다. AMS 슬롯 할당을 지원하" +#~ "도록 프린터 펌웨어를 업데이트하십시오." + +#~ msgid "" +#~ "Filament index does not match the filament in AMS slot. Please update the " +#~ "printer firmware to support AMS slot assignment." +#~ msgstr "" +#~ "필라멘트 인덱스가 AMS 슬롯의 필라멘트와 일치하지 않습니다.AMS 슬롯 할당을 " +#~ "지원하도록 프린터 펌웨어를 업데이트하십시오." + +#~ msgid "" +#~ "Filament index exceeds the number of AMS slots. Please update the printer " +#~ "firmware to support AMS slot assignment." +#~ msgstr "" +#~ "필라멘트 인덱스가 AMS 슬롯 수를 초과합니다.AMS 슬롯 할당을 지원하도록 프린" +#~ "터 펌웨어를 업데이트하십시오." + +#~ msgid "" +#~ "Filament to print support and raft. \"Default\" means no specific " +#~ "filament for support and current filament is used" +#~ msgstr "" +#~ "서포트 및 라프트를 출력할 필라멘트입니다. '기본값'은 서포트에 대한 특정 필" +#~ "라멘트가 없으며 현재 필라멘트가 사용됨을 의미합니다." + +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "서포트 및 스커트를 출력하는 데 사용되는 필라멘트입니다. 0은 서포트용 특정 " +#~ "필라멘트가 없으며 현재 필라멘트가 사용됨을 의미합니다." + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "서포트 인터페이스를 출력할 필라멘트입니다. 0은 서포트 인터페이스를 위한 특" +#~ "정 필라멘트가 없으며 현재 필라멘트가 사용됨을 의미합니다." + +#~ msgid "Filaments Auto refill" +#~ msgstr "필라멘트 자동 리필" + +#~ msgid "Filaments Selection" +#~ msgstr "필라멘트 선택" + +#~ msgid "Filaments replace" +#~ msgstr "백업 필라멘트" + +#~ msgid "Fix model locally" +#~ msgstr "로컬에서 모델 수정" + +#~ msgid "Fix model through cloud" +#~ msgstr "클라우드를 통한 모델 수정" + +#~ msgid "Flushed filament" +#~ msgstr "짜낸 필라멘트" + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "출력물의 오버행 각도가 설정 값을 초과할 때 냉각 팬이 특정 속도를 사용하도" +#~ "록 강제합니다. 하위 레이어의 서포트 없이 사용할 수 있는 라인의 양을 백분율" +#~ "로 표시합니다." + +#~ msgid "Fragment Filter" +#~ msgstr "Fragment Filter" + +#~ msgid "Fragment area" +#~ msgstr "Fragment area" + +#~ msgid "Fragment filter" +#~ msgstr "Fragment filter" + +#~ msgid "G-code" +#~ msgstr "G 코드" + +#~ msgid "" +#~ "Green represents that AMS humidity is normal, orange and red represent " +#~ "that humidity is too high.(Lower the better)" +#~ msgstr "" +#~ "녹색은 AMS 습도가 정상임을 나타내고 주황색과 빨간색은 습도가 너무 높음을 " +#~ "나타냅니다.(낮을수록 좋음)" + +#~ msgid "" +#~ "Heat the nozzle to target \n" +#~ "temperature" +#~ msgstr "노즐 설정온도로 가열" + +#~ msgid "Heat the nozzle to target temperature" +#~ msgstr "노즐을 목표 온도로 가열합니다." + +#~ msgid "Height:" +#~ msgstr "높이:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "객체별 출력시 충돌 방지를 위해 자동 정렬의 기준값으로 사용되는 노즐끝에서 " +#~ "탄소봉까지 Z 방향의 안전거리 높이" + +#~ msgid "" +#~ "If enabled, a timelapse video will be generated for each print. After " +#~ "each layer is printed, the toolhead will move to the excess chute, and " +#~ "then a snapshot is taken with the chamber camera. All of these snapshots " +#~ "are composed into a timelapse video when printing completes. Since the " +#~ "melt filament may leak from the nozzle during the process of taking a " +#~ "snapshot, prime tower is required for nozzle priming." +#~ msgstr "" +#~ "활성화되면 각 출력에 대해 타임랩스 비디오가 생성됩니다. 각 레이어가 출력" +#~ "된 후 도구 헤드가 똥통으로 이동한 다음 챔버 카메라로 스냅샷을 찍습니다. " +#~ "이 모든 스냅샷은 출력이 완료되면 타임랩스 비디오로 만들어집니다. 스냅샷을 " +#~ "찍는 과정에서 녹은 필라멘트가 노즐에서 새어 나올 수 있으므로 노즐 프라이밍" +#~ "을 위해서는 프라임 타워가 필요합니다." + +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "3MF/STL/STEP/OBJ/AMF 가져오기" + +#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +#~ msgstr "STL/STEP/3MF/OBJ/AMF 파일에서 형상 데이터를 가져옵니다." + +#~ msgid "In the calibration of extrusion flow" +#~ msgstr "압출량 캘리브레이션 시" + +#~ msgid "In the calibration of laser scanner" +#~ msgstr "레이저 스캐너 캘리브레이션 시" + +#~ msgid "Initialize failed [%d]!" +#~ msgstr "초기화 실패 [%d]!" + +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "초기화 실패 (프린터에서 지원되지 않음)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "초기화 실패 (LAN 전용 모드에서는 지원되지 않음)!" + +#~ msgid "Initialize failed (Not supported without remote video tunnel)!" +#~ msgstr "초기화 실패 (원격 비디오 터널 없이는 지원되지 않음)!" + +#~ msgid "Inner wall speed" +#~ msgstr "내벽 속도" + +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "객체 %s에는 완전히 부동 영역이 있는 것 같습니다.개체의 방향을 바꾸거나 서" +#~ "포트 생성을 활성화하십시오." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "개체 %s에 큰 오버행이 있는 것 같습니다.서포트 생성을 사용하도록 설정하십시" +#~ "오." + +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "출력하려면 %s 개체에 서포트가 필요한 것 같습니다. 서포트 생성을 사용하도" +#~ "록 설정하세요." + +#~ msgid "Keep lower part" +#~ msgstr "아래 부품 유지" + +#~ msgid "Keep upper part" +#~ msgstr "윗 부품 유지" + +#~ msgid "Layer Time(log): " +#~ msgstr "레이어 시간(로그): " + +#~ msgid "Layer Time (log)" +#~ msgstr "레이어 시간 (로그)" + +#~ msgid "Layers: %d/%d" +#~ msgstr "레이어: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "레이어: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "레이어: N/A" + +#~ msgid "Layers and Perimeters" +#~ msgstr "레이어 및 둘레" + +#~ msgid "Leaving Seam painting" +#~ msgstr "재봉선 페인팅 나가기" + +#~ msgid "Line type" +#~ msgstr "라인 유형" + +#~ msgid "Loading user presets..." +#~ msgstr "사용자 프리셋 불러오는 중..." + +#~ msgid "Management" +#~ msgstr "관리" + +#~ msgid "Manual" +#~ msgstr "수동" + +#~ msgid "Max travel detour distance" +#~ msgstr "최대 우회 이동경로 거리" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "벽을 가로지르는 이동을 피하기 위한 최대 우회경로 거리. 만일 이동거리가 " +#~ "이 값보다 크면 우회하지 않습니다." + +#~ msgid "Media" +#~ msgstr "영상" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "프린터의 LAN IP가 누락되었습니다!" + +#~ msgid "Modify" +#~ msgstr "수정" + +#~ msgid "Module" +#~ msgstr "모듈" + +#~ msgid "Monitoring" +#~ msgstr "모니터링" + +#~ msgid "Monitoring Recording" +#~ msgstr "모니터링 녹화" + +#~ msgid "NO AMS" +#~ msgstr "AMS 없음" + +#~ msgid "No files" +#~ msgstr "파일 없음" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "LAN-only 모드에서는 액세스할 수 없습니다." + +#~ msgid "Not supported." +#~ msgstr "지원되지 않음" + +#~ msgid "Not supported by this model of printer!" +#~ msgstr "이 프린터 모델에서는 지원되지 않습니다!" + +#~ msgid "" +#~ "Note : The location of IP and access code on the machine is as follows :" +#~ msgstr "참고: 기기의 IP 및 액세스 코드 위치는 다음과 같습니다." + +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "객체의 첫 레이어가 비어 있어 출력할 수 없습니다. 하단을 잘라내거나 서포트" +#~ "를 활성화하십시오." + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "Open &PrusaSlicer" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "PrusaSlicer 열기" + +#~ msgid "Output file" +#~ msgstr "출력 파일" + +#~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" +#~ msgstr "P1P 일반 설정 - 메인 화면 사이드 바의 WLAN" + +#~ msgid "Paint-on seam editing" +#~ msgstr "페인트온 재봉선 편집" + +#~ msgid "Part Cooling" +#~ msgstr "부품 냉각" + +#~ msgid "Pause(heated bed temperature error)" +#~ msgstr "일시정지 (베드 온도 오류)" + +#~ msgid "Pause(hotend temperature error)" +#~ msgstr "일시정지 (핫엔드 온도 오류)" + +#~ msgid "Pause(toolhead shell off)" +#~ msgstr "일시정지 (툴헤드 덮개 벗겨짐)" + +#~ msgid "Per object edit" +#~ msgstr "객체별 수정" + +#~ msgid "Plate %d: %s does not support filament %s\n" +#~ msgstr "플레이트 %d: %s은 (는) 필라멘트 %s을 (를) 지원하지 않습니다.\n" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "플레이트 %d: %s가 필라멘트 %s를 지원하지 않습니다.\n" + +#~ msgid "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "플레이트 %d: %s은(는) 필라멘트 %s (%s)를 지원하지 않습니다." + +#~ msgid "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "플레이트 %d: %s는 필라멘트 %s (%s) 을 지원하지 않습니다.\n" + +#~ msgid "Plate type" +#~ msgstr "플레이트 유형" + +#~ msgid "Plate types supported by the printer" +#~ msgstr "프린터에서 지원되는 플레이트 유형" + +#~ msgid "Please Fill Task Report." +#~ msgstr "작업 보고서를 작성해 주세요." + +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "출력물 전송을 계속하려면 다음 정보를 체크하고 확인을 클릭하세요:" + +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:\n" +#~ msgstr "" +#~ "출력을 계속하려면 다음 정보를 확인하고 \n" +#~ "확인을 클릭하십시오:\n" + +#~ msgid "Please fill report first." +#~ msgstr "먼저 보고서를 작성해 주세요." + +#~ msgid "Please log out and login to the printer again." +#~ msgstr "로그아웃한 후 프린터에 다시 로그인하십시오." + +#~ msgid "Please upgrade your printer first" +#~ msgstr "먼저 프린터를 업데이트하세요." + +#~ msgid "Position:" +#~ msgstr "위치:" + +#~ msgid "" +#~ "Preview only mode:\n" +#~ "The loaded file contains gcode only." +#~ msgstr "" +#~ "미리보기 전용 모드:\n" +#~ "불러온 파일은 G코드만 포함하고 있습니다." + +#~ msgid "Preview only mode for gcode file." +#~ msgstr "G-code 파일의 미리 보기 전용 모드입니다." + +#~ msgid "" +#~ "Prime tower is required by timelapse. Do you want to enable both of them?" +#~ msgstr "" +#~ "타임랩스를 위해선 프라임타워가 필요합니다. 둘 다 활성화하시겠습니까?" + +#~ msgid "" +#~ "Prime tower is required by timeplase. Are you sure you want to disable " +#~ "both of them?" +#~ msgstr "" +#~ "타임랩스를 위해선 프라임타워가 필요합니다. 둘 다 비활성화하시겠습니까?" + +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "이 옵션을 사용하면 새 필라멘트로 전환한 후 타워를 출력하여 노즐에 남아 있" +#~ "는 이전 필라멘트의 잔여물을 짜낼 수 있습니다." + +#~ msgid "Print file not found, please slice again" +#~ msgstr "출력파일을 찾을 수 없습니다. 다시 슬라이스하세요." + +#~ msgid "Printer Selection" +#~ msgstr "프린터 선택" + +#~ msgid "Printer firmware does not support material = >ams slot mapping." +#~ msgstr "프린터 펌웨어가 재료 = > AMS 슬롯 매핑을 지원하지 않습니다." + +#~ msgid "Printing List" +#~ msgstr "출력 리스트" + +#~ 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 printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "필라멘트 교체 후 퍼징은 내부채움에서 이루어집니다.이렇게 하면 버리는 필라" +#~ "의 양이 줄어들고 출력시간이 단축될 수 있습니다. 투명 필라멘트로 벽을 인쇄" +#~ "한 경우 혼색된 내부채움이 보일 수 있습니다." + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "필라멘트 교체 후 퍼징은 객체 서포트 내에서 이루어집니다.이렇게 하면 버리" +#~ "는 필라의 양이 줄어들고 출력 시간이 단축될 수 있습니다." + +#~ msgid "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "새 필라멘트를 압출기에 밀어 넣습니다." + +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "" +#~ "툴헤드를 보여주지 않고 프린트 타임랩스 비디오를 녹화합니다. 이 모드에서는 " +#~ "레이어가 변경될 때마다 툴 헤드가 똥통 근처로 이동한 다음 카메라로 스냅샷" +#~ "을 촬영합니다. 프린팅이 완료되면 모든 스냅샷을 이용해 타임랩스 비디오가 생" +#~ "성됩니다." + +#~ msgid "Reduce Triangles" +#~ msgstr "삼각형 수 줄이기" + +#~ msgid "Reload item" +#~ msgstr "항목 다시 로드" + +#~ msgid "Reload items" +#~ msgstr "항목 다시 로드" + +#~ msgid "Repair" +#~ msgstr "복구" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "모델링의 메쉬가 비매니폴드일 경우 복구합니다." + +#~ msgid "Report" +#~ msgstr "보고" + +#~ msgid "Rotation:" +#~ msgstr "회전:" + +#~ msgid "Save configuration as:" +#~ msgstr "설정을 다른 이름으로 저장:" + +#~ msgid "Select Bed Type" +#~ msgstr "플레이트 유형 선택" + +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "프린터로 전송에 실패했습니다.다시 시도해 주세요." + +#~ msgid "Sending" +#~ msgstr "전송 중…" + +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "클라우드 서비스를 통한 G 코드 파일 전송" + +#~ msgid "Set Printable" +#~ msgstr "출력 가능 설정" + +#~ msgid "Set Unprintable" +#~ msgstr "출력 불가 설정" + +#~ msgid "Set pen size" +#~ msgstr "펜 크기 설정" + +#~ msgid "Shift + Any arrow" +#~ msgstr "Shift + 임의 화살표" + +#~ msgid "Shift + Mouse wheel" +#~ msgstr "Shift + 마우스 휠" + +#~ msgid "Show Log" +#~ msgstr "로그 표시" + +#~ msgid "Show Model Mesh(TODO)" +#~ msgstr "모델 메쉬 보기" + +#~ msgid "Show Model Shadow(TODO)" +#~ msgstr "모델 그림자 표시" + +#~ msgid "Show Printable Box(TODO)" +#~ msgstr "출력 가능 영역 보기" + +#~ msgid "Spaghetti Detection" +#~ msgstr "스파게티 감지" + +#~ msgid "Spaghetti and Excess Chute Pileup Detection" +#~ msgstr "스파게티 및 똥통 가득참 감지" + +#~ msgid "Spiral mode" +#~ msgstr "나선형 꽃병 모드" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "나선형(꽃병) 모드는 벽 수 1, 서포트 비활성, 상단 두께가 0, 내부채움 0 일때" +#~ "만 사용가능합니다. \n" + +#~ 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, 타임랩스 유형 일반." + +#~ msgid "Start" +#~ msgstr "시작" + +#~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" +#~ msgstr "스파게티 또는 똥통 가득참이 감지되면 출력 중지" + +#~ msgid "Stop printing when spaghetti detected" +#~ msgstr "스파게티가 감지되면 출력 중지" + +#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" +#~ msgstr "" +#~ "성공적으로 보내졌습니다. %s 초안에 자동으로 장치 페이지로 이동합니다." + +#~ msgid "" +#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ msgstr "성공적으로 전송되었습니다. %s초안에 장치 페이지로 자동 이동합니다." + +#~ msgid "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "제안: 실제 볼륨 범위 [%d, %d]" + +#~ msgid "Support base" +#~ msgstr "서포트 베이스" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "서포트 레이어는 오브젝트 레이어와는 독립적으로 레이어 높이를 사용합니다.이" +#~ "는 z커스텀 서포트 갭을 지원하기 위한 것이지만 서포트가 객체와는 다른 필라" +#~ "멘트로 지정될 경우 추가 필라멘트 전환이 발생할 수 있습니다." + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "서포트 레이어는 오브젝트 레이어와 독립적으로 레이어 높이를 사용합니다.이" +#~ "는 z-gap 커스텀화를 지원하고 출력 시간을 절약하기 위한 것입니다." + +#~ msgid "" +#~ "Switch to rectilinear pattern?\n" +#~ "Yes - switch to rectilinear pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "rectilinear 패턴으로 전환하시겠습니까?\n" +#~ "예 - rectilinear 패턴으로 자동 전환\n" +#~ "아니요 - 밀도를 기본값이 100% 가 아닌 값으로 재설정\n" + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "지그재그 패턴으로 바꾸시겠습니까?\n" +#~ "예 - 지그재그 패턴으로 자동 전환\n" +#~ "아니요 - 밀도를 100% 가 아닌 기본값으로 재설정\n" + +#~ msgid "Swith cloud environment, Please login again!" +#~ msgstr "클라우드 환경이 전환되었습니다. 다시 로그인해주세요!" + +#~ msgid "Sync material list from AMS" +#~ msgstr "AMS의 재료 목록 동기화" + +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "%s 필라멘트가 너무 부드러워서 AMS와 함께 사용할 수 없습니다." + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " +#~ "unrecognized:\n" +#~ msgstr "" +#~ "3mf 파일의 버전 %s이(가) %s의 버전 %s보다 최신 버전입니다. 다음과 같은 인" +#~ "식할 수 없는 키를 찾았습니다:\n" + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " +#~ "your software.\n" +#~ msgstr "" +#~ "3mf 버전 %s이 %s 버전 %s보다 최신입니다. 소프트웨어를 업데이트하는 것이 좋" +#~ "습니다.\n" + +#~ msgid "The 3mf is not from Bambu lab, load geometry data only." +#~ msgstr "" +#~ "이 3mf는 Bambu lab 에서 만들어진게 아닙니다. 형상 데이터만 불러옵니다." + +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "설정이 호환되지 않아 불러올 수 없습니다." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "P1P 프린터는 smooth 타임랩스를 지원하지 않습니다. 대신 기존 타임랩스를 사" +#~ "용하십시오." + +#~ msgid "" +#~ "The firmware versions of printer and AMS are too low.Please update to the " +#~ "latest version before sending the print job" +#~ msgstr "" +#~ "프린터와 AMS의 펌웨어 버전이 너무 낮습니다. 출력 작업을 보내기 전에 최신 " +#~ "버전으로 업데이트하십시오." + +#~ msgid "" +#~ "The flush volume is less than the minimum value and will be automatically " +#~ "set to the minimum value." +#~ msgstr "짜내기 볼륨이 최소값보다 적으면 자동으로 최소값으로 설정됩니다." + +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "모델에 겹치거나 자체 교차하는 면이 있습니다.복구를 시도했지만 결과를 확인" +#~ "하거나 입력 파일을 복구한 후 다시 시도하는 것이 좋습니다." + +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "출력 파일이 최대 허용 크기 (1GB) 를 초과했습니다.모델을 단순화하고 다시 슬" +#~ "라이스하세요" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "G코드 생성에 사용된 프린터 유형이 현재 선택한 실제 프린터와 동일한 유형이 " +#~ "아닙니다. 올바른 프린터 유형을 선택한 후 다시 슬라이스하는 것이 좋습니다." + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type.\n" +#~ msgstr "" +#~ "G코드 생성에 사용된 프린터 유형이 현재 선택한 실제 프린터와 동일한 유형이 " +#~ "아닙니다. 동일한 프린터 유형을 선택하여 다시 슬라이스하는 것이 좋습니다.\n" + +#~ msgid "The region parameter is incorrrect" +#~ msgstr "지역 매개변수가 올바르지 않습니다." + +#~ msgid "" +#~ "There are some unknown filaments mapped to generic preset. Please update " +#~ "Bambu Studio or restart Bambu Studio to check if there is an update to " +#~ "system presets." +#~ msgstr "" +#~ "일반 프리셋에 매핑된 알려지지 않은 필라멘트가 몇 개 있습니다. Bambu Studio" +#~ "를 업데이트하거나 Bambu Studio를 다시 시작하여 시스템 프리셋에 대한 업데이" +#~ "트가 있는지 확인하십시오." + +#~ msgid "" +#~ "This controls brim position including outer side of models, inner side of " +#~ "holes or both. Auto means both the brim position and brim width is " +#~ "analysed and calculated automatically" +#~ msgstr "" +#~ "모델의 바깥쪽, 안쪽 또는 양쪽 모두를 포함하여 브림의 위치를 제어합니다." +#~ "Auto 는 브림의 위치와 브림의 폭이 모두 자동으로 분석되고 계산되는 것을 의" +#~ "미합니다." + +#~ 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" +#~ msgstr "" +#~ "이 객체는 필라멘트를 절약하고 출력 시간을 줄이기 위한 필라멘트 교체 후 노" +#~ "즐을 퍼징하는데 사용됩니다. 그 결과 해당 객체의 색상이 섞여 나오게 됩니다." + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ 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. Zero means no limit" +#~ msgstr "" +#~ "이를 사용하여 초당 녹여 내보낼 수 있는 최대 필라멘트 양을 설정합니다. 출력" +#~ "속도 설정이 지나치게 높을 경우 실제 출력 속도는 최대 체적 속도에 의해 제한" +#~ "됩니다. 0은 제한이 없음을 의미합니다." + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "타임랩스 와이프 타워" + +#~ msgid "Timelapse without toolhead" +#~ msgstr "툴헤드가 없이 타임랩스" + +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "상단면 최소두께" + +#~ msgid "Top Solid Layers" +#~ msgstr "상단레이어" + +#~ msgid "Translation" +#~ msgstr "번역" + +#~ msgid "Tree support with infill" +#~ msgstr "채우기 포함 트리 서포트" + +#~ msgid "Unable to connect printer" +#~ msgstr "프린터에 연결할 수 없음" + +#~ msgid "Unable to create zip file" +#~ msgstr "zip 파일을 생성할 수 없습니다." + +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "업로드 작업 시간이 초과되었습니다. 네트워크를 확인하고 다시 시도하세요" + +#~ msgid "User authorization timeout" +#~ msgstr "사용자 인증 시간 초과" + +#~ msgid "User pause" +#~ msgstr "사용자 일시정지" + +#~ msgid "Waiting" +#~ msgstr "대기 중…" + +#~ msgid "" +#~ "When recording timelapse without toolhead, it is recommended to add a " +#~ "\"Timelapse Wipe Tower\" \n" +#~ "by right-click the empty position of build plate and choose \"Add " +#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ msgstr "" +#~ "툴헤드 없이 타임랩스를 녹화할 때는 “타임랩스 와이프 타워”를 추가하는 것이 " +#~ "좋습니다. \n" +#~ "빌드 플레이트의 빈 위치를 마우스 오른쪽 버튼으로 클릭하고 “기본 모델링 추" +#~ "가”->\"타임랩스 와이프 타워\"를 선택합니다.\n" + +#~ msgid "" +#~ "When sparse infill density is low, the internal solid infill or internal " +#~ "bridge may have no archor at the end of line. This cause falling and bad " +#~ "quality when printing internal solid infill. When enable this feature, " +#~ "loop paths will be added to the sparse fill of the lower layers for " +#~ "specific thickness, so that better archor can be provided for internal " +#~ "bridge. 0 means disable this feature" +#~ msgstr "" +#~ "내부채움 밀도가 낮으면 내부 솔리드 채움 또는 내부 브릿지의 선 끝이 걸쳐지" +#~ "지 않을 수 있습니다. 이로 인해 내부 솔리드 채움을 출력할 때 무너짐 및 품" +#~ "질 저하가 발생합니다. 이 기능을 활성화하면 특정 두께로 하위 레이어의 내부" +#~ "채움에 루프 경로가 추가되어 내부 브리지가 더 잘 걸쳐질 수 있도록 합니다. 0" +#~ "은 이 기능을 사용하지 않음을 의미합니다." + +#~ msgid "" +#~ "When the current material run out,the printer will continue to print in " +#~ "the following order." +#~ msgstr "" +#~ "현재 필라멘트가 모두 소진되면 프린터는 다음 순서로 출력을 계속합니다." + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "서포트 전용 필라멘트를 사용할 때는 다음 설정을 사용할 것을 권장합니다.\n" +#~ "상단 z 거리 0, 인터페이스 간격 0, concentric 패턴" + +#~ msgid "Wrong Access code" +#~ msgstr "잘못된 액세스 코드" + +#~ msgid "" +#~ "X1 General Settings - Network Settings in the side bar of X1 main screen" +#~ msgstr "X1 일반 설정 - X1 메인 화면의 사이드 바에 있는 네트워크 설정" + +#~ msgid "" +#~ "You are going to delete %u files from printer. Are you sure to continue?" +#~ msgstr "프린터에서 %u 파일을 삭제하려고 합니다. 계속하시겠습니까?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "일부 프리셋 설정을 변경했습니다.\n" +#~ "프리셋 전환 후에도 변경된 설정을 유지하시겠습니까?" + +#~ msgid "Zig zag" +#~ msgstr "지그재그" + +#~ msgid "(Sort)" +#~ msgstr "(정렬)" + +#~ msgid " Object:" +#~ msgstr " 객체:" + +#~ msgid "" +#~ " is too close to exclusion area, there may be collisions when printing.\n" +#~ msgstr "출력배제영역에 너무 가까워 출력시 충돌이 발생할 수 있습니다.\n" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr "출력배제영역에 너무 가까워 출력시 충돌이 발생할 수 있습니다.\n" + +#~ msgid " is too close to others, there may be collisions when printing.\n" +#~ msgstr " 다른 제품과 너무 가까워서 출력 시 충돌이 발생할 수 있습니다.\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr "다른 것들과 너무 가까워 출력시 충돌이 발생할 수 있습니다.\n" + +#~ msgid " plate %1%:" +#~ msgstr " 플레이트 %1%:" + +#~ msgid "" +#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr " 새 모델을 생성하기 전에 닫힙니다. 계속하시겠습니까?" + +#~ msgid "default value" +#~ msgstr "기본값" + +#~ msgid "hybrid(auto)" +#~ msgstr "하이브리드(자동)" + +#~ msgid "normal" +#~ msgstr "일반" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "일반 (자동), 하이브리드 (자동) 및 트리 (자동) 는 자동으로 서포트를 생성하" +#~ "는 데 사용됩니다. 일반 또는 트리를 선택한 경우에만 커스텀 서포트를 생성할 " +#~ "수 있습니다." + +#~ msgid "preparing, export 3mf failed!" +#~ msgstr "준비 중; 3mf 내보내기 실패!" + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "3mf는 호환되지 않으며 형상만 불러옵니다!" + +#~ msgid "tree" +#~ msgstr "트리" diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index 13e53179c..335ca9f7b 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -26,6 +26,17 @@ ???? CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} + CFBundleURLTypes + + + CFBundleURLName + bambustudioopen url + CFBundleURLSchemes + + bambustudioopen + + + CFBundleDocumentTypes diff --git a/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index a48b5f017..fd0f295f1 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -1,24 +1,17 @@ include(ExternalProject) -# Use boost 1.78 for Windows, to support VS2022 if (WIN32) - set(_boost_url "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz") - set(_boost_hash 94CED8B72956591C4775AE2207A9763D3600B30D9D7446562C552F0A14A63BE7) set(_bootstrap_cmd bootstrap.bat) set(_build_cmd b2.exe) else() - set(_boost_url "https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz") - set(_boost_hash AEB26F80E80945E82EE93E5939BAEBDCA47B9DEE80A07D3144BE1E1A6A66DD6A) set(_bootstrap_cmd ./bootstrap.sh) set(_build_cmd ./b2) endif() -set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/common.jam ./tools/build/src/tools/common.jam) - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam) set(_boost_toolset gcc) - set(_patch_command ${_patch_command} && ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam) + configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam) + set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html if (MSVC_VERSION EQUAL 1800) @@ -42,8 +35,12 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if (WIN32) set(_boost_toolset "clang-win") - else() + elseif (APPLE) set(_boost_toolset "clang") + else() + set(_boost_toolset clang) + configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam) + set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam) endif() elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") set(_boost_toolset "intel") @@ -75,6 +72,18 @@ include(ProcessorCount) ProcessorCount(NPROC) file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix) +set(_boost_flags "") +if (UNIX) + set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") +endif () + +if(APPLE) + set(_boost_flags + "cflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" + "cxxflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" + "mflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};" + "mmflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET}") +endif() set(_boost_variants "") if(CMAKE_BUILD_TYPE) @@ -90,7 +99,7 @@ if (_cfg_rel GREATER -1 OR _cfg_relwdeb GREATER -1 OR _cfg_minsizerel GREATER -1 list(APPEND _boost_variants release) endif() -if (MSVC AND ${DEP_DEBUG} ) +if ( (NOT MSVC AND _cfg_deb GREATER -1) OR (MSVC AND ${DEP_DEBUG}) ) list(APPEND _boost_variants debug) endif() @@ -98,38 +107,8 @@ if (NOT _boost_variants) set(_boost_variants release) endif() -if (IS_CROSS_COMPILE AND APPLE) - if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") - message(STATUS "Compiling Boost for arm64.") - message(STATUS "Compiling Boost with toolset ${_boost_toolset}.") - message(STATUS "Compiling Boost with libs ${_libs}.") - message(STATUS "Compiling Boost with variant ${_boost_variants}.") - message(STATUS "Compiling Boost with _bootstrap_cmd ${_bootstrap_cmd}.") - message(STATUS "_boost_linkflags = ${_boost_linkflags}") - set(_arch_flags "-arch arm64") - set(_boost_linkflags "linkflags=${_arch_flags}") - message(STATUS "_cmake_args_osx_arch = '${_cmake_args_osx_arch}'") - elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64") - message(STATUS "Compiling Boost for x86_64.") - set(_arch_flags "-arch x86_64") - endif() - set(_boost_linkflags "linkflags=${_arch_flags}") -endif () - -set(_boost_flags "") -if(APPLE) - set(_boost_flags - "cflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "cxxflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "mflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "mmflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET}") -elseif (UNIX) - set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") -endif() - set(_build_cmd ${_build_cmd} ${_boost_flags} - ${_boost_linkflags} -j${NPROC} ${_libs} --layout=versioned @@ -145,15 +124,12 @@ set(_build_cmd ${_build_cmd} set(_install_cmd ${_build_cmd} --prefix=${_prefix} install) -if (NOT IS_CROSS_COMPILE OR NOT APPLE OR BUILD_SHARED_LIBS) - message(STATUS "Standard boost build with bootstrap command '${_bootstrap_cmd}'") - message(STATUS "Standard boost build with patch command '${_patch_command}'") - message(STATUS "Standard boost build with build command '${_build_cmd}'") - message(STATUS "Standard boost build with install command '${_install_cmd}'") +list(APPEND _patch_command COMMAND git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-Boost-fix.patch) + ExternalProject_Add( dep_Boost - URL ${_boost_url} - URL_HASH SHA256=${_boost_hash} + URL "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip" + URL_HASH SHA256=f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3 DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost CONFIGURE_COMMAND "${_bootstrap_cmd}" PATCH_COMMAND ${_patch_command} @@ -162,26 +138,7 @@ ExternalProject_Add( INSTALL_COMMAND "${_install_cmd}" ) -else() - -ExternalProject_Add( - dep_Boost - URL ${_boost_url} - URL_HASH SHA256=${_boost_hash} - DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost - CONFIGURE_COMMAND ./bootstrap.sh - --with-toolset=clang - --with-libraries=date_time,filesystem,iostreams,locale,log,regex,system,thread - "--prefix=${DESTDIR}/usr/local" -# PATCH_COMMAND ${_patch_command} - BUILD_COMMAND "${_build_cmd}" - BUILD_IN_SOURCE ON - INSTALL_COMMAND "${_install_cmd}" -) -endif() - if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") - message(STATUS "Patch the boost::polygon library with a custom one.") # Patch the boost::polygon library with a custom one. ExternalProject_Add(dep_boost_polygon EXCLUDE_FROM_ALL ON @@ -193,11 +150,10 @@ if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") DEPENDS dep_Boost CONFIGURE_COMMAND "" BUILD_COMMAND "" - ${_cmake_args_osx_arch} INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/dep_boost_polygon-prefix/src/dep_boost_polygon/include/boost/polygon" "${DESTDIR}/usr/local/include/boost/polygon" ) # Only override boost::Polygon Voronoi implementation with Vojtech's GMP hacks on 64bit platforms. list(APPEND _dep_list "dep_boost_polygon") -endif () \ No newline at end of file +endif () diff --git a/deps/CGAL/CGAL.cmake b/deps/CGAL/CGAL.cmake index 39514e465..e1123295a 100644 --- a/deps/CGAL/CGAL.cmake +++ b/deps/CGAL/CGAL.cmake @@ -1,31 +1,11 @@ orcaslicer_add_cmake_project( CGAL - GIT_REPOSITORY https://github.com/CGAL/cgal.git - GIT_TAG caacd806dc55c61cc68adaad99f2240f00493b29 # releases/CGAL-5.3 + # GIT_REPOSITORY https://github.com/CGAL/cgal.git + # GIT_TAG caacd806dc55c61cc68adaad99f2240f00493b29 # releases/CGAL-5.3 # For whatever reason, this keeps downloading forever (repeats downloads if finished) - #URL https://github.com/CGAL/cgal/archive/releases/CGAL-5.0.zip - #URL_HASH SHA256=c2b035bd078687b6d8c0fb6371a7443adcdb647856af9969532c4050cd5f48e5 + URL https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip + URL_HASH SHA256=d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0 DEPENDS dep_Boost dep_GMP dep_MPFR ) include(GNUInstallDirs) - -# CGAL, for whatever reason, makes itself non-relocatable by writing the build directory into -# CGALConfig-installation-dirs.cmake and including it in configure time. -# If this file is not present, it will not consider the stored absolute path -ExternalProject_Add_Step(dep_CGAL dep_CGAL_relocation_fix - DEPENDEES install - - COMMAND ${CMAKE_COMMAND} -E remove CGALConfig-installation-dirs.cmake - WORKING_DIRECTORY "${DESTDIR}/usr/local/${CMAKE_INSTALL_LIBDIR}/cmake/CGAL" -) - -# Again, for whatever reason, CGAL thinks that its version is not relevant if -# configured as a header only library. Fixing it by placing a cmake version file -# besides the installed config file. -ExternalProject_Add_Step(dep_CGAL dep_CGAL_version_fix - DEPENDEES install - - COMMAND ${CMAKE_COMMAND} -E copy cgal/CGALConfigVersion.cmake "${DESTDIR}/usr/local/${CMAKE_INSTALL_LIBDIR}/cmake/CGAL/CGALConfigVersion.cmake" - WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" -) diff --git a/deps/CURL/CURL.cmake b/deps/CURL/CURL.cmake index 4c82a12f7..1472d9fa3 100644 --- a/deps/CURL/CURL.cmake +++ b/deps/CURL/CURL.cmake @@ -65,6 +65,7 @@ orcaslicer_add_cmake_project(CURL # ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/curl-mods.patch CMAKE_ARGS -DBUILD_TESTING:BOOL=OFF + -DBUILD_CURL_EXE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCURL_STATICLIB=${_curl_static} ${_curl_platform_flags} diff --git a/deps/GMP/GMP.cmake b/deps/GMP/GMP.cmake index 94fe60b24..bdfc99cfb 100644 --- a/deps/GMP/GMP.cmake +++ b/deps/GMP/GMP.cmake @@ -57,8 +57,8 @@ else () endif () ExternalProject_Add(dep_GMP - URL https://gmplib.org/download/gmp/gmp-6.2.1.tar.bz2 - URL_HASH SHA256=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c + URL https://github.com/bambulab/gmp/archive/refs/tags/6.2.1.tar.gz + URL_HASH SHA256=705ae57ee2014b2c6fc0f572c85ee43276b99b6b256ee16c1a9d3a8c4e3609d5 DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP BUILD_IN_SOURCE ON CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}/usr/local" ${_gmp_build_tgt} diff --git a/deps/OpenEXR/OpenEXR.cmake b/deps/OpenEXR/OpenEXR.cmake index 6aea12b1f..12272cbd0 100644 --- a/deps/OpenEXR/OpenEXR.cmake +++ b/deps/OpenEXR/OpenEXR.cmake @@ -1,46 +1,8 @@ -# Check if we're building for arm on x86_64 and just for OpenEXR, build fat -# binaries. We need this because it compiles some code to generate other -# source and we need to be able to run the executables. When we link the -# library, the x86_64 part will be ignored. -if (APPLE AND IS_CROSS_COMPILE) - if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" AND ${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") - set(_openexr_arch arm64^^x86_64) - set(_openxr_list_sep LIST_SEPARATOR ^^) - set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch}) - else() - set(_openexr_arch ${CMAKE_OSX_ARCHITECTURES}) - set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch}) - endif() - ExternalProject_Add(dep_OpenEXR - EXCLUDE_FROM_ALL ON - URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip - URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de - INSTALL_DIR ${DESTDIR}/usr/local - DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenEXR - ${_openxr_list_sep} - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local - -DBUILD_SHARED_LIBS:BOOL=OFF - -DCMAKE_POSITION_INDEPENDENT_CODE=ON - -DBUILD_TESTING=OFF - -DPYILMBASE_ENABLE:BOOL=OFF - -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF - -DOPENEXR_BUILD_UTILS:BOOL=OFF - ${_cmake_openexr_arch} - ) -else() - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch) -else () - set(_patch_cmd "") -endif () - -orcaslicer_add_cmake_project(OpenEXR +bambustudio_add_cmake_project(OpenEXR # GIT_REPOSITORY https://github.com/openexr/openexr.git URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de - PATCH_COMMAND ${_patch_cmd} + PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch DEPENDS ${ZLIB_PKG} GIT_TAG v2.5.5 CMAKE_ARGS @@ -50,7 +12,6 @@ orcaslicer_add_cmake_project(OpenEXR -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF -DOPENEXR_BUILD_UTILS:BOOL=OFF ) -endif() if (MSVC) add_debug_dep(dep_OpenEXR) diff --git a/deps/OpenVDB/OpenVDB.cmake b/deps/OpenVDB/OpenVDB.cmake index 7080b8b5d..e22568cfd 100644 --- a/deps/OpenVDB/OpenVDB.cmake +++ b/deps/OpenVDB/OpenVDB.cmake @@ -6,10 +6,17 @@ else() set(_build_static ON) endif() -orcaslicer_add_cmake_project(OpenVDB - # support vs2022, update to 8.2 - URL https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip +set (_openvdb_vdbprint ON) +#if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + # Build fails on raspberry pi due to missing link directive to latomic + # Let's hope it will be fixed soon. + #set (_openvdb_vdbprint OFF) +#endif () +bambustudio_add_cmake_project(OpenVDB + URL https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip # 8.2 patched URL_HASH SHA256=f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81 + # URL https://github.com/AcademySoftwareFoundation/openvdb/archive/refs/tags/v10.0.1.zip + # URL_HASH SHA256=48C2CFA9853B58FA86282DF1F83F0E99D07858CC03EB2BA8227DC447A830100A DEPENDS dep_TBB dep_Blosc dep_OpenEXR dep_Boost CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON @@ -19,7 +26,7 @@ orcaslicer_add_cmake_project(OpenVDB -DOPENVDB_CORE_STATIC=${_build_static} -DOPENVDB_ENABLE_RPATH:BOOL=OFF -DTBB_STATIC=${_build_static} - -DOPENVDB_BUILD_VDB_PRINT=ON + -DOPENVDB_BUILD_VDB_PRINT=${_openvdb_vdbprint} -DDISABLE_DEPENDENCY_VERSION_CHECKS=ON # Centos6 has old zlib ) @@ -34,4 +41,4 @@ if (MSVC) WORKING_DIRECTORY "${BINARY_DIR}" ) endif () -endif () \ No newline at end of file +endif () diff --git a/doc/How to build - Mac OS.md b/doc/How to build - Mac OS.md new file mode 100644 index 000000000..15c8e798c --- /dev/null +++ b/doc/How to build - Mac OS.md @@ -0,0 +1,67 @@ + +# Building Bambu Studio on MacOS + +## Enviroment setup + +Install Following tools: + +- Xcode from app store +- Cmake +- git +- gettext + +Cmake, git, gettext can be installed from brew(brew install cmake git gettext) + +## Building the dependencies + +You need to build the dependencies of BambuStudio first. (Only needs for the first time) + +Suppose you download the codes into `/Users/_username_/work/projects/BambuStudio`. + +Create a directory to store the built dependencies: `/Users/_username_/work/projects/BambuStudio_dep`. +**(Please make sure to replace the username with the one on your computer)** + +Then: + +```shell +cd BambuStudio/deps +mkdir build +cd build +``` + +Next, for arm64 architecture: +```shell +cmake ../ -DDESTDIR="/Users/username/work/projects/BambuStudio_dep" -DOPENSSL_ARCH="darwin64-arm64-cc" +make +``` + +Or, for x86 architeccture: +```shell +cmake ../ -DDESTDIR="/Users/username/work/projects/BambuStudio_dep" -DOPENSSL_ARCH="darwin64-x86_64-cc" +make -jN +``` +(N can be a number between 1 and the max cpu number) + +## Building Bambu Studio + +Create a directory to store the installed files at `/Users/username/work/projects/BambuStudio/install_dir`: + +```shell +cd BambuStudio +mkdir install_dir +mkdir build +cd build +``` + +To build using CMake: + +```shell +cmake .. -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="/Users/username/work/projects/BambuStudio_dep/usr/local" -DCMAKE_INSTALL_PREFIX="../install_dir" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="/Users/username/work/projects/BambuStudio_dep/usr/local" -DCMAKE_MACOSX_BUNDLE=on +cmake --build . --target install --config Release -jN +``` + +To build for use with XCode: + +```shell +cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="/Users/username/work/projects/BambuStudio_dep/usr/local" -DCMAKE_INSTALL_PREFIX="../install_dir" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="/Users/username/work/projects/BambuStudio_dep/usr/local" -DCMAKE_MACOSX_BUNDLE=on +``` diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index f0afb500e..9063a0703 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -534,7 +534,7 @@ msgstr "" msgid "%1% was replaced with %2%" msgstr "" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" msgid "Some values have been replaced. Please check them:" @@ -560,8 +560,14 @@ msgstr "" msgid "V" msgstr "" +msgid "Internal Version" +msgstr "" + +msgid "Version" +msgstr "" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" @@ -569,7 +575,7 @@ msgid "Fatal error" msgstr "" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" @@ -577,12 +583,18 @@ msgid "Critical error" msgstr "" #, possible-boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "" + +msgid "Untitled" msgstr "" msgid "Downloading Bambu Network Plug-in" msgstr "" +msgid "Login information expired. Please login again." +msgstr "" + msgid "Incorrect password" msgstr "" @@ -591,8 +603,8 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" #, possible-c-format, possible-boost-format @@ -611,7 +623,7 @@ msgstr "" msgid "Click to download new version in default browser: %s" msgstr "" -msgid "The Orca Slicer needs an upgrade" +msgid "The Bambu Studio needs an upgrade" msgstr "" msgid "This is the newest version." @@ -635,7 +647,7 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "" -msgid "Choose one file (gcode/3mf):" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "" msgid "Some presets are modified." @@ -656,13 +668,10 @@ msgid "Open Project" msgstr "" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -msgid "Login information expired. Please login again." -msgstr "" - msgid "Privacy Policy Update" msgstr "" @@ -714,7 +723,7 @@ msgstr "" msgid "Rename" msgstr "" -msgid "Orca Slicer GUI initialization failed" +msgid "Bambu Studio GUI initialization failed" msgstr "" #, possible-boost-format @@ -742,18 +751,6 @@ msgstr "" msgid "Strength" msgstr "" -msgid "Top Solid Layers" -msgstr "" - -msgid "Top Minimum Shell Thickness" -msgstr "" - -msgid "Bottom Solid Layers" -msgstr "" - -msgid "Bottom Minimum Shell Thickness" -msgstr "" - msgid "Ironing" msgstr "" @@ -811,18 +808,6 @@ msgstr "" msgid "Load..." msgstr "" -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "" @@ -832,6 +817,18 @@ msgstr "" msgid "Cone" msgstr "" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "" @@ -847,12 +844,6 @@ msgstr "" msgid "Set as individual objects" msgstr "" -msgid "Fill bed with copies" -msgstr "" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "" - msgid "Printable" msgstr "" @@ -932,7 +923,10 @@ msgstr "" msgid "Assemble the selected objects to an object with single part" msgstr "" -msgid "Assemble the selected parts to a single part" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" msgstr "" msgid "Along X axis" @@ -1052,18 +1046,21 @@ msgstr "" msgid "current" msgstr "" -msgid "Set Unprintable" -msgstr "" - -msgid "Set Printable" -msgstr "" - msgid "Unlock" msgstr "" msgid "Lock" msgstr "" +msgid "Fill bed with copies" +msgstr "" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "" @@ -1121,6 +1118,9 @@ msgstr "" msgid "Error!" msgstr "" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "" @@ -1290,15 +1290,6 @@ msgstr "" msgid "Outside" msgstr "" -msgid "Auto" -msgstr "" - -msgid "Manual" -msgstr "" - -msgid "No-brim" -msgstr "" - msgid " " msgstr "" @@ -1314,6 +1305,21 @@ msgstr "" msgid "Auto Brim" msgstr "" +msgid "Auto" +msgstr "" + +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + +msgid "No-brim" +msgstr "" + msgid "Outer wall speed" msgstr "" @@ -1419,6 +1425,33 @@ msgstr "" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "" + +msgid "Check cloud service status" +msgstr "" + +msgid "code" +msgstr "" + +msgid "Failed to connect to cloud service" +msgstr "" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "" + +msgid "Failed to connect to the printer" +msgstr "" + +msgid "Connection to printer failed" +msgstr "" + +msgid "Please check the network connection of the printer and Studio." +msgstr "" + +msgid "Connecting..." +msgstr "" + msgid "?" msgstr "" @@ -1428,7 +1461,7 @@ msgstr "" msgid "AMS" msgstr "" -msgid "Ams filament backup" +msgid "Auto Refill" msgstr "" msgid "AMS not connected" @@ -1485,10 +1518,10 @@ msgstr "" msgid "Purge old filament" msgstr "" -msgid "Feed new filament from external spool" +msgid "Push new filament into the extruder" msgstr "" -msgid "Confirm whether the filament has been extruded" +msgid "Grab new filament" msgstr "" msgid "" @@ -1576,51 +1609,50 @@ msgstr "" msgid "Login failed" msgstr "" -msgid "The region parameter is incorrrect" -msgstr "" - -msgid "Failure of printer login" -msgstr "" - -msgid "Failed to get ticket" -msgstr "" - -msgid "User authorization timeout" -msgstr "" - -msgid "Failure of bind" -msgstr "" - -msgid "Unknown Failure" -msgstr "" - msgid "Please check the printer network connection." msgstr "" -msgid "Abnormal print file data. Please slice again" +msgid "Abnormal print file data. Please slice again." msgstr "" -msgid "Task canceled" +msgid "Task canceled." msgstr "" -msgid "Upload task timed out. Please check the network problem and try again" +msgid "Upload task timed out. Please check the network status and try again." msgstr "" msgid "Cloud service connection failed. Please try again." msgstr "" -msgid "Print file not found, please slice again" +msgid "Print file not found. please slice again." msgstr "" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -msgid "Failed uploading print file" +msgid "Failed to send the print job. Please try again." msgstr "" -msgid "Wrong Access code" +msgid "Failed to upload file to ftp. Please try again." +msgstr "" + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "" + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." msgstr "" msgid "Sending print job over LAN" @@ -1642,24 +1674,16 @@ msgstr "" msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" +#, possible-c-format, possible-boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "" -msgid "Failed to send the print job. Please try again." -msgstr "" - -msgid "Send to Printer failed. Please try again." -msgstr "" - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "" -msgid "Sending gcode file through cloud service" -msgstr "" - msgid "Sending gcode file to sdcard" msgstr "" @@ -1670,9 +1694,6 @@ msgstr "" msgid "An SD card needs to be inserted before sending to printer." msgstr "" -msgid "Please log out and login to the printer again." -msgstr "" - msgid "Choose SLA archive:" msgstr "" @@ -1752,16 +1773,15 @@ msgstr "" msgid "License" msgstr "" -msgid "Orca Slicer is licensed under " +msgid "Bambu Studio is licensed under " msgstr "" msgid "GNU Affero General Public License, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" msgid "Libraries" @@ -1776,13 +1796,9 @@ msgstr "" msgid "About %s" msgstr "" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." @@ -1793,7 +1809,13 @@ msgid "" "contributors." msgstr "" -msgid "Version" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." msgstr "" msgid "AMS Materials Setting" @@ -1829,7 +1851,10 @@ msgstr "" msgid "Setting AMS slot information while printing is not supported" msgstr "" -msgid "Factors of dynamic flow cali" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" msgstr "" msgid "Factor K" @@ -1844,15 +1869,15 @@ msgstr "" msgid "Are you sure you want to clear the filament information?" msgstr "" +msgid "You need to select the material type and color first." +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" -msgid "You need to select the material type and color first." -msgstr "" - msgid "Other Color" msgstr "" @@ -1997,12 +2022,21 @@ msgstr "" msgid "Print with filaments mounted on the back of the chassis" msgstr "" -msgid "Filaments replace" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." msgstr "" msgid "Group" 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 "" + msgid "AMS Settings" msgstr "" @@ -2252,6 +2286,11 @@ msgid "" "Reset to 0.2" msgstr "" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2430,6 +2469,28 @@ msgstr "" msgid "Failed to start printing job" msgstr "" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "" @@ -2485,9 +2546,6 @@ msgstr "" msgid "Layer Time" msgstr "" -msgid "Layer Time (log)" -msgstr "" - msgid "Height: " msgstr "" @@ -2572,6 +2630,9 @@ msgstr "" msgid "Volumetric flow rate (mm³/s)" msgstr "" +msgid "Layer Time (s)" +msgstr "" + msgid "Used filament" msgstr "" @@ -2793,8 +2854,8 @@ msgstr "" #, possible-c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2916,6 +2977,9 @@ msgstr "" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "" @@ -2958,6 +3022,9 @@ msgstr "" msgid "Show Tip of the Day" msgstr "" +msgid "Report issue" +msgstr "" + msgid "Check for Update" msgstr "" @@ -3156,6 +3223,12 @@ msgstr "" msgid "Show object labels in 3D scene" msgstr "" +msgid "Show &Overhang" +msgstr "" + +msgid "Show object overhang highlight in 3D scene" +msgstr "" + msgid "Preferences" msgstr "" @@ -3189,9 +3262,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3210,9 +3280,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "" - msgid "&Open G-code" msgstr "" @@ -3318,28 +3385,28 @@ msgstr "" msgid "Initialize failed (No Device)!" msgstr "" +msgid "Initialize failed (Device connection not ready)!" +msgstr "" + msgid "Initialize failed (No Camera Device)!" msgstr "" -msgid "Initializing..." -msgstr "" - -msgid "Loading..." -msgstr "" - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" +msgid "Loading..." +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 "" -msgid "Initialize failed (Not supported by printer)!" +msgid "Initializing..." msgstr "" #, possible-c-format, possible-boost-format @@ -3369,7 +3436,7 @@ msgstr "" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" @@ -3417,6 +3484,9 @@ msgstr "" msgid "Switch to video files." msgstr "" +msgid "Switch to 3mf model files." +msgstr "" + msgid "Delete selected files from printer." msgstr "" @@ -3435,12 +3505,6 @@ msgstr "" msgid "No printers." msgstr "" -msgid "Not supported by this model of printer!" -msgstr "" - -msgid "Connecting..." -msgstr "" - #, possible-c-format, possible-boost-format msgid "Connect failed [%d]!" msgstr "" @@ -3448,22 +3512,45 @@ msgstr "" msgid "Loading file list..." msgstr "" -msgid "No files" -msgstr "" - -msgid "Not accessible in LAN-only mode!" -msgstr "" - -msgid "Missing LAN ip of printer!" +#, possible-c-format, possible-boost-format +msgid "No files [%d]" msgstr "" #, possible-c-format, possible-boost-format -msgid "You are going to delete %u files. Are you sure to continue?" +msgid "Load failed [%d]" msgstr "" +#, 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?" +msgstr[0] "" +msgstr[1] "" + msgid "Delete files" msgstr "" +#, possible-c-format, possible-boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "" + +msgid "Delete file" +msgstr "" + +msgid "Fetching model infomations ..." +msgstr "" + +msgid "Failed to fetching model infomations from printer." +msgstr "" + +msgid "Failed to parse model infomations." +msgstr "" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, possible-c-format, possible-boost-format msgid "File '%s' was lost! Please download it again." msgstr "" @@ -3484,6 +3571,12 @@ msgstr "" msgid "Downloading %d%%..." msgstr "" +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "" @@ -3505,15 +3598,6 @@ msgstr "" msgid "Swap Y/Z axes" msgstr "" -msgid "Camera" -msgstr "" - -msgid "SD Card" -msgstr "" - -msgid "Camera Setting" -msgstr "" - msgid "Printing Progress" msgstr "" @@ -3529,9 +3613,21 @@ msgstr "" msgid "Layer: N/A" msgstr "" +msgid "Immediately score" +msgstr "" + msgid "Clear" msgstr "" +msgid "Camera" +msgstr "" + +msgid "SD Card" +msgstr "" + +msgid "Camera Setting" +msgstr "" + msgid "Control" msgstr "" @@ -3565,25 +3661,13 @@ msgstr "" msgid "SD Card Abnormal" msgstr "" -msgid "Printing List" -msgstr "" - msgid "Cancel print" msgstr "" msgid "Are you sure you want to cancel this print?" msgstr "" -#, possible-c-format, possible-boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" - -#, possible-c-format, possible-boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." +msgid "Done" msgstr "" msgid "Downloading..." @@ -3600,6 +3684,12 @@ msgstr "" msgid "Layer: %s" msgstr "" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "" + +msgid "Score" +msgstr "" + #, possible-c-format, possible-boost-format msgid "Layer: %d/%d" msgstr "" @@ -3639,24 +3729,15 @@ msgstr "" msgid "Can't start this without SD card." msgstr "" -msgid "Failed to connect to the server" -msgstr "" - msgid "Status" msgstr "" -msgid "Media" -msgstr "" - msgid "Update" msgstr "" msgid "HMS" msgstr "" -msgid "Failed to connect to the printer" -msgstr "" - msgid "Don't show again" msgstr "" @@ -3876,11 +3957,8 @@ msgstr "" msgid "Printer settings" msgstr "" -msgid "Untitled" -msgstr "" - #, possible-boost-format -msgid " plate %1%:" +msgid " plate %1%: " msgstr "" msgid "Invalid name, the following characters are not allowed:" @@ -3958,9 +4036,9 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "" 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, possible-boost-format @@ -4007,7 +4085,7 @@ msgstr "" msgid "The Config can not be loaded." msgstr "" -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" #, possible-c-format, possible-boost-format @@ -4315,7 +4393,7 @@ msgstr "" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" #, possible-c-format, possible-boost-format @@ -4376,9 +4454,6 @@ msgstr "" msgid "Login Region" msgstr "" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "" @@ -4402,12 +4477,6 @@ msgstr "" msgid "If enabled, useful hints are displayed at startup." msgstr "" -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "" @@ -4426,25 +4495,31 @@ msgstr "" msgid "Clear my choice on the unsaved presets." msgstr "" -msgid "Associate files to OrcaSlicer" +msgid "Associate files to BambuStudio" msgstr "" -msgid "Associate .3mf files to OrcaSlicer" +msgid "Associate .3mf files to BambuStudio" msgstr "" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -msgid "Associate .stl files to OrcaSlicer" +msgid "Associate .stl files to BambuStudio" msgstr "" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -msgid "Associate .step/.stp files to OrcaSlicer" +msgid "Associate .step/.stp files to BambuStudio" msgstr "" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "" + +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" msgstr "" msgid "Maximum recent projects" @@ -4478,6 +4553,12 @@ msgstr "" msgid "Enable Dark mode" msgstr "" +msgid "Develop mode" +msgstr "" + +msgid "Skip AMS blacklist check" +msgstr "" + msgid "Home page and daily tips" msgstr "" @@ -4514,10 +4595,13 @@ msgstr "" msgid "Mouse wheel reverses when zooming" msgstr "" -msgid "Develop mode" +msgid "Enable SSL(MQTT)" msgstr "" -msgid "Dump video" +msgid "Enable SSL(FTP)" +msgstr "" + +msgid "Internal developer mode" msgstr "" msgid "Log Level" @@ -4604,42 +4688,39 @@ msgstr "" msgid "Add/Remove printers" msgstr "" +msgid "Incompatible" +msgstr "" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "" msgid "Print sequence" msgstr "" -msgid "Plate name" -msgstr "" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" +msgstr "" + +msgid "Same as Global Plate Type" msgstr "" msgid "Same as Global Bed Type" msgstr "" -msgid "Cool Plate" -msgstr "" - -msgid "Engineering Plate" -msgstr "" - -msgid "High Temp Plate" -msgstr "" - -msgid "Textured PEI Plate" -msgstr "" - msgid "By Layer" msgstr "" msgid "By Object" msgstr "" +msgid "Plate name" +msgstr "" + msgid "Accept" msgstr "" @@ -4751,10 +4832,7 @@ msgstr "" msgid "Simply switch to \"%1%\"" msgstr "" -msgid "Online" -msgstr "" - -msgid "Offline" +msgid "Task canceled" msgstr "" msgid "(LAN)" @@ -4766,6 +4844,9 @@ msgstr "" msgid "Other Device" msgstr "" +msgid "Online" +msgstr "" + msgid "Input access code" msgstr "" @@ -4775,12 +4856,18 @@ msgstr "" msgid "Log out successful." msgstr "" +msgid "Offline" +msgstr "" + msgid "Busy" msgstr "" msgid "Bambu Cool Plate" msgstr "" +msgid "PLA Plate" +msgstr "" + msgid "Bamabu Engineering Plate" msgstr "" @@ -4796,12 +4883,24 @@ msgstr "" msgid "Bed Leveling" msgstr "" -msgid "Flow Calibration" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" msgstr "" msgid "send completed" msgstr "" +msgid "Error code" +msgstr "" + +msgid "Check the status of current system services" +msgstr "" + +msgid "Printer local connection failed, please try again." +msgstr "" + msgid "No login account, only printers in LAN mode are displayed" msgstr "" @@ -4864,6 +4963,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "" @@ -4904,9 +5006,27 @@ msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "" +msgid "Abnormal print file data. Please slice again" +msgstr "" + +msgid "The name length exceeds the limit." +msgstr "" + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "" @@ -4919,18 +5039,92 @@ msgstr "" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" -msgid "The printer is required to be in the same LAN as Orca Slicer." +msgid "The printer is required to be in the same LAN as Bambu Studio." msgstr "" msgid "The printer does not support sending to printer SD card." msgstr "" +msgid "Failed to create socket" +msgstr "" + +msgid "Failed to connect socket" +msgstr "" + +msgid "Failed to publish login request" +msgstr "" + +msgid "Get ticket from device timeout" +msgstr "" + +msgid "Get ticket from server timeout" +msgstr "" + +msgid "Failed to post ticket to server" +msgstr "" + +msgid "Failed to parse login report reason" +msgstr "" + +msgid "Receive login report timeout" +msgstr "" + +msgid "Unknown Failure" +msgstr "" + msgid "Log in printer" msgstr "" msgid "Would you like to log in this printer with current account?" msgstr "" +msgid "Check the reason" +msgstr "" + +msgid "Read and accept" +msgstr "" + +msgid "Terms and Conditions" +msgstr "" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" + +msgid "and" +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgid "We ask for your help to improve everyone's printer" +msgstr "" + +msgid "Statement about User Experience Improvement Program" +msgstr "" + +#, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" + +msgid "Statement on User Experience Improvement Plan" +msgstr "" + msgid "Log in successful." msgstr "" @@ -5023,6 +5217,9 @@ msgstr "" msgid "Top/bottom shells" msgstr "" +msgid "Sparse infill" +msgstr "" + msgid "Initial layer speed" msgstr "" @@ -5038,12 +5235,6 @@ msgid "" "the overhang degree range and wall speed is used" msgstr "" -msgid "Bridge" -msgstr "" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "" @@ -5068,7 +5259,7 @@ msgstr "" msgid "G-code output" msgstr "" -msgid "Post-processing Scripts" +msgid "Post-processing scripts" msgstr "" msgid "Frequent" @@ -5116,7 +5307,7 @@ msgstr "" msgid "Nozzle temperature when printing" msgstr "" -msgid "Cool plate" +msgid "Cool Plate / PLA Plate" msgstr "" msgid "" @@ -5124,7 +5315,7 @@ msgid "" "does not support to print on the Cool Plate" msgstr "" -msgid "Engineering plate" +msgid "Engineering Plate" msgstr "" msgid "" @@ -5132,11 +5323,17 @@ msgid "" "filament does not support to print on the Engineering Plate" 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 "" +msgid "Textured PEI Plate" +msgstr "" + msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" @@ -5184,12 +5381,6 @@ msgstr "" msgid "Printable space" msgstr "" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "" @@ -5238,21 +5429,9 @@ msgstr "" msgid "Layer height limits" msgstr "" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "" @@ -5676,9 +5855,6 @@ msgstr "" msgid "Gizmo FDM paint-on seam" msgstr "" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "" @@ -5742,9 +5918,6 @@ msgstr "" msgid "On/Off one layer mode of the vertical slider" msgstr "" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "" @@ -5762,27 +5935,24 @@ msgid "Network plug-in update" msgstr "" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" #, possible-c-format, possible-boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "" -msgid "New version of Orca Slicer" +msgid "New version of Bambu Studio" msgstr "" msgid "Don't remind me of this version again" msgstr "" -msgid "Done" -msgstr "" - msgid "LAN Connection Failed (Sending print file)" msgstr "" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" msgid "" @@ -5904,6 +6074,10 @@ msgstr "" msgid "Copying of file %1% to %2% failed: %3%" msgstr "" +#, possible-boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "" + msgid "Need to check the unsaved changes before configuration updates." msgstr "" @@ -5914,8 +6088,8 @@ msgid "Open G-code file:" msgstr "" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" #, possible-boost-format @@ -5955,9 +6129,6 @@ msgstr "" msgid "Overhang wall" msgstr "" -msgid "Sparse infill" -msgstr "" - msgid "Internal solid infill" msgstr "" @@ -5967,15 +6138,12 @@ msgstr "" msgid "Bottom surface" msgstr "" -msgid "Internal Bridge" +msgid "Bridge" msgstr "" msgid "Gap infill" msgstr "" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "" @@ -6180,22 +6348,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, possible-c-format, possible-boost-format msgid "Plate %d: %s does not support filament %s" msgstr "" @@ -6445,7 +6597,7 @@ msgid "" "all outer wall no matter how much overhang degree" msgstr "" -msgid "Bridge infill direction" +msgid "Bridge direction" msgstr "" msgid "" @@ -6454,12 +6606,6 @@ msgid "" "external bridges. Use 180°for zero angle." msgstr "" -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "" @@ -6476,18 +6622,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -6495,36 +6633,22 @@ msgstr "" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -msgid "One wall threshold" +msgid "Not apply" msgstr "" -#, possible-c-format, possible-boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Top surfaces" +msgstr "" + +msgid "Topmost surface" msgstr "" msgid "Only one wall on first layer" msgstr "" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" +msgid "Use only one wall on the first layer of model" msgstr "" msgid "Slow down for overhang" @@ -6533,24 +6657,10 @@ msgstr "" msgid "Enable this option to slow printing down for different overhang degree" msgstr "" -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "" - msgid "mm/s" msgstr "" -msgid "Internal" -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%." +msgid "Speed of bridge and completely overhang wall" msgstr "" msgid "Brim width" @@ -6567,18 +6677,6 @@ msgid "" "models. Auto means the brim width is analysed and calculated automatically." msgstr "" -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "" - -msgid "Inner brim only" -msgstr "" - -msgid "Outer and inner brim" -msgstr "" - msgid "Brim-object gap" msgstr "" @@ -6587,30 +6685,6 @@ msgid "" "easily" msgstr "" -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "" @@ -6726,11 +6800,11 @@ 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -6777,9 +6851,7 @@ msgid "" "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." +msgid "Line width of outer wall" msgstr "" msgid "" @@ -6787,23 +6859,6 @@ msgid "" "than inner wall speed to get better quality." msgstr "" -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "" @@ -6846,6 +6901,14 @@ msgid "" "printing." msgstr "" +msgid "Max Radius" +msgstr "" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" + msgid "Extruder Color" msgstr "" @@ -6866,20 +6929,26 @@ msgid "" "has slight overflow or underflow" msgstr "" +msgid "Object flow ratio" +msgstr "" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "" + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" +msgstr "" + +msgid "Default line width if some line width is set to be zero" msgstr "" msgid "Keep fan always on" @@ -6931,14 +7000,6 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "" @@ -6956,18 +7017,6 @@ msgid "" "and should be accurate" msgstr "" -msgid "Shrinkage" -msgstr "" - -#, possible-c-format, possible-boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "" @@ -7071,54 +7120,6 @@ msgstr "" msgid "Lightning" msgstr "" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "" - -msgid "1000 (unlimited)" -msgstr "" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7127,12 +7128,7 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7140,10 +7136,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7164,27 +7157,31 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" +msgstr "" + +msgid "Line width of initial layer" msgstr "" msgid "Initial layer height" @@ -7204,20 +7201,6 @@ msgstr "" msgid "Speed of solid infill part of initial layer" msgstr "" -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "" - msgid "Initial layer nozzle temperature" msgstr "" @@ -7227,24 +7210,6 @@ msgstr "" msgid "Full fan speed at layer" msgstr "" -msgid "" -"Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7281,12 +7246,9 @@ msgstr "" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -7336,81 +7298,21 @@ msgstr "" msgid "Brass" msgstr "" -msgid "Nozzle HRC" -msgstr "" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" - -msgid "HRC" -msgstr "" - msgid "Enable this option if machine has auxiliary part cooling fan" 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" -"It won't move fan comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "" msgid "What kind of gcode the printer is compatible with" msgstr "" -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -7421,12 +7323,48 @@ msgid "" "reduce time. Wall is still printed with original layer height." msgstr "" -msgid "Filament to print internal sparse infill." +msgid "Length of sparse infill anchor" msgstr "" msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" + +msgid "0 (no open anchors)" +msgstr "" + +msgid "1000 (unlimited)" +msgstr "" + +msgid "Maximum length of sparse infill anchor" +msgstr "" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" + +msgid "0 (not anchored)" +msgstr "" + +msgid "Filament to print internal sparse infill." +msgstr "" + +msgid "Line width of internal sparse infill" msgstr "" msgid "Infill/Wall overlap" @@ -7440,15 +7378,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "" -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "" @@ -7460,12 +7389,6 @@ msgstr "" msgid "No ironing" msgstr "" -msgid "Top surfaces" -msgstr "" - -msgid "Topmost surface" -msgstr "" - msgid "All solid layer" msgstr "" @@ -7699,44 +7622,15 @@ msgstr "" msgid "User can self-define the project file name when export" msgstr "" -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "" - msgid "Detect overhang wall" msgstr "" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." +msgid "Line width of inner wall" msgstr "" msgid "Speed of inner wall" @@ -7745,12 +7639,14 @@ msgstr "" msgid "Number of walls of every layer" msgstr "" +msgid "Post-processing Scripts" +msgstr "" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" msgid "Raft contact Z distance" @@ -7832,7 +7728,7 @@ msgid "" "print when travel move. Using spiral line to lift z can prevent stringing" msgstr "" -msgid "Z hop type" +msgid "Z Hop Type" msgstr "" msgid "Slope" @@ -7841,53 +7737,10 @@ msgstr "" msgid "Spiral" msgstr "" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -7904,17 +7757,6 @@ msgid "" "retraction" msgstr "" -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "" @@ -7933,39 +7775,14 @@ msgstr "" msgid "Random" msgstr "" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -7996,12 +7813,6 @@ msgstr "" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8015,9 +7826,10 @@ msgid "" "internal solid infill" msgstr "" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +msgid "mm²" +msgstr "" + +msgid "Line width of internal solid infill" msgstr "" msgid "Speed of internal solid infill, not the top and bottom surface" @@ -8160,9 +7972,7 @@ msgid "" "filament for support and current filament is used" msgstr "" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." +msgid "Line width of support" msgstr "" msgid "Interface use loop pattern" @@ -8297,28 +8107,6 @@ msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "" -msgid "Adaptive layer height" -msgstr "" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "" @@ -8331,12 +8119,10 @@ msgstr "" msgid "This setting specify the count of walls around tree support" msgstr "" -msgid "Tree support with infill" +msgid "Tree support brim width" msgstr "" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" +msgid "The brim width around tree support. 0 means auto." msgstr "" msgid "Chamber temperature" @@ -8370,9 +8156,7 @@ msgid "" "tool change" msgstr "" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Line width for top surfaces" msgstr "" msgid "Speed of top surface infill which is solid" @@ -8404,6 +8188,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "" @@ -8486,24 +8278,6 @@ msgid "" "assembling issue" msgstr "" -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -8739,15 +8513,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "" @@ -8883,140 +8648,399 @@ msgstr "" msgid "This OBJ file couldn't be read because it's empty." msgstr "" -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" +msgid "We would use Lidar to read the calibration result" msgstr "" -msgid "Unable to perform boolean operation on selected parts" +msgid "Prev" msgstr "" -msgid "Mesh Boolean" +msgid "Recalibration" msgstr "" -msgid "Union" +msgid "Calibrate" msgstr "" -msgid "Difference" +msgid "Finish" msgstr "" -msgid "Intersection" +msgid "Wiki" msgstr "" -msgid "Source Volume" +msgid "How to use calibration result?" msgstr "" -msgid "Tool Volume" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Subtract from" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Subtract with" +msgid "Calibration not supported" msgstr "" -msgid "selected" +msgid "Flow Dynamics" msgstr "" -msgid "Part 1" +msgid "Flow Rate" msgstr "" -msgid "Part 2" +msgid "Max Volumetric Speed" msgstr "" -msgid "Delete input" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "Send to print" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "The name cannot be empty." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +#, possible-boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "" + +msgid "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to overrides the other results?" msgstr "" #, possible-c-format, possible-boost-format -msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" +msgid "Skip Calibration2" msgstr "" -msgid "Cancelling" +#, possible-c-format, possible-boost-format +msgid "flow ratio : %s " msgstr "" -msgid "Error uploading to print host:" +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9075,7 +9099,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9130,47 +9154,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Send to print" msgstr "" -msgid "Open CA certificate file" +msgid "Upload to Printer Host with the following filename:" +msgstr "" + +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, possible-c-format, possible-boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -9218,11 +9315,11 @@ msgid "Split to Objects/Parts\nDid you know that you can split a big object into msgstr "" #: resources/data/hints.ini: [hint:Subtract a Part] -msgid "Subtract a Part\nDid 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." +msgid "Subtract a Part\nDid 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 Bambu Studio. Read more in the documentation." msgstr "" #: resources/data/hints.ini: [hint:STEP] -msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nOrca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" +msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nBambu Studio supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" msgstr "" #: resources/data/hints.ini: [hint:Z seam location] diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index cb7ffd65b..ce3eca082 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -1,17 +1,14 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: Heiko Liebscher \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "Stützen aufmalen" @@ -20,10 +17,10 @@ msgid "Alt + Mouse wheel" msgstr "Alt + Mausrad" msgid "Section view" -msgstr "Abschnittsansicht" +msgstr "Schnittansicht" msgid "Reset direction" -msgstr "Ausrichtung zurücksetzen" +msgstr "Richtung zurücksetzen" msgid "Ctrl + Mouse wheel" msgstr "Strg + Mausrad" @@ -32,19 +29,19 @@ msgid "Pen size" msgstr "Pinselgröße" msgid "Left mouse button" -msgstr "linke Maustaste" +msgstr "Linke Maustaste" msgid "Enforce supports" -msgstr "Support erzwingen" +msgstr "Stützen erzwingen" msgid "Right mouse button" -msgstr "rechte Maustaste" +msgstr "Rechte Maustaste" msgid "Block supports" -msgstr "Support blockieren" +msgstr "Stützen blockieren" msgid "Shift + Left mouse button" -msgstr "Shift + linke Maustaste" +msgstr "Umschalttaste + Linke Maustaste" msgid "Erase" msgstr "Löschen" @@ -56,13 +53,13 @@ msgid "Highlight overhang areas" msgstr "Bereiche mit Überhang hervorheben" msgid "Gap fill" -msgstr "Lücken füllen" +msgstr "Lückenfüllung" msgid "Perform" -msgstr "Ausführen" +msgstr "Anwenden" msgid "Gap area" -msgstr "Füllbereich" +msgstr "Lückenbereich" msgid "Tool type" msgstr "Werkzeugtyp" @@ -71,7 +68,7 @@ msgid "Smart fill angle" msgstr "Intelligenter Füllwinkel" msgid "On overhangs only" -msgstr "Nur an Überhängen" +msgstr "Nur bei Überhängen" msgid "Auto support threshold angle: " msgstr "Winkel für automatische Supports: " @@ -86,21 +83,21 @@ msgid "Fill" msgstr "Ausfüllen" msgid "Gap Fill" -msgstr "Lücken füllen" +msgstr "Lückenfüllung" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "" -"Erlaubt das malen nur auf Seiten, welche ausgewählt wurden durch: \"%1%\"" +"Erlaubt das Malen nur auf Flächen, die ausgewählt wurden durch: \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Markieren der Flächen entsprechend dem Überhangwinkel." +msgstr "Hervorheben der Flächen entsprechend dem Überhangwinkel." msgid "No auto support" -msgstr "Kein automatischer Support" +msgstr "Keine automatischen Stützstrukturen" msgid "Support Generated" -msgstr "Support generiert" +msgstr "Stützstrukturen generiert" msgid "Lay on face" msgstr "Auf Fläche legen" @@ -115,7 +112,7 @@ msgstr "" "verfügbar sein." msgid "Color Painting" -msgstr "Farben malen" +msgstr "Farbe malen" msgid "Pen shape" msgstr "Pinselform" @@ -127,7 +124,7 @@ msgid "Key 1~9" msgstr "Schlüssel 1~9" msgid "Choose filament" -msgstr "Filament wählen" +msgstr "Filament auswählen" msgid "Edge detection" msgstr "Kantenerkennung" @@ -151,7 +148,7 @@ msgid "Height range" msgstr "Höhenreichweite" msgid "Ctrl + Shift + Enter" -msgstr "Strg + Umschalt + Eingabetaste" +msgstr "Strg + Umschalt + Eingabe" msgid "Toggle Wireframe" msgstr "Gittermodell ein-/ausblenden" @@ -188,10 +185,10 @@ msgid "Scale" msgstr "Skalieren" msgid "Error: Please close all toolbar menus first" -msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleistenmenüs" +msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleisten" msgid "Tool-Lay on Face" -msgstr "Werkzeug-lege auf Fläche" +msgstr "\"Auf Fläche legen\" Werkzeug" msgid "in" msgstr "in" @@ -215,7 +212,7 @@ msgid "Volume Operations" msgstr "Volumen Operationen" msgid "Translate" -msgstr "Versetzen" +msgstr "Übersetzen" msgid "Group Operations" msgstr "Gruppen Operationen" @@ -224,16 +221,16 @@ msgid "Set Position" msgstr "Position setzen" msgid "Set Orientation" -msgstr "Ausrichtung festlegen" +msgstr "Orientierung setzen" msgid "Set Scale" -msgstr "Skalierung festlegen" +msgstr "Skalierung setzen" msgid "Reset Position" msgstr "Position zurücksetzen" msgid "Reset Rotation" -msgstr "Rotation zurücksetzen" +msgstr "Drehung zurücksetzen" msgid "World coordinates" msgstr "Weltkoordinaten" @@ -248,13 +245,13 @@ msgid "%" msgstr "%" msgid "uniform scale" -msgstr "einheitliche Skalierung" +msgstr "einheitliche Skala" msgid "Left click" msgstr "Linksklick" msgid "Add connector" -msgstr "Verbinder zufügen" +msgstr "Verbinder hinzufügen" msgid "Right click" msgstr "Rechtsklick" @@ -266,7 +263,7 @@ msgid "Drag" msgstr "Ziehen" msgid "Move connector" -msgstr "Verbinder bewegen" +msgstr "Verbinder verschieben" msgid "Add connector to selection" msgstr "Verbinder zur Auswahl hinzufügen" @@ -278,7 +275,7 @@ msgid "Select all connectors" msgstr "Alle Verbinder auswählen" msgid "Cut" -msgstr "Schneiden" +msgstr "Zerschneiden" msgid "Connector" msgstr "Verbinder" @@ -293,31 +290,31 @@ msgid "Height" msgstr "Höhe" msgid "Edit connectors" -msgstr "Verbinder ändern" +msgstr "Verbinder bearbeiten" msgid "Add connectors" -msgstr "Verbinder zufügen" +msgstr "Verbinder hinzufügen" msgid "Upper part" -msgstr "Oberes Teil" +msgstr "Oberer Teil" msgid "Lower part" -msgstr "Unteres Teil" +msgstr "Unterer Teil" msgid "Keep" -msgstr "Behalten" +msgstr "Beibehalten" msgid "Place on cut" -msgstr "auf den Schnitt legen" +msgstr "Auf den Schnitt legen" msgid "Flip" -msgstr "umdrehen" +msgstr "Drehen" msgid "After cut" -msgstr "nach dem Schnitt" +msgstr "Nach dem Schnitt" msgid "Cut to parts" -msgstr "In Teile schneiden" +msgstr "In Einzelteile trennen" msgid "Auto Segment" msgstr "Automatische Segmentierung" @@ -347,7 +344,7 @@ msgid "Remove connectors" msgstr "Verbinder entfernen" msgid "Prizm" -msgstr "Prisma" +msgstr "Prizm" msgid "Frustum" msgstr "Frustum" @@ -359,7 +356,7 @@ msgid "Hexagon" msgstr "Sechseck" msgid "Confirm connectors" -msgstr "Bestätige Verbinder" +msgstr "Verbinder bestätigen" msgid "Cancel" msgstr "Abbrechen" @@ -368,19 +365,19 @@ msgid "Warning" msgstr "Warnung" msgid "Invalid connectors detected" -msgstr "Fehlerhafte Verbinder gefunden" +msgstr "Ungültige Verbinder erkannt" msgid "connector is out of cut contour" -msgstr "Der Verbinder ist außerhalb des Schnittfläche" +msgstr "Der Verbinder befindet sich außerhalb der Schnittkontur" msgid "connectors are out of cut contour" -msgstr "Verbinder sind außerhalb des Schnittfläche" +msgstr "Die Verbinder befinden sich außerhalb der Schnittkontur" msgid "connector is out of object" -msgstr "Der Verbinder ist außerhalb des Objekts" +msgstr "Verbinder ist außerhalb des Objekts" msgid "connectors is out of object" -msgstr "Verbinder sind außerhalb des Objekts" +msgstr "Die Verbinder müssen sich auf der Oberfläche des Objekts befinden." msgid "Some connectors are overlapped" msgstr "Einige Verbinder überlappen sich" @@ -389,11 +386,11 @@ msgid "" "Invalid state. \n" "No one part is selected for keep after cut" msgstr "" -"Ungültiger Zustand. \n" -"Kein Teil ist ausgewählt, was nach dem Schneiden behalten wird." +"Ungültiger Zustand.\n" +"Es ist kein Teil ausgewählt, das nach dem Schneiden beibehalten werden soll." msgid "Plug" -msgstr "Einstecken" +msgstr "Stecker" msgid "Dowel" msgstr "Dübel" @@ -459,7 +456,7 @@ msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Kann nicht angewendet werden, wenn die Vorschau angezeigt wird." +msgstr "Kann nicht angewendet werden, wenn die Vorschau verarbeitet wird." msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation wird bereits abgebrochen. Bitte warten Sie einige Sekunden." @@ -489,16 +486,16 @@ msgid "Remove selection" msgstr "Auswahl entfernen" msgid "Shift + Mouse move up or dowm" -msgstr "Umschalttaste + Mausbewegung nach oben oder unten" +msgstr "Umschalt + Maus nach oben oder unten bewegen" msgid "Rotate text" msgstr "Text drehen" msgid "Text shape" -msgstr "Text zufügen" +msgstr "Form des Textes" msgid "Font" -msgstr "Schiftart" +msgstr "Schriftart" msgid "Thickness" msgstr "Dicke" @@ -510,7 +507,7 @@ msgid "Embeded" msgstr "Eingebettet" msgid "Text Gap" -msgstr "Textabstand" +msgstr "Textlücke" msgid "Angle" msgstr "Winkel" @@ -518,9 +515,7 @@ msgstr "Winkel" msgid "" "Embeded\n" "depth" -msgstr "" -"Eingebettete\n" -"Tiefe" +msgstr "Eingebettete Tiefe" msgid "Surface" msgstr "Oberfläche" @@ -541,10 +536,10 @@ msgstr "Undefiniert" msgid "%1% was replaced with %2%" msgstr "%1% wurde mit %2% getauscht" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" -"Die Konfiguration wurde möglicherweise mit einer neueren Version von Orca " -"Slicer generiert." +"Die Konfiguration wurde möglicherweise mit einer neueren Version von Bambu " +"Studio generiert." msgid "Some values have been replaced. Please check them:" msgstr "Einige Werte sind ersetzt worden. Bitte überprüfen Sie diese:" @@ -572,45 +567,55 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Interne Version" + +msgid "Version" +msgstr "Version" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 wird wegen Arbeitsspeichermangels beendet, was ein Bug sein kann. " -"Bitte melden Sie diesen Fehler dem technischen Support." +"BambuStudio wird wegen Arbeitsspeichermangels beendet, was ein Bug sein " +"kann. Bitte melden Sie diesen Fehler dem technischen Support." msgid "Fatal error" msgstr "Schwerwiegender Fehler" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." -msgstr "" -"OrcaSlicer wird aufgrund eines Lokalisierungsfehlers beendet.Bitte melden " -"Sie diesen Fehler dem technischen Support." +msgstr "BambuStudio wird aufgrund eines Lokalisierungsfehlers beendet." msgid "Critical error" msgstr "Kritischer Fehler" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "OrcaSlicer hat eine unbehandelte Ausnahme erzeugt: %1%" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio hat eine unbehandelte Ausnahme erhalten: %1%" + +msgid "Untitled" +msgstr "Unbenannt" msgid "Downloading Bambu Network Plug-in" -msgstr "Lade Orca Network Plug-in herunter" +msgstr "Herunterladen des Bambu-Netzwerk-Plugins" + +msgid "Login information expired. Please login again." +msgstr "Login abgelaufen. Bitte neu einloggen." msgid "Incorrect password" msgstr "Falsches Passwort" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "Verbindung zu %s fehlgeschlagen! [SN:%s, code=%s]" +msgstr "Verbindung %s fehlgeschlagen! [SN:%s, code=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" -"Die OrcaSlicer-Konfigurationsdatei ist möglicherweise beschädigt und kann " +"Die BambuStudio-Konfigurationsdatei ist möglicherweise beschädigt und kann " "nicht geladen werden. Bitte löschen Sie die Datei und versuchen Sie es " "erneut." @@ -631,11 +636,11 @@ msgstr "Lade Konfiguration" #, c-format, boost-format msgid "Click to download new version in default browser: %s" msgstr "" -"Klicken Sie hier, um die neueste Version im Standardbrowser herunterzuladen: " -"%s" +"Klicken Sie hier, um die aktuelle Version im Standardbrowser " +"herunterzuladen: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer benötigt ein Upgrade" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio benötigt ein Upgrade" msgid "This is the newest version." msgstr "Dies ist die neueste Version." @@ -653,13 +658,13 @@ msgid "Loading a mode view" msgstr "Laden einer Modusansicht" msgid "Choose one file (3mf):" -msgstr "Wählen sie eine Datei (3mf):" +msgstr "Wählen Sie eine Datei (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Wählen sie eine oder mehrere Dateien (3mf/step/stl/svg/obj/amf):" +msgstr "Wählen Sie eine oder mehrere Dateien (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "Wählen sie eine Datei (3mf):" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Wählen Sie eine Datei (gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "Einige Profileinstellungen wurden geändert." @@ -676,24 +681,21 @@ msgstr "Benutzer abgemeldet" msgid "new or open project file is not allowed during the slicing process!" msgstr "" -"Während des Slicingvorgangs kann keine neue Datei erstellt oder geöffnet " -"werden!" +"Eine neue oder offene Projektdatei ist während des Slicing-Vorgangs nicht " +"erlaubt!" msgid "Open Project" msgstr "Projekt öffnen" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"Die Version von Orca Slicer ist veraltet und muss auf die neueste Version " +"Die Version von Bambu Studio ist zu niedrig und muss auf die neueste Version " "aktualisiert werden, bevor sie normal verwendet werden kann" -msgid "Login information expired. Please login again." -msgstr "Login abgelaufen. Bitte neu einloggen." - msgid "Privacy Policy Update" -msgstr "Datenschutzrichtlinien-Update" +msgstr "Aktualisierung der Datenschutzrichtlinie" msgid "Loading" msgstr "Lade" @@ -743,8 +745,8 @@ msgstr "Öffnen" msgid "Rename" msgstr "Umbenennen" -msgid "Orca Slicer GUI initialization failed" -msgstr "Initialisierung der Orca Slicer GUI ist fehlgeschlagen" +msgid "Bambu Studio GUI initialization failed" +msgstr "Initialisierung der Bambu Studio GUI ist fehlgeschlagen" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -769,19 +771,7 @@ msgid "Speed" msgstr "Geschwindigkeit" msgid "Strength" -msgstr "Struktur" - -msgid "Top Solid Layers" -msgstr "Obere volle Schichten" - -msgid "Top Minimum Shell Thickness" -msgstr "Obere minimale Schalendicke" - -msgid "Bottom Solid Layers" -msgstr "Untere volle Schichten" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Minimale Dicke der unteren Schichten" +msgstr "Stärke" msgid "Ironing" msgstr "Glätten" @@ -840,18 +830,6 @@ msgstr "Text bearbeiten" msgid "Load..." msgstr "Laden..." -msgid "Orca Cube" -msgstr "Orca Würfel" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "Voron Würfel" - msgid "Cube" msgstr "Würfel" @@ -861,8 +839,20 @@ msgstr "Zylinder" msgid "Cone" msgstr "Kegel" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" -msgstr "Höhen Modifizieren" +msgstr "Höhenbereich Modifikator" msgid "Add settings" msgstr "Einstellungen hinzufügen" @@ -876,13 +866,6 @@ msgstr "Als eigenes Objekt definieren" msgid "Set as individual objects" msgstr "Als eigene Objekte definieren" -msgid "Fill bed with copies" -msgstr "Bett mit Kopien füllen" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "" -"Füllen des verbleibenden Bettbereich mit Kopien des ausgewählten Objekts" - msgid "Printable" msgstr "Druckbar" @@ -899,7 +882,7 @@ msgid "Reload the selected parts from disk" msgstr "Die ausgewählten Teile von der Festplatte neu laden" msgid "Replace with STL" -msgstr "Durch STL Datei austauschen" +msgstr "Durch STL ersetzen" msgid "Replace the selected part with new STL" msgstr "Ausgewähltes Teil durch eine neue STL ersetzen." @@ -924,7 +907,7 @@ msgid "Scale to build volume" msgstr "Auf Druckvolumen skalieren" msgid "Scale an object to fit the build volume" -msgstr "Objekt so so skalieren, dass es in den Druckraum passt" +msgstr "Objekt so skalieren, dass es in den Druckraum passt" msgid "Flush Options" msgstr "Optionen für die Düsenreinigung" @@ -963,26 +946,29 @@ msgstr "" msgid "Assemble the selected objects to an object with single part" msgstr "Zusammenfügen der ausgewählten Objekte zu einem Objekt mit einem Teil" -msgid "Assemble the selected parts to a single part" -msgstr "Zusammenfügen der ausgewählten Teile zu einem einzigen Teil" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "Entlang der X Achse" msgid "Mirror along the X axis" -msgstr "An der X-Achse spiegeln" +msgstr "Entlang der X-Achse spiegeln" msgid "Along Y axis" msgstr "Entlang der Y Achse" msgid "Mirror along the Y axis" -msgstr "An der Y-Achse spiegeln" +msgstr "Entlang der Y-Achse spiegeln" msgid "Along Z axis" msgstr "Entlang der Z Achse" msgid "Mirror along the Z axis" -msgstr "An der Z-Achse spiegeln" +msgstr "Entlang der Z-Achse spiegeln" msgid "Mirror" msgstr "Spiegeln" @@ -991,13 +977,13 @@ msgid "Mirror object" msgstr "Objekt spiegeln" msgid "Invalidate cut info" -msgstr "Fehlerhafte Schnitt Info" +msgstr "Schnittinformationen ungültig machen" msgid "Add Primitive" msgstr "Primitiv hinzufügen" msgid "Show Labels" -msgstr "Bezeichnung anzeigen" +msgstr "Etiketten anzeigen" msgid "To objects" msgstr "Zu Objekten" @@ -1018,7 +1004,7 @@ msgid "Split the selected object" msgstr "Das ausgewählte Objekt teilen" msgid "Auto orientation" -msgstr "Automatische Ausrichtung" +msgstr "automatische Ausrichtung" msgid "Auto orient the object to improve print quality." msgstr "" @@ -1067,10 +1053,10 @@ msgid "Simplify Model" msgstr "Modell vereinfachen" msgid "Center" -msgstr "Zur Mitte" +msgstr "Mitte" msgid "Edit Process Settings" -msgstr "Prozesseinstellungen" +msgstr "Prozesseinstellungen bearbeiten" msgid "Edit print parameters for a single object" msgstr "Druckparameter für ein einzelnes Objekt bearbeiten" @@ -1082,19 +1068,23 @@ msgid "Set Filament for selected items" msgstr "Filament für ausgewählte Elemente festlegen" msgid "current" -msgstr "Aktuell" - -msgid "Set Unprintable" -msgstr "Undruckbar machen" - -msgid "Set Printable" -msgstr "Druckbar machen" +msgstr "Ausgewählt" msgid "Unlock" msgstr "Entsperren" msgid "Lock" -msgstr "Sperren" +msgstr "Schließen" + +msgid "Fill bed with copies" +msgstr "Bett mit Kopien füllen" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "" +"Füllen des verbleibenden Bettbereich mit Kopien des ausgewählten Objekts" + +msgid "Edit Plate Name" +msgstr "" msgid "Name" msgstr "Name" @@ -1158,7 +1148,7 @@ msgstr "" msgid "Click the icon to shift this object to the bed" msgstr "" -"Klicken Sie auf das Symbol, um dieses Objekt auf das Bett zu verschieben." +"Klicken Sie auf das Symbol, um dieses Objekt auf das Bett zu verschieben" msgid "Loading file" msgstr "Lade Datei" @@ -1166,6 +1156,9 @@ msgstr "Lade Datei" msgid "Error!" msgstr "Fehler!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Generisch" @@ -1185,19 +1178,19 @@ msgstr "" "Prozesseinstellungen der ausgewählten Objekte zu bearbeiten." msgid "Delete connector from object which is a part of cut" -msgstr "Lösche den Verbinder aus dem Objekt, das Teil des Schnitts ist." +msgstr "Löschen Sie den Verbinder vom Objekt, das Teil des Schnitts ist" msgid "Delete solid part from object which is a part of cut" -msgstr "Lösche den massiven Teil aus dem Objekt, das Teil des Schnitts ist." +msgstr "Löschen Sie den festen Teil vom Objekt, das Teil des Schnitts ist" msgid "Delete negative volume from object which is a part of cut" -msgstr "Lösche das negative Volumen aus dem Objekt, das Teil des Schnitts ist." +msgstr "Löschen Sie das negative Volumen vom Objekt, das Teil des Schnitts ist" msgid "" "To save cut correspondence you can delete all connectors from all related " "objects." msgstr "" -"Um die Schnittkorrespondenz zu speichern, können Sie alle Verbinder von " +"Um die Schnittkorrespondenz zu speichern, können Sie alle Verbinder aus " "allen zugehörigen Objekten löschen." msgid "" @@ -1208,16 +1201,16 @@ msgid "" "cut infornation first." msgstr "" "Durch diese Aktion wird eine Schnittkorrespondenz unterbrochen.\n" -"Danach kann die Modellkonsistenz nicht garantiert werden.\n" +"Danach kann die Modellkonsistenz nicht mehr gewährleistet werden.\n" "\n" -"Um mit massiven Teilen oder negativen Volumen zu arbeiten, \n" -"müssen Sie zuerst die Schnittinformationen ungültig machen." +"Um mit Volumenkörpern oder negativen Volumina zu arbeiten, müssen Sie zuerst " +"die Schnittinformationen ungültig machen." msgid "Delete all connectors" -msgstr "Lösche alle Verbinder" +msgstr "Alle Verbinder löschen" msgid "Deleting the last solid part is not allowed." -msgstr "Das Löschen des letzten festen Teils ist nicht erlaubt." +msgstr "Das Löschen des letzten soliden Teils ist nicht erlaubt." msgid "The target object contains only one part and can not be splited." msgstr "Das Zielobjekt enthält nur einen Teil und kann nicht geteilt werden." @@ -1226,7 +1219,7 @@ msgid "Assembly" msgstr "Zusammenbau" msgid "Cut Connectors information" -msgstr "Informationen zu den Schnitt-Verbindern" +msgstr "Schnittverbinder Informationen" msgid "Object manipulation" msgstr "Objektmanipulation" @@ -1235,19 +1228,19 @@ msgid "Group manipulation" msgstr "Gruppenmanipulation" msgid "Object Settings to modify" -msgstr "Objekteinstellungen zum Bearbeiten" +msgstr "Zu ändernde Objekteinstellungen" msgid "Part Settings to modify" -msgstr "Teileeinstellungen zum Bearbeiten" +msgstr "Zu ändernde Bauteileinstellungen" msgid "Layer range Settings to modify" -msgstr "Einstellungen zum Bearbeiten des Layer-Bereichs" +msgstr "Zu ändernde Ebenenbereichseinstellungen" msgid "Part manipulation" msgstr "Teilemanipulation" msgid "Instance manipulation" -msgstr "Instanzenmanipulation" +msgstr "Instanzmanipulation" msgid "Height ranges" msgstr "Höhenbereiche" @@ -1350,37 +1343,43 @@ msgid "multiple cells copy is not supported" msgstr "Das Kopieren mehrerer Zellen wird nicht unterstützt" msgid "Outside" -msgstr "Außenseite" - -msgid "Auto" -msgstr "Automatisch" - -msgid "Manual" -msgstr "Manuell" - -msgid "No-brim" -msgstr "Keine Umrandung" +msgstr "Aussenseite" msgid " " -msgstr " " +msgstr "" msgid "Layer height" msgstr "Schichthöhe" msgid "Wall loops" -msgstr "Wandschleifen" +msgstr "Wandlinien" msgid "Infill density(%)" -msgstr "Füllungsdichte(%)" +msgstr "Füllungdichte(%)" msgid "Auto Brim" msgstr "Automatische Umrandung" +msgid "Auto" +msgstr "Automatisch" + +msgid "Outer brim only" +msgstr "Nur äußerer Rand" + +msgid "Inner brim only" +msgstr "Nur innerer Rand" + +msgid "Outer and inner brim" +msgstr "Äußerer und innerer Rand" + +msgid "No-brim" +msgstr "Keine Umrandung" + msgid "Outer wall speed" msgstr "Geschwindigkeit Außenwand" msgid "Plate" -msgstr "Aktuelle Platte drucken" +msgstr "Druckplatte" msgid "Brim" msgstr "Umrandung" @@ -1401,13 +1400,13 @@ msgid "More" msgstr "Mehr" msgid "Open Preferences." -msgstr "Einstellungen." +msgstr "Einstellungen öffnen" msgid "Open next tip." -msgstr "Öffne nächsten Tip." +msgstr "Nächsten Tipp öffnen" msgid "Open Documentation in web browser." -msgstr "Öffne Dokumentation im Webbrowser." +msgstr "Dokumentation im Webbrowser öffnen" msgid "Pause:" msgstr "Pause:" @@ -1430,42 +1429,40 @@ msgid "OK" msgstr "OK" msgid "Jump to Layer" -msgstr "Wechsle zu Layer" +msgstr "Zur Schicht springen" msgid "Jump to layer" -msgstr "Wechsle zu Layer" +msgstr "Zur Schicht springen" msgid "Please enter the layer number" -msgstr "Bitte die Schichtnummer eingeben" +msgstr "Bitte geben Sie die Schichtnummer ein." msgid "Add Pause" msgstr "Pause hinzufügen" msgid "Insert a pause command at the beginning of this layer." -msgstr "Fügen Sie am Anfang dieses Layers einen Pause-Befehl ein." +msgstr "Fügen Sie am Anfang dieser Ebene einen Pausenbefehl ein." msgid "Add Custom G-code" msgstr "Benutzerdefinierten G-Code hinzufügen" msgid "Insert custom G-code at the beginning of this layer." -msgstr "Fügen Sie am Anfang dieses Layers benutzerdefinierten G-Code ein." +msgstr "Fügen Sie am Anfang dieser Ebene einen benutzerdefinierten G-Code ein." msgid "Add Custom Template" msgstr "Benutzerdefinierte Vorlage hinzufügen" msgid "Insert template custom G-code at the beginning of this layer." -msgstr "" -"Fügen Sie am Anfang dieses Layers benutzerdefinierten G-Code aus einer " -"Vorlage ein." +msgstr "Fügen Sie den benutzerdefinierten G-Code am Anfang dieser Ebene ein." msgid "Filament " -msgstr "Filament " +msgstr "Filament" msgid "Change filament at the beginning of this layer." -msgstr "Wechseln Sie am Anfang dieses Layers das Filament." +msgstr "Wechsle das Filament am Anfang dieser Schicht." msgid "Delete Pause" -msgstr "Pause löschen" +msgstr "" msgid "Delete Custom Template" msgstr "Benutzerdefinierte Vorlage löschen" @@ -1483,7 +1480,36 @@ msgid "No printer" msgstr "Kein Drucker" msgid "..." -msgstr "..." +msgstr "" + +msgid "Failed to connect to the server" +msgstr "Verbindung zum Server fehlgeschlagen" + +msgid "Check cloud service status" +msgstr "Status des Cloud-Dienstes prüfen" + +msgid "code" +msgstr "Code" + +msgid "Failed to connect to cloud service" +msgstr "Verbindung zum Cloud-Dienst fehlgeschlagen" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "" +"Bitte klicken Sie auf den obigen Hyperlink, um den Status des Cloud-Dienstes " +"einzusehen" + +msgid "Failed to connect to the printer" +msgstr "Verbindung zum Drucker fehlgeschlagen" + +msgid "Connection to printer failed" +msgstr "Verbindung zum Drucker ist fehlgeschlagen" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Bitte überprüfen Sie die Netzwerkverbindung von Drucker und Studio." + +msgid "Connecting..." +msgstr "Verbinden..." msgid "?" msgstr "?" @@ -1494,11 +1520,11 @@ msgstr "Leer" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "Ams Filament Backu" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" -msgstr "AMS nicht verbunden" +msgstr "AMS ist nicht verbunden" msgid "Cali" msgstr "Kalibrierung" @@ -1513,7 +1539,7 @@ msgid "Unload Filament" msgstr "Entladen" msgid "Ext Spool" -msgstr "Externe Spule" +msgstr "Ext. Spule" msgid "Tips" msgstr "Tipps" @@ -1536,7 +1562,7 @@ msgid "Calibrate again" msgstr "Erneut Kalibrieren" msgid "Cancel calibration" -msgstr "Kalibrierung abbrechen" +msgstr "Kalibration abbrechen" msgid "Heat the nozzle" msgstr "Düse aufheizen" @@ -1553,11 +1579,11 @@ msgstr "Neues Filament in den Extruder schieben" msgid "Purge old filament" msgstr "Altes Filament entfernen" -msgid "Feed new filament from external spool" -msgstr "Neues Filament von einer externen Spule zuführen" +msgid "Push new filament into the extruder" +msgstr "Neues Filament in den Extruder schieben" -msgid "Confirm whether the filament has been extruded" -msgstr "Bestätigen Sie, ob das Filament extrudiert wurde" +msgid "Grab new filament" +msgstr "Neues Filament holen" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1661,57 +1687,64 @@ msgstr "Einloggen" msgid "Login failed" msgstr "Anmeldung fehlgeschlagen" -msgid "The region parameter is incorrrect" -msgstr "Der Regionsparameter ist falsch" - -msgid "Failure of printer login" -msgstr "Druckeranmeldung fehlgeschlagen" - -msgid "Failed to get ticket" -msgstr "Ticket konnte nicht abgerufen werden" - -msgid "User authorization timeout" -msgstr "Zeitüberschreitung der Benutzerautorisierung" - -msgid "Failure of bind" -msgstr "Bindungsfehler" - -msgid "Unknown Failure" -msgstr "Unbekannter Fehler" - msgid "Please check the printer network connection." msgstr "Bitte überprüfen Sie die Netzwerkverbindung des Druckers." -msgid "Abnormal print file data. Please slice again" -msgstr "Fehlerhafte Daten in der Druckdatei. Bitte slicen Sie erneut" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormale Daten in der Druckdatei. Bitte slicen Sie erneut" -msgid "Task canceled" -msgstr "Auftrag abgebrochen" +msgid "Task canceled." +msgstr "Aufgabe abgebrochen." -msgid "Upload task timed out. Please check the network problem and try again" +msgid "Upload task timed out. Please check the network status and try again." msgstr "" -"Zeitüberschreitung beim Upload. Bitte überprüfen Sie das Netzwerk und " -"versuchen Sie es erneut" +"Zeitüberschreitung beim Upload. Bitte überprüfen Sie den Netzwerkstatus und " +"versuchen Sie es erneut." msgid "Cloud service connection failed. Please try again." msgstr "" "Die Verbindung zum Cloud-Dienst ist fehlgeschlagen. Bitte versuche es erneut." -msgid "Print file not found, please slice again" -msgstr "Druckdatei nicht gefunden, bitte noch einmal (erneut Slicen)" +msgid "Print file not found. please slice again." +msgstr "Druckdatei nicht gefunden. Bitte erneut slicen" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" "Die Druckdatei überschreitet die maximal zulässige Größe (1 GB). Bitte " -"vereinfachen Sie das Modell und slicen Sie es erneut" +"vereinfachen Sie das Modell und slicen Sie diese erneut." -msgid "Failed uploading print file" -msgstr "Fehler beim Hochladen der Druckdatei" +msgid "Failed to send the print job. Please try again." +msgstr "" +"Der Druckauftrag konnte nicht gesendet werden. Bitte versuchen Sie es erneut." -msgid "Wrong Access code" -msgstr "Falscher Zugangscode" +msgid "Failed to upload file to ftp. Please try again." +msgstr "" +"Datei konnte nicht auf FTP hochgeladen werden. Bitte versuchen Sie es erneut." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Überprüfen Sie den aktuellen Status des Bambu Lab-Servers, indem Sie auf den " +"obigen Link klicken." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"Die Größe der Druckdatei ist zu groß. Bitte passen Sie die Dateigröße an und " +"versuchen Sie es erneut." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Druckdatei nicht gefunden. Bitte erneut slicen und zum Drucken senden." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Druckdatei konnte nicht über FTP hochgeladen werden. Bitte überprüfen Sie " +"den Netzwerkstatus und versuchen Sie es erneut." msgid "Sending print job over LAN" msgstr "Druckauftrag über LAN senden" @@ -1720,7 +1753,7 @@ msgid "Sending print job through cloud service" msgstr "Druckauftrag über den Cloud-Dienst senden" msgid "Service Unavailable" -msgstr "Der Dienst ist nicht verfügbar" +msgstr "Dienst nicht verfügbar" msgid "Unkown Error." msgstr "Unbekannter Fehler." @@ -1730,42 +1763,31 @@ msgstr "Druckkonfiguration senden" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Erfolgreich gesendet. Springt automatisch auf die Geräteseite in %ss" +msgstr "Erfolgreich gesendet, springt automatisch zur Geräteseite in %ss" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" msgid "An SD card needs to be inserted before printing via LAN." msgstr "Vor dem Drucken über LAN muss eine MicroSD-Karte eingelegt werden." -msgid "Failed to send the print job. Please try again." -msgstr "" -"Der Druckauftrag konnte nicht gesendet werden. Bitte versuchen Sie es erneut." - -msgid "Send to Printer failed. Please try again." -msgstr "Senden an den Drucker fehlgeschlagen. Bitte versuchen Sie es erneut." - -msgid "No space left on Printer SD card" -msgstr "Kein Speicherplatz mehr auf der SD-Karte des Druckers." - msgid "Sending gcode file over LAN" -msgstr "Sende Gcode-Datei über LAN" - -msgid "Sending gcode file through cloud service" -msgstr "Sende Gcode-Datei über den Cloud-Service" +msgstr "Senden der G-Code-Datei über LAN" msgid "Sending gcode file to sdcard" -msgstr "Sende Gcode-Datei an SDKarte" +msgstr "Senden der G-Code-Datei an die MicroSD-Karte" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Erfolgreich gesendet. Aktuelle Seite wird in %s s geschlossen" +msgstr "Erfolgreich gesendet. Aktuelle Seite schließt in %ss" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Vor dem Senden an den Drucker muss eine SD-Karte eingelegt werden." - -msgid "Please log out and login to the printer again." -msgstr "Bitte melden Sie sich ab und melden Sie sich erneut beim Drucker an." +msgstr "" +"Vor dem Senden an den Drucker muss eine MicroSD-Karte eingelegt werden." msgid "Choose SLA archive:" -msgstr "SLA-Archiv auswählen:" +msgstr "Wählen Sie ein SLA-Archiv:" msgid "Import file" msgstr "Datei importieren" @@ -1777,13 +1799,13 @@ msgid "Import profile only" msgstr "Nur Profil importieren" msgid "Import model only" -msgstr "Importiere nur das Modell" +msgstr "Nur Modell importieren" msgid "Accurate" msgstr "Genau" msgid "Balanced" -msgstr "Gleichmäßig" +msgstr "Ausgeglichen" msgid "Quick" msgstr "Schnell" @@ -1795,31 +1817,29 @@ msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"Die SLA-Archivdatei enthält keine Voreinstellungen. Bitte aktivieren Sie " -"zuerst einige SLA-Druckervoreinstellungen, bevor Sie das SLA-Archiv " -"importieren." +"Das SLA-Archiv enthält keine Voreinstellungen. Bitte aktivieren Sie zuerst " +"einige SLA-Druckervoreinstellungen, bevor Sie das SLA-Archiv importieren." msgid "Importing canceled." msgstr "Import abgebrochen." msgid "Importing done." -msgstr "Import erfolgreich." +msgstr "Import abgeschlossen." msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." msgstr "" -"Das importierte SLA-Archiv enthält keine Voreinstellungen. Die aktuellen SLA-" -"Voreinstellungen wurden als Ersatz verwendet." +"Das importierte SLA-Archiv enthielt keine Voreinstellungen. Als Fallback " +"wurden die aktuellen SLA-Voreinstellungen verwendet." msgid "You cannot load SLA project with a multi-part object on the bed" msgstr "" -"Du kannst kein SLA-Projekt mit einem mehrteiligen Objekt auf dem Druckbett " -"laden." +"Sie können kein SLA-Projekt mit einem mehrteiligen Objekt auf dem Bett laden" msgid "Please check your object list before preset changing." msgstr "" -"Bitte überprüfen Sie Ihre Objektliste vor der Änderung der Voreinstellungen." +"Bitte überprüfen Sie Ihre Objektliste, bevor Sie die Voreinstellung ändern." msgid "Attention!" msgstr "Achtung!" @@ -1851,20 +1871,18 @@ msgstr "Urheberrecht" msgid "License" msgstr "Lizenz" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer ist lizenziert unter " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio ist lizenziert unter " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, Version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" -"Orca Slicer basiert auf BambuStudio von Bambulab, welches von PrusaSlicer " -"von Prusa Research stammt. PrusaSlicer wiederum basiert auf Slic3r von " -"Alessandro Ranellucci und der RepRap-Community." +"Bambu Studio basiert auf PrusaSlicer von Prusa Research, das von Slic3r von " +"Alessandro Ranellucci und der RepRap Community stammt." msgid "Libraries" msgstr "Bibliotheken" @@ -1874,20 +1892,18 @@ msgid "" "proprietary rights belong to their respective owners" msgstr "" "Diese Software verwendet Open-Source-Komponenten, deren Urheberrechte und " -"andere Eigentumsrechte den jeweiligen Eigentümern gehören" +"andere Eigentumsrechte den jeweiligen Eigentümern gehören." #, c-format, boost-format msgid "About %s" msgstr "Über %s" -msgid "Orca Slicer " -msgstr "Orca Slicer " - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "OrcaSlicer basiert auf BambuStudio, PrusaSlicer und SuperSlicer." - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." -msgstr "BambuStudio basiert ursprünglich auf PrusaSlicer von PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" +"Bambu Studio basiert auf PrusaSlicer von PrusaResearch und SuperSlicer von " +"Merill(supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "PrusaSlicer basiert ursprünglich auf Slic3r von Alessandro Ranellucci." @@ -1896,11 +1912,20 @@ msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." msgstr "" -"Slic3r wurde von Alessandro Ranellucci mit Hilfe vieler anderer Mitwirkender " -"entwickelt." +"Slic3r wurde von Alessandro Ranellucci mit der Hilfe vieler anderer " +"Mitwirkender entwickelt." -msgid "Version" -msgstr "Version" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu Studio bezog sich auch auf einige Ideen aus Cura von Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"Viele Teile der Software stammen aus Beiträgen der Community, sodass wir sie " +"nicht einzeln auflisten können, sondern sie in den entsprechenden Code-" +"Kommentaren erwähnen werden." msgid "AMS Materials Setting" msgstr "AMS Material Einstellung" @@ -1937,8 +1962,11 @@ msgstr "" "Das Einstellen von AMS-Slot-Informationen während des Drucks wird nicht " "unterstützt." -msgid "Factors of dynamic flow cali" -msgstr "Faktoren der dynamischen Flusskalibrierung" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Faktor K" @@ -1948,23 +1976,21 @@ msgstr "Faktor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" -"Das Einstellen von virtuellen Slot-Informationen während des Druckens wird " -"nicht unterstützt." +"Das Festlegen von Informationen zum virtuellen Steckplatz während des " +"Druckens wird nicht unterstützt" msgid "Are you sure you want to clear the filament information?" -msgstr "Sind Sie sicher, dass Sie die Filamentinformationen löschen möchten?" - -msgid "Please input a valid value (K in 0~0.5)" -msgstr "Bitte geben Sie einen gültigen Wert ein (K im Bereich von 0 bis 0,5)" - -msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgstr "" -"Bitte geben Sie einen gültigen Wert ein (K im Bereich von 0 bis 0,5, N im " -"Bereich von 0,6 bis 2,0)" +msgstr "Möchten Sie die Filamentinformationen wirklich löschen?" msgid "You need to select the material type and color first." msgstr "Sie müssen zuerst den Materialtyp und die Farbe auswählen." +msgid "Please input a valid value (K in 0~0.5)" +msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5)" + +msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5, N in 0.6~2.0)" + msgid "Other Color" msgstr "Andere Farbe" @@ -2000,7 +2026,7 @@ msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" msgid "℃" -msgstr "℃" +msgstr "" msgid "Bed temperature" msgstr "Druckbetttemperatur" @@ -2009,7 +2035,7 @@ msgid "mm³" msgstr "mm³" msgid "Start calibration" -msgstr "Kalibrierung starten" +msgstr "Starten" msgid "Next" msgstr "Weiter" @@ -2035,10 +2061,10 @@ msgstr "Beispiel" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "Kalibrierung... %d%%" +msgstr "Kalibrieren... %d%%" msgid "Calibration completed" -msgstr "Kalibrierung fertiggestellt" +msgstr "Kalibrierung abgeschlossen" #, c-format, boost-format msgid "%s does not support %s" @@ -2051,7 +2077,7 @@ msgid "Step" msgstr "Schritt" msgid "AMS Slots" -msgstr "AMS Slots" +msgstr "AMS-Slots" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." @@ -2069,10 +2095,10 @@ msgid "Disable AMS" msgstr "AMS deaktivieren" msgid "Print with the filament mounted on the back of chassis" -msgstr "Druck mit dem Filament auf der Rückseite des Chassis" +msgstr "Drucken mit Filament von einer externen Spule" msgid "Cabin humidity" -msgstr "Luftfeuchtigkeit in der Druck-Kammer" +msgstr "Luftfeuchtigkeit in der Kammer" msgid "" "Green means that AMS humidity is normal, orange represent humidity is high, " @@ -2083,7 +2109,7 @@ msgstr "" "Luftfeuchtigkeit zu hoch ist. (Hygrometer: je niedriger, desto besser.)" msgid "Desiccant status" -msgstr "Trockenmittelstatus" +msgstr "Status des Trockenmittels" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " @@ -2124,32 +2150,40 @@ msgid "Do not Enable AMS" msgstr "AMS nicht aktivieren" msgid "Print using materials mounted on the back of the case" -msgstr "" -"Drucken mit Materialien, die an der Rückseite des Gehäuses montiert sind" +msgstr "Drucken mit Filament von einer externen Spule." msgid "Print with filaments in ams" -msgstr "Drucken mit Materialien im AMS" +msgstr "Mit Filament aus dem AMS drucken" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Drucken mit Filamenten, die an der Rückseite des Chassis montiert sind" +msgstr "Drucken mit Filament von einer externen Spule" -msgid "Filaments replace" -msgstr "Filamente ersetzen" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Gruppe" +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 "" + msgid "AMS Settings" -msgstr "AMS-Einstellungen" +msgstr "AMS Einstellungen" msgid "Insertion update" -msgstr "Update einfügen" +msgstr "Aktualisierung des Einfügens" msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"Die AMS liest automatisch die Filamentinformationen, wenn ein neues Bambu " +"Das AMS liest automatisch die Filamentinformationen, wenn ein neues Bambu " "Lab Filament eingesetzt wird. Dies dauert etwa 20 Sekunden." msgid "" @@ -2169,7 +2203,7 @@ msgstr "" "abgeschlossen ist." msgid "Power on update" -msgstr "Update beim Einschalten" +msgstr "Update beim einschalten" msgid "" "The AMS will automatically read the information of inserted filament on " @@ -2215,7 +2249,7 @@ msgid "File" msgstr "Datei" msgid "Calibration" -msgstr "Kalibrierung" +msgstr "Kalibration" msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " @@ -2271,7 +2305,7 @@ msgid "Illegal instruction" msgstr "Unzulässiger Befehl" msgid "Divide by zero" -msgstr "Division durch Null" +msgstr "Geteilt durch Null" msgid "Overflow" msgstr "Überlauf" @@ -2280,13 +2314,13 @@ msgid "Underflow" msgstr "Unterlauf" msgid "Floating reserved operand" -msgstr "Reservierter Gleitkomma-Operand" +msgstr "Reservierter Operand" msgid "Stack overflow" msgstr "Stapelüberlauf" msgid "Unknown error when export G-code." -msgstr "Unbekannter Fehler beim exportieren des G-Code." +msgstr "Unbekannter Fehler beim exportieren des G-Codes." #, boost-format msgid "" @@ -2365,14 +2399,13 @@ msgstr "Modell" msgid "Choose an STL file to import bed shape from:" msgstr "" -"Wählen Sie eine STL-Datei aus, aus der Sie die Druckbettform importieren " -"möchten:" +"Wählen Sie eine STL-Datei aus, die Sie als Druckbettform importieren möchten:" msgid "Invalid file format." msgstr "Ungültiges Dateiformat." msgid "Error! Invalid model" -msgstr "Fehler! Ungültiges Modell" +msgstr "Fehler: Ungültiges Modell" msgid "The selected file contains no geometry." msgstr "Die ausgewählte Datei enthält keine Geometrie." @@ -2452,6 +2485,13 @@ msgstr "" "Zu geringe Schichthöhe.\n" "Auf 0,2 zurücksetzen" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Schichthöhe zu groß\n" +"Auf 0.2 zurückgesetzt" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2476,13 +2516,13 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Diese Einstellung wird für Anpassung der Modellgröße an kleinere Werte " +"Diese Einstellung wird für Anpassung der Modellgröße um kleine Werte " "verwendet.\n" -"Zum Beispiel, wenn die Modellgröße leicht abweicht oder schwer zu montieren " +"Zum Beispiel, wenn die Modellgröße leicht abweicht und schwer zu montieren " "ist.\n" "Für große Anpassungen verwenden Sie bitte die Modellskalierung.\n" "\n" -"Der Wert 0 setz zurück." +"Der Wert wird auf 0 zurückgesetzt." msgid "" "Too large elefant foot compensation is unreasonable.\n" @@ -2502,13 +2542,9 @@ 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 "" -"Der Spiralmodes funktioniert nur, wenn die Wand-Schleifen auf 1 gesetzt " -"sind,\n" -"die Unterstützung deaktiviert ist, die oberen Schalenlagen auf 0 gesetzt " -"sind, \n" -"die Dichte des dünnen Innenfülls auf 0 gesetzt ist und der Typ des " -"Zeitraffers auf \n" -"traditional steht." +"Der Spiralmodus funktioniert nur, wenn die Wand eine Linie breit ist, \n" +"Stützen deaktiviert sind, die oberen Schalenschichten 0 sind, die Fülldichte " +"0% beträgt und der Zeitraffertyp auf traditionell gesetzt ist." msgid "" "Change these settings automatically? \n" @@ -2573,9 +2609,10 @@ msgid "" "While printing by Object, the extruder may collide skirt.\n" "Thus, reset the skirt layer to 1 to avoid that." msgstr "" -"Während des Druckens mit einem Objekt kann der Extruder auf den Rand " -"stoßen.\n" -"Daher sollten die Skirt-Ebenen zurückgesetzt werden." +"Beim Drucken per Objekt kann es vorkommen, dass der Extruder mit einer " +"Schürze kollidiert.\n" +"Setzen Sie daher die Schürzenschicht auf 1 zurück, um Kollisionen zu " +"vermeiden." msgid "Auto bed leveling" msgstr "Automatische Druckbettnivellierung" @@ -2611,7 +2648,7 @@ msgid "Identifying build plate type" msgstr "Identifikation der Druckplatte" msgid "Calibrating Micro Lidar" -msgstr "Kalibrierung des Mikro-Lidars" +msgstr "Kalibrierung der Mikro-Lidar" msgid "Homing toolhead" msgstr "Referenzfahrt des Werkzeugkopfes" @@ -2623,10 +2660,10 @@ msgid "Checking extruder temperature" msgstr "Überprüfen der Extruder Temperatur" msgid "Printing was paused by the user" -msgstr "Der Druckvorgang wurde vom Benutzer angehalten" +msgstr "Der Druckvorgang wurde vom Benutzer pausiert" msgid "Pause of front cover falling" -msgstr "Pause, da die Abdeckung des Werkzeugkopfes abgefallen ist" +msgstr "Pausiert, da die Abdeckung des Werkzeugkopfes abgefallen ist" msgid "Calibrating the micro lida" msgstr "Kalibrierung des Mikro-Lidars" @@ -2662,7 +2699,7 @@ msgid "Serious" msgstr "Ernst" msgid "Common" -msgstr "Parameter" +msgstr "Allgemein" msgid "Update successful." msgstr "Update erfolgreich." @@ -2679,11 +2716,33 @@ msgstr "Update fehlgeschlagen." msgid "Failed to start printing job" msgstr "Druckauftrag konnte nicht gestartet werden" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "Standard" msgid "parameter name" -msgstr "Parametername" +msgstr "Name des Parameters" msgid "N/A" msgstr "N/A" @@ -2737,20 +2796,17 @@ msgstr "Werkzeug" msgid "Layer Time" msgstr "Schichtdauer" -msgid "Layer Time (log)" -msgstr "Layerzeit (log)" - msgid "Height: " -msgstr "Höhe: " +msgstr "Höhe:" msgid "Width: " -msgstr "Breite: " +msgstr "Breite:" msgid "Speed: " -msgstr "Geschwindigkeit " +msgstr "Geschwindigkeit:" msgid "Flow: " -msgstr "Durchfluss: " +msgstr "Fluss: " msgid "Layer Time: " msgstr "Schichtdauer:" @@ -2759,16 +2815,16 @@ msgid "Fan Speed: " msgstr "Lüftergeschwindigkeit: " msgid "Temperature: " -msgstr "Temperatur: " +msgstr "Temperatur:" msgid "Loading G-codes" msgstr "Laden von G-Codes" msgid "Generating geometry vertex data" -msgstr "Erzeugen von Geometrie-Eckpunktdaten" +msgstr "Generieren von Geometrie-Eckpunktdaten" msgid "Generating geometry index data" -msgstr "Erzeugung von Geometrie-Indexdaten" +msgstr "Generieren von Geometrie-Indexdaten" msgid "Statistics of All Plates" msgstr "Statistiken aller Platten" @@ -2783,7 +2839,7 @@ msgid "Total" msgstr "Gesamt" msgid "Total Time Estimation" -msgstr "Geschätzte Gesamtdauer" +msgstr "Gesamtzeitschätzung" msgid "Total time" msgstr "Gesamtdauer" @@ -2824,6 +2880,9 @@ msgstr "Temperatur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumetrische Flussrate (mm³/s)" +msgid "Layer Time (s)" +msgstr "Schichtzeit (s)" + msgid "Used filament" msgstr "Genutztes Filament" @@ -2864,7 +2923,7 @@ msgid "Color change" msgstr "Farbwechsel" msgid "Print" -msgstr "aktuelle Platte drucken" +msgstr "Druck" msgid "Pause" msgstr "Pause" @@ -2888,13 +2947,13 @@ msgid "Prepare time" msgstr "Vorbereitungszeit" msgid "Model printing time" -msgstr "Druckzeit des Modells" +msgstr "Druckzeit des Modell" msgid "Switch to silent mode" -msgstr "Zum Leisemodus wechseln" +msgstr "Zum Leise-Modus wechseln" msgid "Switch to normal mode" -msgstr "Zum normalen Modus wechseln" +msgstr "Zum Normalen Modus wechseln" msgid "Variable layer height" msgstr "Variable Schichthöhe" @@ -2906,7 +2965,7 @@ msgid "Quality / Speed" msgstr "Qualität / Geschwindigkeit" msgid "Smooth" -msgstr "Höhenunterschiede glätten" +msgstr "Smooth" msgid "Radius" msgstr "Radius" @@ -2927,13 +2986,13 @@ msgid "Remove detail" msgstr "Detail entfernen" msgid "Shift + Left mouse button:" -msgstr "Gross + linke Maustaste:" +msgstr "Umschalttaste + Linke Maustaste:" msgid "Reset to base" msgstr "Auf Ausgangsposition zurücksetzen" msgid "Shift + Right mouse button:" -msgstr "Gross + rechte Maustaste:" +msgstr "Umschalttaste + rechte Maustaste:" msgid "Smoothing" msgstr "Glättung" @@ -2954,7 +3013,7 @@ msgid "Tool Move" msgstr "Werkzeugbewegung" msgid "Tool Rotate" -msgstr "Werkzeug wechseln" +msgstr "Werkzeug Drehen" msgid "Move Object" msgstr "Objekt bewegen" @@ -2993,7 +3052,7 @@ msgid "Add plate" msgstr "Druckplatte hinzufügen" msgid "Auto orient" -msgstr "Automatische Ausrichtung" +msgstr "Automatische Orientierung" msgid "Arrange all objects" msgstr "Alle Objekte anordnen" @@ -3045,17 +3104,17 @@ msgstr "Größe:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" -"Konflikte von G-Code-Pfaden wurden bei Layer %d, z = %.2lf mm gefunden.Bitte " -"trennen Sie die konfliktbehafteten Objekte weiter voneinander (%s <-> %s)." +"Konflikte zwischen Gcode-Pfaden wurden auf Ebene %d gefunden. Bitte " +"platzieren Sie die Objekte weiter auseinander (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Ein Objekt ragt über die Begrenzung der Druckplatte." msgid "A G-code path goes beyond the max print height." -msgstr "Ein G-Code-Pfad überschreitet die maximale Druckhöhe." +msgstr "" msgid "A G-code path goes beyond the boundary of plate." msgstr "Ein G-Code-Pfad geht über die Begrenzung der Druckplatte hinaus." @@ -3084,10 +3143,10 @@ msgid "Bed leveling" msgstr "Druckbettnivellierung" msgid "Resonance frequency identification" -msgstr "Resonanzfrequenzidentifikation" +msgstr "Identifizierung der Resonanzfrequenz" msgid "Calibration program" -msgstr "Kalibrierungsprogramm" +msgstr "Kalibrationsprogramm" msgid "" "The calibration program detects the status of your device automatically to " @@ -3098,10 +3157,10 @@ msgstr "" "Abweichungen zu minimieren. Es sorgt für eine optimale Leistung des Geräts." msgid "Calibration Flow" -msgstr "Durchfluss-Kalibrierung" +msgstr "Flusskalibrierung" msgid "Start Calibration" -msgstr "Kalibrierung starten" +msgstr "Kalibration starten" msgid "Completed" msgstr "Abgeschlossen" @@ -3179,35 +3238,38 @@ msgstr "Nein" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "" -"Bevor ein neues Modell erstellt wird, wird %1% geschlossen. Möchten Sie " +" wird vor der Erstellung eines neuen Modells geschlossen. Möchten Sie " "fortfahren?" +msgid "Upload" +msgstr "" + msgid "Slice plate" -msgstr "Aktuelle Platte slicen" +msgstr "Druckplatte slicen" msgid "Print plate" -msgstr "Aktuelle Platte drucken" +msgstr "Druckplatte drucken" msgid "Slice all" -msgstr "Alle Platten slicen" +msgstr "Alle Slicen" msgid "Export G-code file" -msgstr "G-Code als Datei exportieren" +msgstr "G-Code-Datei exportieren" msgid "Send" msgstr "Senden" msgid "Export plate sliced file" -msgstr "Exportiere aktuelle Platte als STL Datei" +msgstr "Exportieren der Datei einer gesliceten Druckplatte" msgid "Export all sliced file" -msgstr "Exportiere alle Platten als STL Dateien" +msgstr "Alle gesliceten Dateien exportieren" msgid "Print all" -msgstr "Alle Platten drucken" +msgstr "Alle Druckplatten drucken" msgid "Send all" -msgstr "Sende alle" +msgstr "Alles senden" msgid "Keyboard Shortcuts" msgstr "Tastaturkürzel" @@ -3224,6 +3286,9 @@ msgstr "Konfigurationsordner anzeigen" msgid "Show Tip of the Day" msgstr "Tipp des Tages anzeigen" +msgid "Report issue" +msgstr "Problem melden" + msgid "Check for Update" msgstr "Nach Updates suchen" @@ -3282,7 +3347,7 @@ msgid "Right View" msgstr "Ansicht von rechts" msgid "Start a new window" -msgstr "Neues Fenster öffnen" +msgstr "Neues Fenster starten" msgid "New Project" msgstr "Neues Projekt" @@ -3306,7 +3371,7 @@ msgid "Save Project as" msgstr "Projekt speichern als" msgid "Shift+" -msgstr "Umschalt+" +msgstr "Umschalttaste+" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" @@ -3330,25 +3395,25 @@ msgid "Export all objects as STL" msgstr "Alle Objekte als STL exportieren" msgid "Export Generic 3MF" -msgstr "Generisches 3MF exportieren" +msgstr "Generische 3mf exportieren" msgid "Export 3mf file without using some 3mf-extensions" msgstr "Exportieren einer 3mf-Datei ohne Verwendung von 3mf-Erweiterungen" msgid "Export current sliced file" -msgstr "Aktuelle Slice-Datei exportieren" +msgstr "Aktuelle geslicete Datei exportieren" msgid "Export all plate sliced file" msgstr "Exportieren aller gesliceten Druckplatten" msgid "Export G-code" -msgstr "Exportiere G-Code" +msgstr "G-Code exportieren" msgid "Export current plate as G-code" msgstr "Aktuelle Druckplatte als G-Code exportieren" msgid "Export &Configs" -msgstr "Exportieren &Konfigurieren" +msgstr "Exportieren & Konfigurieren" msgid "Export current configuration to files" msgstr "Aktuelle Konfiguration in Dateien exportieren" @@ -3378,7 +3443,7 @@ msgid "Paste" msgstr "Einfügen" msgid "Paste clipboard" -msgstr "Aus Zwischenablage einfügen" +msgstr "Zwischenablage einfügen" msgid "Delete selected" msgstr "Auswahl löschen" @@ -3417,10 +3482,16 @@ msgid "Use Orthogonal View" msgstr "Orthogonale Ansicht verwenden" msgid "Show &Labels" -msgstr "&Bezeichnung anzeigen" +msgstr "Anzeigen &Etiketten" msgid "Show object labels in 3D scene" -msgstr "Objektbeschriftungen in 3D-Szene anzeigen" +msgstr "Objektbeschriftungen in der 3D-Szene anzeigen" + +msgid "Show &Overhang" +msgstr "Zeige Überhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Hervorhebung des Objektüberhangs in einer 3D-Szene anzeigen" msgid "Preferences" msgstr "Einstellungen" @@ -3432,59 +3503,52 @@ msgid "Help" msgstr "Hilfe" msgid "Temperature Calibration" -msgstr "Temperaturkalibrierung" +msgstr "" msgid "Pass 1" -msgstr "Durchgang 1" +msgstr "" msgid "Flow rate test - Pass 1" -msgstr "Durchflussratentests - Teil 1" +msgstr "" msgid "Pass 2" -msgstr "Durchgang 2" +msgstr "" msgid "Flow rate test - Pass 2" -msgstr "Durchflussratentests - Teil 1" +msgstr "" msgid "Flow rate" -msgstr "Durchflussrate" +msgstr "" msgid "Pressure advance" -msgstr "Pressure advance" +msgstr "" -#, fuzzy msgid "Retraction test" -msgstr "Rückzugslängen Test" - -msgid "Orca Tolerance Test" -msgstr "Orca Toleranz Test" +msgstr "" msgid "Max flowrate" -msgstr "Maximale Durchflussrate" +msgstr "" msgid "VFA" -msgstr "VFA" +msgstr "" msgid "More..." -msgstr "Mehr..." +msgstr "" msgid "Tutorial" -msgstr "Anleitung" +msgstr "" msgid "Calibration help" -msgstr "Kalibrierungshilfe" +msgstr "" msgid "More calibrations" -msgstr "Weitere Kalibrierungen" - -msgid "3D Models" -msgstr "3D Modelle" +msgstr "" msgid "&Open G-code" -msgstr "&Öffne G-Code" +msgstr "&Öffne G-Ccode" msgid "Open a G-code file" -msgstr "Öffne eine G-Code-Datei" +msgstr "G-Code-Datei öffnen" msgid "Re&load from Disk" msgstr "Neu&laden von Festplatte" @@ -3499,10 +3563,10 @@ msgid "Export toolpaths as OBJ" msgstr "Werkzeugweg als OBJ exportieren" msgid "Open &Studio" -msgstr "Öffne &Studio" +msgstr "Öffnen &Studio" msgid "Open Studio" -msgstr "Öffne Studio" +msgstr "Studio öffnen" msgid "&Quit" msgstr "&Beenden" @@ -3523,14 +3587,13 @@ msgstr "&Hilfe" #, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." msgstr "" -"Es existiert bereits eine Datei mit demselben Namen: %s. Möchten Sie sie " -"überschreiben?" +"Es gibt eine Datei mit dem gleichen Namen: %s. Möchten Sie sie überschreiben?" #, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." msgstr "" -"Eine Konfiguration mit dem gleichen Namen existiert bereits: %s. Möchten Sie " -"sie überschreiben?" +"Es existiert eine Konfiguration mit demselben Namen: %s. Möchten Sie diese " +"überschreiben?" msgid "Overwrite file" msgstr "Datei überschreiben" @@ -3548,10 +3611,7 @@ msgstr "Ordner auswählen" msgid "There is %d config exported. (Only non-system configs)" msgid_plural "There are %d configs exported. (Only non-system configs)" msgstr[0] "" -"Es ist %d Konfiguration exportiert worden. (Nur Nicht-Systemkonfigurationen)" msgstr[1] "" -"Es sind %d Konfigurationen exportiert worden. (Nur Nicht-" -"Systemkonfigurationen)" msgid "Export result" msgstr "Ergebnis exportieren" @@ -3564,11 +3624,7 @@ 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)" msgstr[0] "" -"Es ist %d Konfig importiert. (Nur nicht-systemische und kompatible " -"Konfigurationen)" msgstr[1] "" -"Es sind %d Konfigurationen importiert. (Nur nicht-systemische und kompatible " -"Konfigurationen)" msgid "Import result" msgstr "Ergebnis importieren" @@ -3589,11 +3645,11 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Möchten Sie Ihre persönlichen Daten aus Bambu Cloud synchronisieren?\n" -"Es enthält die folgenden Informationen:\n" -"1. Die Prozessvoreinstellungen\n" -"2. Die Filament-Voreinstellungen\n" -"3. Die Drucker-Voreinstellungen" +"Möchten Sie Ihre persönlichen Daten aus der Bambu Cloud synchronisieren?\n" +"Diese enthalten die folgenden Informationen:\n" +"1. Druckprofile\n" +"2. Filamenteinstellungen\n" +"3. Druckerprofile" msgid "Synchronization" msgstr "Synchronisierung" @@ -3601,32 +3657,32 @@ msgstr "Synchronisierung" msgid "Initialize failed (No Device)!" msgstr "Initialisierung fehlgeschlagen (Kein Gerät)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" + msgid "Initialize failed (No Camera Device)!" msgstr "Initialisierung fehlgeschlagen (keine Kamera)!" -msgid "Initializing..." -msgstr "Initialisieren..." - -msgid "Loading..." -msgstr "Laden..." - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "" -"Initialisierung fehlgeschlagen (Nicht unterstützt im reinen LAN-Modus)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" "Der Drucker ist mit dem Herunterladen beschäftigt; Bitte warten Sie, bis der " "Download beendet ist." +msgid "Loading..." +msgstr "Laden..." + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Initialisierung fehlgeschlagen (Fehlende LAN IP des Druckers)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialisierung fehlgeschlagen (wird vom Drucker nicht unterstützt)!" +msgid "Initializing..." +msgstr "Initialisieren..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3657,16 +3713,16 @@ msgstr "Herunterladen des virtuellen Kameratools" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" "Eine weitere virtuelle Kamera wird verwendet.\n" -"Orca Slicer unterstützt nur eine einzige virtuelle Kamera.\n" +"Bambu Studio unterstützt nur eine einzige virtuelle Kamera.\n" "Möchten Sie diese virtuelle Kamera stoppen?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Die Initialisierung der virtuellen Kamera ist fehlgeschlagen (%s)!" +msgstr "Initialisierung der virtuellen Kamera fehlgeschlagen (%s)!" msgid "Information" msgstr "Informationen" @@ -3706,7 +3762,10 @@ msgid "Video" msgstr "Video" msgid "Switch to video files." -msgstr "Wechseln Sie zu Videodateien." +msgstr "Wechseln zu Videodateien." + +msgid "Switch to 3mf model files." +msgstr "Wechsel zu 3mf-Modelldateien." msgid "Delete selected files from printer." msgstr "Ausgewählte Dateien vom Drucker löschen." @@ -3726,12 +3785,6 @@ msgstr "Batch-Verwaltung von Dateien." msgid "No printers." msgstr "Keine Drucker." -msgid "Not supported by this model of printer!" -msgstr "Wird von diesem Druckermodell nicht unterstützt!" - -msgid "Connecting..." -msgstr "Verbinden..." - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "Verbindung fehlgeschlagen [%d]!" @@ -3739,23 +3792,45 @@ msgstr "Verbindung fehlgeschlagen [%d]!" msgid "Loading file list..." msgstr "Dateiliste laden..." -msgid "No files" -msgstr "Keine Dateien." - -msgid "Not accessible in LAN-only mode!" -msgstr "Im reinen LAN-Modus nicht zugänglich!" - -msgid "Missing LAN ip of printer!" -msgstr "LAN-IP des Druckers fehlt!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "Keine Dateien [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" -"Sie sind dabei, %u Dateien zu löschen. Möchten Sie wirklich fortfahren?" +msgid "Load failed [%d]" +msgstr "Laden fehlgeschlagen [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Dateien löschen" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Möchten Sie die Datei '%s' vom Drucker löschen?" + +msgid "Delete file" +msgstr "Datei löschen" + +msgid "Fetching model infomations ..." +msgstr "Modellinformationen werden abgerufen..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Die Modellinformationen konnten nicht vom Drucker abgerufen werden." + +msgid "Failed to parse model infomations." +msgstr "Modellinformationen konnten nicht analysiert werden" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "" @@ -3777,6 +3852,12 @@ msgstr "Herunterladen abgeschlossen" msgid "Downloading %d%%..." msgstr "%d%% wird heruntergeladen..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Geschwindigkeit:" @@ -3798,15 +3879,6 @@ msgstr "3Dconnexion Einstellungen" msgid "Swap Y/Z axes" msgstr "Y/Z-Achsen vertauschen" -msgid "Camera" -msgstr "Kamera" - -msgid "SD Card" -msgstr "MicroSD-Karte" - -msgid "Camera Setting" -msgstr "Kameraeinstellung" - msgid "Printing Progress" msgstr "Druckprozess" @@ -3822,9 +3894,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Schicht: N/A" +msgid "Immediately score" +msgstr "Direktpunktzahl" + msgid "Clear" msgstr "Löschen" +msgid "Camera" +msgstr "Kamera" + +msgid "SD Card" +msgstr "MicroSD-Karte" + +msgid "Camera Setting" +msgstr "Kameraeinstellung" + msgid "Control" msgstr "Steuerung" @@ -3856,10 +3940,7 @@ msgid "No SD Card" msgstr "Keine MicroSD-Karte" msgid "SD Card Abnormal" -msgstr "SD-Karte fehlerhaft" - -msgid "Printing List" -msgstr "Druckliste" +msgstr "MicroSD-Karte abnormal" msgid "Cancel print" msgstr "Druck abbrechen" @@ -3867,24 +3948,8 @@ msgstr "Druck abbrechen" msgid "Are you sure you want to cancel this print?" msgstr "Möchten Sie diesen Druck wirklich abbrechen?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Die Verbindung zum Drucker [%s] wurde unterbrochen, da der LAN-Modus " -"deaktiviert ist. Bitte verbinden Sie den Drucker erneut, indem Sie sich mit " -"Ihrem Benutzerkonto anmelden." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Die Verbindung zum Drucker [%s] wurde unterbrochen, da der LAN-Modus " -"aktiviert ist. Bitte stellen Sie die Verbindung zum Drucker wieder her, " -"indem Sie den Zugriffscode eingeben, den Sie auf dem Druckerbildschirm " -"abrufen können." +msgid "Done" +msgstr "Fertig" msgid "Downloading..." msgstr "Herunterladen..." @@ -3895,12 +3960,19 @@ msgstr "Cloud Slicing..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" -"In der Cloud-Slicing-Warteschlange befinden sich %s Aufgaben vor Ihnen." +"In der Cloud Slicing-Warteschlange befinden sich %s Aufgaben vor Ihnen." #, c-format, boost-format msgid "Layer: %s" msgstr "Schicht: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "" +"Bitte geben Sie eine Punktzahl für Ihr Lieblingsmodell von Bambu Market ab." + +msgid "Score" +msgstr "Punktzahl" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Schicht: %d/%d" @@ -3910,13 +3982,13 @@ msgstr "" "Bitte heizen Sie die Düse auf über 170 Grad auf, bevor Sie Filament laden." msgid "Still unload" -msgstr "Entlade immer noch" +msgstr "Immer noch entladen" msgid "Still load" -msgstr "Lade immer noch" +msgstr "Immer noch laden" msgid "Please select an AMS slot before calibration" -msgstr "Bitte wählen Sie einen AMS-Slot vor der Kalibrierung aus" +msgstr "Bitte wählen Sie vor der Kalibrierung einen AMS-Slot aus." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " @@ -3944,24 +4016,15 @@ msgstr "Verrückt" msgid "Can't start this without SD card." msgstr "Kann ohne MicroSD-Karte nicht gestartet werden." -msgid "Failed to connect to the server" -msgstr "Verbindung zum Server fehlgeschlagen" - msgid "Status" msgstr "Status" -msgid "Media" -msgstr "Medien" - msgid "Update" msgstr "Update" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Verbindung zum Drucker fehlgeschlagen" - msgid "Don't show again" msgstr "Nicht erneut anzeigen" @@ -3979,7 +4042,7 @@ msgstr "%s Warnung" #, c-format, boost-format msgid "%s has a warning" -msgstr "%s hat eine Warnmeldung" +msgstr "%s hat eine Warnung" #, c-format, boost-format msgid "%s info" @@ -3999,7 +4062,7 @@ msgid "Configuration can update now." msgstr "Eine neue Konfiguration ist verfügbar. Jetzt aktualisieren?" msgid "Detail." -msgstr "Detail." +msgstr "Detail" msgid "Integration was successful." msgstr "Die Integration war erfolgreich." @@ -4020,7 +4083,7 @@ msgid "Undo integration failed." msgstr "Die Integration konnte nicht rückgängig gemacht werden." msgid "Exporting." -msgstr "Exportieren." +msgstr "Exportieren" msgid "Software has New version." msgstr "Ein Update ist verfügbar!" @@ -4032,7 +4095,7 @@ msgid "Open Folder." msgstr "Ordner öffnen." msgid "Safely remove hardware." -msgstr "Hardware sicher entfernen" +msgstr "Hardware sicher entfernen." #, c-format, boost-format msgid "%1$d Object has custom supports." @@ -4056,16 +4119,16 @@ msgid "ERROR" msgstr "FEHLER" msgid "CANCELED" -msgstr "ABGEBROCHEN" +msgstr "Abgebrochen" msgid "COMPLETED" -msgstr "ERLEDIGT" +msgstr "Abgeschlossen" msgid "Cancel upload" msgstr "Upload abbrechen" msgid "Slice ok." -msgstr "Slice ok." +msgstr "Slice abgeschlossen" msgid "Jump to" msgstr "Wechsle zu" @@ -4077,10 +4140,10 @@ msgid "Warning:" msgstr "Warnung:" msgid "Export successfully." -msgstr "Export erfolgreich." +msgstr "Erfolgreich exportiert" msgid "Serious warning:" -msgstr "Wichtige Warnung:" +msgstr "" msgid " (Repair)" msgstr " (Reparatur)" @@ -4105,7 +4168,7 @@ msgid "Color painting" msgstr "Farbe malen" msgid "Cut connectors" -msgstr "Schnittstellenverbindungen" +msgstr "Steckverbinder abschneiden" msgid "Layers" msgstr "Schichten" @@ -4149,7 +4212,7 @@ msgid "Enable AI monitoring of printing" msgstr "AI-Überwachung des Druckvorgangs aktivieren" msgid "Sensitivity of pausing is" -msgstr "Die Sensibilität der Pause ist" +msgstr "Die Empfindlichkeit des Pausierens ist" msgid "Enable detection of build plate position" msgstr "Positionserkennung der Druckplatte aktivieren" @@ -4168,13 +4231,13 @@ msgid "Auto-recovery from step loss" msgstr "Automatische Wiederherstellung bei Positionsverlust (Schrittverlust)" msgid "Global" -msgstr "Allgemein" +msgstr "Global" msgid "Objects" msgstr "Objekte" msgid "Advance" -msgstr "Erweitert" +msgstr "Fortgeschritten" msgid "Compare presets" msgstr "Profile vergleichen" @@ -4188,12 +4251,9 @@ msgstr "Filamenteinstellungen" msgid "Printer settings" msgstr "Drucker-Einstellungen" -msgid "Untitled" -msgstr "Unbenannt" - #, boost-format -msgid " plate %1%:" -msgstr " Druckplatte %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Ungültiger Name, die folgenden Zeichen sind nicht erlaubt:" @@ -4263,8 +4323,8 @@ msgid "" "Already did a synchronization, do you want to sync only changes or resync " "all?" msgstr "" -"Es wurde bereits eine Synchronisation durchgeführt. Möchtest du nur " -"Änderungen synchronisieren oder alles neu synchronisieren?" +"Es wurde bereits eine Synchronisation durchgeführt. Möchten Sie nur " +"Änderungen synchronisieren oder alles erneut synchronisieren?" msgid "Sync" msgstr "Sync" @@ -4278,14 +4338,10 @@ msgstr "" "ausgeführt." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" -"Es gibt einige unbekannte Filamente, die generischen Voreinstellungen " -"zugeordnet sind. Bitte aktualisieren Sie OrcaSlicer oder starten Sie " -"OrcaSlicer neu, um zu überprüfen, ob es ein Update für " -"Systemvoreinstellungen gibt." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -4301,7 +4357,7 @@ msgstr "" #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." -msgstr "Das Auswerfen des Geräts %s(%s) ist fehlgeschlagen." +msgstr "Das Auswerfen des Geräts %s (%s) ist fehlgeschlagen." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "" @@ -4333,18 +4389,18 @@ msgid "Loading file: %s" msgstr "Datei wird geladen: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "Der 3mf stammt nicht vom OrcaSlicer, lade nur die Geometriedaten." +msgstr "Die 3mf stammt nicht vom Bambu Lab, lädt nur Geometriedaten." msgid "Load 3mf" -msgstr "Lade 3mf" +msgstr "3mf laden" msgid "The Config can not be loaded." msgstr "Die Konfiguration kann nicht geladen werden." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"Die 3mf wurde mit einer alten Version von OrcaSlicer generiert, lade nur die " -"Geometriedaten." +"Die 3mf wurde mit einer alten Version von Bambu Studio erzeugt, nur " +"Geometriedaten werden geladen." #, c-format, boost-format msgid "" @@ -4365,23 +4421,23 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"Die Version %s der 3mf ist neuer als die Version %s %s. Bitte Ihre Software " -"aktualisieren." +"Die Version %s von 3mf ist neuer als die Version %s von %s, wir schlagen vor " +"Ihre Software zu aktualisieren." msgid "Invalid values found in the 3mf:" -msgstr "Ungültige Werte in der 3MF-Datei gefunden:" +msgstr "Ungültige Werte in der 3mf gefunden:" msgid "Please correct them in the param tabs" -msgstr "Bitte korrigieren Sie sie in den Parameter-Einstellungen." +msgstr "Bitte korrigieren Sie diese in den Parameter-Registerkarten" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "Der 3mf ist nicht kompatibel, lade nur die Geometriedaten!" +msgstr "Der 3mf ist nicht kompatibel, lädt nur Geometriedaten!" msgid "Incompatible 3mf" msgstr "Inkompatible 3mf" msgid "Name of components inside step file is not UTF8 format!" -msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" +msgstr "Namen der Komponenten in der Step-Datei sind nicht im UTF8-Format!" msgid "The name may show garbage characters!" msgstr "" @@ -4438,8 +4494,8 @@ msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Ihr Objekt scheint zu groß zu sein. Möchten Sie es verkleinern, um es " -"automatisch an das Druckbett anzupassen?" +"Ihr Objekt scheint zu groß zu sein. Möchten Sie es automatisch verkleinern, " +"damit es auf das Druckbett passt?" msgid "Object too large" msgstr "Objekt zu groß" @@ -4451,17 +4507,17 @@ msgid "Save file as:" msgstr "Speichere Datei als:" msgid "Delete object which is a part of cut object" -msgstr "Lösche Objekt, das Teil des geschnittenen Objekts ist." +msgstr "Objekt löschen, das Teil des ausgeschnittenen Objekts ist" msgid "" "You try to delete an object which is a part of a cut object.\n" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed." msgstr "" -"Sie versuchen, ein Objekt zu löschen, das Teil eines geschnittenen Objekts " -"ist.\n" -"Diese Aktion wird die Schnittstellenverbindung unterbrechen.\n" -"Danach kann die Modellkonsistenz nicht garantiert werden." +"Sie versuchen, ein Objekt zu löschen, das Teil eines ausgeschnittenen " +"Objekts ist.\n" +"Diese Aktion bricht eine Schnittkorrespondenz auf.\n" +"Danach kann die Modellkonsistenz nicht mehr gewährleistet werden." msgid "The selected object couldn't be split." msgstr "Das ausgewählte Objekt konnte nicht geteilt werden." @@ -4470,10 +4526,10 @@ msgid "Another export job is running." msgstr "Ein weiterer Exportauftrag läuft gerade." msgid "Select a new file" -msgstr "Wählen Sie eine neue Datei aus" +msgstr "Wähle eine neue Datei aus" msgid "File for the replace wasn't selected" -msgstr "Datei für das Ersetzen wurde nicht ausgewählt" +msgstr "Datei für die Ersetzung wurde nicht ausgewählt" msgid "Error during replace" msgstr "Fehler beim Ersetzen" @@ -4494,14 +4550,15 @@ msgid "Invalid data" msgstr "Ungültige Daten" msgid "Slicing Canceled" -msgstr "Slicing abgebrochen" +msgstr "Slicen abgebrochen" #, c-format, boost-format msgid "Slicing Plate %d" msgstr "Slicen der Druckplatte %d" msgid "Please resolve the slicing errors and publish again." -msgstr "Bitte beheben Sie die Slicing-Fehler und veröffentlichen Sie erneut." +msgstr "" +"Bitte beheben Sie die Slicing-Fehler und veröffentlichen Sie es erneut." msgid "" "Network Plug-in is not detected. Network related features are unavailable." @@ -4520,7 +4577,7 @@ msgstr "" msgid "You can keep the modified presets to the new project or discard them" msgstr "" "Sie können die geänderten Profile in das neue Projekt übernehmen oder sie " -"verwerfen es" +"verwerfen" msgid "Creating a new project" msgstr "Neues Projekt erstellen" @@ -4544,7 +4601,7 @@ msgid "Importing Model" msgstr "Modell importieren" msgid "prepare 3mf file..." -msgstr "3mf-Datei vorbereiten…" +msgstr "3mf-Datei vorbereiten..." msgid "downloading project ..." msgstr "Projekt wird heruntergeladen..." @@ -4557,7 +4614,7 @@ msgid "The selected file" msgstr "Die ausgewählte Datei" msgid "does not contain valid gcode." -msgstr "enthält keinen gültigen G-Code." +msgstr "Enthält keinen gültigen G-Code." msgid "Error occurs while loading G-code file" msgstr "Beim Laden der G-Code-Datei ist ein Fehler aufgetreten." @@ -4598,7 +4655,7 @@ msgstr "" "speichern, bevor Sie fortfahren?" msgid "Remember my choice." -msgstr "Meine Auswahl merken." +msgstr "Auswahl merken." msgid "Number of copies:" msgstr "Anzahl der Kopien:" @@ -4650,7 +4707,7 @@ msgid "Invalid number" msgstr "Ungültige Nummer" msgid "Plate Settings" -msgstr "Druck-Platteneinstellungen" +msgstr "Platteneinstellungen" #, boost-format msgid "Number of currently selected parts: %1%\n" @@ -4658,7 +4715,7 @@ msgstr "Anzahl der aktuell ausgewählten Teile: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "Anzahl der aktuell ausgewählten Objekte: %1%\n" +msgstr "" #, boost-format msgid "Part name: %1%\n" @@ -4693,10 +4750,10 @@ msgstr "Tipps:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" "Die Funktion \"Modell reparieren\" ist derzeit nur unter Windows verfügbar. " -"Bitte reparieren Sie das Modell in Orca Slicer (Windows) oder CAD-Software." +"Bitte reparieren Sie das Modell in Bambu Studio (Windows) oder CAD-Software." #, c-format, boost-format msgid "" @@ -4704,9 +4761,9 @@ msgid "" "still want to do this printing, please set this filament's bed temperature " "to non zero." msgstr "" -"Plate %d: %s wird nicht empfohlen, um Filament %s (%s) zu drucken. Wenn Sie " -"dennoch diesen Druck durchführen möchten, stellen Sie bitte die " -"Betttemperatur dieses Filaments auf einen Wert größer als Null." +"Platte% d: %s wird nicht für den Druck von Filament %s(%s) empfohlen. Wenn " +"Sie diesen Druckauftrag dennoch ausführen möchten, stellen Sie bitte die " +"Betttemperatur dieses Filaments auf eine Zahl ein, die nicht Null ist." msgid "Switching the language requires application restart.\n" msgstr "Der Wechsel der Sprache erfordert einen Neustart der Anwendung.\n" @@ -4737,7 +4794,7 @@ msgid "Browse" msgstr "Suchen" msgid "Choose Download Directory" -msgstr "Wählen Sie das Download-Verzeichnis" +msgstr "Download-Verzeichnis wählen" msgid "General Settings" msgstr "Allgemeine Einstellungen" @@ -4755,14 +4812,11 @@ msgid "North America" msgstr "Nordamerika" msgid "Others" -msgstr "Sonstiges" +msgstr "Sonstige" msgid "Login Region" msgstr "Login-Region" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Metrisch" @@ -4773,30 +4827,25 @@ msgid "Units" msgstr "Einheiten" msgid "Zoom to mouse position" -msgstr "Zum Mausposition zoomen" +msgstr "Auf Mausposition zoomen" msgid "" "Zoom in towards the mouse pointer's position in the 3D view, rather than the " "2D window center." msgstr "" -"Vergrößere die Ansicht in Richtung der Mauszeigerposition im 3D-Modus " -"anstatt auf das Zentrum des 2D-Fensters." +"Zoome auf die Position des Mauszeigers in der 3D-Ansicht und nicht auf die " +"Mitte des 2D-Fensters." msgid "Show \"Tip of the day\" notification after start" msgstr "Benachrichtigung \"Tipp des Tages\" nach dem Start anzeigen" msgid "If enabled, useful hints are displayed at startup." -msgstr "Wenn aktiviert, werden beim Start nützliche Hinweise angezeigt." - -msgid "Show g-code window" -msgstr "Zeige G-Code Fenster" - -#, fuzzy -msgid "If enabled, g-code window will be displayed." -msgstr "Wenn aktiviert, werden beim Start nützliche Hinweise angezeigt." +msgstr "" +"Wenn diese Option aktiviert ist, werden beim Starten nützliche Hinweise " +"angezeigt." msgid "Presets" -msgstr "Voreinstellungen" +msgstr "Profile" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)" @@ -4805,49 +4854,55 @@ msgid "User Sync" msgstr "Benutzer-Synchronisation" msgid "Update built-in Presets automatically." -msgstr "Aktualisiere integrierte Voreinstellungen automatisch." +msgstr "Aktualisiere die integrierten Profile automatisch." msgid "System Sync" -msgstr "System-Synchronisation " +msgstr "Systemsynchronisierung" msgid "Clear my choice on the unsaved presets." -msgstr "Meine Auswahl bei den nicht gespeicherten Voreinstellungen löschen." +msgstr "Lösche meine Auswahl für die nicht gespeicherten Profile." -msgid "Associate files to OrcaSlicer" -msgstr "Dateien mit OrcaSlicer verknüpfen" +msgid "Associate files to BambuStudio" +msgstr "Dateien mit BambuStudio verknüpfen" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Dateiendung .3mf mit OrcaSlicer verknüpfen" +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mf-Dateien mit Bambu Studio verknüpfen" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"Wenn aktiviert, wird OrcaSlicer als Standardanwendung zum Öffnen von .3mf-" +"Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von .3mf-" "Dateien festgelegt" -msgid "Associate .stl files to OrcaSlicer" -msgstr "Dateiendung .stl mit OrcaSlicer verknüpfen" +msgid "Associate .stl files to BambuStudio" +msgstr ".stl-Dateien mit BambuStudio verknüpfen" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"Wenn aktiviert, wird OrcaSlicer als Standardanwendung zum Öffnen von .stl-" +"Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von .stl-" "Dateien festgelegt" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Dateiendung .step/.stp mit OrcaSlicer verknüpfen" +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stp-Dateien mit BambuStudio verknüpfen" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"Wenn aktiviert, wird OrcaSlicer als Standardanwendung zum Öffnen von .step-" +"Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von .step-" "Dateien festgelegt" +msgid "Online Models" +msgstr "Online-Modelle" + +msgid "Show online staff-picked models on the home page" +msgstr "Von Mitarbeitern ausgewählte Online-Models auf der Startseite anzeigen" + msgid "Maximum recent projects" -msgstr "Höchstanzahl an letzten Projekten" +msgstr "Maximale Anzahl aktueller Projekte" msgid "Maximum count of recent projects" -msgstr "Maximale Anzahl an zuletzt geöffneten Projekten" +msgstr "Maximale Anzahl der letzten Projekte" msgid "Clear my choice on the unsaved projects." -msgstr "Meine Auswahl für nicht gespeicherte Projekte löschen." +msgstr "Lösche meine Auswahl für die ungespeicherten Projekte." msgid "Auto-Backup" msgstr "Automatische Datensicherung" @@ -4855,14 +4910,14 @@ msgstr "Automatische Datensicherung" msgid "" "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Erstellen Sie regelmäßig Sicherungskopien Ihres Projekts,um es im Falle " -"eines Absturzes wiederherstellen zu können." +"Sichern Sie Ihr Projekt regelmäßig, um die Wiederherstellung nach einem " +"gelegentlichen Absturz zu erleichtern." msgid "every" -msgstr "jede/r/s" +msgstr "jede" msgid "The peroid of backup in seconds." -msgstr "Die Zeitdauer für die Sicherung in Sekunden." +msgstr "Der Zeitraum des Backups in Sekunden." msgid "Downloads" msgstr "Downloads" @@ -4873,6 +4928,12 @@ msgstr "Dunkler Modus" msgid "Enable Dark mode" msgstr "Dunklen Modus aktivieren" +msgid "Develop mode" +msgstr "Entwicklermodus" + +msgid "Skip AMS blacklist check" +msgstr "Überspringen der AMS Blacklist-Prüfung" + msgid "Home page and daily tips" msgstr "Startseite und tägliche Tipps" @@ -4904,22 +4965,25 @@ msgid "Zoom of view" msgstr "Zoom der Ansicht" msgid "Other" -msgstr "Sonstiges" +msgstr "Sonstige" msgid "Mouse wheel reverses when zooming" msgstr "Scrollrichtung beim Zoomen umkehren" -msgid "Develop mode" -msgstr "Entwicklermodus" +msgid "Enable SSL(MQTT)" +msgstr "SSL aktivieren (MQTT)" -msgid "Dump video" -msgstr "Video löschen" +msgid "Enable SSL(FTP)" +msgstr "SSL aktivieren (FTP)" + +msgid "Internal developer mode" +msgstr "Interner Entwicklermodus" msgid "Log Level" msgstr "Protokollstufe" msgid "fatal" -msgstr "verhängnisvoll" +msgstr "fatal" msgid "error" msgstr "Fehler" @@ -4979,7 +5043,7 @@ msgid "Click to pick filament color" msgstr "Klicken Sie hier, um die Filamentfarbe auszuwählen" msgid "Please choose the filament colour" -msgstr "Bitte wählen Sie die Filamentfarbe aus." +msgstr "Bitte wählen Sie die Filamentfarbe" msgid "Add/Remove presets" msgstr "Profil hinzufügen/entfernen" @@ -4999,54 +5063,51 @@ msgstr "Materialien hinzufügen/entfernen" msgid "Add/Remove printers" msgstr "Drucker hinzufügen/entfernen" +msgid "Incompatible" +msgstr "Inkompatibel" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" -msgstr "Gleich wie globale Drucksequenz" +msgstr "Gleich wie Globale Druckreihenfolge" msgid "Print sequence" msgstr "Druckreihenfolge" -msgid "Plate name" -msgstr "Platten-Name" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Entspricht dem globalen Plattentyp" + msgid "Same as Global Bed Type" msgstr "Entspricht dem allgemeinen Bettyp" -msgid "Cool Plate" -msgstr "Kalte Druckplatte" - -msgid "Engineering Plate" -msgstr "Technische Druckplatte" - -msgid "High Temp Plate" -msgstr "Hochtemperaturdruckplatte" - -msgid "Textured PEI Plate" -msgstr "Texturierte PEI-Platte" - msgid "By Layer" msgstr "Nach Schicht" msgid "By Object" msgstr "Nach Objekt" +msgid "Plate name" +msgstr "Plattenname" + msgid "Accept" -msgstr "Bestätigt" +msgstr "Akzeptieren" msgid "Log Out" -msgstr "Ausloggen" +msgstr "Abmelden" msgid "Slice all plate to obtain time and filament estimation" msgstr "" "Slicen Sie alle Druckplatten, um Zeit- und Filamentschätzungen zu erhalten" msgid "Packing project data into 3mf file" -msgstr "Packen der Projektdaten in eine 3mf-Datei" +msgstr "Verpacken der Projektdaten in eine 3mf-Datei" msgid "Uploading 3mf" msgstr "Hochladen der 3mf" @@ -5068,7 +5129,7 @@ msgid "Slicing Plate 1" msgstr "Slicen der Druckplatte 1" msgid "Packing data to 3mf" -msgstr "Daten in 3mf packen" +msgstr "Daten in 3mf verpacken" msgid "Jump to webpage" msgstr "Zu einer Website springen" @@ -5084,16 +5145,16 @@ msgid "Project Inside Preset" msgstr "Projektbasiertes Profil" msgid "Name is invalid;" -msgstr "Der Name ist ungültig;" +msgstr "Name ist ungültig;" msgid "illegal characters:" -msgstr "unzulässige Zeichen:" +msgstr "Unzulässige Zeichen:" msgid "illegal suffix:" msgstr "unzulässiger Zusatz:" msgid "Name is unavailable." -msgstr "Der Name ist nicht verfügbar." +msgstr "Name ist nicht verfügbar." msgid "Overwrite a system profile is not allowed" msgstr "Überschreiben eines Systemprofils ist nicht erlaubt" @@ -5112,7 +5173,7 @@ msgid "Please note that saving action will replace this preset" msgstr "Bitte beachten Sie, dass das Speichern dieses Profil überschreibt." msgid "The name is not allowed to be empty." -msgstr "Der Name darf nicht leer sein." +msgstr "Das Namensfeld darf nicht leer sein." msgid "The name is not allowed to start with space character." msgstr "Der Name darf nicht mit einem Leerzeichen beginnen." @@ -5151,11 +5212,8 @@ msgstr "Für \"%1%\", fügen Sie \"%2%\" als neues Profil hinzu" msgid "Simply switch to \"%1%\"" msgstr "Wechseln Sie einfach zu \"%1%\"" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Auftrag abgebrochen" msgid "(LAN)" msgstr "(LAN)" @@ -5166,26 +5224,35 @@ msgstr "Mein Gerät" msgid "Other Device" msgstr "Anderes Gerät" +msgid "Online" +msgstr "Online" + msgid "Input access code" msgstr "Zugangscode eingeben" msgid "Can't find my devices?" -msgstr "Kann das Geräte nicht finden?" +msgstr "Sie können keine Geräte finden?" msgid "Log out successful." msgstr "Abmeldung erfolgreich." +msgid "Offline" +msgstr "Offline" + msgid "Busy" msgstr "Beschäftigt" msgid "Bambu Cool Plate" -msgstr "Bambu kalte Druckplatte" +msgstr "Bambu Cool Plate" + +msgid "PLA Plate" +msgstr "PLA-Platte" msgid "Bamabu Engineering Plate" -msgstr "Bambu technische Druckplatte" +msgstr "Bambu Engineering Plate" msgid "Bamabu High Temperature Plate" -msgstr "Bambu Hochtemperaturdruckplatte" +msgstr "Bambu High Temperature Plate" msgid "Send print job to" msgstr "Druckauftrag senden an" @@ -5196,12 +5263,26 @@ msgstr "Aktualisieren" msgid "Bed Leveling" msgstr "Druckbettnivellierung" -msgid "Flow Calibration" -msgstr "Flusskalibrierung" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Es kann keine Verbindung zum Drucker hergestellt werden" msgid "send completed" msgstr "Senden abgeschlossen" +msgid "Error code" +msgstr "Fehlercode" + +msgid "Check the status of current system services" +msgstr "Überprüfen Sie den Status der aktuellen Systemdienste" + +msgid "Printer local connection failed, please try again." +msgstr "" +"Die lokale Verbindung des Druckers ist fehlgeschlagen. Bitte versuchen Sie " +"es erneut." + msgid "No login account, only printers in LAN mode are displayed" msgstr "Kein Login-Konto, nur Drucker im LAN-Modus werden angezeigt" @@ -5255,7 +5336,7 @@ msgid "" "sending the print job" msgstr "" "Bitte klicken Sie oben auf jedes Filament, um den zugehörigen AMS-Slot " -"anzugeben, bevor Sie den Druckauftrag abschicken" +"anzugeben, bevor Sie den Druckauftrag abschicken." #, c-format, boost-format msgid "" @@ -5284,6 +5365,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Vor dem Drucken muss eine MicroSD-Karte eingelegt werden." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "" "Für die Aufnahme eines Zeitraffers muss eine MicroSD-Karte eingelegt werden." @@ -5313,13 +5397,13 @@ msgid "" "currently selected printer. It is recommended that you use the same printer " "type for slicing." msgstr "" -"Der ausgewählte Druckertyp beim Generieren des G-Codes stimmt nicht mit dem " -"derzeit ausgewählten Drucker überein. Es wird empfohlen, für das Slicing " +"Der beim Generieren des G-Codes ausgewählte Druckertyp stimmt nicht mit dem " +"aktuell ausgewählten Drucker überein. Es wird empfohlen, für das Slicing " "denselben Druckertyp zu verwenden." #, c-format, boost-format msgid "%s is not supported by AMS." -msgstr "%s wird von AMS nicht unterstützt." +msgstr "%s wird vom AMS nicht unterstützt." msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5333,12 +5417,30 @@ msgstr "" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" -"Bitte klicken Sie auf die Bestätigungsschaltfläche, wenn Sie den " -"Druckvorgang trotzdem fortsetzen möchten." +"Klicken Sie bitte auf „Bestätigen“, wenn Sie dennoch mit dem Drucken " +"fortfahren möchten." + +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" msgid "Preparing print job" msgstr "Druckauftrag vorbereiten" +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormale Daten in der Druckdatei. Bitte slicen Sie erneut" + +msgid "The name length exceeds the limit." +msgstr "Die Namenslänge überschreitet das Limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "Den Gerätenamen ändern" @@ -5352,16 +5454,43 @@ msgstr "" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" -"Bevor Sie die Datei an die SD-Karte des Druckers senden können, muss eine SD-" -"Karte eingelegt werden." +"Vor dem Senden an die SD-Karte des Druckers muss eine microSD-Karte " +"eingelegt werden." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "Der Drucker muss sich im selben LAN wie OrcaSlicer befinden." +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "Der Drucker muss sich im selben LAN befinden wie Bambu Studio." msgid "The printer does not support sending to printer SD card." msgstr "" "Der Drucker unterstützt nicht das Senden an die MicroSD-Karte des Druckers." +msgid "Failed to create socket" +msgstr "Socket konnte nicht erstellt werden" + +msgid "Failed to connect socket" +msgstr "Verbindung zum Socket fehlgeschlagen" + +msgid "Failed to publish login request" +msgstr "Anmeldeanfrage konnte nicht gesendet werden" + +msgid "Get ticket from device timeout" +msgstr "Zeitüberschreitung beim Abrufen des Tickets vom Gerät" + +msgid "Get ticket from server timeout" +msgstr "Zeitüberschreitung beim Abrufen des Tickets vom Server" + +msgid "Failed to post ticket to server" +msgstr "Ticket konnte nicht auf den Server übertragen werden" + +msgid "Failed to parse login report reason" +msgstr "Der Grund für den Anmeldebericht konnte nicht analysiert werden" + +msgid "Receive login report timeout" +msgstr "Zeitüberschreitung beim Empfang des Anmeldeberichts" + +msgid "Unknown Failure" +msgstr "Unbekannter Fehler" + msgid "Log in printer" msgstr "Drucker anmelden" @@ -5369,6 +5498,73 @@ msgid "Would you like to log in this printer with current account?" msgstr "" "Möchten Sie sich bei diesem Drucker mit Ihrem aktuellen Konto anmelden?" +msgid "Check the reason" +msgstr "Überprüfe den Grund" + +msgid "Read and accept" +msgstr "Gelesen und akzeptieren" + +msgid "Terms and Conditions" +msgstr "Allgemeine Geschäftsbedingungen" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"Vielen Dank für den Kauf eines Bambu Lab Geräts. Bevor Sie Ihr Bambu Lab " +"Gerät verwenden, lesen Sie bitte die Allgemeinen Geschäftsbedingungen. Indem " +"Sie zustimmen klicken, erklären Sie sich mit der Datenschutzrichtlinie und " +"den Nutzungsbedingungen (zusammen die „Bedingungen“) einverstanden, um so " +"Ihr Bambu Lab Gerät verwenden zu können. Wenn Sie die Datenschutzrichtlinien " +"von Bambu Lab nicht einhalten oder diesen zustimmen, verwenden Sie bitte " +"keine Geräte und Dienstleistungen von Bambu Lab." + +msgid "and" +msgstr "und" + +msgid "Privacy Policy" +msgstr "Datenschutzerklärung" + +msgid "We ask for your help to improve everyone's printer" +msgstr "Wir bitten Sie um Ihre Hilfe, um den Drucker für alle zu verbessern" + +msgid "Statement about User Experience Improvement Program" +msgstr "Erklärung zum Programm zur Verbesserung der Benutzererfahrung" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"In der 3D-Druck-Community lernen wir von den Erfolgen und Misserfolgen der " +"anderen, um unsere eigenen Slicing-Parameter und Einstellungen anzupassen. " +"%s folgt demselben Prinzip und nutzt maschinelles Lernen, um seine Leistung " +"anhand der Erfolge und Misserfolge der riesigen Anzahl von Drucken unserer " +"Nutzer zu verbessern. Wir trainieren %s, um schlauer zu werden, indem wir es " +"mit realen Daten füttern. Wenn Sie einverstanden sind, greift dieser Dienst " +"auf Informationen aus Ihren Fehlerprotokollen und Nutzungsprotokollen zu, " +"die die in der Datenschutzrichtlinie beschriebenen Informationen enthalten " +"können. Wir werden keine persönlichen Daten sammeln, durch die eine Person " +"direkt oder indirekt identifiziert werden kann, wie Namen, Adressen, " +"Zahlungsinformationen oder Telefonnummern. Durch die Aktivierung dieses " +"Dienstes erklären Sie sich mit diesen Bedingungen und der Erklärung zum " +"Datenschutz einverstanden." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Erklärung zum Plan zur Verbesserung der Benutzererfahrung" + msgid "Log in successful." msgstr "Anmeldung erfolgreich." @@ -5457,12 +5653,10 @@ msgid "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" msgstr "" -"Bei Verwendung von Supportmaterial für die Supportoberfläche empfehlen wir " +"Wenn Sie Stützmaterial für die Stützschnittstelle verwenden, empfehlen wir " "die folgenden Einstellungen:\n" -" 0 Abstand nach oben (top z distance), 0 Abstand zwischen Oberflächen " -"(interface spacing), konzentrisches Muster und deaktivieren Sie " -"dieunabhängige Einstellung der Support-Lagenhöhe (independent support layer " -"height)." +"0 oberer Z-Abstand, 0 Schnittstellenabstand, konzentrisches Muster und " +"Deaktivierung der unabhängigen Stützschichthöhe" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5493,6 +5687,9 @@ msgstr "Wände" msgid "Top/bottom shells" msgstr "Obere/Untere Schichten" +msgid "Sparse infill" +msgstr "Füllung" + msgid "Initial layer speed" msgstr "Geschwindigkeit der ersten Schicht" @@ -5512,12 +5709,6 @@ msgstr "" "von 0 bedeutet keine Verlangsamung für den Überhangsbereich und es wird die " "Wandgeschwindigkeit verwendet." -msgid "Bridge" -msgstr "Überbrückung" - -msgid "Set speed for external and internal bridges" -msgstr "Setze Geschwindigkeit für externe und interne Brücken" - msgid "Travel speed" msgstr "Fahrgeschwindigkeit" @@ -5525,13 +5716,13 @@ msgid "Acceleration" msgstr "Beschleunigung" msgid "Jerk(XY)" -msgstr "Jerk(XY)" +msgstr "" msgid "Raft" -msgstr "Druckbasis (Raft)" +msgstr "Floß" msgid "Support filament" -msgstr "Supportfilament" +msgstr "Filament für Stützen" msgid "Prime tower" msgstr "Reinigungsturm" @@ -5542,8 +5733,8 @@ msgstr "Spezialmodus" msgid "G-code output" msgstr "G-Code-Ausgabe" -msgid "Post-processing Scripts" -msgstr "Post-Processing Scripts" +msgid "Post-processing scripts" +msgstr "Nachbearbeitungsskripte" msgid "Frequent" msgstr "Häufig" @@ -5570,7 +5761,7 @@ msgid "Reserved keywords found" msgstr "Reservierte Schlüsselwörter gefunden" msgid "Setting Overrides" -msgstr "Überschreiben der Einstellungen" +msgstr "Überschreibungen der Einstellungen" msgid "Retraction" msgstr "Rückzug" @@ -5598,35 +5789,40 @@ msgstr "Düse" msgid "Nozzle temperature when printing" msgstr "Düsentemperatur beim Drucken" -msgid "Cool plate" -msgstr "Kalte Druckplatte" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Dies ist die Betttemperatur, wenn die kalte Druckplatte installiert ist. Ein " -"Wert von 0 bedeutet, dass das Filament auf der kalten Druckplatte nicht " -"unterstützt." +"Dies ist die Betttemperatur, wenn die Cool Plate installiert ist. Ein Wert " +"von 0 bedeutet, dass das Filament auf der Cool Plate nicht unterstützt." -msgid "Engineering plate" -msgstr "Technische Druckplatte" +msgid "Engineering Plate" +msgstr "Engineering Plate" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"Dies ist die Betttemperatur, wenn die technische Druckplatte installiert " -"wird. Ein Wert von 0 bedeutet, dass das Filament auf der technischen " -"Druckplatte nicht unterstützt wird." +"Dies ist die Betttemperatur, wenn die Engineering Plate installiert wird. " +"Ein Wert von 0 bedeutet, dass das Filament auf der Engineering Plate nicht " +"unterstützt wird." + +msgid "High Temp Plate" +msgstr "High Temp Plate" 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 "" -"Dies ist die Betttemperatur, wenn die Hochtemperatur-Druckplatte installiert " -"ist. Ein Wert von 0 bedeutet, dass das Filament auf der Hochtemperatur-" -"Druckplatte nicht unterstützt wird." +"Dies ist die Betttemperatur, wenn die High Temperature Plate installiert " +"ist. Ein Wert von 0 bedeutet, dass das Filament auf der High Temperature " +"Plate nicht unterstützt wird." + +msgid "Textured PEI Plate" +msgstr "Textured PEI Plate" msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " @@ -5684,14 +5880,6 @@ msgstr "Filament End G-Code" msgid "Printable space" msgstr "Druckbarer Raum" -#, fuzzy -msgid "Cooling Fan" -msgstr "Kühlung" - -#, fuzzy -msgid "Fan speed-up time" -msgstr "Lüfter Beschleunigungszeit" - msgid "Extruder Clearance" msgstr "Freiraum des Extruders" @@ -5717,13 +5905,13 @@ msgid "Change filament G-code" msgstr "Filamentwechsel G-Code" msgid "Pause G-code" -msgstr "Pausen G-Code" +msgstr "G-Code pausieren" msgid "Template Custom G-code" msgstr "Vorlage Benutzerdefinierter G-Code" msgid "Motion ability" -msgstr "Bewegungseinstellung" +msgstr "Bewegungsfähigkeit" msgid "Normal" msgstr "Normal" @@ -5740,24 +5928,9 @@ msgstr "Jerkbegrenzung" msgid "Layer height limits" msgstr "Höhenbegrenzungen für Schichten" -msgid "Lift Z Enforcement" -msgstr "Z-Höhe einhalten" - msgid "Retraction when switching material" msgstr "Rückzug bei Materialwechsel" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" -"Die Wipe-Option ist bei Verwendung des Firmware-Retractionsmodus nicht " -"verfügbar. Soll ich sie deaktivieren, um den Firmware-Retractionsmodus zu " -"aktivieren?" - -msgid "Firmware Retraction" -msgstr "Filament Rückzug durch Firmware" - msgid "Detached" msgstr "Losgelöst" @@ -5903,7 +6076,7 @@ msgid "Capabilities" msgstr "Fähigkeiten" msgid "Select presets to compare" -msgstr "Wähle Voreinstellungen zum Vergleich aus" +msgstr "Profile zum Vergleich auswählen" msgid "Show all presets (including incompatible)" msgstr "Alle Profile anzeigen (auch inkompatible)" @@ -5970,14 +6143,16 @@ msgid "" msgstr "" "Das Konfigurationspaket ist mit der aktuellen Anwendung nicht kompatibel.\n" "%s wird das Konfigurationspaket aktualisieren, andernfalls wird es nicht " -"starten können" +"starten" #, c-format, boost-format msgid "Exit %s" -msgstr "%s beenden" +msgstr "%s verlassen" msgid "the Configuration package is incompatible with current APP." -msgstr "Das Konfigurationspaket ist mit der aktuellen APP nicht kompatibel." +msgstr "" +"Das Konfigurationspaket ist mit der aktuellen Version von Bambu Studio nicht " +"kompatibel." msgid "Configuration updates" msgstr "Konfigurationsupdates" @@ -6040,7 +6215,7 @@ msgid "Objects list" msgstr "Liste der Objekte" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" -msgstr "Importiere Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien" +msgstr "Importieren von Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien." msgid "⌘+Shift+G" msgstr "⌘+Umschalttaste+G" @@ -6076,10 +6251,10 @@ msgid "Zoom View" msgstr "Ansicht zoomen" msgid "Shift+A" -msgstr "Umschalt+A" +msgstr "Umschalttaste+A" msgid "Shift+R" -msgstr "Umschalt+R" +msgstr "Umschalttaste+R" msgid "" "Auto orientates selected objects or all objects.If there are selected " @@ -6092,7 +6267,7 @@ msgstr "" "ausgerichtet." msgid "Shift+Tab" -msgstr "Umschalt+Tab" +msgstr "Umschalttaste+Tab" msgid "Collapse/Expand the sidebar" msgstr "Seitenleiste zu-/aufklappen" @@ -6125,7 +6300,7 @@ msgid "Ctrl+Left mouse button" msgstr "Strg + Linke Maustaste" msgid "Shift+Left mouse button" -msgstr "Umschalt+Linke Maustaste" +msgstr "Umschalttaste + Linke Maustaste" msgid "Select objects by rectangle" msgstr "Objekte per Rechteck auswählen" @@ -6155,7 +6330,7 @@ msgid "Move selection 10 mm in positive X direction" msgstr "Auswahl 10 mm in positiver X-Richtung verschieben" msgid "Shift+Any arrow" -msgstr "Umschalt+beliebige Pfeiltaste" +msgstr "Umschalttaste + beliebige Pfeiltaste" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" @@ -6209,10 +6384,7 @@ msgid "Gizmo SLA support points" msgstr "SLA Stützpunkte" msgid "Gizmo FDM paint-on seam" -msgstr "FDM Naht aufmalen" - -msgid "Swtich between Prepare/Prewview" -msgstr "Zwischen Vorbereiten/ Vorschau wechseln" +msgstr "FDM Naht aufmalen " msgid "Plater" msgstr "Druckplatte" @@ -6279,14 +6451,11 @@ msgstr "Horizontaler Schieberegler - Aktiven Schieber nach rechts bewegen" msgid "On/Off one layer mode of the vertical slider" msgstr "Ein/Aus Einschichtmodus des vertikalen Schiebereglers" -msgid "On/Off g-code window" -msgstr "Ein-/Ausblenden des G-Code-Fensters" - msgid "Move slider 5x faster" msgstr "Schieberegler 5x schneller bewegen" msgid "Shift+Mouse wheel" -msgstr "Umschalt+Mausrad" +msgstr "Umschalttaste + Mausrad" msgid "Release Note" msgstr "Hinweis zur Veröffentlichung" @@ -6299,33 +6468,30 @@ msgid "Network plug-in update" msgstr "Aktualisierung des Netzwerk-Plugins" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"Klicken Sie auf OK, um das Netzwerk-Plugin beim nächsten Start vom Orca " -"Slicer zu aktualisieren." +"Klicken Sie auf OK, um das Netzwerk-Plugin beim nächsten Start von Bambu " +"Studio zu aktualisieren." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "" -"Ein neues Netzwerk-Plug-in (%s) verfügbar, möchten Sie es installieren?" +"Ein neues Netzwerk-Plugin (%s) ist verfügbar. Möchten Sie es installieren?" -msgid "New version of Orca Slicer" -msgstr "Neue Version von Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Neue Version von Bambu Studio" msgid "Don't remind me of this version again" msgstr "Erinnern Sie mich nicht mehr an diese Version." -msgid "Done" -msgstr "Erledigt" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN-Verbindung fehlgeschlagen (Senden einer Druckdatei)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Schritt 1, bitte bestätigen Sie, dass Orca Slicer und Ihr Drucker im " -"gleichen LAN sind." +"Schritt 1: Vergewissern Sie sich, dass Bambu Studio und Ihr Drucker sich im " +"selben LAN befinden." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6341,7 +6507,7 @@ msgid "Access Code" msgstr "Zugangscode" msgid "Where to find your printer's IP and Access Code?" -msgstr "Wo finde ich die IP-Adresse und den Zugriffscode meines Druckers?" +msgstr "Wo finde ich die IP und den Zugangscode meines Druckers?" msgid "Error: IP or Access Code are not correct" msgstr "Fehler: IP oder Zugangscode sind nicht korrekt" @@ -6390,8 +6556,9 @@ msgid "" "firmware'." msgstr "" "Ein wichtiges Update wurde erkannt und muss ausgeführt werden, bevor der " -"Druck fortgesetzt werden kann. Möchten Sie jetzt aktualisieren? Sie können " -"auch später über „Firmware aktualisieren“ aktualisieren." +"Druckvorgang fortgesetzt werden kann. Möchten Sie jetzt aktualisieren? Sie " +"können die Aktualisierung auch später über \"Firmware aktualisieren\" " +"durchführen." msgid "" "The firmware version is abnormal. Repairing and updating are required before " @@ -6401,7 +6568,7 @@ msgstr "" "Die Firmware-Version ist nicht korrekt. Vor dem Drucken müssen Sie die " "Firmware reparieren und aktualisieren. Möchten Sie diese jetzt " "aktualisieren? Sie können das Update auch später auf dem Drucker oder beim " -"nächsten Start vom OrcaSlicer durchführen." +"nächsten Start von Bambu Studio durchführen." msgid "Extension Board" msgstr "Erweiterungsboard" @@ -6410,7 +6577,7 @@ msgid "Saving objects into the 3mf failed." msgstr "Das Speichern von Objekten in der 3mf ist fehlgeschlagen." msgid "Only Windows 10 is supported." -msgstr "Es wird nur Windows 10 unterstützt." +msgstr "Nur Windows 10 wird unterstützt." msgid "Failed to initialize the WinRT library." msgstr "Die WinRT-Bibliothek konnte nicht initialisiert werden." @@ -6419,7 +6586,7 @@ msgid "Exporting objects" msgstr "Objekte exportieren" msgid "Failed loading objects." -msgstr "Das Laden der Objekte ist fehlgeschlagen." +msgstr "Laden der Objekte fehlgeschlagen." msgid "Repairing object by Windows service" msgstr "Objekt durch Windows-Dienst reparieren" @@ -6458,6 +6625,10 @@ msgstr "Reparatur abgebrochen" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Kopieren des Verzeichnisses %1% nach %2% fehlgeschlagen: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "" "Vor der Aktualisierung der Konfiguration müssen die nicht gespeicherten " @@ -6470,11 +6641,12 @@ msgid "Open G-code file:" msgstr "Öffne G-Code-Datei:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Ein Objekt hat eine leere erste Schicht und kann nicht gedruckt werden. " -"Bitte schneiden Sie den Boden ab oder aktivieren Sie die Stützstrukturen." +"Die folgenden Objekte haben eine leere Anfangsebene und können nicht " +"gedruckt werden. Bitte schneiden Sie den Boden ab oder aktivieren Sie die " +"Stützen." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6523,32 +6695,26 @@ msgstr "Außenwand" msgid "Overhang wall" msgstr "Überhang Wand" -msgid "Sparse infill" -msgstr "Füllung" - msgid "Internal solid infill" msgstr "Innere massive Füllung" msgid "Top surface" -msgstr "Obere Oberfläche" +msgstr "Oberfläche" msgid "Bottom surface" msgstr "Untere Fläche" -msgid "Internal Bridge" -msgstr "Interne Brücke" +msgid "Bridge" +msgstr "Überbrückung" msgid "Gap infill" msgstr "Lückenfüllung" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Stützstruktur-Schnittstelle" msgid "Support transition" -msgstr "Stützenübergang" +msgstr "Stützübergang" msgid "Multiple" msgstr "Mehrere" @@ -6560,7 +6726,7 @@ msgstr "" "\" nicht abrufen" msgid "undefined error" -msgstr "unbekannter Fehler" +msgstr "Undefinierter Fehler" msgid "too many files" msgstr "zu viele Dateien" @@ -6584,7 +6750,7 @@ msgid "not a ZIP archive" msgstr "kein ZIP Archiv" msgid "invalid header or corrupted" -msgstr "ungültiger Header oder beschädigt" +msgstr "ungültiger oder korrupter Header" msgid "unsupported multidisk" msgstr "Das Speichern auf RAID wird nicht unterstützt." @@ -6779,28 +6945,12 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Schichthöhe darf den Düsendurchmesser nicht überschreiten." -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Druckplatte %d: %s unterstützt kein Filament %s" msgid "Generating skirt & brim" -msgstr "Generieren von Schürze und Rand (skirt & brim)" +msgstr "Generieren von Schürze und Rand" msgid "Exporting G-code" msgstr "Exportiere G-Code" @@ -6878,15 +7028,12 @@ msgstr "" "Passwort in die URL in folgendem Format eingegeben werden: https://username:" "password@Ihre-octopi-Adresse/" -#, fuzzy msgid "Device UI" -msgstr "Gerät" +msgstr "" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Bitte geben Sie die URL der Benutzeroberfläche Ihres Geräts an, falls sie " -"nicht mit print_host identisch ist." msgid "API Key / Password" msgstr "API-Schlüssel / Passwort" @@ -6949,11 +7096,11 @@ msgstr "Vermeiden von Wandüberquerungen" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"Fahren Sie einen Umweg und vermeiden Sie es, über die Wand zu fahren, was zu " +"Es wird ein Umweg genommen, um über keine Wände zu fahren, was zu " "Tropfenbildung auf der Oberfläche führen kann" msgid "Avoid crossing wall - Max detour length" -msgstr "Vermeide das Überqueren der Wand - Maximale Umleitungslänge" +msgstr "Vermeiden von Wandüberquerungen - Maximale Umleitungslänge" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6968,7 +7115,7 @@ msgstr "" "diese Funktion." msgid "mm or %" -msgstr "mm or %" +msgstr "mm oder%" msgid "Other layers" msgstr "Andere Schichten" @@ -6978,8 +7125,7 @@ msgid "" "filament does not support to print on the Cool Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament auf der kalten Druckplatte nicht " -"unterstützt wird." +"von 0 bedeutet, dass das Filament auf der Cool Plate nicht unterstützt wird." msgid "°C" msgstr "°C" @@ -6989,7 +7135,7 @@ msgid "" "filament does not support to print on the Engineering Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament auf der technischen Druckplatte nicht " +"von 0 bedeutet, dass das Filament auf der Engineering Plate nicht " "unterstützt wird." msgid "" @@ -6997,7 +7143,7 @@ msgid "" "filament does not support to print on the High Temp Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament auf der Hochtemperaturdruckplatte nicht " +"von 0 bedeutet, dass das Filament auf der High Temperature Plate nicht " "unterstützt wird." msgid "" @@ -7018,21 +7164,21 @@ msgid "" "support to print on the Cool Plate" msgstr "" "Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " -"dass das Filament auf der kalten Druckplatte nicht unterstützt wird." +"dass das Filament auf der Cool Plate nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" "Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " -"dass das Filament auf der technischen Druckplatte nicht unterstützt wird." +"dass das Filament auf der Engineering Plate nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" "Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " -"dass das Filament auf der Hochtemperatur-Druckplatte nicht unterstützt wird." +"dass das Filament auf der High Temperature Plate nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -7117,8 +7263,8 @@ msgstr "" "durch die untere Schicht ist. 0%% bedeutet, dass die Kühlung für die gesamte " "Außenwand erzwungen wird, unabhängig vom Winkel des Überhangs." -msgid "Bridge infill direction" -msgstr "Brückenfüllrichtung" +msgid "Bridge direction" +msgstr "Richtung der Brücke" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -7129,16 +7275,6 @@ msgstr "" "automatisch berechnet wird. Andernfalls wird der angegebene Winkel für " "externe Brücken verwendet. Verwenden Sie 180° für keinen Winkel." -msgid "Bridge density" -msgstr "Brückendichte" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" -"Die Standard-Einstellung für Density of external bridges ist 100%, was " -"bedeutet, dass die Brücke als massives Material gedruckt wird. Diese " -"Einstellung kann jedoch je nach Druckanforderungen und Objekt variieren und " -"angepasst werden." - msgid "Bridge flow" msgstr "Brücken Flussrate" @@ -7146,86 +7282,45 @@ msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Verringern Sie diesen Wert geringfügig (z. B. 0,9), um die Materialmenge für " -"die Brücke zu verringern und den Durchhang zu minimieren" +"Verringern Sie diesen Wert geringfügig (z. B. 0,9), um den Materialfluss für " +"Brücken zu verringern und den Durchhang zu minimieren" msgid "Top surface flow ratio" -msgstr "Durchflussverhältnis obere Fläche" +msgstr "" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" -"Dieser Faktor beeinflusst die Menge des Materials für die obere Füllung. Sie " -"können ihn leicht verringern, um eine glatte Oberflächenbeschichtung zu " -"erhalten" -msgid "Bottom surface flow ratio" -msgstr "Durchflussverhältnis untere Fläche" - -msgid "This factor affects the amount of material for bottom solid infill" +msgid "Initial layer flow ratio" msgstr "" -"Dieser Faktor beeinflusst die Menge des Materials für die untere Füllung" -msgid "Precise wall(experimental)" -msgstr "Exakte Wand (experimentell)" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" -"Durch Anpassen des Abstands der Außenwand kann die Präzision der Schale " -"verbessert werden. Dadurch wird auch die Schichtkonsistenz verbessert." msgid "Only one wall on top surfaces" msgstr "Nur eine Wand auf den oberen Flächen" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -"Verwenden Sie nur eine Wand auf der Oberfläche, um mehr Platz für das obere " -"Füllungsmuster zu schaffen" -msgid "One wall threshold" -msgstr "Schwellenwert für eine Wand" - -#, fuzzy, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" -"Wenn eine obere Oberfläche gedruckt werden muss und sie teilweise von einer " -"anderen Schicht bedeckt ist, wird sie nicht als obere Schicht betrachtet, " -"wenn ihre Breite unterhalb dieses Werts liegt. Dies kann nützlich sein, um " -"das Auslösen von 'einem Umfang oben' zu verhindern, wenn Oberflächen nur von " -"Umfängen bedeckt werden sollen. Dieser Wert kann in Millimetern oder als " -"Prozentsatz der Extrusionsbreite des Umfangs angegeben werden.\n" -"Warnung: Wenn aktiviert, können Artefakte entstehen, wenn Sie dünnere " -"Merkmale auf der nächsten Schicht haben, z. B. Buchstaben. Setzen Sie diesen " -"Wert auf 0, um diese Artefakte zu entfernen." + +msgid "Top surfaces" +msgstr "Alle Oberflächen" + +msgid "Topmost surface" +msgstr "Nur oberste Oberfläche" msgid "Only one wall on first layer" -msgstr "Nur eine Wand in der ersten Schicht" +msgstr "Nur eine Wand auf der ersten Schicht" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" -"Verwenden Sie nur eine Wand in der ersten Schicht, um dem Muster der unteren " -"Füllung mehr Platz zu geben" - -msgid "Classic mode" -msgstr "Klassicher Modus" - -msgid "Enable this option to use classic mode" -msgstr "Diese Option aktivieren, um den klassischen Modus zu verwenden" +msgid "Use only one wall on the first layer of model" +msgstr "Verwenden Sie auf der ersten Modellschicht nur eine Wand" msgid "Slow down for overhang" msgstr "Verlangsamen bei Überhängen" @@ -7235,34 +7330,17 @@ msgstr "" "Aktivieren Sie diese Option, um den Druck für verschiedene Überhangsgrade zu " "verlangsamen" -msgid "mm/s or %" -msgstr "mm/s o. %" - -msgid "External" -msgstr "Extern" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Geschwindigkeit für Brücken und vollständig überhängende Wände." - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -msgstr "Intern" - -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 "" -"Geschwindigkeit der internen Brücke. Wenn der Wert als Prozentsatz angegeben " -"ist, wird er basierend auf der Brückengeschwindigkeit berechnet. " -"Standardwert ist 150%." +msgid "Speed of bridge and completely overhang wall" +msgstr "Geschwindigkeit für Brücken und vollständig überhängende Wände." msgid "Brim width" msgstr "Randbreite" msgid "Distance from model to the outermost brim line" -msgstr "Abstand vom Modell zur äußersten Randlinie" +msgstr "Abstand vom Modell zur äußersten Randlinie." msgid "Brim type" msgstr "Randtyp" @@ -7271,21 +7349,9 @@ msgid "" "This controls the generation of the brim at outer and/or inner side of " "models. Auto means the brim width is analysed and calculated automatically." msgstr "" -"Dies steuert die Erstellung des Brims an der äußeren und/oder inneren " -"Seitevon Modellen. Auto bedeutet, dass die Breite des Brims automatisch " -"analysiert und berechnet wird." - -msgid "Mouse ear" -msgstr "Mausohren" - -msgid "Outer brim only" -msgstr "Nur Außen" - -msgid "Inner brim only" -msgstr "Nur Innenrand" - -msgid "Outer and inner brim" -msgstr "Äußere und innere Randleiste" +"Dies steuert die Erzeugung der Umrandung an der Außen- und/oder Innenseite " +"von Modellen. Auto bedeutet, dass die Randbreite automatisch analysiert und " +"berechnet wird." msgid "Brim-object gap" msgstr "Lücke zwischen Rand und Objekt" @@ -7294,46 +7360,14 @@ msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen " -"des Randes erleichtern" - -msgid "Brim ears" -msgstr "Brim Ohren" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "Zeichne den Brim nur über die scharfen Kanten des Modells." - -msgid "Brim ear max angle" -msgstr "Maximaler Winkel für Brim-Ohren" - -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 "" -"Höchster Winkel, bei dem ein Brim-Ohr erscheinen soll.\n" -"Wenn auf 0 gesetzt, wird kein Brim erstellt.\n" -"Wenn auf etwa 180 gesetzt, wird ein Brim auf allem außer geraden Abschnitten " -"erstellt." - -msgid "Brim ear detection radius" -msgstr "Radius für die Erkennung von Brim-Ohren" - -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 "" -"Die Geometrie wird vor der Erkennung von scharfen Winkeln reduziert. " -"DieserParameter gibt die minimale Länge der Abweichung für die Reduzierung " -"an.\n" -"0, um die Reduzierung zu deaktivieren." +"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das " +"Entfernen des Randes erleichtern." msgid "Compatible machine" msgstr "Kompatible Maschine" msgid "upward compatible machine" -msgstr "Aufwärtskompatible Maschine" +msgstr "aufwärtskompatibles Gerät" msgid "Compatible machine condition" msgstr "Kompatibler Maschinenzustand" @@ -7345,7 +7379,9 @@ msgid "Compatible process profiles condition" msgstr "Bedingung für kompatible Prozessprofile" msgid "Print sequence, layer by layer or object by object" -msgstr "Druckreihenfolge, Schicht für Schicht oder Objekt für Objekt" +msgstr "" +"Dies bestimmt die Druckreihenfolge, sodass Sie Schicht für Schicht oder " +"Objekt für Objekt drucken können." msgid "By layer" msgstr "Nach Ebene" @@ -7354,7 +7390,7 @@ msgid "By object" msgstr "Nach Objekt" msgid "Slow printing down for better layer cooling" -msgstr "Verlangsamen Sie den Druck für eine bessere Schichtkühlung" +msgstr "Verlangsamen für eine bessere Schichtkühlung" msgid "" "Enable this option to slow printing speed down to make the final layer time " @@ -7382,16 +7418,16 @@ msgid "mm/s²" msgstr "mm/s²" msgid "Default filament profile" -msgstr "Standard-Filamentprofil" +msgstr "Standard Filamentprofil" msgid "Default filament profile when switch to this machine profile" -msgstr "Standard-Filamentprofil beim Wechsel zu diesem Maschinenprofil" +msgstr "Standard Filamentprofil beim Wechsel zu diesem Maschinenprofil" msgid "Default process profile" -msgstr "Standard-Prozessprofil" +msgstr "Standard Prozessprofil" msgid "Default process profile when switch to this machine profile" -msgstr "Standard-Prozessprofil beim Wechsel zu diesem Maschinenprofil" +msgstr "Standard Prozessprofil beim Wechsel zu diesem Maschinenprofil" msgid "No cooling for the first" msgstr "Keine Kühlung für die erste" @@ -7465,17 +7501,12 @@ msgid "Internal bridge support thickness" msgstr "Dicke der internen Brückenstützen" 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" +"If enabled, Studio will generate support loops 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 "" -"Wenn aktiviert, werden Stützschleifen unter den Konturen interner Brücken " -"erzeugt. Diese Stützschleifen könnten verhindern, dass interne Brücken über " -"die Luft hinausragen und die Oberflächenqualität verbessern, insbesondere " -"wenn die Fülldichte des Sparmodus niedrig ist. Dieser Wert bestimmt die " -"Dicke der Stützschleifen. 0 bedeutet, diese Funktion zu deaktivieren." msgid "Top surface pattern" msgstr "Muster der Oberfläche" @@ -7514,22 +7545,15 @@ msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "Linienmuster der Bodenfüllung. Brückenfüllung nicht eingeschlossen" msgid "Internal solid infill pattern" -msgstr "Muster für das interne feste Füllmuster" +msgstr "" msgid "" "Line pattern of internal solid infill. if the detect nattow internal solid " "infill be enabled, the concentric pattern will be used for the small area." msgstr "" -"Linienmuster des internen festen Füllmusters. Wenn die Erkennung von " -"schmalem internen festen Infill aktiviert ist, wird das konzentrische Muster " -"für den kleinen Bereich verwendet." -msgid "" -"Line width of outer wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Linienbreite der Außenwand. Wenn als Prozentsatz angegeben, wird sie in " -"Bezug auf den Düsendurchmesser berechnet." +msgid "Line width of outer wall" +msgstr "Linienbreite der Außenwand" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7539,30 +7563,6 @@ msgstr "" "Regel langsamer als die Innenwände gedruckt, um eine bessere Qualität zu " "erzielen." -msgid "Small perimeters" -msgstr "Feine Strukturen" - -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 "" -"Diese separate Einstellung beeinflusst die Geschwindigkeit von Umfängen mit " -"einem Radius <= small_perimeter_threshold (normalerweise Löcher). Wenn es " -"als Prozentsatz ausgedrückt wird (z.B. 80%), wird es auf die oben genannte " -"Einstellung der Geschwindigkeit der Außenwand berechnet. Setzen Sie es auf " -"Null für automatisch." - -msgid "Small perimeters threshold" -msgstr "Schwelle für kleine Strukturen" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" -"Dies legt die Schwelle für eine kleine Umfangslänge fest. Der Standardwert " -"für die Schwelle beträgt 0 mm." - msgid "Order of inner wall/outer wall/infil" msgstr "Reihenfolge Innenwand/Außenwand/Füllung" @@ -7611,6 +7611,16 @@ msgstr "" "Sicherheitsradius um den Extruder: Dient zur Kollisionsvermeidung beim " "objektweisen Drucken." +msgid "Max Radius" +msgstr "Maximaler Radius" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Maximaler Abstandsradius um den Extruder. Dient zur Kollisionsvermeidung " +"beim objektweisen Drucken." + msgid "Extruder Color" msgstr "Extruder Farbe" @@ -7637,26 +7647,29 @@ msgstr "" "anpassen, um eine schöne flache Oberfläche zu erhalten, wenn es eine leichte " "Über- oder Unterextrusion gibt." +msgid "Object flow ratio" +msgstr "Objektflussverhältnis" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "" +"Das vom Objekt festgelegte Flussverhältnis; Die Bedeutung ist dieselbe wie " +"beim Flussverhältnis." + msgid "Enable pressure advance" -msgstr "Pressure advance aktivieren" +msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." +"enabled. Useless for Bambu Printer" msgstr "" -"Wenn Pressure Advance aktiviert ist,werden Auto-Kalibrierungsergebnisse " -"überschrieben." - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "Pressure advance(Klipper)AKA Linear advance Faktor(Marlin)" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" -"Standardmäßige Linienbreite, wenn andere Linienbreiten auf 0 gesetzt sind. " -"Wenn als Prozentsatz angegeben, wird sie in Bezug auf den Düsendurchmesser " -"berechnet." + +msgid "Default line width if some line width is set to be zero" +msgstr "Standardlinienbreite für Linienbreiten, die auf 0 gesetzt sind" msgid "Keep fan always on" msgstr "Lüfter ständig laufen lassen" @@ -7689,7 +7702,7 @@ msgid "Default color" msgstr "Standardfarbe" msgid "Default filament color" -msgstr "Standard-Filamentfarbe" +msgstr "Standard Filamentfarbe" msgid "Color" msgstr "Farbe" @@ -7720,21 +7733,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" -"Nach einem Werkzeugwechsel ist die genaue Position des neu geladenen " -"Filaments im Düsenkopf möglicherweise unbekannt und der Filamentdruck ist " -"wahrscheinlich noch nicht stabil. Bevor Slic3r den Druckkopf in ein Infill " -"oder ein opferbares Objekt spült, wird immer diese Menge Material in den " -"Wipe-Turm gefüllt, um zuverlässige nachfolgende Infill- oder opferbare " -"Objekt-Extrusionen zu erzeugen. So wird sichergestellt, dass das Drucken " -"nicht gestört wird und die Qualität des Drucks erhalten bleibt." - msgid "Filament load time" msgstr "Ladedauer des Filaments" @@ -7758,24 +7756,6 @@ msgstr "" "Der Filamentdurchmesser wird für die Berechnung der Extrusion im G-Code " "verwendet, er ist also wichtig und sollte genau sein" -msgid "Shrinkage" -msgstr "Schrumpfung" - -#, fuzzy, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" -"Gib das Schrumpfungsprozent ein, das der Filament nach dem Abkühlen haben " -"wird(94%, wenn du 94mm anstatt 100mm misst). Das Teil wird in der xy-Ebene " -"skaliert, um zukompensieren. Nur das Filament, das für den Umfang verwendet " -"wird, wird berücksichtigt.Stelle sicher, dass genügend Platz zwischen den " -"Objekten vorhanden ist, da diese Kompensation nach den Überprüfungen " -"durchgeführt wird." - msgid "Density" msgstr "Dichte" @@ -7823,13 +7803,13 @@ msgid "Filament price. For statistics only" msgstr "Filamentpreis. Nur für statistische Zwecke." msgid "money/kg" -msgstr "€/kg" +msgstr "Preis/kg" msgid "Vendor" -msgstr "Hersteller" +msgstr "" msgid "Vendor of filament. For show only" -msgstr "Hersteller des Filaments. Nur zur Anzeige." +msgstr "" msgid "(Undefined)" msgstr "(undefiniert)" @@ -7847,7 +7827,7 @@ msgstr "Fülldichte" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" -msgstr "Dichte der inneren Füllung, 100%% bedeuten eine solide Füllung" +msgstr "Dichte der inneren Füllung. 100%% bedeuten eine solide Füllung" msgid "Sparse infill pattern" msgstr "Füllmuster" @@ -7885,75 +7865,6 @@ msgstr "Kubisch Stützen" msgid "Lightning" msgstr "Blitz" -msgid "Sparse infill anchor length" -msgstr "Länge des Infill-Ankers" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" -"Verbindet eine Infill-Linie mit einem kurzen Segment eines zusätzlichen " -"Perimeters mit einem internen Perimeter. Wenn sie als Prozentsatz " -"ausgedrückt wird (Beispiel: 15%), wird sie über die Breite der Infill-" -"Extrusion berechnet. OrcaSlicer versucht, zwei nahe beieinander liegende " -"Infill-Linien mit einem kurzen Perimetersegment zu verbinden. Wenn kein " -"solches Perimetersegment gefunden wird, das kürzer als infill_anchor_max " -"ist, wird die Infill-Linie nur an einer Seite mit einem Perimetersegment " -"verbunden und die Länge des genommenen Perimetersegments ist auf diesen " -"Parameter begrenzt, aber nicht länger als anchor_length_max. Setzen Sie " -"diesen Parameter auf Null, um die Verankerung von Perimetern zu " -"deaktivieren, die mit einer einzelnen Infill-Linie verbunden sind." - -msgid "0 (no open anchors)" -msgstr "0 (keine offenen Anker)" - -msgid "1000 (unlimited)" -msgstr "1000 (unbegrenzt)" - -msgid "Maximum length of the infill anchor" -msgstr "Maximale Länge des Infill-Ankers" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" -"Verbindet eine Infill-Linie mit einem kurzen Segment eines zusätzlichen " -"Perimeters mit einem internen Perimeter. Wenn sie als Prozentsatz " -"ausgedrückt wird (Beispiel: 15%), wird sie über die Breite der Infill-" -"Extrusion berechnet. OrcaSlicer versucht, zwei nahe beieinander liegende " -"Infill-Linien mit einem kurzen Perimetersegment zu verbinden. Wenn kein " -"solches Perimetersegment gefunden wird, das kürzer als dieser Parameter ist, " -"wird die Infill-Linie nur an einer Seite mit einem Perimetersegment " -"verbunden und die Länge des genommenen Perimetersegments wird auf " -"infill_anchor begrenzt, aber nicht länger als dieser Parameter. Setzen Sie " -"diesen Parameter auf Null, um die Verankerung zu deaktivieren." - -msgid "0 (Simple connect)" -msgstr "0 (Einfache Verbindung)" - -msgid "Acceleration of outer walls" -msgstr "Beschleunigung Außenwände" - -msgid "Acceleration of inner walls" -msgstr "Beschleunigung Innenwände" - -msgid "Acceleration of travel moves" -msgstr "Beschleunigung Bewegung" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7967,33 +7878,16 @@ msgstr "" "Beschleunigung der Außenwand: Die Verwendung eines niedrigeren Wertes kann " "die Qualität verbessern." -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." +msgid "Acceleration of inner walls. 0 means using normal printing 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 " -"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." msgstr "" -"Beschleunigung der spärlichen Innenfüllung. Wenn der Wert als Prozentwert " -"angegeben wird (z.B. 100%), wird er auf der Grundlage der " -"Standardbeschleunigung berechnet." -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." +msgid "mm/s² or %" msgstr "" -"Beschleunigung des internen massiven Innenfülls. Wenn der Wert als " -"Prozentwert angegeben wird (z.B. 100%), wird er auf der Grundlage der " -"Standardbeschleunigung berechnet." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -8003,46 +7897,44 @@ msgstr "" "kann die Druckbetthaftung verbessern" msgid "Enable accel_to_decel" -msgstr "Beschleunigung zu Verzögerung einschalten" +msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted automatically" msgstr "" -"Die maximale Beschleunigung und Verzögerung von Klipper wird automatisch " -"angepasst" msgid "accel_to_decel" -msgstr "Beschleunigung zu Verzögerung" +msgstr "" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" -"Klipper’s max_accel_to_decel wird auf % of Prozentsatz der Beschleunigung " -"eingestellt" + +msgid "Default jerk" +msgstr "" msgid "Jerk of outer walls" -msgstr "Ruckwert Außenwand" +msgstr "" msgid "Jerk of inner walls" -msgstr "Ruckwert Innenwand" - -msgid "Jerk for top surface" -msgstr "Ruckwert Oberseiten" - -msgid "Jerk for infill" -msgstr "Ruckwert Füllung" - -msgid "Jerk for initial layer" -msgstr "Ruckwert erste Schicht" - -msgid "Jerk for travel" -msgstr "Jerk for Bewegung" - -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." msgstr "" -"Linienbreite der ersten Schicht. Wenn als Prozentsatz angegeben, wird sie in " -"Bezug auf den Düsendurchmesser berechnet." + +msgid "Jerk of infill" +msgstr "" + +msgid "Jerk of top surface" +msgstr "" + +msgid "First layer" +msgstr "" + +msgid "Jerk of first layer" +msgstr "" + +msgid "Jerk of travel" +msgstr "" + +msgid "Line width of initial layer" +msgstr "Linienbreite der ersten Schicht" msgid "Initial layer height" msgstr "Höhe der ersten Schicht" @@ -8052,35 +7944,17 @@ msgid "" "can improve build plate adhension" msgstr "" "Höhe der ersten Schicht. Eine etwas dickere erste Schicht kann die Haftung " -"der Druckplatte verbessern" +"verbessern" msgid "Speed of initial layer except the solid infill part" msgstr "Geschwindigkeit der ersten Schicht mit Ausnahme der massiven Füllung." msgid "Initial layer infill" -msgstr "Füllung" +msgstr "Füllung der ersten Schicht" msgid "Speed of solid infill part of initial layer" msgstr "Geschwindigkeit des massiven Füllung der ersten Schicht." -msgid "Initial layer travel speed" -msgstr "Bewegung" - -msgid "Travel speed of initial layer" -msgstr "Bewegungsgeschwindigkeit der ersten Schicht" - -#, fuzzy -msgid "Number of slow layers" -msgstr "Anzahl der lansamen Schichten" - -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 "" -"Die ersten paar Schichten werden langsamer als normal gedruckt. Die " -"Geschwindigkeitwird allmählich linear über die angegebene Anzahl von " -"Schichten erhöht." - msgid "Initial layer nozzle temperature" msgstr "Düsentemperatur für die erste Schicht" @@ -8092,34 +7966,6 @@ msgstr "" msgid "Full fan speed at layer" msgstr "Volle Lüfterdrehzahl ab Schicht" -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." -msgstr "" -"Die Lüftergeschwindigkeit wird linear von Null bei der Schicht" -"\"close_fan_the_first_x_layers\" auf das Maximum bei der Schicht " -"\"full_fan_speed_layer\" erhöht. \"full_fan_speed_layer\" wird ignoriert, " -"wenn es niedriger ist als \"close_fan_the_first_x_layers\",in diesem Fall " -"läuft der Lüfter bei Schicht \"close_fan_the_first_x_layers\"+ 1 mit maximal " -"zulässiger Geschwindigkeit." - -#, fuzzy -msgid "Support interface fan speed" -msgstr "Stützstruktur-Schnittstelle" - -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 overriden by disable_fan_first_layers." -msgstr "" -"Diese Lüftergeschwindigkeit wird während der Stützstruktur verwendet.\n" -"Setzen Sie es auf -1, um dies zu deaktivieren.\n" -"Kann nur durch disable_fan_first_layers außer Kraft gesetzt werden." - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -8135,7 +7981,7 @@ msgid "Contour" msgstr "Kontur" msgid "Contour and hole" -msgstr "Kontur und Loch" +msgstr "Kontur und Bohrung" msgid "All walls" msgstr "Alle Wände" @@ -8161,17 +8007,12 @@ msgstr "" "eingeführten Zufallspunkten" msgid "Filter out tiny gaps" -msgstr "Filtert winzige Lücken aus" - -msgid "Layers and Perimeters" -msgstr "Schichten und Perimeter" +msgstr "" msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" -"Filtert Lücken aus, die kleiner als der festgelegte Schwellenwert sind. " -"Diese Einstellung beeinflusst die obersten/untersten Schichten nicht" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " @@ -8181,7 +8022,7 @@ msgstr "" "unregelmäßige Linienbreite und sollten deshalb langsamer gedruckt werden." msgid "Arc fitting" -msgstr "Als Bogen drucken" +msgstr "Bogenanpassung" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " @@ -8230,112 +8071,24 @@ msgstr "Edelstahl" msgid "Brass" msgstr "Messing" -msgid "Nozzle HRC" -msgstr "Düse HRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"Die Härte der Düse. Null bedeutet, dass die Düsenhärte beim Slicen nicht " -"geprüft wird." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "" "Aktivieren Sie diese Option, wenn die Maschine über ein zusätzliches " "Kühlgebläse verfügt" -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 comands 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 "" -"Starte den Lüfter diese Anzahl an Sekunden früher. (du kannst auch Milli-" -"Sekunden verwenden). Dabei wird eine unendliche Beschleunigung angenommenund " -"nur G1- und G0-Bewegungen berücksichtigt (Kurvenanpassung wird nicht " -"unterstützt).Fan-Befehle in benutzerdefinierten G-Codes werden nicht " -"verschoben (sie wirken wie eine Art 'Barriere').Fan-Befehle werden nicht in " -"den Start-G-Code verschoben, wenn nur benutzerdefinierterStart-G-Code " -"aktiviert ist. Verwende 0, um den Lüfter zu deaktivieren." - -#, fuzzy -msgid "Only overhangs" -msgstr "Nur an Überhängen" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "Berücksichtigt nur die Verzögerung für die Kühlung von Überhängen." - -msgid "Fan kick-start time" -msgstr "Lüfter Anlaufzeit" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" -"Gib für die angegebene Zeit einen Befehl zur maximalen Lüftergeschwindigkeit " -"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." - msgid "G-code flavor" msgstr "G-Code Typ" msgid "What kind of gcode the printer is compatible with" msgstr "Mit welcher Art von G-Code ist der Drucker kompatibel" -msgid "Klipper" -msgstr "Klipper" - -#, fuzzy -msgid "Label objects" -msgstr "Objekte beschriften" - -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." -msgstr "" -"Aktivieren Sie diese Option, um Kommentare in den G-Code einzufügen, die die " -"Druckbewegungen mit dem zugehörigen Objekt kennzeichnen. Dies ist nützlich " -"für das Octoprint CancelObject-Plugin. Diese Einstellung ist NICHT " -"kompatibel mit der Einzeldruckerdüsen-Mehrmaterial-Konfiguration und mit der " -"Option zum Wischen in das Objekt / in den Innenfüllbereich." - msgid "Exclude objects" -msgstr "Objekte ausschließen" - -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" -"Aktivieren Sie diese Option, um den Befehl EXCLUDE OBJECT im G-Code " -"hinzuzufügen." - -msgid "Verbose G-code" -msgstr "ausführlicher G-Code" 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" -"Aktivieren Sie diese Option, um eine kommentierte G-Code-Datei zu erhalten, " -"in der jede Zeile durch einen beschreibenden Text erklärt wird. Wenn Sie von " -"der SD-Karte drucken, kann das zusätzliche Gewicht der Datei dazu führen, " -"dass Ihre Firmware langsamer wird." msgid "Infill combination" msgstr "Kombinieren der Füllung" @@ -8348,15 +8101,70 @@ msgstr "" "gemeinsam zu drucken und Zeit zu sparen. Die Wand wird weiterhin mit der " "ursprünglichen Schichthöhe gedruckt." +msgid "Length of sparse infill anchor" +msgstr "Länge des Füllungsankers" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"Dadurch wird eine innere Fülllinie mit einer internen Wand mit einem kurzen " +"Segment einer zusätzlichen Wand verbunden. Wenn sie als Prozentsatz " +"ausgedrückt wird (Beispiel: 15 %), wird sie über die Breite der inneren " +"Füllungslinie berechnet. Der Slicer versucht, zwei nahe beieinander liegende " +"Fülllinien mit einem kurzen Umfangssegment zu verbinden. Wenn kein solches " +"Umfangssegment gefunden wird, das kürzer als infill_anchor_max ist, wird die " +"Füllungslinie nur an einer Seite mit einem Umfangssegment verbunden und die " +"Länge des aufgenommenen Umfangssegments ist auf diesen Parameter begrenzt, " +"jedoch nicht länger als anchor_length_max. Setzen Sie diesen Parameter auf " +"Null, um die Verankerung von Wänden zu deaktivieren, die mit einer einzelnen " +"Füllungslinie verbunden sind." + +msgid "0 (no open anchors)" +msgstr "0 (keine offenen Anker)" + +msgid "1000 (unlimited)" +msgstr "1000 (unbegrenzt)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximale Länge des Füllungsankers" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"Dadurch wird eine innere Fülllinie mit einer internen Wand mit einem kurzen " +"Segment einer zusätzlichen Wand verbunden. Wenn sie als Prozentsatz " +"ausgedrückt wird (Beispiel: 15 %), wird sie über die Breite der inneren " +"Füllungslinie berechnet. Der Slicer versucht, zwei nahe beieinander liegende " +"Fülllinien mit einem kurzen Umfangssegment zu verbinden. Wenn kein solches " +"Umfangssegment gefunden wird, das kürzer als dieser Parameter ist, wird die " +"Füllungslinie nur an einer Seite mit einem Umfangssegment verbunden und die " +"Länge des aufgenommenen Umfangssegments wird auf infill_anchor, jedoch nicht " +"länger als diesen Parameter begrenzt. Setzen Sie diesen Parameter auf Null, " +"um die Verankerung zu deaktivieren." + +msgid "0 (not anchored)" +msgstr "0 (nicht verankert)" + msgid "Filament to print internal sparse infill." msgstr "Filament für den Druck der inneren Füllung." -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" -"Linienbreite des internen geringen Füllmusters. Wenn als Prozentsatz " -"angegeben, wird sie in Bezug auf den Düsendurchmesser berechnet." +msgid "Line width of internal sparse infill" +msgstr "Linienbreite der inneren Füllung" msgid "Infill/Wall overlap" msgstr "Überlappung Füllung/Wand" @@ -8370,23 +8178,10 @@ msgstr "" "sich auf die Linienbreite der inneren Füllung." msgid "Speed of internal sparse infill" -msgstr "Geschwindigkeit der inneren Füllung" - -msgid "Interface shells" -msgstr "Support-Verbindung" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" -"Erzwingen der Erstellung von festen Hüllen zwischen benachbarten Materialien/" -"Volumina“ ist eine Funktion, die bei Drucken mit mehreren Extrudern " -"verwendet werden kann, insbesondere bei Drucken mit durchsichtigen " -"Materialien oder manuell lösbaren Unterstützungsmaterialien" +msgstr "Geschwindigkeit der inneren Füllung." msgid "Ironing Type" -msgstr "Glättungsmethode" +msgstr "Glätten-Typ" msgid "" "Ironing is using small flow to print on same height of surface again to make " @@ -8399,12 +8194,6 @@ msgstr "" msgid "No ironing" msgstr "Kein Glätten" -msgid "Top surfaces" -msgstr "Obere Oberflächen" - -msgid "Topmost surface" -msgstr "Oberste Oberfläche" - msgid "All solid layer" msgstr "Alle soliden Schichten" @@ -8412,7 +8201,7 @@ msgid "Ironing Pattern" msgstr "Bügelmuster" msgid "Ironing flow" -msgstr "Materialmenge" +msgstr "Glätten-Fluss" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " @@ -8471,7 +8260,7 @@ msgid "Maximum speed E" msgstr "Maximale Geschwindigkeit E" msgid "Machine limits" -msgstr "Maschinengrenzen" +msgstr "Maschinenlimits" msgid "Maximum X speed" msgstr "Maximale Geschwindigkeit X" @@ -8583,7 +8372,7 @@ msgid "" msgstr "" "Die größte druckbare Schichthöhe für den Extruder. Wird verwendet, um die " "maximale Schichthöhe zu begrenzen, wenn die adaptive Schichthöhe aktiviert " -"ist" +"ist." msgid "Minimum speed for part cooling fan" msgstr "Mindestdrehzahl der Bauteilkühlung" @@ -8606,7 +8395,7 @@ msgid "" msgstr "" "Die niedrigste druckbare Schichthöhe für den Extruder. Wird verwendet, um " "die minimale Schichthöhe zu begrenzen, wenn die adaptive Schichthöhe " -"aktiviert ist" +"aktiviert ist." msgid "Min print speed" msgstr "Minimale Druckgeschwindigkeit" @@ -8667,57 +8456,16 @@ msgstr "Format des Dateinamens" msgid "User can self-define the project file name when export" msgstr "Der Benutzer kann den Projektdateinamen beim Export selbst bestimmen" -msgid "Make overhang printable" -msgstr "Überhang druckbar machen" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "Die Geometrie anpassen, um Überhänge ohne Stützmaterial zu drucken." - -msgid "Make overhang printable maximum angle" -msgstr "Maximaler Winkel für druckbare Überhänge" - -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." -msgstr "" -"Maximaler Winkel der Überhänge, die erlaubt sind, nachdem steilere Überhänge " -"druckbar gemacht wurden. 90° wird das Modell überhaupt nicht verändern und " -"jeden Überhang erlauben, während 0 alle Überhänge durch konisches Material " -"ersetzt." - -msgid "Make overhang printable hole area" -msgstr "Flächenbereich für druckbare Überhänge von Löchern" - -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 "" -"Maximaler Flächenbereich eines Lochs in der Basis des Modells, bevor es mit " -"konischem Material gefüllt wird. Ein Wert von 0 füllt alle Löcher in der " -"Basis des Modells." - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "Erkennen von Wandüberhängen" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Erkennt den Prozentsatz des Überhangs im Verhältnis zur Linienbreite und " -"verwenden hierfür eine unterschiedliche Druckgeschwindigkeiten. Bei einem " -"100%% Überhang wird die Brückengeschwindigkeit verwendet." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Linienbreite der inneren Wand. Wenn als Prozentsatz angegeben, wird sie in " -"Bezug auf den Düsendurchmesser berechnet." +msgid "Line width of inner wall" +msgstr "Linienbreite der Innenwand" msgid "Speed of inner wall" msgstr "Druckgeschwindigkeit der Innenwand" @@ -8725,48 +8473,50 @@ msgstr "Druckgeschwindigkeit der Innenwand" msgid "Number of walls of every layer" msgstr "Anzahl der Wände jeder Schicht" +msgid "Post-processing Scripts" +msgstr "Nachbearbeitungsskripte" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" -"Wenn Sie die Ausgabe-G-Code-Datei durch benutzerdefinierte Skripts " -"verarbeiten möchten, geben Sie hier die absoluten Pfade auf. Trennen Sie " -"mehrere Skripts durch ein Semikolon. Die Skripts erhalten den absoluten Pfad " -"zur G-Code-Datei als erstes Argument und können die Slic3r-" -"Konfigurationseinstellungen durch Lesen von Umgebungsvariablen abrufen." +"Wenn Sie den ausgegebenen G-Code über benutzerdefinierte Skripte verarbeiten " +"möchten, listen Sie hier einfach deren absolute Pfade auf. Trennen Sie " +"mehrere Skripte durch ein Semikolon. Skripte werden über den absoluten Pfad " +"zur G-Code-Datei als erstes Argument übergeben, auch Variablen von " +"Einstellungen können gelesen werden" msgid "Raft contact Z distance" -msgstr "Z Abstand Objekt Druckbasis " +msgstr "Floß Z-Abstand" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"Z-Abstand zwischen Objekt und Druckbasis. Bei löslicher Oberfläche ignoriert" +"Z-Lücke zwischen Objekt und Floß. Wird ignoriert für lösliche Schnittstellen." msgid "Raft expansion" -msgstr "Druckbasis Erweiterung" +msgstr "Floß Erweiterung" msgid "Expand all raft layers in XY plane" -msgstr "Druckbasis in der XY-Ebene erweitern" +msgstr "Dadurch werden alle Floßschichten in der XY-Ebene erweitert." msgid "Initial layer density" msgstr "Dichte der ersten Schicht" msgid "Density of the first raft or support layer" -msgstr "Dichte der ersten Schicht der Druckbasis oder Support" +msgstr "Dichte der ersten Schicht von Floß oder Stützstrukturen" msgid "Initial layer expansion" msgstr "Ausdehnung der ersten Schicht" msgid "Expand the first raft or support layer to improve bed plate adhesion" msgstr "" -"Ausdehnung der ersten Druckbasis oder Support-Schicht um die " -"Druckplattenhaftung zu verbessern" +"Erweitern der ersten Floß- oder Stütz-Schicht um die Druckplattenhaftung zu " +"verbessern" msgid "Raft layers" -msgstr "Druckbasisschichten" +msgstr "Floßschichten" msgid "" "Object will be raised by this number of support layers. Use this function to " @@ -8783,7 +8533,7 @@ msgstr "" "Der G-Code-Pfad wird nach der Vereinfachung der Kontur des Modells " "generiert, um zu viele Punkte und G-Code Befehle in der G-Code-Datei zu " "vermeiden. Ein kleinerer Wert bedeutet eine höhere Auflösung und mehr Zeit " -"zum Slicen" +"zum Slicen." msgid "Travel distance threshold" msgstr "Schwellenwert für die Fahrstrecke" @@ -8835,8 +8585,8 @@ msgstr "" "bei der Verfahrbewegung gegen den Druck stößt. Die Verwendung einer " "Spirallinie zum Anheben von z kann Fadenbildung verhindern." -msgid "Z hop type" -msgstr "Z-Hub Typ" +msgid "Z Hop Type" +msgstr "Z-Hop-Typ" msgid "Slope" msgstr "Steigung" @@ -8844,65 +8594,11 @@ msgstr "Steigung" msgid "Spiral" msgstr "Spirale" -msgid "Only lift Z above" -msgstr "Nur Z anheben über" - -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." +msgid "Direct drive" msgstr "" -"Wenn Sie diesen Wert auf einen positiven Wert setzen, wird das Z-Heben nur " -"oberhalb des angegebenen absoluten Z-Wertes erfolgen." -msgid "Only lift Z below" -msgstr "Nur Z anheben unter" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." +msgid "Bowden" msgstr "" -"Wenn Sie diesen Wert auf einen positiven Wert setzen, wird das Z-Heben nur " -"unterhalb des angegebenen absoluten Z-Wertes erfolgen." - -msgid "On surfaces" -msgstr "Auf Oberflächen" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" -"Verhalten des Z-Hops erzwingen. Diese Einstellung wird von den oben " -"genannten Einstellungen (Nur Z überheben oberhalb/unterhalb) beeinflusst." - -msgid "All Surfaces" -msgstr "Alle Oberflächen" - -msgid "Top Only" -msgstr "Nur Oben" - -msgid "Bottom Only" -msgstr "Nur Unten" - -msgid "Top and Bottom" -msgstr "Oben und Unten" - -msgid "Extra length on restart" -msgstr "Zusätzliche Länge beim Neustart" - -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 "" -"Wenn die Rückzugskompensation nach dem Reisemove durchgeführt wird, wird der " -"Extruder diese zusätzliche Menge an Filament schieben. Diese Einstellung " -"wird nur selten benötigt." - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." -msgstr "" -"Wenn die Rückzugskompensation nach dem Wechsel des Werkzeugs durchgeführt " -"wird, wird der Extruder diese zusätzliche Menge an Filament schieben." msgid "Retraction Speed" msgstr "Rückzugsgeschwindigkeit" @@ -8911,7 +8607,7 @@ msgid "Speed of retractions" msgstr "Geschwindigkeit für den Rückzug" msgid "Deretraction Speed" -msgstr "Wiedereinzugsgeschwindigkeit" +msgstr "Einzugsgeschwindigkeit" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " @@ -8920,20 +8616,6 @@ msgstr "" "Geschwindigkeit für das Einziehen von Filament in den Extruder nach einem " "Rückzug. Null bedeutet die gleiche Geschwindigkeit wie der Rückzug." -msgid "Use firmware retraction" -msgstr "Filament Rückzug durch Firmware" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" -"Diese experimentelle Einstellung nutzt die Befehle G10 und G11, um die " -"Firmware das Zurückziehen zu handhaben.Dies wird nur von aktuellen Marlin-" -"Firmware unterstützt." - -msgid "Show auto-calibration marks" -msgstr "Zeige automatische Kalibrierungsmarkierungen" - msgid "Seam position" msgstr "Nahtposition" @@ -8950,63 +8632,20 @@ msgid "Back" msgstr "Rückseite" msgid "Random" -msgstr "Zufall" - -msgid "Staggered inner seams" -msgstr "Versetzte innere Nähte" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" -"Durch diese Option werden die inneren Nähte basierend auf ihrer Tiefe nach " -"hinten verschoben und bilden ein Zickzack-Muster." +msgstr "Zufällig" msgid "Seam gap" -msgstr "Naht Zwischenraum" +msgstr "" 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%." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" -"Um die Sichtbarkeit der Naht in einer geschlossenen Schleifenextrusion zu " -"reduzieren, wird die Schleife unterbrochen und um eine bestimmte Menge " -"verkürzt.\n" -"Diese Menge kann in Millimetern oder als Prozentsatz des aktuellen " -"Extruderdurchmessers angegeben werden.\n" -"Der Standardwert für diesen Parameter beträgt 10%. Dies wird durchgeführt, " -"um das endgültige Produkt glatter und nahtloser aussehen zu lassen." - -msgid "Role base wipe speed" -msgstr "Rollenbasierte Wipe Geschwindigkeit" - -#, fuzzy -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" -"Die Wischengeschwindigkeit wird durch die Geschwindigkeit der aktuellen " -"Extrusion bestimmt.\n" -"z.B. wenn eine Wischenaktion unmittelbar nach einer äußeren Wand-Extrusion " -"ausgeführt wird, wird die Geschwindigkeit der äußeren Wand-Extrusion für die " -"Wischenaktion verwendet." - -msgid "Wipe on loops" -msgstr "Wischbewegung nach innen" - -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 "" -"Um die Sichtbarkeit der Naht in einer geschlossenen Schleifen-Extrusion zu " -"minimieren, wird vor dem Verlassen der Schleife eine kleine Bewegung nach " -"innen ausgeführt." msgid "Wipe speed" -msgstr "Wipe Geschwindigkeit" +msgstr "" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -9014,37 +8653,26 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"Die Wischengeschwindigkeit wird durch die im Konfigurationsmenü angegebene " -"Geschwindigkeit bestimmt.Wenn der Wert als Prozentsatz (z.B. 80%) angegeben " -"ist, wird er aufgrund der oben angegebenen Reisegeschwindigkeit berechnet. " -"Der Standardwert für diesen Parameter beträgt 80%" msgid "Skirt distance" -msgstr "Abstand der Umrandung" +msgstr "Abstand der Schürze" msgid "Distance from skirt to brim or object" -msgstr "Abstand von der Umrandung zum Rand oder zum Objekt" +msgstr "Abstand von der Schürze zum Rand oder zum Objekt." msgid "Skirt height" -msgstr "Höhe der Umrandungsringe" +msgstr "Schürzenhöhe" msgid "How many layers of skirt. Usually only one layer" -msgstr "Wie viele Schichten des Skirts. Normalerweise nur eine Schicht." +msgstr "Anzahl der Schürzenschichten: Normalerweise nur eine" msgid "Skirt loops" -msgstr "Anzahl Umrandungsringe" +msgstr "Schürzenschlaufen" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" -"Anzahl der Ringe für die Umrandung. Null bedeutet Deaktivierung der Umrandung" - -msgid "Skirt speed" -msgstr "Druckgeschwindigkeit der Umrandung" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" -"Geschwindigkeit der Umrandung in mm/s. Null bedeutet Verwendung der Standard-" -"Schichtextrusionsgeschwindigkeit." +"Anzahl der Schleifen für die Schürze. Null bedeutet die Schürze ist " +"deaktiviert." msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " @@ -9052,7 +8680,7 @@ msgid "" msgstr "" "Die Druckgeschwindigkeit im exportierten G-Code wird verlangsamt, wenn die " "geschätzte Schichtzeit kürzer als dieser Wert ist, um eine bessere Kühlung " -"für diese Schichten zu erreichen" +"für diese Schichten zu erreichen." msgid "Minimum sparse infill threshold" msgstr "Mindestschwelle für Füllung" @@ -9064,12 +8692,11 @@ msgstr "" "Innere Füllbereiche, die kleiner als dieser Wert sind, werden durch massive " "Füllungen ersetzt." -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" -"Linienbreite des internen massiven Infill. Wenn als Prozentsatz angegeben, " -"wird sie in Bezug auf den Düsendurchmesser berechnet." +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Linienbreite der inneren massiven Füllung" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" @@ -9077,7 +8704,7 @@ msgstr "" "Oberfläche." msgid "Spiral vase" -msgstr "Vasenmodus" +msgstr "Spiralvase" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -9216,12 +8843,10 @@ msgstr "" "Kanten, Ausragungen, usw." msgid "Remove small overhangs" -msgstr "Kleine Überhänge entfernen" +msgstr "" msgid "Remove small overhangs that possibly need no supports." msgstr "" -"Kleine Überhänge entfernen, die möglicherweise keine Stützstrukturen " -"benötigen." msgid "Top Z distance" msgstr "Oberer Z-Abstand" @@ -9236,7 +8861,7 @@ msgid "The z gap between the bottom support interface and object" msgstr "Der Z-Abstand zwischen der unteren Stütz-Schnittstelle und dem Objekt" msgid "Support/raft base" -msgstr "Stütz-/Basis-Objekt" +msgstr "Stütz-/Floßbasis" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -9246,12 +8871,8 @@ msgstr "" "kein spezielles Filament für die Stützen verwendet wird, sondern das " "aktuelle Filament." -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Linienbreite der Stützstrukturen. Wenn als Prozentsatz angegeben, wird sie " -"in Bezug auf den Düsendurchmesser berechnet." +msgid "Line width of support" +msgstr "Linienbreite der Stützen" msgid "Interface use loop pattern" msgstr "Schleifenmuster-Schnittstelle" @@ -9263,7 +8884,7 @@ msgstr "" "Standardmäßig deaktiviert." msgid "Support/raft interface" -msgstr "Stütz-/Raft-Schnittstelle" +msgstr "Stütz-/Floß Schnittstelle" msgid "" "Filament to print support interface. \"Default\" means no specific filament " @@ -9274,16 +8895,16 @@ msgstr "" "aktuelle Filament verwendet wird." msgid "Top interface layers" -msgstr "Obere Schnittstellenschichten" +msgstr "Obere Schnittstellschichten" msgid "Number of top interface layers" -msgstr "Anzahl der oberen Schnittstellenschichten" +msgstr "Anzahl der oberen Schnittstellschichten" msgid "Bottom interface layers" -msgstr "Untere Schnittstellenschichten" +msgstr "Untere Schnittstellschichten" msgid "Top interface spacing" -msgstr "Oberer Schnittstellenabstand" +msgstr "Oberer Schnittstellabstand" msgid "Spacing of interface lines. Zero means solid interface" msgstr "Abstand der Schnittstellenlinien. Null bedeutet feste Schnittstelle" @@ -9324,7 +8945,7 @@ msgstr "" "lösliche Schnittstellen konzentrisch ist." msgid "Rectilinear Interlaced" -msgstr "Rechteckiges Wechselmuster" +msgstr "Geradlinig verflochten" msgid "Base pattern spacing" msgstr "Abstand des Grundmusters" @@ -9380,10 +9001,9 @@ msgid "" "support customizing z-gap and save print time.This option will be invalid " "when the prime tower is enabled." msgstr "" -"Die Stützschicht verwendet eine unabhängige Schichthöhe im Vergleich zur " -"Objektschicht. Dadurch kann der Z-Abstand individuell angepasst und " -"Druckzeit gespart werden. Diese Option ist ungültig, wenn der Prime-Tower " -"aktiviert ist." +"Die Stützschicht verwendet die Schichthöhe unabhängig von der Objektschicht. " +"Dies dient dazu, die Anpassung des Z-Abstands zu unterstützen und Druckzeit " +"zu sparen. Diese Option ist ungültig, wenn der Prime Tower aktiviert ist." msgid "Threshold angle" msgstr "Schwellenwinkel" @@ -9416,32 +9036,6 @@ msgstr "" "Mit dieser Einstellung wird der Abstand zwischen benachbarten Baum-" "Stützknoten festgelegt." -msgid "Adaptive layer height" -msgstr "Adaptive Schichthöhe" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" -"Wenn Sie diese Option aktivieren, wird die Höhe der Baumstützschicht außer " -"der ersten automatisch berechnet." - -msgid "Auto brim width" -msgstr "Automatische Randbreite" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" -"Das Aktivieren dieser Option bedeutet, dass die Breite des Brims für " -"Baumstützstrukturen automatisch durch die 3D-Drucksoftware berechnet wird." - -msgid "Tree support brim width" -msgstr "Baumsupport mit Füllung" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "Abstand vom Modell zur äußersten Randlinie" - msgid "Tree support branch diameter" msgstr "Durchmesser des Stützastes eines Baumes" @@ -9449,24 +9043,22 @@ msgid "This setting determines the initial diameter of support nodes." msgstr "Diese Einstellung bestimmt den Anfangsdurchmesser der Stützknoten." msgid "Tree support wall loops" -msgstr "Wandschleifen für Baumstützen" +msgstr "Wandlinien für Baumstützen" msgid "This setting specify the count of walls around tree support" msgstr "Diese Einstellung gibt die Anzahl der Wände um die Baumstütze an." -msgid "Tree support with infill" -msgstr "Baumsupport mit Füllung" +msgid "Tree support brim width" +msgstr "Umrandungsbreite der Baumstütze" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "Diese Einstellung gibt die Anzahl der Wände um den Baumsupport an" +msgid "The brim width around tree support. 0 means auto." +msgstr "Die Umrandungsbreite der Baumstütze. 0 bedeutet automatisch." msgid "Chamber temperature" -msgstr "Druckraum Temperatur" +msgstr "" msgid "Target chamber temperature" -msgstr "Druckraum Temperatur" +msgstr "" msgid "Nozzle temperature for layers after the initial one" msgstr "Düsentemperatur nach der ersten Schicht" @@ -9485,7 +9077,7 @@ msgstr "" "sich das Modell von der Bauplatte löst." msgid "Detect thin wall" -msgstr "Dünne Wand erkennen" +msgstr "Dünne Wänd erkennen" msgid "" "Detect thin wall which can't contain two line width. And use single line to " @@ -9500,14 +9092,10 @@ msgid "" "tool change" msgstr "" "Dieser G-Code wird beim Filamentwechsel eingefügt, einschließlich des T-" -"Befehls zum Auslösen des Werkzeugwechsels" +"Befehls zum auslösen eines Werkzeugwechsels." -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" -"Linienbreite für obere Oberflächen. Wenn als Prozentsatz angegeben, wird sie " -"in Bezug auf den Düsendurchmesser berechnet." +msgid "Line width for top surfaces" +msgstr "Linienbreite für Oberflächen" msgid "Speed of top surface infill which is solid" msgstr "Geschwindigkeit der massiven Füllung der Oberseite." @@ -9547,6 +9135,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "Eilgeschwindigkeit, wenn nicht extrudiert wird." +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Während des Rückzugs wischen" @@ -9572,9 +9168,9 @@ msgid "" "stabilize the chamber pressure inside the nozzle, in order to avoid " "appearance defects when printing objects." msgstr "" -"The Wiping Tower kann verwendet werden, um Rückstände auf der Düse zu " -"entfernen und den Kammerdruck im Inneren der Düse zu stabilisieren, um " -"Erscheinungsdefekte beim Drucken von Objekten zu vermeiden." +"Mit dem Wischturm können Rückstände an der Düse entfernt und der Kammerdruck " +"in der Düse stabilisiert werden, um optische Mängel beim Drucken von " +"Objekten zu vermeiden." msgid "Purging volumes" msgstr "Reinigungsvolumen" @@ -9642,7 +9238,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 "" -"Die Löcher des Objekts werden in der XY-Ebene um den eingestellten Wert " +"Löcher des Objekts werden in der XY-Ebene um den eingestellten Wert " "vergrößert oder verkleinert. Ein positiver Wert macht die Löcher größer, ein " "negativer Wert macht die Löcher kleiner. Diese Funktion wird verwendet, um " "die Größe geringfügig anzupassen, wenn Objekte Montageprobleme haben." @@ -9661,30 +9257,6 @@ msgstr "" "Werte verkleinern Konturen. Diese Funktion wird verwendet, um die Größe " "geringfügig anzupassen, wenn Objekte Probleme bei der Montage haben." -msgid "G-code thumbnails" -msgstr "G-Code Vorschaubilder" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" -"Bildgrößen, die in eine .gcode und .sl1 / .sl1s-Datei gespeichert werden " -"sollen, im folgenden Format: „XxY, XxY, …" - -msgid "Use relative E distances" -msgstr "Relative Extrusion" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" -"Die relative Extrusion wird empfohlen, wenn die Option „label_objects“ " -"verwendet wird. Einige Extruder funktionieren besser, wenn diese Option " -"deaktiviert ist (Absolute Extrusion). Der Wipe-Turm ist nur im relativen " -"Modus kompatibel. Er ist immer auf BambuLab-Druckern aktiviert" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9752,7 +9324,7 @@ msgstr "" "jedoch Lücken oder Überextrusion verursachen kann." msgid "Wall distribution count" -msgstr "Anzahl der Wände" +msgstr "Anzahl der Wandverteilungen" msgid "" "The number of walls, counted from the center, over which the variation needs " @@ -9763,7 +9335,7 @@ msgstr "" "nicht in der Breite verändern." msgid "Minimum feature size" -msgstr "Minimale Merkmalgröße" +msgstr "Minimale Feature-Größe" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -9808,16 +9380,16 @@ msgstr "Ungültiger Wert" #, c-format, boost-format msgid " doesn't work at 100%% density " -msgstr " doesn't work at 100%% density " +msgstr " funktioniert nicht bei einer Dichte von 100%%" msgid "Invalid value when spiral vase mode is enabled: " -msgstr "Ungültiger Wert, wenn der Spiral-Vase-Modus aktiviert ist: " +msgstr "Ungültiger Wert, wenn der Spiralvasenmodus aktiviert ist: " msgid "too large line width " -msgstr "Zu große Linienbreite" +msgstr "zu große Linienbreite " msgid " not in range " -msgstr "nicht im Bereich" +msgstr " nicht in Reichweite " msgid "Export 3MF" msgstr "3mf exportieren" @@ -9841,7 +9413,7 @@ msgid "Export STL" msgstr "" msgid "Export the objects as multiple STL." -msgstr "Die Objekte als mehrere STL-Dateien exportieren." +msgstr "" msgid "Slice" msgstr "Slice" @@ -9858,39 +9430,40 @@ msgid "UpToDate" msgstr "Auf dem neuesten Stand" msgid "Update the configs values of 3mf to latest." -msgstr "Aktualisierung der 3mf Konfigurationswerte auf die neueste Version." +msgstr "" +"Aktualisieren Sie die Konfigurationswerte von 3mf auf den neuesten Stand." msgid "Load default filaments" -msgstr "Standard-Filamente laden" +msgstr "" msgid "Load first filament as default for those not loaded" -msgstr "Das erste Filament als Standard für nicht geladene übernehmen" +msgstr "" msgid "mtcpp" msgstr "mtcpp" msgid "max triangle count per plate for slicing." -msgstr "Maximale Anzahl von Dreiecken pro Bauplattform für das Slicing." +msgstr "maximale Anzahl von Dreiecken pro Platte zum Slicen" msgid "mstpp" msgstr "mstpp" msgid "max slicing time per plate in seconds." -msgstr "Das maximale Slicing-Zeitlimit pro Plate in Sekunden." +msgstr "maximale Slicingzeit pro Platte in Sekunden" msgid "No check" -msgstr "Keine Überprüfung" +msgstr "Keine Prüfung" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" -"Führe keine Gültigkeitsprüfungen durch, wie beispielsweise die Überprüfung " -"von G-Code-Pfadkonflikten." +"Keine Gültigkeitsprüfungen durchführen, z. B. die Prüfung von G-Code-" +"Pfadkonflikten." msgid "Normative check" -msgstr "Normative Überprüfung" +msgstr "Normative Prüfung" msgid "Check the normative items." -msgstr "Überprüfen Sie die normativen Elemente." +msgstr "Normativen Elemente überprüfen." msgid "Output Model Info" msgstr "Ausgabe Modellinformationen" @@ -9917,10 +9490,10 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "Anordnungsoptionen: 0-deaktiviert; 1-aktiviert; andere-automatisch" msgid "Repetions count" -msgstr "Anzahl der Wiederholungen" +msgstr "" msgid "Repetions count of the whole model" -msgstr "Anzahl der Wiederholungen des gesamten Modells" +msgstr "" msgid "Convert Unit" msgstr "Einheit umrechnen" @@ -9954,26 +9527,11 @@ msgstr "Einige Objekte in diesem Druck überspringen" msgid "load uptodate process/machine settings when using uptodate" msgstr "" -"Aktuelle Prozess-/Maschineneinstellungen laden, wenn 'Aktuell' verwendet wird" msgid "" "load uptodate process/machine settings from the specified file when using " "uptodate" msgstr "" -"Aktuelle Prozess-/Maschineneinstellungen aus der angegebenen Datei laden, " -"wenn Aktuell verwendet wird" - -msgid "Data directory" -msgstr "Datenverzeichnis" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" -"Laden und Speichern von Einstellungen im angegebenen Verzeichnis. Dies ist " -"nützlich, um verschiedene Profile beizubehalten oder Konfigurationen aus " -"einem Netzwerkspeicher einzubeziehen." msgid "Output directory" msgstr "Ausgabeverzeichnis" @@ -9982,7 +9540,7 @@ msgid "Output directory for the exported files." msgstr "Ausgabeverzeichnis für die exportierten Dateien." msgid "Debug level" -msgstr "Fehlersuchstufe" +msgstr "Debug-Level" msgid "" "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" @@ -10016,18 +9574,18 @@ msgid "floating regions" msgstr "schwebende Regionen" msgid "floating cantilever" -msgstr "schwebender Überhang." +msgstr "Fliegender Träger" msgid "large overhangs" -msgstr "Großer Überhang." +msgstr "große Überhänge" #, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." msgstr "" -"Es scheint, dass das Objekt %s %s hat. Bitte orientieren Sie das Objektneu " -"oder aktivieren Sie die Support-Generierung." +"Es scheint, dass Objekt %s hat %s. Bitte richten Sie das Objekt neu aus oder " +"aktivieren Sie die Stützengenerierung." msgid "Optimizing toolpath" msgstr "Optimieren des Werkzeugwegs" @@ -10047,9 +9605,8 @@ msgid "" "No layers were detected. You might want to repair your STL file(s) or check " "their size or thickness and retry.\n" msgstr "" -"Es wurden keine Schichten erkannt. Möglicherweise möchten Sie Ihre STL-" -"Datei(en) reparieren oder ihre Größe oder Dicke überprüfen und es erneut " -"versuchen.\n" +"Es wurden keine Ebenen erkannt. Reparieren Sie Ihre STL-Datei(en) oder " +"überprüfen Sie deren Größe oder Dicke und versuchen Sie es erneut.\n" msgid "" "An object's XY size compensation will not be used because it is also color-" @@ -10057,8 +9614,8 @@ msgid "" "XY Size compensation can not be combined with color-painting." msgstr "" "Die XY-Größenkompensation eines Objekts wird nicht verwendet, da es auch " -"farblich lackiert wurde.\n" -"Die XY-Größenkompensation kann nicht mit Farbmalerei kombiniert werden." +"farbig bemalt ist.\n" +"Die XY-Größenkompensation kann nicht mit der Farbmalerei kombiniert werden." #, c-format, boost-format msgid "Support: generate toolpath at layer %d" @@ -10085,7 +9642,7 @@ msgstr "Stützen: Polygone auf Ebene %d erzeugen" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Stützen: Löcher in Schicht %d repairieren" +msgstr "Stützen: Löcher in Schicht %d reparieren" #, c-format, boost-format msgid "Support: propagate branches at layer %d" @@ -10126,94 +9683,548 @@ msgstr "Die Datei enthält einen ungültigen Scheitelpunktindex." msgid "This OBJ file couldn't be read because it's empty." msgstr "Diese OBJ-Datei konnte nicht gelesen werden, da sie leer ist." +msgid "Flow Rate Calibration" +msgstr "" + +msgid "Max Volumetric Speed Calibration" +msgstr "" + +msgid "Manage Result" +msgstr "" + +msgid "Manual Calibration" +msgstr "" + +msgid "Result can be read by human eyes." +msgstr "" + +msgid "Auto-Calibration" +msgstr "" + +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" +msgstr "Fertig" + +msgid "Wiki" +msgstr "" + +msgid "How to use calibration result?" +msgstr "" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" + +msgid "Calibration not supported" +msgstr "" + +msgid "Flow Dynamics" +msgstr "" + +msgid "Flow Rate" +msgstr "" + +msgid "Max Volumetric Speed" +msgstr "" + +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + +msgid "The name cannot be empty." +msgstr "" + +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Fehlgeschlagen" + +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 "" + +msgid "Please find the best line on your plate" +msgstr "" + +msgid "Input Value" +msgstr "" + +msgid "Save to Filament Preset" +msgstr "" + +msgid "Preset" +msgstr "" + +msgid "Record Factor" +msgstr "" + +msgid "We found the best flow ratio for you" +msgstr "" + +msgid "Flow Ratio" +msgstr "" + +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "" + +msgid "Please enter the name of the preset you want to save." +msgstr "" + +msgid "Calibration1" +msgstr "" + +msgid "Calibration2" +msgstr "" + +msgid "Please find the best object on your plate" +msgstr "" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "" + +msgid "Skip Calibration2" +msgstr "" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Druckbetttyp" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" +msgstr "" + +msgid "PA Calibration" +msgstr "" + +msgid "PA Tower" +msgstr "" + +msgid "PA Line" +msgstr "" + +msgid "PA Pattern" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Start PA: " +msgstr "" + +msgid "End PA: " +msgstr "" + +msgid "PA step: " +msgstr "" + +msgid "Print numbers" +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" +msgstr "" + +msgid "Temperature calibration" +msgstr "" + +msgid "PLA" +msgstr "" + +msgid "ABS/ASA" +msgstr "" + +msgid "PETG" +msgstr "" + +msgid "TPU" +msgstr "" + +msgid "PA-CF" +msgstr "" + +msgid "PET-CF" +msgstr "" + +msgid "Filament type" +msgstr "" + +msgid "Start temp: " +msgstr "" + +msgid "End temp: " +msgstr "" + +msgid "Temp step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start temp: <= 350\n" +"End temp: >= 180\n" +"Start temp > End temp + 5)" +msgstr "" + +msgid "Max volumetric speed test" +msgstr "" + +msgid "Start volumetric speed: " +msgstr "" + +msgid "End volumetric speed: " +msgstr "" + +msgid "step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 0 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "VFA test" +msgstr "" + +msgid "Start speed: " +msgstr "" + +msgid "End speed: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 10 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "Start retraction length: " +msgstr "" + +msgid "End retraction length: " +msgstr "" + +msgid "mm/mm" +msgstr "" + msgid "Network lookup" -msgstr "Netzwerk durchsuchen" +msgstr "" msgid "Address" -msgstr "IP Adresse" +msgstr "" msgid "Hostname" msgstr "" msgid "Service name" -msgstr "Service Name" +msgstr "" msgid "OctoPrint version" -msgstr "OctoPrint Version" +msgstr "" msgid "Searching for devices" -msgstr "Suche nach Geräten" +msgstr "" msgid "Finished" msgstr "Erledigt" -msgid "Unable to perform boolean operation on selected parts" -msgstr "" -"Die boolesche Operation kann auf den ausgewählten Teilen nicht durchgeführt " -"werden" - -msgid "Mesh Boolean" -msgstr "Mesh-Boolesche Operation" - -msgid "Union" -msgstr "Vereinigen" - -msgid "Difference" -msgstr "Differenz" - -msgid "Intersection" -msgstr "Schnittmenge" - -msgid "Source Volume" -msgstr "Quellvolumen" - -msgid "Tool Volume" -msgstr "Werkzeugvolumen" - -msgid "Subtract from" -msgstr "Abziehen von" - -msgid "Subtract with" -msgstr "Abziehen mit" - -msgid "selected" -msgstr "Ausgewählt" - -msgid "Part 1" -msgstr "" - -msgid "Part 2" -msgstr "" - -msgid "Delete input" -msgstr "Eingabe löschen" - -#, fuzzy msgid "Send to print" -msgstr "Zum Drucker senden" +msgstr "" msgid "Upload to Printer Host with the following filename:" -msgstr "Mit folgendem Dateinamen auf den Drucker-Host hochladen:" +msgstr "" msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" -"Verwenden Sie bei Bedarf Schrägstriche (/) als Verzeichnistrennzeichen." #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -"Der Dateiname für den Upload endet nicht mit \"%s\". Möchten Sie den Vorgang " -"fortsetzen?" - -#, fuzzy -msgid "Upload" -msgstr "Entladen" - -msgid "Upload and Print" -msgstr "Hochladen und Drucken" msgid "Simulate" -msgstr "Simulation" +msgstr "" msgid "Print host upload queue" msgstr "" @@ -10222,7 +10233,7 @@ msgid "ID" msgstr "" msgid "Progress" -msgstr "Fortschritt" +msgstr "" msgid "Host" msgstr "" @@ -10235,218 +10246,64 @@ msgid "Filename" msgstr "" msgid "Error Message" -msgstr "Fehlermeldung" +msgstr "" msgid "Cancel selected" -msgstr "Ausgewählten abbrechen" +msgstr "" msgid "Show error message" -msgstr "Fehlermeldung Anzeigen" +msgstr "" msgid "Enqueued" -msgstr "In Warteschlange" +msgstr "" msgid "Uploading" msgstr "Hochladen" msgid "Cancelling" -msgstr "Wird abgebrochen" +msgstr "" msgid "Error uploading to print host:" -msgstr "Error uploading to print host:" - -msgid "PA Calibration" -msgstr "PA Kalibrierung" - -msgid "DDE" -msgstr "DDE" - -msgid "Bowden" -msgstr "Bowden" - -msgid "Extruder type" -msgstr "Extruder Typ" - -msgid "PA Tower" -msgstr "PA Turm" - -msgid "PA Line" -msgstr "PA Linie" - -msgid "PA Pattern" -msgstr "PA Muster" - -msgid "Method" -msgstr "Methode" - -msgid "Start PA: " -msgstr "Start PA: " - -msgid "End PA: " -msgstr "Ende PA:" - -msgid "PA step: " -msgstr "PA Schritte:" - -msgid "Print numbers" -msgstr "Anzahl der Drucke" - -msgid "" -"Please input valid values:\n" -"Start PA: >= 0.0\n" -"End PA: > Start PA\n" -"PA step: >= 0.001)" -msgstr "" -"Bitte geben Sie gültige Werte ein:\n" -"Start PA: >= 0.0\n" -"Ende PA: > Start PA\n" -"PA Schritt: >= 0.001" - -msgid "Temperature calibration" -msgstr "Temperatur Test" - -msgid "PLA" -msgstr "PLA" - -msgid "ABS/ASA" -msgstr "ABS/ASA" - -msgid "PETG" -msgstr "PETG" - -msgid "TPU" -msgstr "TPU" - -msgid "PA-CF" -msgstr "PA-CF" - -msgid "PET-CF" -msgstr "PET-CF" - -msgid "Filament type" -msgstr "Filamenttyp" - -msgid "Start temp: " -msgstr "Starttemperatur" - -msgid "End end: " -msgstr "Endtemperatur" - -msgid "Temp step: " -msgstr "Temp Schrittweite" - -msgid "" -"Please input valid values:\n" -"Start temp: <= 350\n" -"End temp: >= 180\n" -"Start temp > End temp + 5)" -msgstr "" -"Bitte geben Sie gültige Werte ein:\n" -"Start Temp: <= 350\n" -"End Temp: >= 180\n" -"Start Temp > End Temp + 5)" - -msgid "Max volumetric speed test" -msgstr "Test zur maximalen Volumengeschwindigkeit" - -msgid "Start volumetric speed: " -msgstr "Start-Volumengeschwindigkeit" - -msgid "End volumetric speed: " -msgstr "End-Volumengeschwindigkeit" - -msgid "step: " -msgstr "Schrittweite" - -msgid "" -"Please input valid values:\n" -"start > 0 step >= 0\n" -"end > start + step)" -msgstr "" -"Bitte geben Sie gültige Werte ein:\n" -"Start > 0 Schrittweite >= 0\n" -"Ende > Start + Schrittweite)" - -msgid "VFA test" -msgstr "VFA TEST" - -msgid "Start speed: " -msgstr "Startgeschwindigkeit" - -msgid "End speed: " -msgstr "Endgeschwindigkeit" - -msgid "" -"Please input valid values:\n" -"start > 10 step >= 0\n" -"end > start + step)" -msgstr "" -"Bitte geben Sie gültige Werte ein:\n" -"Start > 10 Schrittweite >= 0\n" -"Ende > Start + Schrittweite)" - -#, fuzzy -msgid "Start retraction length: " -msgstr "Start Rückzugslänge" - -#, fuzzy -msgid "End retraction length: " -msgstr "Ende Rückzugslänge" - -msgid "mm/mm" msgstr "" -#, fuzzy -msgid "Physical Printer" -msgstr "Drucker" - -msgid "Print Host upload" -msgstr "Hochladen zum Druck-Host" - -msgid "Test" +msgid "Unable to perform boolean operation on selected parts" msgstr "" -msgid "Could not get a valid Printer Host reference" -msgstr "Konnte keine gültige Referenz zum Druck-Host erhalten" - -msgid "Success!" -msgstr "Erfolgreich!" - -msgid "Refresh Printers" -msgstr "Drucker aktualisieren" - -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Mesh Boolean" msgstr "" -"Die HTTPS-CA-Datei ist optional. Sie wird nur benötigt, wenn Sie HTTPS mit " -"einem selbstsignierten Zertifikat verwenden." -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "Zertifikatdateien (*.crt, *.pem)|*.crt;*.pem|Alle Dateien|*.*" - -msgid "Open CA certificate file" -msgstr "Öffnen Sie die CA-Zertifikatsdatei." - -#, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Union" msgstr "" -"Auf diesem System verwendet %s HTTPS-Zertifikate aus dem " -"Systemzertifikatspeicher oder dem Schlüsselbund." -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Difference" msgstr "" -"Um eine benutzerdefinierte CA-Datei zu verwenden, importieren Sie bitte Ihre " -"CA-Datei in den Zertifikatspeicher / das Schlüsselbund." -msgid "Connection to printers connected via the print host failed." +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" -"Die Verbindung zu den über den Druck-Host verbundenen Druckern ist " -"fehlgeschlagen." #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -10565,12 +10422,12 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" "Ein Teil subtrahieren\n" "Wussten Sie, dass Sie mit dem \"negatives Teil Modifikator\" ein Netz von " "einem anderen subtrahieren können? Auf diese Weise können Sie z.B. leicht " -"veränderbare Löcher direkt in Orca Slicer erstellen. Lesen Sie mehr dazu in " +"veränderbare Löcher direkt in Bambu Studio erstellen. Lesen Sie mehr dazu in " "der Dokumentation." #: resources/data/hints.ini: [hint:STEP] @@ -10578,13 +10435,13 @@ 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" "STEP\n" "Wussten Sie, dass Sie Ihre Druckqualität verbessern können, indem Sie eine " "STEP-Datei anstelle einer STL-Datei slicen?\n" -"Orca Slicer unterstützt das Slicen von STEP-Dateien und liefert glattere " +"Bambu Studio unterstützt das Slicen von STEP-Dateien und liefert glattere " "Ergebnisse als eine STL mit geringerer Auflösung. Probiere es aus!" #: resources/data/hints.ini: [hint:Z seam location] @@ -10718,655 +10575,37 @@ msgid "" "density to improve the strength of the model?" msgstr "" "Festigkeit verbessern\n" -"Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " -"und eine höhere Dichte der Füllung verbessern können?" +"Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandlinien und " +"eine höhere Dichte der Füllung verbessern können?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "Die Konfiguration wurde möglicherweise mit einer neueren Version von " -#~ "Bambu Studio generiert." +#~ "Verwenden Sie nur eine Wand auf der Oberfläche, um mehr Platz für das " +#~ "obere Füllmuster zu schaffen." -#~ msgid "Internal Version" -#~ msgstr "Interne Version" +#~ msgid "Nozzle HRC" +#~ msgstr "Düse HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "BambuStudio wird wegen Arbeitsspeichermangels beendet, was ein Bug sein " -#~ "kann. Bitte melden Sie diesen Fehler dem technischen Support." +#~ "Die Härte der Düse. Null bedeutet, dass die Düsenhärte beim Slicen nicht " +#~ "geprüft wird." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "BambuStudio wird aufgrund eines Lokalisierungsfehlers beendet." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "BambuStudio hat eine unbehandelte Ausnahme erhalten: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Die BambuStudio-Konfigurationsdatei ist möglicherweise beschädigt und " -#~ "kann nicht geladen werden. Bitte löschen Sie die Datei und versuchen Sie " -#~ "es erneut." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio benötigt ein Upgrade" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Wählen Sie eine Datei (gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "Die Version von Bambu Studio ist zu niedrig und muss auf die neueste " -#~ "Version aktualisiert werden, bevor sie normal verwendet werden kann" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Initialisierung der Bambu Studio GUI ist fehlgeschlagen" - -#~ msgid "Check cloud service status" -#~ msgstr "Status des Cloud-Dienstes prüfen" - -#~ msgid "code" -#~ msgstr "Code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Verbindung zum Cloud-Dienst fehlgeschlagen" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Bitte klicken Sie auf den obigen Hyperlink, um den Status des Cloud-" -#~ "Dienstes einzusehen" - -#~ msgid "Connection to printer failed" -#~ msgstr "Verbindung zum Drucker ist fehlgeschlagen" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Bitte überprüfen Sie die Netzwerkverbindung von Drucker und Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Neues Filament in den Extruder schieben" - -#~ msgid "Grab new filament" -#~ msgstr "Neues Filament holen" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormale Daten in der Druckdatei. Bitte slicen Sie erneut" - -#~ msgid "Task canceled." -#~ msgstr "Aufgabe abgebrochen." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Zeitüberschreitung beim Upload. Bitte überprüfen Sie den Netzwerkstatus " -#~ "und versuchen Sie es erneut." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Druckdatei nicht gefunden. Bitte erneut slicen" - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "Die Druckdatei überschreitet die maximal zulässige Größe (1 GB). Bitte " -#~ "vereinfachen Sie das Modell und slicen Sie diese erneut." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "" -#~ "Datei konnte nicht auf FTP hochgeladen werden. Bitte versuchen Sie es " -#~ "erneut." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Überprüfen Sie den aktuellen Status des Bambu Lab-Servers, indem Sie auf " -#~ "den obigen Link klicken." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "Die Größe der Druckdatei ist zu groß. Bitte passen Sie die Dateigröße an " -#~ "und versuchen Sie es erneut." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Druckdatei nicht gefunden. Bitte erneut slicen und zum Drucken senden." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Druckdatei konnte nicht über FTP hochgeladen werden. Bitte überprüfen Sie " -#~ "den Netzwerkstatus und versuchen Sie es erneut." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio ist lizenziert unter " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio basiert auf PrusaSlicer von Prusa Research, das von Slic3r " -#~ "von Alessandro Ranellucci und der RepRap Community stammt." - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio basiert auf PrusaSlicer von PrusaResearch und SuperSlicer " -#~ "von Merill(supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "" -#~ "Bambu Studio bezog sich auch auf einige Ideen aus Cura von Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "Viele Teile der Software stammen aus Beiträgen der Community, sodass wir " -#~ "sie nicht einzeln auflisten können, sondern sie in den entsprechenden " -#~ "Code-Kommentaren erwähnen werden." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Schichthöhe zu groß\n" -#~ "Auf 0.2 zurückgesetzt" - -#~ msgid "Layer Time (s)" -#~ msgstr "Schichtzeit (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Konflikte zwischen Gcode-Pfaden wurden auf Ebene %d gefunden. Bitte " -#~ "platzieren Sie die Objekte weiter auseinander (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Problem melden" - -#~ msgid "Show &Overhang" -#~ msgstr "Zeige Überhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Hervorhebung des Objektüberhangs in einer 3D-Szene anzeigen" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "" -#~ "Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Eine weitere virtuelle Kamera wird verwendet.\n" -#~ "Bambu Studio unterstützt nur eine einzige virtuelle Kamera.\n" -#~ "Möchten Sie diese virtuelle Kamera stoppen?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Wechsel zu 3mf-Modelldateien." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "Keine Dateien [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Laden fehlgeschlagen [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Möchten Sie die Datei '%s' vom Drucker löschen?" - -#~ msgid "Delete file" -#~ msgstr "Datei löschen" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Modellinformationen werden abgerufen..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Die Modellinformationen konnten nicht vom Drucker abgerufen werden." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Modellinformationen konnten nicht analysiert werden" - -#~ msgid "Immediately score" -#~ msgstr "Direktpunktzahl" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "" -#~ "Bitte geben Sie eine Punktzahl für Ihr Lieblingsmodell von Bambu Market " -#~ "ab." - -#~ msgid "Score" -#~ msgstr "Punktzahl" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "Die 3mf wurde mit einer alten Version von Bambu Studio erzeugt, nur " -#~ "Geometriedaten werden geladen." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "Die Funktion \"Modell reparieren\" ist derzeit nur unter Windows " -#~ "verfügbar. Bitte reparieren Sie das Modell in Bambu Studio (Windows) oder " -#~ "CAD-Software." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Dateien mit BambuStudio verknüpfen" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr ".3mf-Dateien mit Bambu Studio verknüpfen" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen " -#~ "von .3mf-Dateien festgelegt" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr ".stl-Dateien mit BambuStudio verknüpfen" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von ." -#~ "stl-Dateien festgelegt" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr ".step/.stp-Dateien mit BambuStudio verknüpfen" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von ." -#~ "step-Dateien festgelegt" - -#~ msgid "Online Models" -#~ msgstr "Online-Modelle" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "" -#~ "Von Mitarbeitern ausgewählte Online-Models auf der Startseite anzeigen" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Überspringen der AMS Blacklist-Prüfung" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "SSL aktivieren (MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "SSL aktivieren (FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Interner Entwicklermodus" - -#~ msgid "Incompatible" -#~ msgstr "Inkompatibel" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Entspricht dem globalen Plattentyp" - -#~ msgid "PLA Plate" -#~ msgstr "PLA-Platte" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Es kann keine Verbindung zum Drucker hergestellt werden" - -#~ msgid "Error code" -#~ msgstr "Fehlercode" - -#~ msgid "Check the status of current system services" -#~ msgstr "Überprüfen Sie den Status der aktuellen Systemdienste" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "" -#~ "Die lokale Verbindung des Druckers ist fehlgeschlagen. Bitte versuchen " -#~ "Sie es erneut." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "Die Namenslänge überschreitet das Limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "Der Drucker muss sich im selben LAN befinden wie Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Socket konnte nicht erstellt werden" - -#~ msgid "Failed to connect socket" -#~ msgstr "Verbindung zum Socket fehlgeschlagen" - -#~ msgid "Failed to publish login request" -#~ msgstr "Anmeldeanfrage konnte nicht gesendet werden" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Zeitüberschreitung beim Abrufen des Tickets vom Gerät" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Zeitüberschreitung beim Abrufen des Tickets vom Server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Ticket konnte nicht auf den Server übertragen werden" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Der Grund für den Anmeldebericht konnte nicht analysiert werden" - -#~ msgid "Receive login report timeout" -#~ msgstr "Zeitüberschreitung beim Empfang des Anmeldeberichts" - -#~ msgid "Check the reason" -#~ msgstr "Überprüfe den Grund" - -#~ msgid "Read and accept" -#~ msgstr "Gelesen und akzeptieren" - -#~ msgid "Terms and Conditions" -#~ msgstr "Allgemeine Geschäftsbedingungen" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "Vielen Dank für den Kauf eines Bambu Lab Geräts. Bevor Sie Ihr Bambu Lab " -#~ "Gerät verwenden, lesen Sie bitte die Allgemeinen Geschäftsbedingungen. " -#~ "Indem Sie zustimmen klicken, erklären Sie sich mit der " -#~ "Datenschutzrichtlinie und den Nutzungsbedingungen (zusammen die " -#~ "„Bedingungen“) einverstanden, um so Ihr Bambu Lab Gerät verwenden zu " -#~ "können. Wenn Sie die Datenschutzrichtlinien von Bambu Lab nicht einhalten " -#~ "oder diesen zustimmen, verwenden Sie bitte keine Geräte und " -#~ "Dienstleistungen von Bambu Lab." - -#~ msgid "and" -#~ msgstr "und" - -#~ msgid "Privacy Policy" -#~ msgstr "Datenschutzerklärung" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "Wir bitten Sie um Ihre Hilfe, um den Drucker für alle zu verbessern" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Erklärung zum Programm zur Verbesserung der Benutzererfahrung" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "In der 3D-Druck-Community lernen wir von den Erfolgen und Misserfolgen " -#~ "der anderen, um unsere eigenen Slicing-Parameter und Einstellungen " -#~ "anzupassen. %s folgt demselben Prinzip und nutzt maschinelles Lernen, um " -#~ "seine Leistung anhand der Erfolge und Misserfolge der riesigen Anzahl von " -#~ "Drucken unserer Nutzer zu verbessern. Wir trainieren %s, um schlauer zu " -#~ "werden, indem wir es mit realen Daten füttern. Wenn Sie einverstanden " -#~ "sind, greift dieser Dienst auf Informationen aus Ihren Fehlerprotokollen " -#~ "und Nutzungsprotokollen zu, die die in der Datenschutzrichtlinie " -#~ "beschriebenen Informationen enthalten können. Wir werden keine " -#~ "persönlichen Daten sammeln, durch die eine Person direkt oder indirekt " -#~ "identifiziert werden kann, wie Namen, Adressen, Zahlungsinformationen " -#~ "oder Telefonnummern. Durch die Aktivierung dieses Dienstes erklären Sie " -#~ "sich mit diesen Bedingungen und der Erklärung zum Datenschutz " -#~ "einverstanden." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Erklärung zum Plan zur Verbesserung der Benutzererfahrung" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Klicken Sie auf OK, um das Netzwerk-Plugin beim nächsten Start von Bambu " -#~ "Studio zu aktualisieren." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Neue Version von Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Schritt 1: Vergewissern Sie sich, dass Bambu Studio und Ihr Drucker sich " -#~ "im selben LAN befinden." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "Kopieren des Verzeichnisses %1% nach %2% fehlgeschlagen: %3%" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "Die folgenden Objekte haben eine leere Anfangsebene und können nicht " -#~ "gedruckt werden. Bitte schneiden Sie den Boden ab oder aktivieren Sie die " -#~ "Stützen." - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Verwenden Sie auf der ersten Modellschicht nur eine Wand" - -#~ msgid "Max Radius" -#~ msgstr "Maximaler Radius" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Maximaler Abstandsradius um den Extruder. Dient zur Kollisionsvermeidung " -#~ "beim objektweisen Drucken." - -#~ msgid "Object flow ratio" -#~ msgstr "Objektflussverhältnis" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "Das vom Objekt festgelegte Flussverhältnis; Die Bedeutung ist dieselbe " -#~ "wie beim Flussverhältnis." - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Länge des Füllungsankers" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "Dadurch wird eine innere Fülllinie mit einer internen Wand mit einem " -#~ "kurzen Segment einer zusätzlichen Wand verbunden. Wenn sie als " -#~ "Prozentsatz ausgedrückt wird (Beispiel: 15 %), wird sie über die Breite " -#~ "der inneren Füllungslinie berechnet. Der Slicer versucht, zwei nahe " -#~ "beieinander liegende Fülllinien mit einem kurzen Umfangssegment zu " -#~ "verbinden. Wenn kein solches Umfangssegment gefunden wird, das kürzer als " -#~ "infill_anchor_max ist, wird die Füllungslinie nur an einer Seite mit " -#~ "einem Umfangssegment verbunden und die Länge des aufgenommenen " -#~ "Umfangssegments ist auf diesen Parameter begrenzt, jedoch nicht länger " -#~ "als anchor_length_max. Setzen Sie diesen Parameter auf Null, um die " -#~ "Verankerung von Wänden zu deaktivieren, die mit einer einzelnen " -#~ "Füllungslinie verbunden sind." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximale Länge des Füllungsankers" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "Dadurch wird eine innere Fülllinie mit einer internen Wand mit einem " -#~ "kurzen Segment einer zusätzlichen Wand verbunden. Wenn sie als " -#~ "Prozentsatz ausgedrückt wird (Beispiel: 15 %), wird sie über die Breite " -#~ "der inneren Füllungslinie berechnet. Der Slicer versucht, zwei nahe " -#~ "beieinander liegende Fülllinien mit einem kurzen Umfangssegment zu " -#~ "verbinden. Wenn kein solches Umfangssegment gefunden wird, das kürzer als " -#~ "dieser Parameter ist, wird die Füllungslinie nur an einer Seite mit einem " -#~ "Umfangssegment verbunden und die Länge des aufgenommenen Umfangssegments " -#~ "wird auf infill_anchor, jedoch nicht länger als diesen Parameter " -#~ "begrenzt. Setzen Sie diesen Parameter auf Null, um die Verankerung zu " -#~ "deaktivieren." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (nicht verankert)" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "Wenn Sie den ausgegebenen G-Code über benutzerdefinierte Skripte " -#~ "verarbeiten möchten, listen Sie hier einfach deren absolute Pfade auf. " -#~ "Trennen Sie mehrere Skripte durch ein Semikolon. Skripte werden über den " -#~ "absoluten Pfad zur G-Code-Datei als erstes Argument übergeben, auch " -#~ "Variablen von Einstellungen können gelesen werden" - -#~ msgid "Z Hop Type" -#~ msgstr "Z-Hop-Typ" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "Die Umrandungsbreite der Baumstütze. 0 bedeutet automatisch." - -#~ msgid "Finish" -#~ msgstr "Fertig" - -#~ msgid "Failed" -#~ msgstr "Fehlgeschlagen" - -#~ msgid "Plate Type" -#~ msgstr "Druckbetttyp" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Ein Teil subtrahieren\n" -#~ "Wussten Sie, dass Sie mit dem \"negatives Teil Modifikator\" ein Netz von " -#~ "einem anderen subtrahieren können? Auf diese Weise können Sie z.B. leicht " -#~ "veränderbare Löcher direkt in Bambu Studio erstellen. Lesen Sie mehr dazu " -#~ "in der Dokumentation." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "Wussten Sie, dass Sie Ihre Druckqualität verbessern können, indem Sie " -#~ "eine STEP-Datei anstelle einer STL-Datei slicen?\n" -#~ "Bambu Studio unterstützt das Slicen von STEP-Dateien und liefert glattere " -#~ "Ergebnisse als eine STL mit geringerer Auflösung. Probiere es aus!" - -#~ msgid "ERROR:" -#~ msgstr "FEHLER" - -#~ msgid "Bed temperatures for the used filaments differ significantly." -#~ msgstr "" -#~ "Die Betttemperaturen für die verwendeten Filamente unterscheiden sich " -#~ "signifikant." - -#~ msgid "Line width of outer wall" -#~ msgstr "Linienbreite der Außenwand" - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "Standardlinienbreite für Linienbreiten, die auf 0 gesetzt sind" - -#~ msgid "Line width of initial layer" -#~ msgstr "Linienbreite der ersten Schicht" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Linienbreite der inneren Füllung" - -#~ msgid "Line width of inner wall" -#~ msgstr "Linienbreite der Innenwand" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Linienbreite der inneren massiven Füllung" - -#~ msgid "Line width of support" -#~ msgstr "Linienbreite der Stützen" - -#~ msgid "Line width for top surfaces" -#~ msgstr "Linienbreite für Oberflächen" - -#~ msgid "Other color" -#~ msgstr "Andere Farbe" - -#~ 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 "" -#~ "Wenn aktiviert, generiert Studio Stützschleifen unter den Konturen " -#~ "interner Brücken. Diese Stützschleifen könnten verhindern, dass interne " -#~ "Brücken über die Luft extrudieren, und die höchste Oberflächenqualität " -#~ "verbessern, insbesondere wenn die spärliche Fülldichte niedrig ist. " -#~ "Dieser Wert bestimmt die Dicke der Stützschleifen. 0 bedeutet, diese " -#~ "Funktion zu deaktivieren" - -#, fuzzy -#~ msgid "Fan Speedup Time" -#~ msgstr "Lüftergeschwindigkeit: " - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-Processing-Skripte" - -#~ msgid "Bridge direction" -#~ msgstr "Brückenrichtung" - -#~ msgid "" -#~ "Angle for bridge infill pattern, which controls the start or main " -#~ "direction of line" -#~ msgstr "" -#~ "Winkel des Brücken-Füllmusters, der die Start- oder Hauptrichtung der " -#~ "Linie steuert" +#~ "Erkennt den Prozentsatz des Überhangs im Verhältnis zur Linienbreite und " +#~ "verwenden hierfür eine unterschiedliche Druckgeschwindigkeiten. Bei einem " +#~ "100%% Überhang wird die Brückengeschwindigkeit verwendet." #~ msgid "Pause Print" #~ msgstr "Druck pausieren" @@ -11377,12 +10616,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Druckpause löschen" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Faktoren der dynamischen Flusskalibrierung" + #~ msgid "\\u2103" #~ msgstr "\\u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Flusskalibrierung" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -11405,6 +10650,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "3D-Modelle" + #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materialien Einstellung" @@ -11425,9 +10673,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Tatsächliches Volumen = Reinigungsvolumen * Multiplikator" +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptive Schichthöhe" + #~ msgid "Add Custom Printer" #~ msgstr "Benutzerdefinierten Drucker hinzufügen" +#~ msgid "Ams filament backup" +#~ msgstr "AMS Filament Backup" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -11456,6 +10710,9 @@ msgstr "" #~ "Dies kann zu einer Verschlechterung der Qualität der Überhänge führen, " #~ "wenn schnell gedruckt wird.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Zusammenfügen der ausgewählten Teile zu einem einzigen Teil" + #~ msgid "Auto arrange" #~ msgstr "Automatische Anordnung" @@ -11503,6 +10760,12 @@ msgstr "" #~ "Filaments.\n" #~ "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen." +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Minimale Dicke der unteren Schichten" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Untere volle Schichten" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11549,6 +10812,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Verbrauch" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Bestätigen Sie, ob das Filament extrudiert wurde" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate/PLA Plate" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + #~ msgid "Creating" #~ msgstr "Wird erstellt..." @@ -11584,6 +10856,24 @@ msgstr "" #~ "Ja - Arachne aktivieren und die Überhangsverlangsamung deaktivieren\n" #~ "Nein - Arachne für diesen Druck nicht verwenden" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Die Verbindung zum Drucker [%s] wurde unterbrochen, da der LAN-Modus " +#~ "deaktiviert ist. Bitte verbinden Sie den Drucker erneut, indem Sie sich " +#~ "mit Ihrem Benutzerkonto anmelden." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Die Verbindung zum Drucker [%s] wurde unterbrochen, da der LAN-Modus " +#~ "aktiviert ist. Bitte stellen Sie die Verbindung zum Drucker wieder her, " +#~ "indem Sie den Zugriffscode eingeben, den Sie auf dem Druckerbildschirm " +#~ "abrufen können." + #~ msgid "Display printable box" #~ msgstr "Bedruckbare Box anzeigen" @@ -11639,6 +10929,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Herunterladen des Bambu-Netzwerk-Plugins" +#~ msgid "Dump video" +#~ msgstr "Video löschen" + #~ msgid "Edit plate setitngs" #~ msgstr "Platteneinstellungen bearbeiten" @@ -11655,6 +10948,9 @@ msgstr "" #~ "Bitte beachten Sie, dass diese Option nur wirksam wird, wenn auf der " #~ "aktuellen Platte kein Reinigungsturm erzeugt wurde." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + #~ msgid "Enter a search term" #~ msgstr "Suchbegriff eingeben" @@ -11703,14 +10999,29 @@ msgstr "" #~ "Bitte geben Sie die korrekte IP-Adresse des Druckers und den Zugangscode " #~ "ein." +#~ msgid "Failed to get ticket" +#~ msgstr "Ticket konnte nicht abgerufen werden" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Der Grund für den Anmeldebericht konnte nicht analysiert werden" +#~ msgid "Failed uploading print file" +#~ msgstr "Fehler beim Hochladen der Druckdatei" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "" #~ "Hochladen der Druckdatei fehlgeschlagen. Bitte geben Sie die IP-Adresse " #~ "erneut ein." +#~ msgid "Failure of bind" +#~ msgstr "Bindungsfehler" + +#~ msgid "Failure of printer login" +#~ msgstr "Druckeranmeldung fehlgeschlagen" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Neues Filament von externer Spule zuführen" + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -11778,6 +11089,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Filamentauswahl" +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + #~ msgid "Fix model locally" #~ msgstr "Modell lokal reparieren" @@ -11867,6 +11181,14 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Initialisierung fehlgeschlagen [%d]!" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "" +#~ "Initialisierung fehlgeschlagen (wird vom Drucker nicht unterstützt)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "" +#~ "Initialisierung fehlgeschlagen (Nicht unterstützt im reinen LAN-Modus)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "Initialisierung fehlgeschlagen (ohne Remote-Video nicht unterstützt)!" @@ -11903,6 +11225,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Schichtdauer (Protokoll): " +#~ msgid "Layer Time (log)" +#~ msgstr "Schichtdauer (Protokoll)" + #~ msgid "Layers: %d/%d" #~ msgstr "Schichten: %d/%d" @@ -11912,6 +11237,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Schichten: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Schichten und Wände" + #~ msgid "Leaving Seam painting" #~ msgstr "Aufmalen der Naht verlassen" @@ -11924,6 +11252,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Verwaltung" +#~ msgid "Manual" +#~ msgstr "Manuell" + #~ msgid "Max travel detour distance" #~ msgstr "Maximale Umleitstrecke" @@ -11934,6 +11265,12 @@ msgstr "" #~ "Maximale Umleitungsstrecke um das kreuzen einer Wand zu vermeiden. Keine " #~ "Umleitung, wenn die Umleitstrecke größer als dieser Wert ist." +#~ msgid "Media" +#~ msgstr "Medien" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Fehlende LAN IP des Druckers!" + #~ msgid "Modify" #~ msgstr "Ändern" @@ -11949,14 +11286,30 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "KEIN AMS" +#~ msgid "No files" +#~ msgstr "Keine Dateien." + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Im reinen LAN-Modus nicht zugänglich!" + #~ msgid "Not supported." #~ msgstr "Nicht unterstützt" +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Wird von diesem Druckermodell nicht unterstützt!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Hinweis: Die IP und der Zugangscode befinden sich wie folgt auf dem Gerät:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Ein Objekt hat eine leere erste Schicht und kann nicht gedruckt werden. " +#~ "Bitte schneiden Sie den Boden ab oder aktivieren Sie die Stützstrukturen." + #~ msgid "Open &PrusaSlicer" #~ msgstr "Öffne &PrusaSlicer" @@ -12027,6 +11380,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Bitte füllen Sie zuerst den Bericht aus." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Bitte loggen Sie sich aus und melden Sie sich erneut am Drucker an." + #~ msgid "Please upgrade your printer first" #~ msgstr "Bitte aktualisieren Sie zuerst Ihren Drucker" @@ -12063,6 +11419,9 @@ msgstr "" #~ "Drucken Sie einen Turm, um das Material in der Düse nach dem Wechsel zu " #~ "einem neuen Material zu entfernen." +#~ msgid "Print file not found, please slice again" +#~ msgstr "Druckdatei nicht gefunden. Bitte erneut slicen" + #~ msgid "Printer Selection" #~ msgstr "Auswahl der Drucker" @@ -12071,6 +11430,9 @@ msgstr "" #~ "Die Drucker-Firmware unterstützt dieses Material nicht = > AMS-Slot-" #~ "Zuordnung." +#~ msgid "Printing List" +#~ msgstr "Druckliste" + #~ 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 " @@ -12138,9 +11500,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Druckbetttyp auswählen" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Senden an Drucker fehlgeschlagen. Bitte versuchen Sie es erneut." + #~ msgid "Sending" #~ msgstr "Senden" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Senden der G-Code-Datei über den Cloud-Dienst" + +#~ msgid "Set Printable" +#~ msgstr "Druckbar machen" + +#~ msgid "Set Unprintable" +#~ msgstr "Undruckbar machen" + #~ msgid "Set pen size" #~ msgstr "Pinselgröße festlegen" @@ -12310,6 +11684,13 @@ msgstr "" #~ "wurde eine Reparatur versucht, wir empfehlen jedoch, die Ergebnisse zu " #~ "überprüfen oder die Eingabedatei zu reparieren und es erneut zu versuchen." +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "Die Druckdatei überschreitet die maximal zulässige Größe (1 GB). Bitte " +#~ "vereinfachen Sie das Modell und slicen Sie diese erneut." + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -12328,6 +11709,9 @@ msgstr "" #~ "derselbe Typ wie der aktuell ausgewählte physische Drucker. Es wird " #~ "empfohlen, den gleichen Druckertyp auszuwählen und erneut zu slicen.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "Der Regionsparameter ist falsch." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -12356,6 +11740,13 @@ msgstr "" #~ "reinigen, Filament zu sparen und die Druckzeit zu verkürzen. Die Farben " #~ "der Objekte werden als Ergebnis gemischt." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Diese Einstellung legt fest, ob in großen Hohlräumen von Baumstützen " +#~ "Füllmaterial hinzugefügt werden soll." + #~ 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, " @@ -12372,15 +11763,33 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Zeitraffer ohne Werkzeugkopf" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Obere minimale Schalendicke" + +#~ msgid "Top Solid Layers" +#~ msgstr "Obere volle Schichten" + #~ msgid "Translation" #~ msgstr "Übersetzung" +#~ msgid "Tree support with infill" +#~ msgstr "Baumstützen mit Füllung" + #~ msgid "Unable to connect printer" #~ msgstr "Drucker kann nicht verbunden werden" #~ msgid "Unable to create zip file" #~ msgstr "ZIP-Datei kann nicht erstellt werden" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "Zeitüberschreitung beim Upload. Bitte überprüfen Sie das Netzwerk und " +#~ "versuchen Sie es erneut" + +#~ msgid "User authorization timeout" +#~ msgstr "Zeitüberschreitung der Benutzerautorisierung" + #~ msgid "User pause" #~ msgstr "Benutzerpause" @@ -12431,6 +11840,9 @@ msgstr "" #~ "empfehlen wir die folgenden Einstellungen:\n" #~ "0 oberer Z-Abstand, 0 Schnittstellabstand, konzentrisches Muster." +#~ msgid "Wrong Access code" +#~ msgstr "Falscher Zugangscode" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -12477,6 +11889,9 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " zu nahe an anderen, es kommt beim Drucken zu Kollisionen.\n" +#~ msgid " plate %1%:" +#~ msgstr " Druckplatte %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr "" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 769ea7799..7c28179a5 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -1,17 +1,14 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.3.2\n" msgid "Supports Painting" msgstr "Support Painting" @@ -536,8 +533,9 @@ msgstr "Undefined" msgid "%1% was replaced with %2%" msgstr "%1% was replaced with %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" +"The configuration may have been generated by a newer version of Bambu Studio." msgid "Some values have been replaced. Please check them:" msgstr "Some values have been replaced. Please check them:" @@ -564,29 +562,43 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Internal Version" + +msgid "Version" +msgstr "Version" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"Bambu Studio has run out of memory and will close. This may be a bug. Please " +"report this error to Technical Support." msgid "Fatal error" msgstr "Fatal error" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." -msgstr "" +msgstr "A localization error has occurred, and Bambu Studio will close. " msgid "Critical error" msgstr "Critical error" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio got an unhandled exception: %1%" + +msgid "Untitled" +msgstr "Untitled" msgid "Downloading Bambu Network Plug-in" msgstr "Downloading Bambu Network Plug-in" +msgid "Login information expired. Please login again." +msgstr "Login information expired. Please login again." + msgid "Incorrect password" msgstr "Incorrect password" @@ -595,9 +607,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "Connect %s failed! [SN:%s, code=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"Bambu Studio configuration file is not able to be parsed and may be " +"corrupted. Please delete the file and try again." #, c-format, boost-format msgid "" @@ -617,8 +631,8 @@ msgstr "Loading configuration" msgid "Click to download new version in default browser: %s" msgstr "Click to download new version in default browser: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer needs an update" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio needs an update" msgid "This is the newest version." msgstr "This is the newest version." @@ -641,8 +655,8 @@ msgstr "Choose one file (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Choose one file (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "Some presets are modified." @@ -664,15 +678,12 @@ msgid "Open Project" msgstr "Open Project" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu Studio is too low and needs to be updated to the latest " "version before it can be used normally" -msgid "Login information expired. Please login again." -msgstr "Login information expired. Please login again." - msgid "Privacy Policy Update" msgstr "Privacy Policy Update" @@ -724,8 +735,8 @@ msgstr "Open" msgid "Rename" msgstr "Rename" -msgid "Orca Slicer GUI initialization failed" -msgstr "Orca Slicer GUI initialization failed" +msgid "Bambu Studio GUI initialization failed" +msgstr "Bambu Studio GUI initialization failed" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -752,18 +763,6 @@ msgstr "Speed" msgid "Strength" msgstr "Strength" -msgid "Top Solid Layers" -msgstr "Top solid layers" - -msgid "Top Minimum Shell Thickness" -msgstr "Top minimum shell thickness" - -msgid "Bottom Solid Layers" -msgstr "Bottom solid layers" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Bottom minimum shell thickness" - msgid "Ironing" msgstr "Ironing" @@ -821,18 +820,6 @@ msgstr "Edit Text" msgid "Load..." msgstr "Load..." -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "Cube" @@ -842,6 +829,18 @@ msgstr "Cylinder" msgid "Cone" msgstr "Cone" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Height Range Modifier" @@ -857,12 +856,6 @@ msgstr "Set as An Individual Object" msgid "Set as individual objects" msgstr "Set as Individual Objects" -msgid "Fill bed with copies" -msgstr "Fill bed with copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Fill the remaining area of bed with copies of the selected object" - msgid "Printable" msgstr "Printable" @@ -942,8 +935,11 @@ msgstr "Assemble the selected objects into an object with multiple parts" msgid "Assemble the selected objects to an object with single part" msgstr "Assemble the selected objects into an object with single part" -msgid "Assemble the selected parts to a single part" -msgstr "Assemble the selected parts into a single part" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "Along X Axis" @@ -1062,18 +1058,21 @@ msgstr "Set Filament for selected items" msgid "current" msgstr "current" -msgid "Set Unprintable" -msgstr "Set Unprintable" - -msgid "Set Printable" -msgstr "Set Printable" - msgid "Unlock" msgstr "Unlock" msgid "Lock" msgstr "Lock" +msgid "Fill bed with copies" +msgstr "Fill bed with copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Fill the remaining area of bed with copies of the selected object" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Name" @@ -1131,6 +1130,9 @@ msgstr "Loading file" msgid "Error!" msgstr "Error!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Generic" @@ -1313,15 +1315,6 @@ msgstr "Copying multiple cells is not supported." msgid "Outside" msgstr "Outside" -msgid "Auto" -msgstr "Auto" - -msgid "Manual" -msgstr "Manual" - -msgid "No-brim" -msgstr "No-brim" - msgid " " msgstr "" @@ -1337,6 +1330,21 @@ msgstr "Infill density(%)" msgid "Auto Brim" msgstr "Auto Brim" +msgid "Auto" +msgstr "Auto" + +msgid "Outer brim only" +msgstr "Outer brim only" + +msgid "Inner brim only" +msgstr "Inner brim only" + +msgid "Outer and inner brim" +msgstr "Outer and inner brim" + +msgid "No-brim" +msgstr "No-brim" + msgid "Outer wall speed" msgstr "Outer wall speed" @@ -1442,6 +1450,33 @@ msgstr "No printer" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "Failed to connect to the server" + +msgid "Check cloud service status" +msgstr "Check cloud service status" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Failed to connect to cloud service" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Please click on the hyperlink above to view the cloud service status" + +msgid "Failed to connect to the printer" +msgstr "Failed to connect to the printer" + +msgid "Connection to printer failed" +msgstr "Connection to printer failed" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Please check the network connection of the printer and Studio." + +msgid "Connecting..." +msgstr "Connecting..." + msgid "?" msgstr "?" @@ -1451,8 +1486,8 @@ msgstr "Empty" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS filament backup" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS not connected" @@ -1508,11 +1543,11 @@ msgstr "Push new filament into extruder" msgid "Purge old filament" msgstr "Purge old filament" -msgid "Feed new filament from external spool" -msgstr "Feed new filament from external spool" +msgid "Push new filament into the extruder" +msgstr "Push new filament into the extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirm whether the filament has been extruded" +msgid "Grab new filament" +msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1615,54 +1650,59 @@ msgstr "Logging in" msgid "Login failed" msgstr "Login failed" -msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." - -msgid "Failure of printer login" -msgstr "Printer login failure" - -msgid "Failed to get ticket" -msgstr "Failed to get ticket" - -msgid "User authorization timeout" -msgstr "User authorization timeout" - -msgid "Failure of bind" -msgstr "Binding failure" - -msgid "Unknown Failure" -msgstr "Unknown Failure" - msgid "Please check the printer network connection." msgstr "Please check the printer network connection." -msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormal print file data: please slice again." -msgid "Task canceled" -msgstr "Task canceled" +msgid "Task canceled." +msgstr "Task canceled." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network and try again" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Upload task timed out. Please check the network status and try again." msgid "Cloud service connection failed. Please try again." msgstr "Cloud service connection failed. Please try again." -msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgid "Print file not found. please slice again." +msgstr "Print file not found; please slice again." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." -msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgid "Failed to send the print job. Please try again." +msgstr "Failed to send the print job. Please try again." -msgid "Wrong Access code" -msgstr "Wrong Access code" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Failed to upload file to ftp. Please try again." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Check the current status of the Bambu Lab server by clicking on the link " +"above." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"The size of the print file is too large. Please adjust the file size and try " +"again." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Print file not found; please slice it again and send it for printing." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Failed to upload print file via FTP. Please check the network status and try " +"again." msgid "Sending print job over LAN" msgstr "Sending print job over LAN" @@ -1683,24 +1723,16 @@ msgstr "Sending print configuration" msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "Successfully sent. Will automatically jump to the device page in %ss" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "A MicroSD card needs to be inserted before printing via LAN." -msgid "Failed to send the print job. Please try again." -msgstr "Failed to send the print job. Please try again." - -msgid "Send to Printer failed. Please try again." -msgstr "Send to Printer failed. Please try again." - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "Sending G-code file over LAN" -msgid "Sending gcode file through cloud service" -msgstr "Sending G-code file through cloud service" - msgid "Sending gcode file to sdcard" msgstr "Sending G-code file to MicroSD card" @@ -1711,9 +1743,6 @@ msgstr "Successfully sent. Close current page in %s s" msgid "An SD card needs to be inserted before sending to printer." msgstr "A MicroSD card needs to be inserted before sending to printer." -msgid "Please log out and login to the printer again." -msgstr "Please log out and login to the printer again." - msgid "Choose SLA archive:" msgstr "Choose SLA archive:" @@ -1797,17 +1826,18 @@ msgstr "Copyright" msgid "License" msgstr "License" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer is licensed under " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio is licensed under " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is based on " +"Slic3r by Alessandro Ranellucci and the RepRap community" msgid "Libraries" msgstr "Libraries" @@ -1823,14 +1853,12 @@ msgstr "" msgid "About %s" msgstr "About %s" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." @@ -1842,8 +1870,17 @@ msgstr "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." -msgid "Version" -msgstr "Version" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu Studio also referenced some ideas from Cura by Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"There are many parts of the software that come from community contributions, " +"so we're unable to list them one-by-one, and instead, they'll be attributed " +"in the corresponding code comments." msgid "AMS Materials Setting" msgstr "AMS Materials Setting" @@ -1880,8 +1917,11 @@ msgstr "SN" msgid "Setting AMS slot information while printing is not supported" msgstr "Setting AMS slot information while printing is not supported" -msgid "Factors of dynamic flow cali" -msgstr "Factors of dynamic flow cali" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Factor K" @@ -1895,15 +1935,15 @@ msgstr "Setting Virtual slot information while printing is not supported" msgid "Are you sure you want to clear the filament information?" msgstr "Are you sure you want to clear the filament information?" +msgid "You need to select the material type and color first." +msgstr "You need to select the material type and color first." + msgid "Please input a valid value (K in 0~0.5)" msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgid "You need to select the material type and color first." -msgstr "You need to select the material type and color first." - msgid "Other Color" msgstr "Other Color" @@ -2064,12 +2104,21 @@ msgstr "Print with filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print with filament on external spool" -msgid "Filaments replace" -msgstr "Backup Filament" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Group" +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 "" + msgid "AMS Settings" msgstr "AMS Settings" @@ -2369,6 +2418,13 @@ msgstr "" "Layer height too small\n" "It has been reset to 0.2" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Layer height too large\n" +"It has been reset to 0.2" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2585,6 +2641,28 @@ msgstr "Update failed." msgid "Failed to start printing job" msgstr "Failed to start print job" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "default" @@ -2643,9 +2721,6 @@ msgstr "Tool" msgid "Layer Time" msgstr "Layer Time" -msgid "Layer Time (log)" -msgstr "Layer Time (log)" - msgid "Height: " msgstr "Height: " @@ -2730,6 +2805,9 @@ msgstr "Temperature (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumetric flow rate (mm³/s)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "Used filament" @@ -2951,9 +3029,11 @@ msgstr "Size:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicting objects further (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "An object is laid over the boundary of the plate." @@ -3083,6 +3163,9 @@ msgstr "No" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "will be closed before creating a new model. Do you want to continue?" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "Slice plate" @@ -3125,6 +3208,9 @@ msgstr "Show Configuration Folder" msgid "Show Tip of the Day" msgstr "Show Tip of the Day" +msgid "Report issue" +msgstr "Report issue" + msgid "Check for Update" msgstr "Check for Updates" @@ -3323,6 +3409,12 @@ msgstr "Show &Labels" msgid "Show object labels in 3D scene" msgstr "Show object labels in 3D scene" +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Show object overhang highlight in 3D scene" + msgid "Preferences" msgstr "Preferences" @@ -3356,9 +3448,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3377,9 +3466,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "3D Models" - msgid "&Open G-code" msgstr "&Open G-code" @@ -3490,29 +3576,29 @@ msgstr "Synchronization" msgid "Initialize failed (No Device)!" msgstr "Initialization failed (No Device)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + msgid "Initialize failed (No Camera Device)!" msgstr "Initialization failed (No Camera Device)!" -msgid "Initializing..." -msgstr "Initializing..." - -msgid "Loading..." -msgstr "Loading..." - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initialization failed (Not supported in LAN-only mode)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "Printer is busy downloading; please wait for the download to finish." +msgid "Loading..." +msgstr "Loading..." + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Initialization failed (Not accessible in LAN-only mode)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Initialization failed (Missing LAN IP of printer)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialization failed (Not supported by printer)!" +msgid "Initializing..." +msgstr "Initializing..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3543,9 +3629,12 @@ msgstr "Downloading Virtual Camera Tools" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"Another virtual camera is running.\n" +"Bambu Studio supports only a single virtual camera.\n" +"Do you want to stop this virtual camera?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3591,6 +3680,9 @@ msgstr "Video" msgid "Switch to video files." msgstr "Switch to video files." +msgid "Switch to 3mf model files." +msgstr "Switch to 3mf model files." + msgid "Delete selected files from printer." msgstr "Delete selected files from printer." @@ -3609,12 +3701,6 @@ msgstr "Batch manage files." msgid "No printers." msgstr "No printers." -msgid "Not supported by this model of printer!" -msgstr "Not supported by this model of printer!" - -msgid "Connecting..." -msgstr "Connecting..." - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "Connection failed [%d]!" @@ -3622,22 +3708,45 @@ msgstr "Connection failed [%d]!" msgid "Loading file list..." msgstr "Loading file list..." -msgid "No files" -msgstr "No files" - -msgid "Not accessible in LAN-only mode!" -msgstr "Not accessible in LAN-only mode!" - -msgid "Missing LAN ip of printer!" -msgstr "Missing LAN IP of printer!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "No files [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "Load failed [%d]" +msgstr "Load failed [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Delete files" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Do you want to delete the file '%s' from printer?" + +msgid "Delete file" +msgstr "Delete file" + +msgid "Fetching model infomations ..." +msgstr "Fetching model information..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Failed to fetch model infomation from printer." + +msgid "Failed to parse model infomations." +msgstr "Failed to parse model infomation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." @@ -3658,6 +3767,12 @@ msgstr "Download finished" msgid "Downloading %d%%..." msgstr "Downloading %d%%..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Speed:" @@ -3679,15 +3794,6 @@ msgstr "3Dconnexion settings" msgid "Swap Y/Z axes" msgstr "Swap Y/Z axes" -msgid "Camera" -msgstr "Camera" - -msgid "SD Card" -msgstr "MicroSD Card" - -msgid "Camera Setting" -msgstr "Camera Setting" - msgid "Printing Progress" msgstr "Printing progress" @@ -3703,9 +3809,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Layer: N/A" +msgid "Immediately score" +msgstr "Immediately score" + msgid "Clear" msgstr "Clear" +msgid "Camera" +msgstr "Camera" + +msgid "SD Card" +msgstr "MicroSD Card" + +msgid "Camera Setting" +msgstr "Camera Setting" + msgid "Control" msgstr "Control" @@ -3739,31 +3857,14 @@ msgstr "No MicroSD Card" msgid "SD Card Abnormal" msgstr "MicroSD Card Abnormal" -msgid "Printing List" -msgstr "Printing list" - msgid "Cancel print" msgstr "Cancel print" msgid "Are you sure you want to cancel this print?" msgstr "Are you sure you want to cancel this print?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Disconnected from printer [%s] due to LAN mode being disabled. Please " -"reconnect the printer by logging in with your user account." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Disconnected from printer [%s] due to LAN mode being enabled. Please " -"reconnect the printer by inputting the Access Code which can be gotten from " -"the printer screen." +msgid "Done" +msgstr "Done" msgid "Downloading..." msgstr "Downloading..." @@ -3779,6 +3880,12 @@ msgstr "In Cloud Slicing Queue, there are %s tasks ahead of you." msgid "Layer: %s" msgstr "Layer: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Please give a score for your favorite Bambu Market model." + +msgid "Score" +msgstr "Score" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Layer: %d/%d" @@ -3820,24 +3927,15 @@ msgstr "Ludicrous" msgid "Can't start this without SD card." msgstr "Can't start without MicroSD card." -msgid "Failed to connect to the server" -msgstr "Failed to connect to the server" - msgid "Status" msgstr "Status" -msgid "Media" -msgstr "Media" - msgid "Update" msgstr "Update" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Failed to connect to the printer" - msgid "Don't show again" msgstr "Don't show again" @@ -4063,12 +4161,9 @@ msgstr "Filament settings" msgid "Printer settings" msgstr "Printer settings" -msgid "Untitled" -msgstr "Untitled" - #, boost-format -msgid " plate %1%:" -msgstr " plate %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Invalid name, the following characters are not allowed:" @@ -4101,7 +4196,7 @@ msgid "Connection" msgstr "Connection" msgid "Bed type" -msgstr "Bed type" +msgstr "Plate type" msgid "Flushing volumes" msgstr "Flushing volumes" @@ -4150,9 +4245,9 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "There are no compatible filaments, and sync is not performed." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, boost-format @@ -4207,8 +4302,10 @@ msgstr "Load 3mf" msgid "The Config can not be loaded." msgstr "The Config cannot be loaded." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" +"The 3mf was generated by an old version of Bambu Studio, loading geometry " +"data only." #, c-format, boost-format msgid "" @@ -4543,8 +4640,10 @@ msgstr "Tips:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" +"The \"Fix Model\" feature is currently only on Windows. Please repair the " +"model in Bambu Studio (Windows) or CAD software." #, c-format, boost-format msgid "" @@ -4607,9 +4706,6 @@ msgstr "Others" msgid "Login Region" msgstr "Login Region" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Metric" @@ -4635,12 +4731,6 @@ msgstr "Show \"Tip of the day\" notification after start" msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Presets" @@ -4659,33 +4749,39 @@ msgstr "System Sync" msgid "Clear my choice on the unsaved presets." msgstr "Clear my choice on the unsaved presets." -msgid "Associate files to OrcaSlicer" -msgstr "Associate files to Orca Slicer" +msgid "Associate files to BambuStudio" +msgstr "Associate files to Bambu Studio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Associate .3mf files to Orca Slicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Associate .3mf files to Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .3mf " +"If enabled, this sets Bambu Studio as the default application to open .3mf " "files." -msgid "Associate .stl files to OrcaSlicer" -msgstr "Associate .stl files to Orca Slicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Associate .stl files to Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .stl " +"If enabled, this sets Bambu Studio as the default application to open .stl " "files." -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Associate .step/.stp files to Orca Slicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Associate .step/.stp files to Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .step " +"If enabled, this sets Bambu Studio as the default application to open .step " "files." +msgid "Online Models" +msgstr "Online Models" + +msgid "Show online staff-picked models on the home page" +msgstr "Show online staff-picked models on the home page" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -4719,6 +4815,12 @@ msgstr "Dark Mode" msgid "Enable Dark mode" msgstr "Enable Dark Mode" +msgid "Develop mode" +msgstr "Developer mode" + +msgid "Skip AMS blacklist check" +msgstr "Skip AMS blacklist check" + msgid "Home page and daily tips" msgstr "Home page and daily tips" @@ -4755,11 +4857,14 @@ msgstr "Other" msgid "Mouse wheel reverses when zooming" msgstr "Reverse scroll direction while zooming" -msgid "Develop mode" -msgstr "Developer mode" +msgid "Enable SSL(MQTT)" +msgstr "Enable SSL(MQTT)" -msgid "Dump video" -msgstr "Dump video" +msgid "Enable SSL(FTP)" +msgstr "Enable SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internal developer mode" msgid "Log Level" msgstr "Log Level" @@ -4845,42 +4950,39 @@ msgstr "Add/Remove materials" msgid "Add/Remove printers" msgstr "Add/Remove printers" +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Print sequence" -msgid "Plate name" -msgstr "Plate name" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Same as Global Plate Type" + msgid "Same as Global Bed Type" msgstr "Same as Global Plate Type" -msgid "Cool Plate" -msgstr "Cool Plate" - -msgid "Engineering Plate" -msgstr "Engineering Plate" - -msgid "High Temp Plate" -msgstr "High Temp Plate" - -msgid "Textured PEI Plate" -msgstr "Textured PEI Plate" - msgid "By Layer" msgstr "By Layer" msgid "By Object" msgstr "By Object" +msgid "Plate name" +msgstr "Plate name" + msgid "Accept" msgstr "Accept" @@ -4993,11 +5095,8 @@ msgstr "For \"%1%\", add \"%2%\" as a new preset" msgid "Simply switch to \"%1%\"" msgstr "Simply switch to \"%1%\"" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Task canceled" msgid "(LAN)" msgstr "(LAN)" @@ -5008,6 +5107,9 @@ msgstr "My Device" msgid "Other Device" msgstr "Other Device" +msgid "Online" +msgstr "Online" + msgid "Input access code" msgstr "Input access code" @@ -5017,12 +5119,18 @@ msgstr "Can't find devices?" msgid "Log out successful." msgstr "Log out successful." +msgid "Offline" +msgstr "Offline" + msgid "Busy" msgstr "Busy" msgid "Bambu Cool Plate" msgstr "Bambu Cool Plate" +msgid "PLA Plate" +msgstr "PLA Plate" + msgid "Bamabu Engineering Plate" msgstr "Bambu Engineering Plate" @@ -5038,12 +5146,24 @@ msgstr "Refresh" msgid "Bed Leveling" msgstr "Bed leveling" -msgid "Flow Calibration" -msgstr "Flow calibration" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Can't connect to the printer" msgid "send completed" msgstr "Send complete" +msgid "Error code" +msgstr "Error code" + +msgid "Check the status of current system services" +msgstr "Check the status of current system services" + +msgid "Printer local connection failed, please try again." +msgstr "Printer local connection failed; please try again." + msgid "No login account, only printers in LAN mode are displayed" msgstr "No login account, only printers in LAN mode are displayed" @@ -5121,6 +5241,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "A MicroSD card needs to be inserted before printing." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "A MicroSD card needs to be inserted to record a timelapse." @@ -5168,9 +5291,27 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "Preparing print job" +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormal print file data. Please slice again" + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "Modifying the device name" @@ -5184,18 +5325,108 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "A MicroSD card needs to be inserted before sending to the printer SD card." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "" +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "The printer is required to be on the same LAN as Bambu Studio." msgid "The printer does not support sending to printer SD card." msgstr "The printer does not support sending to printer MicroSD card." +msgid "Failed to create socket" +msgstr "Failed to create socket" + +msgid "Failed to connect socket" +msgstr "Failed to connect socket" + +msgid "Failed to publish login request" +msgstr "Failed to publish login request" + +msgid "Get ticket from device timeout" +msgstr "Timeout getting ticket from device" + +msgid "Get ticket from server timeout" +msgstr "Timeout getting ticket from server" + +msgid "Failed to post ticket to server" +msgstr "Failed to post ticket to server" + +msgid "Failed to parse login report reason" +msgstr "Failed to parse login report reason" + +msgid "Receive login report timeout" +msgstr "Receive login report timeout" + +msgid "Unknown Failure" +msgstr "Unknown Failure" + msgid "Log in printer" msgstr "Log in printer" msgid "Would you like to log in this printer with current account?" msgstr "Would you like to log in this printer with the current account?" +msgid "Check the reason" +msgstr "Check the reason" + +msgid "Read and accept" +msgstr "Read and accept" + +msgid "Terms and Conditions" +msgstr "Terms and Conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"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 " +"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." + +msgid "and" +msgstr "and" + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "We ask for your help to improve everyone's printer" + +msgid "Statement about User Experience Improvement Program" +msgstr "Statement about User Experience Improvement Program" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"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 " +"same principle and uses machine learning to improve its performance from the " +"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." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Statement on User Experience Improvement Plan" + msgid "Log in successful." msgstr "Log in successful." @@ -5310,6 +5541,9 @@ msgstr "Walls" msgid "Top/bottom shells" msgstr "Top/bottom shells" +msgid "Sparse infill" +msgstr "Sparse infill" + msgid "Initial layer speed" msgstr "First layer speed" @@ -5328,12 +5562,6 @@ msgstr "" "expressed as a percentage of line width. 0 speed means no slowing down for " "the overhang degree range and wall speed is used" -msgid "Bridge" -msgstr "Bridge" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "Travel speed" @@ -5358,8 +5586,8 @@ msgstr "Special mode" msgid "G-code output" msgstr "G-code output" -msgid "Post-processing Scripts" -msgstr "Post-processing Scripts" +msgid "Post-processing scripts" +msgstr "Post-processing scripts" msgid "Frequent" msgstr "Frequent" @@ -5412,8 +5640,8 @@ msgstr "Nozzle" msgid "Nozzle temperature when printing" msgstr "Nozzle temperature when printing" -msgid "Cool plate" -msgstr "Cool plate" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5422,8 +5650,8 @@ msgstr "" "This is the bed temperature when the cool plate is installed. A value of 0 " "means the filament does not support printing on the Cool Plate." -msgid "Engineering plate" -msgstr "Engineering plate" +msgid "Engineering Plate" +msgstr "Engineering Plate" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " @@ -5432,6 +5660,9 @@ msgstr "" "This is the bed temperature when the engineering plate is installed. A value " "of 0 means the filament does not support printing on the Engineering Plate." +msgid "High Temp Plate" +msgstr "High Temp Plate" + msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" @@ -5440,6 +5671,9 @@ msgstr "" "value of 0 means the filament does not support printing on the High Temp " "Plate." +msgid "Textured PEI Plate" +msgstr "Textured PEI Plate" + msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" @@ -5495,12 +5729,6 @@ msgstr "Filament end G-code" msgid "Printable space" msgstr "Printable space" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "Extruder Clearance" @@ -5549,21 +5777,9 @@ msgstr "Jerk limitation" msgid "Layer height limits" msgstr "Layer height limits" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "Retraction when switching material" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "Detached" @@ -6009,9 +6225,6 @@ msgstr "Gizmo SLA support points" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM paint-on seam" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "Plater" @@ -6075,9 +6288,6 @@ msgstr "Horizontal slider - Move active thumb Right" msgid "On/Off one layer mode of the vertical slider" msgstr "On/Off one layer mode of the vertical slider" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "Move slider 5x faster" @@ -6095,28 +6305,28 @@ msgid "Network plug-in update" msgstr "Network plug-in update" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" +"Click OK to update the Network plug-in the next time Bambu Studio launches." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "A new network plug-in (%s) is available. Do you want to install it?" -msgid "New version of Orca Slicer" -msgstr "New version of Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "New version of Bambu Studio" msgid "Don't remind me of this version again" msgstr "Don't remind me about this version again." -msgid "Done" -msgstr "Done" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN Connection Failed (Sending print file)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" +"Step 1, please confirm that Bambu Studio and your printer are on the same " +"LAN." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6247,6 +6457,10 @@ msgstr "Repair canceled" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Copying of file %1% to %2% failed: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Copying directory %1% to %2% failed: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "Please check any unsaved changes before updating the configuration." @@ -6257,11 +6471,11 @@ msgid "Open G-code file:" msgstr "Open G-code file:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have an empty initial layer and can't be printed. " +"Please cut the bottom or enable supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6304,9 +6518,6 @@ msgstr "Outer wall" msgid "Overhang wall" msgstr "Overhang wall" -msgid "Sparse infill" -msgstr "Sparse infill" - msgid "Internal solid infill" msgstr "Internal solid infill" @@ -6316,15 +6527,12 @@ msgstr "Top surface" msgid "Bottom surface" msgstr "Bottom surface" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Bridge" msgid "Gap infill" msgstr "Gap infill" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support interface" @@ -6551,22 +6759,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Layer height cannot exceed nozzle diameter." -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Plate %d: %s does not support filament %s" @@ -6804,7 +6996,7 @@ msgstr "" "the Textured PEI Plate." msgid "Bed types supported by the printer" -msgstr "Bed types supported by the printer" +msgstr "Plate types supported by the printer" msgid "First layer print sequence" msgstr "" @@ -6877,8 +7069,8 @@ msgstr "" "how much width of the line without support from lower layer. 0% means " "forcing cooling for all outer wall no matter the overhang degree." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "Bridge direction" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6889,12 +7081,6 @@ msgstr "" "automatically. Otherwise the provided angle will be used for external " "bridges. Use 180° for zero angle." -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "Bridge flow" @@ -6913,18 +7099,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -6932,39 +7110,23 @@ msgstr "Only one wall on top surfaces" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Use only one wall on flat top surfaces, to give more space to the top infill " -"pattern" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "All top surfaces" + +msgid "Topmost surface" +msgstr "Topmost surface only" + msgid "Only one wall on first layer" msgstr "Only one wall on first layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Use only one wall on the first layer of models" msgid "Slow down for overhang" msgstr "Slow down for overhangs" @@ -6974,25 +7136,11 @@ msgstr "" "Enable this option to slow down when printing overhangs. The speeds for " "different overhang percentages are set below." -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "This is the speed for bridges and 100% overhang walls." - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "This is the speed for bridges and 100% overhang walls." msgid "Brim width" msgstr "Brim width" @@ -7010,18 +7158,6 @@ msgstr "" "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." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "Outer brim only" - -msgid "Inner brim only" -msgstr "Inner brim only" - -msgid "Outer and inner brim" -msgstr "Outer and inner brim" - msgid "Brim-object gap" msgstr "Brim-object gap" @@ -7032,30 +7168,6 @@ msgstr "" "This creates a gap between the innermost brim line and the object and can " "make the brim easier to remove." -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "Compatible machine" @@ -7192,11 +7304,11 @@ msgid "Internal bridge support thickness" msgstr "Internal bridge support thickness" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -7245,10 +7357,8 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "Line width of outer wall" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7257,23 +7367,6 @@ msgstr "" "This is the printing speed for the outer walls of parts. These are generally " "printed slower than inner walls for higher quality." -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "Order of inner wall/outer wall/infill" @@ -7322,6 +7415,16 @@ msgstr "" "Clearance radius around extruder: used for collision avoidance in by-object " "printing." +msgid "Max Radius" +msgstr "Max Radius" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." + msgid "Extruder Color" msgstr "Extruder Color" @@ -7347,22 +7450,28 @@ msgstr "" "1.05. You may be able to tune this value to get a nice flat surface if there " "is slight overflow or underflow." +msgid "Object flow ratio" +msgstr "Object flow ratio" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "The flow ratio set by object; the meaning is the same as flow ratio." + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "Default line width for line widths set to 0" + msgid "Keep fan always on" msgstr "Keep fan always on" @@ -7423,14 +7532,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "Filament load time" @@ -7454,18 +7555,6 @@ msgstr "" "Filament diameter is used to calculate extrusion variables in G-code, so it " "is important that this is accurate and precise." -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "Density" @@ -7577,54 +7666,6 @@ msgstr "Support Cubic" msgid "Lightning" msgstr "Lightning" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (no open anchors)" - -msgid "1000 (unlimited)" -msgstr "1000 (unlimited)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7635,12 +7676,7 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "Acceleration of outer wall: using a lower value can improve quality." -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7648,10 +7684,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7674,29 +7707,33 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "Line width of first layer" + msgid "Initial layer height" msgstr "First layer height" @@ -7717,21 +7754,6 @@ msgstr "First layer infill" msgid "Speed of solid infill part of initial layer" msgstr "This is the speed for solid infill parts of the first layer." -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -#, fuzzy -msgid "Number of slow layers" -msgstr "This is the number of top interface layers." - -msgid "" -"The first few layers are printed slower than normal. The speed is gradually " -"increased in a linear fashion over the specified number of layers." -msgstr "" - msgid "Initial layer nozzle temperature" msgstr "First layer nozzle temperature" @@ -7741,24 +7763,6 @@ msgstr "Nozzle temperature for printing the first layer with this filament" msgid "Full fan speed at layer" msgstr "Full fan speed at layer" -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." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7802,12 +7806,9 @@ msgstr "" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "Layers and Perimeters" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -7866,83 +7867,21 @@ msgstr "Stainless steel" msgid "Brass" msgstr "Brass" -msgid "Nozzle HRC" -msgstr "Nozzle HRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"The nozzle's hardness. Zero means no checking for nozzle hardness during " -"slicing." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "Enable this option if the machine has an auxiliary part cooling fan" -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 comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "G-code flavor" msgid "What kind of gcode the printer is compatible with" msgstr "What kind of G-code the printer is compatible with." -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -7955,13 +7894,66 @@ msgstr "" "Automatically combine sparse infill of several layers to print together in " "order to reduce time. Walls are still printed with original layer height." +msgid "Length of sparse infill anchor" +msgstr "Length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring " +"perimeters connected to a single infill line." + +msgid "0 (no open anchors)" +msgstr "0 (no open anchors)" + +msgid "1000 (unlimited)" +msgstr "1000 (unlimited)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximum length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." + +msgid "0 (not anchored)" +msgstr "0 (not anchored)" + msgid "Filament to print internal sparse infill." msgstr "This is the filament for printing internal sparse infill." -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "Line width of internal sparse infill" +msgstr "Line width of internal sparse infill" msgid "Infill/Wall overlap" msgstr "Infill/wall overlap" @@ -7977,15 +7969,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "This is the speed for internal sparse infill." -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "Ironing type" @@ -7999,12 +7982,6 @@ msgstr "" msgid "No ironing" msgstr "No ironing" -msgid "Top surfaces" -msgstr "All top surfaces" - -msgid "Topmost surface" -msgstr "Topmost surface only" - msgid "All solid layer" msgstr "All solid layers" @@ -8260,47 +8237,16 @@ msgstr "Filename format" msgid "User can self-define the project file name when export" msgstr "Users can decide project file names when exporting." -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "Detect overhang walls" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"This detects the overhang percentage relative to line width and uses a " -"different speed to print. For 100%% overhang, bridging speed is used." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "Line width of inner walls" msgid "Speed of inner wall" msgstr "This is the speed for inner walls." @@ -8308,13 +8254,19 @@ msgstr "This is the speed for inner walls." msgid "Number of walls of every layer" msgstr "This is the number of walls per layer." +msgid "Post-processing Scripts" +msgstr "Post-processing Scripts" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"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 via the absolute path to the G-code file as the first " +"argument, and variables of settings can also be read" msgid "Raft contact Z distance" msgstr "Raft contact Z distance" @@ -8412,8 +8364,8 @@ msgstr "" "hitting the print when traveling more. Using spiral lines to lift z can " "prevent stringing." -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Z Hop Type" msgid "Slope" msgstr "Slope" @@ -8421,53 +8373,10 @@ msgstr "Slope" msgid "Spiral" msgstr "Spiral" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8486,17 +8395,6 @@ msgstr "" "The speed for reloading filament into the extruder after a retraction; " "setting this to 0 means that it will be the same speed as the retraction." -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "Seam position" @@ -8515,39 +8413,14 @@ msgstr "Back" msgid "Random" msgstr "Random" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8579,12 +8452,6 @@ msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" "This is the number of loops for the skirt. 0 means the skirt is disabled." -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8603,10 +8470,11 @@ msgstr "" "Sparse infill areas which are smaller than this threshold value are replaced " "by internal solid infill." -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Line width of internal solid infill" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" @@ -8774,10 +8642,8 @@ msgstr "" "Filament to print support bases and rafts. \"Default\" means no specific " "filament for support, and current filament is used" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "Line width of support" msgid "Interface use loop pattern" msgstr "Loop pattern interface" @@ -8934,28 +8800,6 @@ msgid "" msgstr "" "This setting determines the distance between neighboring tree support nodes." -msgid "Adaptive layer height" -msgstr "Adaptive layer height" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "Tree support brim width" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "Tree support branch diameter" @@ -8968,15 +8812,11 @@ msgstr "Tree support wall loops" msgid "This setting specify the count of walls around tree support" msgstr "This setting specifies the wall count around tree support." -msgid "Tree support with infill" -msgstr "Tree support with infill" +msgid "Tree support brim width" +msgstr "Tree support brim width" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"This setting specifies whether to add infill inside large hollows of tree " -"support." +msgid "The brim width around tree support. 0 means auto." +msgstr "The brim width around tree support. 0 means auto." msgid "Chamber temperature" msgstr "" @@ -9016,10 +8856,8 @@ msgstr "" "This G-code is inserted when filament is changed, including T commands to " "trigger tool change." -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Line width for top surfaces" msgid "Speed of top surface infill which is solid" msgstr "This is the speed for solid top surface infill." @@ -9058,6 +8896,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "This is the speed at which traveling is done." +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Wipe while retracting" @@ -9169,24 +9015,6 @@ msgstr "" "contours smaller. This function is used to adjust sizes slightly when " "objects have assembly issues." -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9453,15 +9281,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "Output directory" @@ -9608,140 +9427,399 @@ msgstr "The file contains invalid vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "This OBJ file couldn't be read because it's empty." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" -msgstr "Finished" - -msgid "Unable to perform boolean operation on selected parts" +msgid "We would use Lidar to read the calibration result" msgstr "" -msgid "Mesh Boolean" +msgid "Prev" msgstr "" -msgid "Union" +msgid "Recalibration" msgstr "" -msgid "Difference" +msgid "Calibrate" msgstr "" -msgid "Intersection" +msgid "Finish" +msgstr "Finish" + +msgid "Wiki" msgstr "" -msgid "Source Volume" +msgid "How to use calibration result?" msgstr "" -msgid "Tool Volume" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Subtract from" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Subtract with" +msgid "Calibration not supported" msgstr "" -msgid "selected" +msgid "Flow Dynamics" msgstr "" -msgid "Part 1" +msgid "Flow Rate" msgstr "" -msgid "Part 2" +msgid "Max Volumetric Speed" msgstr "" -msgid "Delete input" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "Send to print" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "The name cannot be empty." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Failed" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "Uploading" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Plate Type" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9800,7 +9878,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9855,48 +9933,120 @@ msgstr "" msgid "mm/mm" msgstr "" -#, fuzzy -msgid "Physical Printer" -msgstr "Printer" - -msgid "Print Host upload" +msgid "Network lookup" msgstr "" -msgid "Test" +msgid "Address" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Hostname" msgstr "" -msgid "Success!" +msgid "Service name" msgstr "" -msgid "Refresh Printers" +msgid "OctoPrint version" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Searching for devices" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Finished" +msgstr "Finished" + +msgid "Send to print" msgstr "" -msgid "Open CA certificate file" +msgid "Upload to Printer Host with the following filename:" +msgstr "" + +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Uploading" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -10014,17 +10164,26 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"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 Bambu Studio. Read more in the documentation." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEP\n" +"Did you know that you can improve your print quality by slicing a STEP file " +"instead of an STL?\n" +"Bambu Studio supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10158,588 +10317,32 @@ msgstr "" "density to improve the strength of the model?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "The configuration may have been generated by a newer version of Bambu " -#~ "Studio." +#~ "Use only one wall on flat top surfaces, to give more space to the top " +#~ "infill pattern" -#~ msgid "Internal Version" -#~ msgstr "Internal Version" +#~ msgid "Nozzle HRC" +#~ msgstr "Nozzle HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "Bambu Studio has run out of memory and will close. This may be a bug. " -#~ "Please report this error to Technical Support." +#~ "The nozzle's hardness. Zero means no checking for nozzle hardness during " +#~ "slicing." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "A localization error has occurred, and Bambu Studio will close. " - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "BambuStudio got an unhandled exception: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Bambu Studio configuration file is not able to be parsed and may be " -#~ "corrupted. Please delete the file and try again." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio needs an update" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Choose one file (.gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "The version of Bambu Studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Bambu Studio GUI initialization failed" - -#~ msgid "Check cloud service status" -#~ msgstr "Check cloud service status" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Failed to connect to cloud service" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Please click on the hyperlink above to view the cloud service status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connection to printer failed" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Please check the network connection of the printer and Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Push new filament into the extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Grab new filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormal print file data: please slice again." - -#~ msgid "Task canceled." -#~ msgstr "Task canceled." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Upload task timed out. Please check the network status and try again." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Print file not found; please slice again." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Failed to upload file to ftp. Please try again." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Check the current status of the Bambu Lab server by clicking on the link " -#~ "above." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Print file not found; please slice it again and send it for printing." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Failed to upload print file via FTP. Please check the network status and " -#~ "try again." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio is licensed under " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is based on " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "Bambu Studio also referenced some ideas from Cura by Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "There are many parts of the software that come from community " -#~ "contributions, so we're unable to list them one-by-one, and instead, " -#~ "they'll be attributed in the corresponding code comments." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Layer height too large\n" -#~ "It has been reset to 0.2" - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicting objects further (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Report issue" - -#~ msgid "Show &Overhang" -#~ msgstr "Show &Overhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Show object overhang highlight in 3D scene" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initialization failed (Device connection not ready)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Switch to 3mf model files." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Load failed [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Do you want to delete the file '%s' from printer?" - -#~ msgid "Delete file" -#~ msgstr "Delete file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Fetching model information..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Failed to fetch model infomation from printer." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Failed to parse model infomation" - -#~ msgid "Immediately score" -#~ msgstr "Immediately score" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Please give a score for your favorite Bambu Market model." - -#~ msgid "Score" -#~ msgstr "Score" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "The 3mf was generated by an old version of Bambu Studio, loading geometry " -#~ "data only." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "The \"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model in Bambu Studio (Windows) or CAD software." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Associate files to Bambu Studio" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Associate .3mf files to Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "If enabled, this sets Bambu Studio as the default application to " -#~ "open .3mf files." - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Associate .stl files to Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "If enabled, this sets Bambu Studio as the default application to open ." -#~ "stl files." - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Associate .step/.stp files to Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "If enabled, this sets Bambu Studio as the default application to open ." -#~ "step files." - -#~ msgid "Online Models" -#~ msgstr "Online Models" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Show online staff-picked models on the home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Skip AMS blacklist check" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Enable SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Enable SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internal developer mode" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Same as Global Plate Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Can't connect to the printer" - -#~ msgid "Error code" -#~ msgstr "Error code" - -#~ msgid "Check the status of current system services" -#~ msgstr "Check the status of current system services" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Printer local connection failed; please try again." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "The name length exceeds the limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "The printer is required to be on the same LAN as Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Failed to create socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Failed to connect socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Failed to publish login request" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout getting ticket from device" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout getting ticket from server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Failed to post ticket to server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Failed to parse login report reason" - -#~ msgid "Receive login report timeout" -#~ msgstr "Receive login report timeout" - -#~ msgid "Check the reason" -#~ msgstr "Check the reason" - -#~ msgid "Read and accept" -#~ msgstr "Read and accept" - -#~ msgid "Terms and Conditions" -#~ msgstr "Terms and Conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "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 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." - -#~ msgid "and" -#~ msgstr "and" - -#~ msgid "Privacy Policy" -#~ msgstr "Privacy Policy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "We ask for your help to improve everyone's printer" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Statement about User Experience Improvement Program" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "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 same principle and uses machine learning to improve its performance " -#~ "from the 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." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Statement on User Experience Improvement Plan" - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-processing scripts" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Click OK to update the Network plug-in the next time Bambu Studio " -#~ "launches." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "New version of Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Step 1, please confirm that Bambu Studio and your printer are on the same " -#~ "LAN." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "Copying directory %1% to %2% failed: %3%" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "The following object(s) have an empty initial layer and can't be printed. " -#~ "Please cut the bottom or enable supports." - -#~ msgid "Bridge direction" -#~ msgstr "Bridge direction" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Use only one wall on the first layer of models" - -#~ msgid "Line width of outer wall" -#~ msgstr "Line width of outer wall" - -#~ msgid "Max Radius" -#~ msgstr "Max Radius" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." - -#~ msgid "Object flow ratio" -#~ msgstr "Object flow ratio" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "The flow ratio set by object; the meaning is the same as flow ratio." - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "Default line width for line widths set to 0" - -#~ msgid "Line width of initial layer" -#~ msgstr "Line width of first layer" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximum length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (not anchored)" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Line width of internal sparse infill" - -#~ msgid "Line width of inner wall" -#~ msgstr "Line width of inner walls" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "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 via the absolute path to the G-code " -#~ "file as the first argument, and variables of settings can also be read" - -#~ msgid "Z Hop Type" -#~ msgstr "Z Hop Type" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Line width of internal solid infill" - -#~ msgid "Line width of support" -#~ msgstr "Line width of support" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "The brim width around tree support. 0 means auto." - -#~ msgid "Line width for top surfaces" -#~ msgstr "Line width for top surfaces" - -#~ msgid "Finish" -#~ msgstr "Finish" - -#~ msgid "Failed" -#~ msgstr "Failed" - -#~ msgid "Plate Type" -#~ msgstr "Plate Type" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "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 Bambu Studio. Read more in the documentation." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" +#~ "This detects the overhang percentage relative to line width and uses a " +#~ "different speed to print. For 100%% overhang, bridging speed is used." #~ msgid "Pause Print" #~ msgstr "Pause Print" @@ -10750,12 +10353,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Delete Pause Print" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Factors of dynamic flow cali" + #~ msgid "\\u2103" #~ msgstr "\\u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Flow calibration" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -10778,6 +10387,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "3D Models" + #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materials Setting" @@ -10796,9 +10408,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Actual Volume = Flushing Volume * Multiplier" +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptive layer height" + #~ msgid "Add Custom Printer" #~ msgstr "Add Custom Printer" +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -10826,6 +10444,9 @@ msgstr "" #~ "This may cause decline in the quality of overhang surfaces when printing " #~ "quickly.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Assemble the selected parts into a single part" + #~ msgid "Auto arrange" #~ msgstr "Auto Arrange" @@ -10873,6 +10494,12 @@ msgstr "" #~ "filament.\n" #~ "This may cause a nozzle blockage or print failure" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Bottom minimum shell thickness" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Bottom solid layers" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -10918,6 +10545,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Consumption" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Confirm whether the filament has been extruded" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate/PLA Plate" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + #~ msgid "Creating" #~ msgstr "Creating" @@ -10952,6 +10588,22 @@ msgstr "" #~ "Yes - Enable Arachne and disable overhang slowing down\n" #~ "No - Don't use Arachne for this print" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Disconnected from printer [%s] due to LAN mode being disabled. Please " +#~ "reconnect the printer by logging in with your user account." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Disconnected from printer [%s] due to LAN mode being enabled. Please " +#~ "reconnect the printer by inputting the Access Code which can be gotten " +#~ "from the printer screen." + #~ msgid "Display printable box" #~ msgstr "Display printable box" @@ -11006,6 +10658,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Downloading Bambu Network plug-in" +#~ msgid "Dump video" +#~ msgstr "Dump video" + #~ msgid "Edit plate setitngs" #~ msgstr "Edit plate settings" @@ -11022,6 +10677,9 @@ msgstr "" #~ "Please note that this option only takes effect if there is no prime tower " #~ "generated on the current plate." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + #~ msgid "Enter a search term" #~ msgstr "Enter a search term" @@ -11069,12 +10727,27 @@ msgstr "" #~ "Failed to connect to the printer through LAN. Please enter the correct " #~ "printer IP address and access code." +#~ msgid "Failed to get ticket" +#~ msgstr "Failed to get ticket" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Failed to parse login report reason" +#~ msgid "Failed uploading print file" +#~ msgstr "Failed uploading print file" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "Failed uploading print file. Please enter IP address again." +#~ msgid "Failure of bind" +#~ msgstr "Binding failure" + +#~ msgid "Failure of printer login" +#~ msgstr "Printer login failure" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Feed new filament from external spool" + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -11136,6 +10809,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Filaments selection" +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + #~ msgid "Fix model locally" #~ msgstr "Fix model locally" @@ -11223,6 +10899,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Initalization failed [%d]!" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "Initialization failed (Not supported by printer)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Initialization failed (Not supported in LAN-only mode)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "Initialization failed (Not supported without remote video tunnel)!" @@ -11257,6 +10939,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Layer Time(log): " +#~ msgid "Layer Time (log)" +#~ msgstr "Layer Time (log)" + #~ msgid "Layers: %d/%d" #~ msgstr "Layers: %d/%d" @@ -11266,6 +10951,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Layers: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Layers and Perimeters" + #~ msgid "Leaving Seam painting" #~ msgstr "Leaving Seam Painting" @@ -11278,6 +10966,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Management" +#~ msgid "Manual" +#~ msgstr "Manual" + #~ msgid "Max travel detour distance" #~ msgstr "Max travel detour distance" @@ -11288,6 +10979,12 @@ msgstr "" #~ "Maximum detour distance for avoiding travel across walls. If the distance " #~ "is larger than this value, there will be no detour." +#~ msgid "Media" +#~ msgstr "Media" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Missing LAN IP of printer!" + #~ msgid "Modify" #~ msgstr "Modify" @@ -11303,14 +11000,30 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "NO AMS" +#~ msgid "No files" +#~ msgstr "No files" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Not accessible in LAN-only mode!" + #~ msgid "Not supported." #~ msgstr "Not supported." +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Not supported by this model of printer!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Note: The location of IP and access code on the machine is as follows:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." + #~ msgid "Open &PrusaSlicer" #~ msgstr "Open &PrusaSlicer" @@ -11379,6 +11092,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Please fill report first." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Please log out and login to the printer again." + #~ msgid "Please upgrade your printer first" #~ msgstr "Please update your printer first" @@ -11414,12 +11130,18 @@ msgstr "" #~ "This option enables printing a tower to prime material in the nozzle " #~ "after switching to a new material." +#~ msgid "Print file not found, please slice again" +#~ msgstr "Print file not found; please slice again" + #~ msgid "Printer Selection" #~ msgstr "Printer Selection" #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "Printer firmware does not support material = > AMS slot mapping." +#~ msgid "Printing List" +#~ msgstr "Printing list" + #~ 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 " @@ -11483,9 +11205,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Select Plate Type" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Send to Printer failed. Please try again." + #~ msgid "Sending" #~ msgstr "Sending" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Sending G-code file through cloud service" + +#~ msgid "Set Printable" +#~ msgstr "Set Printable" + +#~ msgid "Set Unprintable" +#~ msgstr "Set Unprintable" + #~ msgid "Set pen size" #~ msgstr "Set pen size" @@ -11651,6 +11385,13 @@ msgstr "" #~ "attempted, however we recommend checking the results or repairing the " #~ "input file and retrying." +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11669,6 +11410,9 @@ msgstr "" #~ "currently selected physical printer. It is recommend to re-slice by " #~ "selecting the same printer type.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "The region parameter is incorrrect." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11696,6 +11440,13 @@ msgstr "" #~ "save filament and decrease the print time. Colors of the objects will be " #~ "mixed as a result." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support." + #~ 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, " @@ -11711,15 +11462,31 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse without toolhead" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Top minimum shell thickness" + +#~ msgid "Top Solid Layers" +#~ msgstr "Top solid layers" + #~ msgid "Translation" #~ msgstr "Translation" +#~ msgid "Tree support with infill" +#~ msgstr "Tree support with infill" + #~ msgid "Unable to connect printer" #~ msgstr "Unable to connect printer" #~ msgid "Unable to create zip file" #~ msgstr "Unable to create zip file" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "Upload task timed out. Please check the network and try again" + +#~ msgid "User authorization timeout" +#~ msgstr "User authorization timeout" + #~ msgid "User pause" #~ msgstr "User pause" @@ -11768,6 +11535,9 @@ msgstr "" #~ "following settings:\n" #~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgid "Wrong Access code" +#~ msgstr "Wrong Access code" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -11814,6 +11584,9 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " is too close to others, there will be collisions when printing.\n" +#~ msgid " plate %1%:" +#~ msgstr " plate %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 900e40b2c..1e2e860fc 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -10,11 +10,11 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.3.2\n" +"Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" +"X-Generator: Poedit 3.3.1\n" msgid "Supports Painting" -msgstr "Pintar Soportes" +msgstr "Pintando Soportes" msgid "Alt + Mouse wheel" msgstr "Alt + Rueda del ratón" @@ -23,7 +23,7 @@ msgid "Section view" msgstr "Vista de la sección" msgid "Reset direction" -msgstr "Reiniciar dirección" +msgstr "Restablecer dirección" msgid "Ctrl + Mouse wheel" msgstr "Ctrl + Rueda del ratón" @@ -35,7 +35,7 @@ msgid "Left mouse button" msgstr "Botón izquierdo del ratón" msgid "Enforce supports" -msgstr "Forzar soportes" +msgstr "Imponer soportes" msgid "Right mouse button" msgstr "Botón derecho del ratón" @@ -44,7 +44,7 @@ msgid "Block supports" msgstr "Bloquear soportes" msgid "Shift + Left mouse button" -msgstr "Mayús + Botón izquierdo del ratón" +msgstr "Mayús + botón izquierdo del ratón" msgid "Erase" msgstr "Borrar" @@ -56,13 +56,13 @@ msgid "Highlight overhang areas" msgstr "Resaltar las zonas de voladizos" msgid "Gap fill" -msgstr "Rellenar hueco" +msgstr "Relleno de huecos" msgid "Perform" msgstr "Realizar" msgid "Gap area" -msgstr "Rellenar área" +msgstr "Área del hueco" msgid "Tool type" msgstr "Tipo de herramienta" @@ -71,7 +71,7 @@ msgid "Smart fill angle" msgstr "Ángulo de relleno inteligente" msgid "On overhangs only" -msgstr "Solo voladizos" +msgstr "Solo en voladizos" msgid "Auto support threshold angle: " msgstr "Ángulo del umbral de soporte automático: " @@ -86,23 +86,23 @@ msgid "Fill" msgstr "Llenar" msgid "Gap Fill" -msgstr "Rellenar hueco" +msgstr "Relleno de huecos" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" -msgstr "Permite pintar solo las facetas seleccionadas por: \"%1%\"" +msgstr "Permite pintar solo en las facetas seleccionadas por: «%1%»" msgid "Highlight faces according to overhang angle." msgstr "Resalte las caras según el ángulo del voladizo." msgid "No auto support" -msgstr "No auto soportes" +msgstr "Sin soporte automático" msgid "Support Generated" -msgstr "Soportes Generados" +msgstr "Soporte generado" msgid "Lay on face" -msgstr "Tumbar boca abajo" +msgstr "Colocar en la cara" #, boost-format msgid "" @@ -114,7 +114,7 @@ msgstr "" "herramienta de pintura." msgid "Color Painting" -msgstr "Pintura en Color" +msgstr "Pintura de colores" msgid "Pen shape" msgstr "Forma de lápiz" @@ -129,7 +129,7 @@ msgid "Choose filament" msgstr "Elegir filamento" msgid "Edge detection" -msgstr "Detección de contorno" +msgstr "Detección de bordes" msgid "Triangles" msgstr "Triángulos" @@ -153,7 +153,7 @@ msgid "Ctrl + Shift + Enter" msgstr "Ctrl + Shift + Enter" msgid "Toggle Wireframe" -msgstr "Alternar Malla Alámbrica" +msgstr "Alternar estructura alámbrica" msgid "Shortcut Key " msgstr "Tecla de acceso directo " @@ -191,7 +191,7 @@ msgstr "" "Error: Por favor, cierre primero todos los menús de la barra de herramientas" msgid "Tool-Lay on Face" -msgstr "Herramienta-Tumbar Boca Abajo" +msgstr "Herramienta-colocar sobre la cara" msgid "in" msgstr "en" @@ -236,7 +236,7 @@ msgid "Reset Rotation" msgstr "Reiniciar rotación" msgid "World coordinates" -msgstr "Coordenadas cartesianas" +msgstr "Coordenadas mundiales" msgid "°" msgstr "°" @@ -248,40 +248,40 @@ msgid "%" msgstr "%" msgid "uniform scale" -msgstr "escala uniforme" +msgstr "Escala uniforme" msgid "Left click" -msgstr "Click izquierdo" +msgstr "Left click" msgid "Add connector" -msgstr "Añadir conector" +msgstr "Add connector" msgid "Right click" -msgstr "Click derecho" +msgstr "Right click" msgid "Remove connector" -msgstr "Borrar conector" +msgstr "Remove connector" msgid "Drag" -msgstr "Soltar" +msgstr "Drag" msgid "Move connector" -msgstr "Mover conector" +msgstr "Move connector" msgid "Add connector to selection" -msgstr "Añadir conector a la selección" +msgstr "Add connector to selection" msgid "Remove connector from selection" -msgstr "Borrar conector de la selección" +msgstr "Remove connector from selection" msgid "Select all connectors" -msgstr "Seleccionar todos los conectores" +msgstr "Select all connectors" msgid "Cut" msgstr "Cortar" msgid "Connector" -msgstr "Conector" +msgstr "Connector" msgid "Movement:" msgstr "Movimiento:" @@ -293,34 +293,34 @@ msgid "Height" msgstr "Altura" msgid "Edit connectors" -msgstr "Editar conectores" +msgstr "Edit connectors" msgid "Add connectors" -msgstr "Añadir conectores" +msgstr "Add connectors" msgid "Upper part" -msgstr "Parte alta" +msgstr "Upper part" msgid "Lower part" -msgstr "Parte baja" +msgstr "Lower part" msgid "Keep" -msgstr "Mantener" +msgstr "Keep" msgid "Place on cut" -msgstr "Colocar en la posición de corte" +msgstr "Place on cut" msgid "Flip" -msgstr "Girar" +msgstr "Flip" msgid "After cut" -msgstr "Después del corte" +msgstr "After cut" msgid "Cut to parts" -msgstr "Cortar en piezas" +msgstr "Cortar por partes" msgid "Auto Segment" -msgstr "Auto Segmentar" +msgstr "Segmento Automático" msgid "Perform cut" msgstr "Realizar corte" @@ -329,7 +329,7 @@ msgid "Reset" msgstr "Reiniciar" msgid "Connectors" -msgstr "Conectores" +msgstr "Connectors" msgid "Type" msgstr "Tipo" @@ -341,25 +341,25 @@ msgid "Shape" msgstr "Forma" msgid "Depth ratio" -msgstr "Relación de profundidad" +msgstr "Depth ratio" msgid "Remove connectors" -msgstr "Borrar conectores" +msgstr "Remove connectors" msgid "Prizm" -msgstr "Prisma" +msgstr "Prizm" msgid "Frustum" -msgstr "Cono" +msgstr "Frustum" msgid "Square" -msgstr "Cuadrado" +msgstr "Square" msgid "Hexagon" -msgstr "Hexágono" +msgstr "Hexagon" msgid "Confirm connectors" -msgstr "Confirmar conectores" +msgstr "Confirm connectors" msgid "Cancel" msgstr "Cancelar" @@ -368,38 +368,38 @@ msgid "Warning" msgstr "Peligro" msgid "Invalid connectors detected" -msgstr "Conectores inválidos detectados" +msgstr "Invalid connectors detected" msgid "connector is out of cut contour" -msgstr "el conector está fuera del contorno de corte" +msgstr "connector is out of cut contour" msgid "connectors are out of cut contour" -msgstr "los conectores están fuera del contorno de corte" +msgstr "connectors are out of cut contour" msgid "connector is out of object" -msgstr "el conector está fuera del objeto" +msgstr "connector is out of object" msgid "connectors is out of object" -msgstr "los conectores están fuera del objeto" +msgstr "Connectors must be on object surface." msgid "Some connectors are overlapped" -msgstr "Algunos conectores están solapados" +msgstr "Some connectors are overlapped" msgid "" "Invalid state. \n" "No one part is selected for keep after cut" msgstr "" -"Estado inválido. \n" -"No se ha seleccionado ninguna pieza para conservar después del corte" +"Invalid state. \n" +"No one part is selected to keep after cut" msgid "Plug" -msgstr "Conectar" +msgstr "Plug" msgid "Dowel" -msgstr "Filamento" +msgstr "Dowel" msgid "Tolerance" -msgstr "Toleráncia" +msgstr "Tolerance" msgid "Mesh name" msgstr "Nombre de la malla" @@ -452,7 +452,7 @@ msgid "%d triangles" msgstr "%d triángulos" msgid "Show wireframe" -msgstr "Mostrar estructura de alambre" +msgstr "Mostrar estructura de red" #, boost-format msgid "%1%" @@ -471,28 +471,28 @@ msgid "Perform Recognition" msgstr "Realizar el reconocimiento" msgid "Brush size" -msgstr "Tamaño del pincel" +msgstr "Grosor de trazo" msgid "Brush shape" -msgstr "Forma del pincel" +msgstr "Forma del trazo" msgid "Enforce seam" -msgstr "Reforzar costura" +msgstr "Forzar la costura" msgid "Block seam" msgstr "Bloquear costura" msgid "Seam painting" -msgstr "Pintar costura" +msgstr "Pintar la costura" msgid "Remove selection" -msgstr "Borrar selección" +msgstr "Eliminar selección" msgid "Shift + Mouse move up or dowm" -msgstr "Shift + Mover ratón arriba u abajo" +msgstr "Shift + Mouse move up or dowm" msgid "Rotate text" -msgstr "Rotar texto" +msgstr "Rotate text" msgid "Text shape" msgstr "Forma de texto" @@ -507,32 +507,30 @@ msgid "Input text" msgstr "Texto de entrada" msgid "Embeded" -msgstr "Integrado" +msgstr "Embedded" msgid "Text Gap" -msgstr "Espacio de texto" +msgstr "Text Gap" msgid "Angle" -msgstr "Ángulo" +msgstr "Angle" msgid "" "Embeded\n" "depth" -msgstr "" -"Profundidad\n" -"Integrada" +msgstr "Embedded depth" msgid "Surface" -msgstr "Superficie" +msgstr "Surface" msgid "Horizontal text" -msgstr "Texto horizontal" +msgstr "Horizontal text" msgid "Ctrl+" msgstr "Ctrl+" msgid "Notice" -msgstr "Aviso" +msgstr "Date cuenta" msgid "Undefined" msgstr "Indefinido" @@ -541,10 +539,10 @@ msgstr "Indefinido" msgid "%1% was replaced with %2%" msgstr "%1% fue reemplazado por %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" "La configuración puede ser generada por una versión más reciente de " -"OrcaSlicer." +"BambuStudio." msgid "Some values have been replaced. Please check them:" msgstr "Algunos valores han sido sustituidos. Por favor, compruébalos:" @@ -573,65 +571,70 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Versión interna" + +msgid "Version" +msgstr "Versión" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 terminará porque se está quedando sin memoria. Le agradeceremos " +"BambuStudio terminará porque se está quedando sin memoria. Le agradeceremos " "que comunique el problema a nuestro equipo." -# 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 "OrcaSlicer se cerrará porque se está quedando sin memoria. Le agradeceremos que informe de ello a nuestro equipo." msgid "Fatal error" msgstr "Error fatal" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" -"OrcaSlicer terminará debido a un error de posición. Le agradeceremos que nos " -"informe del escenario específico en el que se ha producido este problema." +"BambuStudio terminará debido a un error de localización. Le agradeceremos " +"que nos informe del escenario específico en el que se ha producido este " +"problema." -# msgid "OrcaSlicer will terminate because of a localization error. It will be appreciated if you report the specific scenario this issue happened." -# msgstr "OrcaSlicer terminará debido a un error de localización. Le agradeceríamos que nos informara del escenario específico en el que se ha producido este problema" msgid "Critical error" msgstr "Error crítico" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "OrcaSlicer recibió una notificación de excepción no controlada: %1%" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio recibió una notificación de excepción no controlada: %1%." + +msgid "Untitled" +msgstr "Sin título" -# msgid "OrcaSlicer got an unhandled exception: %1%" -# msgstr "OrcaSlicer obtuvo una excepción no manejada: %1%" msgid "Downloading Bambu Network Plug-in" -msgstr "Descargando el complemento de Red Bambú" +msgstr "Descarga del complemento Bambu Network" + +msgid "Login information expired. Please login again." +msgstr "Los datos de acceso han caducado. Por favor, inicie sesión de nuevo." msgid "Incorrect password" msgstr "Contraseña incorrecta" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "¡Conexión %s fallida! [SN:%s, code=%s]" +msgstr "¡Falló la conexión %s! [SN: %s, código=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" -"El archivo de configuración de OrcaSlicer puede estar dañado y no puede ser " -"procesado. Por favor borre el archivo e inténtelo otra vez." +"El archivo de configuración de BambuStudio puede estar dañado y no puede ser " +"procesado." -# msgid "OrcaSlicer configuration file may be corrupted and is not abled to be parsed.Please delete the file and try again." -# msgstr "Es posible que el archivo de configuración de OrcaSlicer esté dañado y no pueda ser procesado. Por favor, borre el archivo e inténtelo de nuevo." #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" msgstr "" "%s\n" -"¿Quiere continuar?" +"¿Quieres continuar?" msgid "Remember my choice" -msgstr "Recordar mi selección" +msgstr "Recordar mi elección" msgid "Loading configuration" msgstr "Cargando configuración" @@ -641,8 +644,8 @@ msgid "Click to download new version in default browser: %s" msgstr "" "Haga clic para descargar la nueva versión en el navegador por defecto: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer necesita una actualización" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio necesita una actualización" msgid "This is the newest version." msgstr "Esta es la versión más reciente." @@ -663,44 +666,41 @@ msgid "Choose one file (3mf):" msgstr "Elija un archivo (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Elige uno o más archivos (3mf/step/stl/svg/obj/amf):" +msgstr "Elija uno o más archivos (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "Elegir un archivo (gcode/3mf):" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Elija un archivo (gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." -msgstr "Algunos preajustes se modificaron." +msgstr "Algunos preajustes se modifican." msgid "" "You can keep the modifield presets to the new project, discard or save " "changes as new presets." msgstr "" -"Puede mantener los preajustes modificados en el nuevo proyecto, descartar o " -"guardar los cambios como nuevos preajustes." +"Puede mantener los preajustes de los campos de trabajo en el nuevo proyecto, " +"descartar o guardar los cambios como nuevos preajustes." msgid "User logged out" -msgstr "Usuario desconectado" +msgstr "El usuario ha cerrado sesión" msgid "new or open project file is not allowed during the slicing process!" msgstr "" -"¡crear o abrir un archivo de proyecto nuevo no está permitido durante el " -"proceso de laminado!" +"¡No se permite abrir un proyecto o crear uno nuevo durante el proceso de " +"corte!" msgid "Open Project" msgstr "Abrir proyecto" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"La versión de Orca Slicer es una versión demasiado antigua y necesita ser " +"La versión de Bambu Studio es una versión demasiado antigua y necesita ser " "actualizada a la última versión antes de poder utilizarla con normalidad" -msgid "Login information expired. Please login again." -msgstr "Los datos de acceso han caducado. Por favor, inicie sesión de nuevo." - msgid "Privacy Policy Update" -msgstr "Actualización de política de privacidad" +msgstr "Privacy Policy Update" msgid "Loading" msgstr "Cargando" @@ -721,28 +721,28 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "Las subidas aún están en curso" +msgstr "El envío aún están en curso" msgid "Stop them and continue anyway?" -msgstr "¿Pararlos y continuar de todas maneras?" +msgstr "¿Detenerlos y continuar de todos modos?" msgid "Ongoing uploads" -msgstr "Cargas en curso" +msgstr "El envío todavía esta en curso" msgid "Select a G-code file:" -msgstr "Seleccione un archivo de G-Code:" +msgstr "Seleccione un archivo de código G:" msgid "Import File" -msgstr "Importar Archivo" +msgstr "Import File" msgid "Delete" -msgstr "Borrar" +msgstr "Borra" msgid "Choose files" msgstr "Elija los archivos" msgid "New Folder" -msgstr "Nueva Carpeta" +msgstr "New Folder" msgid "Open" msgstr "Abrir" @@ -750,8 +750,8 @@ msgstr "Abrir" msgid "Rename" msgstr "Renombrar" -msgid "Orca Slicer GUI initialization failed" -msgstr "Ha fallado la inicialización de la interfaz gráfica de Orca Slicer" +msgid "Bambu Studio GUI initialization failed" +msgstr "Ha fallado la inicialización de la interfaz gráfica de Bambu Studio" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -761,7 +761,7 @@ msgid "Quality" msgstr "Calidad" msgid "Shell" -msgstr "Carcasa" +msgstr "Escudo" msgid "Infill" msgstr "Relleno" @@ -778,18 +778,6 @@ msgstr "Velocidad" msgid "Strength" msgstr "Fuerza" -msgid "Top Solid Layers" -msgstr "Capas Sólidas Superiores" - -msgid "Top Minimum Shell Thickness" -msgstr "Espesor Mínimo de la Carcasa Superior" - -msgid "Bottom Solid Layers" -msgstr "Capas Sólidas Inferiores" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Espesor Mínimo de la Carcasa Inferior" - msgid "Ironing" msgstr "Alisado" @@ -815,7 +803,7 @@ msgid "Add part" msgstr "Añadir pieza" msgid "Add negative part" -msgstr "Añadir pieza negativa" +msgstr "Añadir parte negativa" msgid "Add modifier" msgstr "Añadir modificador" @@ -836,29 +824,17 @@ msgid "Show" msgstr "Mostrar" msgid "Del" -msgstr "Borrar" +msgstr "Del" msgid "Delete the selected object" msgstr "Eliminar el objeto seleccionado" msgid "Edit Text" -msgstr "Editar Texto" +msgstr "Edit Text" msgid "Load..." msgstr "Cargar..." -msgid "Orca Cube" -msgstr "Cubo Orca" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "Prueba Autodesk FDM" - -msgid "Voron Cube" -msgstr "Cubo de Vorón" - msgid "Cube" msgstr "Cubo" @@ -868,8 +844,20 @@ msgstr "Cilindro" msgid "Cone" msgstr "Cono" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" -msgstr "Modificador de rango de Altura" +msgstr "Height Range Modifier" msgid "Add settings" msgstr "Añadir ajustes" @@ -883,17 +871,11 @@ msgstr "Ajustar como objeto individual" msgid "Set as individual objects" msgstr "Ajustar como objetos individuales" -msgid "Fill bed with copies" -msgstr "Fill bed with copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Fill the remaining area of bed with copies of the selected object" - msgid "Printable" msgstr "Imprimible" msgid "Fix model" -msgstr "Reparar el modelo" +msgstr "Fijar el modelo" msgid "Export as STL" msgstr "Exportar como STL" @@ -902,13 +884,13 @@ msgid "Reload from disk" msgstr "Recargar desde el disco" msgid "Reload the selected parts from disk" -msgstr "Recargar las piezas seleccionadas desde el disco" +msgstr "Recargar las partes seleccionadas desde disco" msgid "Replace with STL" msgstr "Reemplazar con STL" msgid "Replace the selected part with new STL" -msgstr "Reemplaza la pieza seleccionada con un nuevo STL" +msgstr "Reemplazar las partes seleccionadas con nuevo STL" msgid "Change filament" msgstr "Cambiar el filamento" @@ -933,19 +915,19 @@ msgid "Scale an object to fit the build volume" msgstr "Escalar un objeto para que se ajuste al volumen de impresión" msgid "Flush Options" -msgstr "Opciones de Purga" +msgstr "Opciones de purga" msgid "Flush into objects' infill" -msgstr "Purgar en el relleno de objetos" +msgstr "Purgar en el relleno de los objetos" msgid "Flush into this object" -msgstr "Purgar en este objeto" +msgstr "Descarga en este objeto" msgid "Flush into objects' support" -msgstr "Purgar en los soportes de objetos" +msgstr "Depositar en el soporte de los objetos" msgid "Edit in Parameter Table" -msgstr "Editar en la Tabla de Parámetro" +msgstr "Editar en la tabla de parámetros" msgid "Convert from inch" msgstr "Convertir desde pulgadas" @@ -960,16 +942,19 @@ msgid "Restore to meter" msgstr "Restaurar a metros" msgid "Assemble" -msgstr "Agrupar" +msgstr "Montar" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Ensamblar los objetos seleccionados en un objeto con múltiples piezas" +msgstr "Ensamblar los objetos seleccionados en un objeto con múltiples partes" msgid "Assemble the selected objects to an object with single part" msgstr "Ensamblar los objetos seleccionados en un objeto con una sola pieza" -msgid "Assemble the selected parts to a single part" -msgstr "Ensamblar las piezas seleccionadas en una sola pieza" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "A lo largo del eje X" @@ -996,13 +981,13 @@ msgid "Mirror object" msgstr "Objeto reflejado" msgid "Invalidate cut info" -msgstr "Invalidar información de corte" +msgstr "Invalidate cut info" msgid "Add Primitive" msgstr "Añadir Primitivo" msgid "Show Labels" -msgstr "Mostrar Etiquetas" +msgstr "Mostrar etiquetas" msgid "To objects" msgstr "A los objetos" @@ -1011,10 +996,10 @@ msgid "Split the selected object into multiple objects" msgstr "Dividir el objeto seleccionado en varios objetos" msgid "To parts" -msgstr "En piezas" +msgstr "A las piezas" msgid "Split the selected object into multiple parts" -msgstr "Dividir el objeto seleccionado en varias piezas" +msgstr "Dividir el objeto seleccionado en varias partes" msgid "Split" msgstr "Dividir" @@ -1033,67 +1018,61 @@ msgid "Split the selected object into mutiple objects" msgstr "Dividir el objeto seleccionado en múltiples objetos" msgid "Split the selected object into mutiple parts" -msgstr "Dividir el objeto seleccionado en múltiples piezas" +msgstr "Dividir el objeto seleccionado en múltiples partes" msgid "Select All" msgstr "Seleccionar Todo" msgid "select all objects on current plate" -msgstr "seleccionar todos los objetos de la bandeja actual" +msgstr "seleccionar todos los objetos de la placa actual" msgid "Delete All" msgstr "Borrar todo" msgid "delete all objects on current plate" -msgstr "eliminar todos los objetos de la bandeja actual" +msgstr "Eliminar todos los objetos de la placa actual" msgid "Arrange" -msgstr "Organizar" +msgstr "Organiza" msgid "arrange current plate" -msgstr "posicionar la bandeja actual" +msgstr "Posicionar la placa actual" msgid "Auto Rotate" -msgstr "Rotación Automática" +msgstr "Rotación automática" msgid "auto rotate current plate" -msgstr "auto rotar la bandeja actual" +msgstr "Auto rotación de la placa actual" msgid "Delete Plate" -msgstr "Borrar Bandeja" +msgstr "Delete Plate" msgid "Remove the selected plate" -msgstr "Retirar la bandeja seleccionada" +msgstr "Retirar la placa seleccionada" msgid "Clone" msgstr "Clonar" msgid "Simplify Model" -msgstr "Simplificar Modelo" +msgstr "Simplificar el modelo" msgid "Center" msgstr "Centrar" msgid "Edit Process Settings" -msgstr "Editar Ajustes de Procesado" +msgstr "Editar en tabla de parámetros" msgid "Edit print parameters for a single object" msgstr "Editar los parámetros de impresión de un solo objeto" msgid "Change Filament" -msgstr "Cambiar el Filamento" +msgstr "Cambiar el filamento" msgid "Set Filament for selected items" msgstr "Ajustar el filamento para los elementos seleccionados" msgid "current" -msgstr "actual" - -msgid "Set Unprintable" -msgstr "Hacer No Imprimible" - -msgid "Set Printable" -msgstr "Hacer Imprimible" +msgstr "Actual" msgid "Unlock" msgstr "Desbloquear" @@ -1101,6 +1080,15 @@ msgstr "Desbloquear" msgid "Lock" msgstr "Bloquear" +msgid "Fill bed with copies" +msgstr "Fill bed with copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Fill the remaining area of bed with copies of the selected object" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Nombre" @@ -1116,8 +1104,8 @@ msgstr[1] "%1$d errores reparados" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "Error: %1$d contorno no moldeado." -msgstr[1] "Error: %1$d contornos no moldeados." +msgstr[0] "Error: %1$d borde no moldeado." +msgstr[1] "Error: %1$d bordes no moldeados." msgid "Remaining errors" msgstr "Errores restantes" @@ -1125,17 +1113,17 @@ msgstr "Errores restantes" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d contorno no moldeado" -msgstr[1] "%1$d contornos no moldeados" +msgstr[0] "%1$d borde no moldeado" +msgstr[1] "%1$d bordes no moldeados" msgid "Right click the icon to fix model object" msgstr "" -"Haga clic con el botón derecho del ratón en el icono para reparar el objeto " +"Haga clic con el botón derecho del ratón en el icono para fijar el objeto " "del modelo" msgid "Right button click the icon to drop the object settings" msgstr "" -"Haga clic con el botón derecho del ratón en el icono para descartar la " +"Haga clic con el botón derecho del ratón en el icono para ajustar la " "configuración del objeto" msgid "Click the icon to reset all settings of the object" @@ -1143,7 +1131,7 @@ msgstr "Haga clic en el icono para restablecer todos los ajustes del objeto" msgid "Right button click the icon to drop the object printable property" msgstr "" -"Haga clic con el botón derecho en el icono para descartar la característica " +"Haga clic con el botón derecho en el icono para soltar la característica " "imprimible del objeto" msgid "Click the icon to toggle printable property of the object" @@ -1157,7 +1145,7 @@ msgid "Click the icon to edit color painting of the object" msgstr "Haga clic en el icono para editar la pintura de color del objeto" msgid "Click the icon to shift this object to the bed" -msgstr "Presionar el icono para desplazar este objeto a la cama" +msgstr "Click the icon to shift this object to the bed" msgid "Loading file" msgstr "Cargando archivo" @@ -1165,6 +1153,9 @@ msgstr "Cargando archivo" msgid "Error!" msgstr "¡Error!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Genérico" @@ -1180,24 +1171,24 @@ msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Cambiar al modo de ajuste por objeto para editar los ajustes de proceso de " -"los objetos." +"Cambie al modo de configuración por objeto para editar la configuración del " +"proceso de los objetos seleccionados." msgid "Delete connector from object which is a part of cut" -msgstr "Borrar conector del objeto el cual es parte del corte" +msgstr "Delete connector from object which is a part of cut" msgid "Delete solid part from object which is a part of cut" -msgstr "Borrar la parte sólida del objeto la cual es parte del corte" +msgstr "Delete solid part from object which is a part of cut" msgid "Delete negative volume from object which is a part of cut" -msgstr "Borrar volumen negativo del objeto el cual es parte del corte" +msgstr "Delete negative volume from object which is a part of cut" msgid "" "To save cut correspondence you can delete all connectors from all related " "objects." msgstr "" -"Para salvar la correspondencia de corte puedes borrar todos los conectores " -"de los objetos relacionados." +"To save cut correspondence you can delete all connectors from all related " +"objects." msgid "" "This action will break a cut correspondence.\n" @@ -1206,53 +1197,53 @@ msgid "" "To manipulate with solid parts or negative volumes you have to invalidate " "cut infornation first." msgstr "" -"La acción interrumpirá la correspondencia de corte.\n" -"Después de esto la consistencia no podrá ser garantizada.\n" +"This action will break a cut correspondence.\n" +"After that, model consistency can't be guaranteed .\n" "\n" -"Para manipular partes sólidas o volúmenes negativos tienes que invalidar la " -"información de corte primero." +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut information first." msgid "Delete all connectors" -msgstr "Borrar todos los conectores" +msgstr "Delete all connectors" msgid "Deleting the last solid part is not allowed." msgstr "No se permite borrar la última parte sólida." msgid "The target object contains only one part and can not be splited." -msgstr "El objeto de destino sólo contiene una pieza y no se puede dividir." +msgstr "El objeto de destino sólo contiene una parte y no se puede dividir." msgid "Assembly" msgstr "Montaje" msgid "Cut Connectors information" -msgstr "Información de Conectores de Corte" +msgstr "Cut Connectors information" msgid "Object manipulation" -msgstr "Manipulación de objeto" +msgstr "Object manipulation" msgid "Group manipulation" -msgstr "Manipulación de grupo" +msgstr "Group manipulation" msgid "Object Settings to modify" -msgstr "Ajustes de objeto modificables" +msgstr "Object Settings to Modify" msgid "Part Settings to modify" -msgstr "Ajustes de pieza modificables" +msgstr "Part Settings to Modify" msgid "Layer range Settings to modify" -msgstr "Ajustes de Capa modificables" +msgstr "Layer Range Settings to Modify" msgid "Part manipulation" -msgstr "Manipulación de piezas" +msgstr "Part manipulation" msgid "Instance manipulation" -msgstr "Manipulación de instancias" +msgstr "Instance manipulation" msgid "Height ranges" -msgstr "Rangos de altura" +msgstr "Height ranges" msgid "Settings for height range" -msgstr "Ajustes de rango de altura" +msgstr "Settings for height range" msgid "Object" msgstr "Objeto" @@ -1280,7 +1271,7 @@ msgstr "" "pieza en el mismo objeto." msgid "The type of the last solid object part is not to be changed." -msgstr "El tipo de la última pieza del objeto sólido no debe cambiarse." +msgstr "El tipo de la última parte del objeto sólido no debe cambiarse." msgid "Negative Part" msgstr "Parte negativa" @@ -1332,56 +1323,62 @@ msgid "to" msgstr "a" msgid "Remove height range" -msgstr "Borrar rango de altura" +msgstr "Remove height range" msgid "Add height range" -msgstr "Añadir rango de altura" +msgstr "Add height range" msgid "Invalid numeric." msgstr "Numérico inválido." msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" -"una celda sólo puede copiarse en una o varias celdas de la misma columna" +"Una celda sólo puede copiarse en una o varias celdas de la misma columna" msgid "multiple cells copy is not supported" -msgstr "no se admite la copia de múltiples celdas" +msgstr "No se admite la copia de múltiples celdas" msgid "Outside" msgstr "En el exterior" -msgid "Auto" -msgstr "Automático" - -msgid "Manual" -msgstr "Manual" - -msgid "No-brim" -msgstr "Sin borde de adherencia" - msgid " " -msgstr " " +msgstr "" msgid "Layer height" msgstr "Altura de la capa" msgid "Wall loops" -msgstr "Bucles de perímetro" +msgstr "Bucles de pared" msgid "Infill density(%)" msgstr "Densidad de relleno(%)" msgid "Auto Brim" -msgstr "Borde de Adherencia Automático" +msgstr "Borde automático" + +msgid "Auto" +msgstr "Automático" + +msgid "Outer brim only" +msgstr "Outer brim only" + +msgid "Inner brim only" +msgstr "Inner brim only" + +msgid "Outer and inner brim" +msgstr "Outer and inner brim" + +msgid "No-brim" +msgstr "Sin borde" msgid "Outer wall speed" -msgstr "Velocidad perímetro exterior" +msgstr "Velocidad de la pared exterior" msgid "Plate" -msgstr "Bandeja" +msgstr "Placa" msgid "Brim" -msgstr "Borde de adherencia" +msgstr "Balsa" msgid "Object/Part Setting" msgstr "Ajuste del Objeto/Parte" @@ -1399,79 +1396,79 @@ msgid "More" msgstr "Más" msgid "Open Preferences." -msgstr "Abrir Preferencias." +msgstr "Abrir preferencias" msgid "Open next tip." -msgstr "Abrir siguiente consejo." +msgstr "Abrir siguiente sugerencia" msgid "Open Documentation in web browser." -msgstr "Abrir la Documentación en el navegador." +msgstr "Abrir documentación en el navegador" msgid "Pause:" -msgstr "Pausa:" +msgstr "Pause:" msgid "Custom Template:" -msgstr "Plantillas Personalizadas:" +msgstr "Custom Template:" msgid "Custom G-code:" -msgstr "G-code personalizado:" +msgstr "Custom G-code:" msgid "Custom G-code" -msgstr "G-code personalizado" +msgstr "Código G personalizado" msgid "Enter Custom G-code used on current layer:" -msgstr "Inserta el G-code personalizado usado en la capa actual:" +msgstr "Introduzca el código G personalizado en la capa actual:" msgid "OK" msgstr "OK" msgid "Jump to Layer" -msgstr "Salta a la Capa" +msgstr "Saltar a la capa" msgid "Jump to layer" -msgstr "Salta a la capa" +msgstr "Saltar a la capa" msgid "Please enter the layer number" -msgstr "Por favor, introduce el número de capa" +msgstr "Por favor, introduzca el número de capa." msgid "Add Pause" -msgstr "Añadir Pausa" +msgstr "Añadir pausa" msgid "Insert a pause command at the beginning of this layer." -msgstr "Inserta un comando de pausa en el principio de esta capa." +msgstr "Insert a pause command at the beginning of this layer." msgid "Add Custom G-code" -msgstr "Añadir G-code personalizado" +msgstr "Agregar código G personalizado" msgid "Insert custom G-code at the beginning of this layer." -msgstr "Insertar G-code personalizado en el principio de esta capa." +msgstr "Insert custom G-code at the beginning of this layer." msgid "Add Custom Template" -msgstr "Añadir Plantilla Personalizada" +msgstr "Añadir plantilla personalizada" msgid "Insert template custom G-code at the beginning of this layer." -msgstr "Insetar g-code de plantilla personalizada al principio de esta capa." +msgstr "Insert template custom G-code at the beginning of this layer." msgid "Filament " -msgstr "Filamento " +msgstr "FIlament" msgid "Change filament at the beginning of this layer." -msgstr "Cargar filamento al principio de esta capa." +msgstr "Change filament at the beginning of this layer." msgid "Delete Pause" -msgstr "Borrar Pausa" +msgstr "" msgid "Delete Custom Template" -msgstr "Borrar Plantilla Personalizada" +msgstr "Delete Custom Template" msgid "Edit Custom G-code" -msgstr "Editar G-code Personalizado" +msgstr "Edit Custom G-code" msgid "Delete Custom G-code" -msgstr "Borrar G-code Personalizado" +msgstr "Delete Custom G-code" msgid "Delete Filament Change" -msgstr "Borrar Cambio de Filamento" +msgstr "Delete Filament Change" msgid "No printer" msgstr "Sin impresión" @@ -1479,6 +1476,33 @@ msgstr "Sin impresión" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "No se ha podido conectar con el servidor" + +msgid "Check cloud service status" +msgstr "Check cloud service status" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Failed to connect to cloud service" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Please click on the hyperlink above to view the cloud service status" + +msgid "Failed to connect to the printer" +msgstr "No se ha podido conectar a la impresora" + +msgid "Connection to printer failed" +msgstr "Connection to printer failed" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Please check the network connection of the printer and Studio." + +msgid "Connecting..." +msgstr "Conectando…" + msgid "?" msgstr "?" @@ -1488,8 +1512,8 @@ msgstr "Vacío" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "Copia de Seguridad del Filamento AMS" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS no conectado" @@ -1507,7 +1531,7 @@ msgid "Unload Filament" msgstr "Descargar" msgid "Ext Spool" -msgstr "Carrete Externo" +msgstr "Bobina de salida" msgid "Tips" msgstr "Consejos" @@ -1542,16 +1566,16 @@ msgid "Pull back current filament" msgstr "Extraer el filamento actual" msgid "Push new filament into extruder" -msgstr "Introducir nuevo filamento en el extrusor" +msgstr "Empuje el nuevo filamento en el extrusor" msgid "Purge old filament" msgstr "Purgar el filamento viejo" -msgid "Feed new filament from external spool" -msgstr "Cargar nuevo filamento en el carrete externo" +msgid "Push new filament into the extruder" +msgstr "Push new filament into the extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirmar si el filamento ha sido extruido" +msgid "Grab new filament" +msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1567,7 +1591,7 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"Todos los objetos seleccionados están en la bandeja bloqueada,\n" +"Todos los objetos seleccionados están en la placa bloqueada,\n" "No podemos hacer un auto posicionamiento en estos objetos." msgid "No arrangable objects are selected." @@ -1577,8 +1601,8 @@ msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." msgstr "" -"Esta bandeja está bloqueada,\n" -"No podemos hacer auto-posicionamiento en esta bandeja." +"Esta placa está bloqueada,\n" +"No podemos hacer auto-posicionamiento en esta placa." msgid "Arranging..." msgstr "Organizando..." @@ -1593,7 +1617,7 @@ msgid "Arranging" msgstr "Organizando" msgid "Arranging canceled." -msgstr "Organización cancelada." +msgstr "Ordenamiento cancelado." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." @@ -1611,31 +1635,31 @@ msgid "" "%s" msgstr "" "Organizar ignoró los siguientes objetos que no pueden caber en una sola " -"bandeja:\n" +"base:\n" "%s" msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" -"Todos los objetos seleccionados están en la bandeja bloqueada,\n" +"Todos los objetos seleccionados están en la placa bloqueada,\n" "No podemos hacer auto-orientación en estos objetos." msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" -"Esta bandeja está bloqueada,\n" -"No podemos hacer auto-orientación en esta bandeja." +"Esta placa está bloqueada,\n" +"No podemos hacer auto-orientación en esta placa." msgid "Orienting..." msgstr "Orientando..." msgid "Orienting" -msgstr "Orientación" +msgstr "Orientando..." msgid "Filling bed " -msgstr "Rellenando cama " +msgstr "Filling bed" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -1644,7 +1668,7 @@ msgid "Bed filling done." msgstr "Bed filling done." msgid "Error! Unable to create thread!" -msgstr "¡Error! ¡No se ha podido crear el proceso!" +msgstr "¡Error! No se ha podido crear el proceso." msgid "Exception" msgstr "Excepción" @@ -1655,59 +1679,61 @@ msgstr "Iniciando sesión" msgid "Login failed" msgstr "Fallo en el inicio de sesión" -msgid "The region parameter is incorrrect" -msgstr "El parámetro de región es incorrecto" - -msgid "Failure of printer login" -msgstr "Fallo en el inicio de sesión de la impresora" - -msgid "Failed to get ticket" -msgstr "No se ha podido conseguir el ticket" - -msgid "User authorization timeout" -msgstr "Límite de tiempo de espera de la autorización del usuario" - -msgid "Failure of bind" -msgstr "Fallo en la vinculación" - -msgid "Unknown Failure" -msgstr "Error Desconocido" - msgid "Please check the printer network connection." -msgstr "Por favor, comprueba la conexión de área local." +msgstr "Por favor, comprueba la conexión de red de la impresora." -msgid "Abnormal print file data. Please slice again" -msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormal print file data: please slice again." -msgid "Task canceled" -msgstr "Tarea cancelada" +msgid "Task canceled." +msgstr "Task canceled." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "" -"La tarea de carga ha terminado. Por favor, compruebe el problema de red e " -"inténtelo de nuevo" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Upload task timed out. Please check the network status and try again." msgid "Cloud service connection failed. Please try again." msgstr "" "Ha fallado la conexión con el servicio de la nube. Por favor, inténtelo de " "nuevo." -msgid "Print file not found, please slice again" -msgstr "" -"No se ha encontrado el archivo de impresión, por favor, vuelva a procesarlo" +msgid "Print file not found. please slice again." +msgstr "Print file not found; please slice again." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -"El archivo de impresión supera el tamaño máximo permitido (1GB). Por favor, " -"simplifique el modelo y vuelva a procesarlo" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." -msgid "Failed uploading print file" -msgstr "Fallo al cargar el archivo de impresión" +msgid "Failed to send the print job. Please try again." +msgstr "No se pudo enviar la impresión. Vuelve a intentarlo." -msgid "Wrong Access code" -msgstr "Código de acceso incorrecto" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Failed to upload file to ftp. Please try again." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Check the current status of the Bambu Lab server by clicking on the link " +"above." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"The size of the print file is too large. Please adjust the file size and try " +"again." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Print file not found; please slice it again and send it for printing." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Failed to upload print file via FTP. Please check the network status and try " +"again." msgid "Sending print job over LAN" msgstr "Enviando el trabajo de impresión a través de la LAN" @@ -1716,10 +1742,10 @@ msgid "Sending print job through cloud service" msgstr "Enviando trabajo de impresión a través del servicio en la nube" msgid "Service Unavailable" -msgstr "Servicio No Disponible" +msgstr "Servicio no disponible" msgid "Unkown Error." -msgstr "Error Desconocido." +msgstr "Error desconocido" msgid "Sending print configuration" msgstr "Enviando la configuración de impresión" @@ -1727,92 +1753,80 @@ msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" -"Envío exitoso. Se saltará automaticamente a la página del dispositivo en %ss" +"Enviado correctamente. Se mostrará automáticamente en el dispositivo en %s S" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "Se necesita insertar una tarjeta SD antes de imprimir vía red local." - -msgid "Failed to send the print job. Please try again." -msgstr "Fallo enviando el trabajo de impresión. Por favor inténtelo otra vez." - -msgid "Send to Printer failed. Please try again." -msgstr "Envío a la Impresora fallido. Por favor inténtelo otra vez." - -msgid "No space left on Printer SD card" -msgstr "Sin espacio disponible en la tarjeta SD de la impresora" +msgstr "Se debe insertar una tarjeta microSD antes de imprimir mediante LAN." msgid "Sending gcode file over LAN" -msgstr "Enviando el archivo de G-Code vía red local" - -msgid "Sending gcode file through cloud service" -msgstr "Enviando el archivo de G-Code a través del servicio en la nube" +msgstr "Envío de un archivo G-code a través de LAN" msgid "Sending gcode file to sdcard" -msgstr "Enviando el archivo de G-Code a la tarjeta SD" +msgstr "Envío de un archivo G-code a la tarjeta microSD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Envío exitoso. Cierre la página actual en %s s" +msgstr "Se ha enviado correctamente. Cerrar la página actual en %s s" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Se necesita insertar una tarjeta SD antes de enviar a la impresora." - -msgid "Please log out and login to the printer again." -msgstr "Por favor desconéctese y conéctese a la impresora de nuevo." +msgstr "Debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Choose SLA archive:" -msgstr "Elige el archivo SLA:" +msgstr "Choose SLA archive:" msgid "Import file" -msgstr "Importar archivo" +msgstr "Import file" msgid "Import model and profile" -msgstr "Importar modelo y perfil" +msgstr "Import model and profile" msgid "Import profile only" -msgstr "Importar perfil solo" +msgstr "Import profile only" msgid "Import model only" -msgstr "Importar solo el modelo" +msgstr "Import model only" msgid "Accurate" -msgstr "Precisión" +msgstr "Accurate" msgid "Balanced" -msgstr "Balanceado" +msgstr "Balanced" msgid "Quick" -msgstr "Rápido" +msgstr "Quick" msgid "Importing SLA archive" -msgstr "Importando archivo SLA" +msgstr "Importing SLA archive" msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"El SLA importado no contiene ningún preajuste. Por favor active algunos " -"preajustes de la impresora primero antes de importar ese archivo SLA." +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer presets first before importing that SLA archive." msgid "Importing canceled." -msgstr "Importación cancelada." +msgstr "Importing canceled." msgid "Importing done." -msgstr "Importación realizada." +msgstr "Importing done." msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." msgstr "" -"El SLA importado no contiene ningún preajuste. Los preajustes de SLA " -"actuales serán usados como alternativa." +"The imported SLA archive did not contain any presets. The current SLA " +"presets were used as fallback." msgid "You cannot load SLA project with a multi-part object on the bed" -msgstr "No puedes cargar un proyecto SLA con objetos multi-pieza en la cama" +msgstr "You cannot load an SLA project with a multi-part object on the bed" msgid "Please check your object list before preset changing." -msgstr "" -"Por favor comprueba tu lista de objectos antes de cambiar el preajuste." +msgstr "Please check your object list before preset changing." msgid "Attention!" msgstr "¡Atención!" @@ -1827,37 +1841,35 @@ msgid "Cancelled" msgstr "Cancelado" msgid "Install successfully." -msgstr "Instalación exitosa." +msgstr "Instalado correctamente" msgid "Installing" -msgstr "Instalando" +msgstr "Instalando…" msgid "Install failed" -msgstr "Instalación fallida" +msgstr "Error de instalación" msgid "Portions copyright" msgstr "Porciones del copyright" msgid "Copyright" -msgstr "Copyright" +msgstr "Derecho de autor" msgid "License" msgstr "Licencia" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer tiene licencia bajo " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio tiene licencia bajo " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, versión 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" -"Orca Slicer está basado en BambuStudio por Bambulab, el cual está basado en " -"PrusaSlicer por Prusa Research. PrusaSlicer está basado en Slic3r de " -"Alessandro Ranellucci y la comunidad RepRap" +"Bambu Studio se basa en PrusaSlicer de Prusa Research, que proviene de " +"Slic3r de Alessandro Ranellucci y la comunidad RepRap" msgid "Libraries" msgstr "Librerías" @@ -1873,32 +1885,38 @@ msgstr "" msgid "About %s" msgstr "Acerca de %s" -msgid "Orca Slicer " +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "OrcaSlicer está basado en BambuStudio, PrusaSlicer, y SuperSlicer." - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." -msgstr "" -"BambuStudio está basado originalmente en PrusaSlicer por PrusaResearch." +"Bambu Studio está basado en PrusaSlicer de PrusaResearch y SuperSlicer de " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." -msgstr "" -"PrusaSlicer está originalmente basado en Slic3r de Alessandro Ranellucci." +msgstr "PrusaSlicer se basa originalmente en Slic3r de Alessandro Ranellucci." msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." msgstr "" "Slic3r fue creado por Alessandro Ranellucci con la ayuda de muchos otros " -"contruyentes." +"colaboradores." -msgid "Version" -msgstr "Versión" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio también hace referencia a algunas ideas de Cura de Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"Hay muchas partes del software que provienen de las contribuciones de la " +"comunidad, por lo que no podemos enumerarlas una por una, sino que se " +"atribuirán en los comentarios del código correspondientes." msgid "AMS Materials Setting" -msgstr "Ajustes de Materiales AMS" +msgstr "Configuración de materiales AMS" msgid "Confirm" msgstr "Confirmar" @@ -1931,10 +1949,14 @@ msgstr "SN" msgid "Setting AMS slot information while printing is not supported" msgstr "" -"Ajustes de información de ranura AMS mientras la impresión no sea soportada" +"No es posible configurar la información de la ranura AMS durante la " +"impresión." -msgid "Factors of dynamic flow cali" -msgstr "Factores de flujo cali dinámico" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Factor K" @@ -1943,52 +1965,50 @@ msgid "Factor N" msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" -msgstr "" -"Ajuste de información de ranura Virtual mientras la impresión no sea " -"soportada" +msgstr "Setting Virtual slot information while printing is not supported" msgid "Are you sure you want to clear the filament information?" -msgstr "¿Estás seguro que quieres limpiar la información de filamento?" - -msgid "Please input a valid value (K in 0~0.5)" -msgstr "Por favor, introduce un valor válido (K en 0~0.5)" - -msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgstr "Por favor, introduce un valor válido (K en 0~0.5, N en 0.6~2.0)" +msgstr "Are you sure you want to clear the filament information?" msgid "You need to select the material type and color first." -msgstr "Necesitas seleccionar el tipo y el color del material primero." +msgstr "You need to select the material type and color first." + +msgid "Please input a valid value (K in 0~0.5)" +msgstr "Introduzca un valor válido (K en 0~0.5)" + +msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "Introduzca un valor válido (K en 0~0.5, N en 0.6~2.0)" msgid "Other Color" -msgstr "Otro color" +msgstr "Other Color" msgid "Custom Color" -msgstr "Color Personalizado" +msgstr "Custom Color" msgid "Dynamic flow calibration" -msgstr "Calibración de flujo dinámico" +msgstr "Calibración dinámica de flujo" 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." msgstr "" -"La temperatura y la velocidad volumétrica máxima de la boquilla afectará a " -"los resultados de los ajustes. Por favor, rellena los mismos valores de la " -"actual impresión. Ellos pueden ser auto-rellenados seleccionando un " -"preajuste de filamento." +"La temperatura de la boquilla y la velocidad volumétrica máxima afectarán a " +"los resultados de la calibración. Introduzca los mismos valores que en la " +"impresión actual. Se pueden rellenar automáticamente seleccionando un ajuste " +"preestablecido de filamento." msgid "Nozzle Diameter" -msgstr "Diámetro" +msgstr "Diámetro de la boquilla" msgid "Bed Type" -msgstr "Tipo de Cama" +msgstr "Tipo de cama" msgid "Nozzle temperature" msgstr "Temperatura de la boquilla" msgid "Bed Temperature" -msgstr "Temperatura de Cama" +msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" @@ -1997,13 +2017,13 @@ msgid "℃" msgstr "" msgid "Bed temperature" -msgstr "Temperatura de la cama" +msgstr "Temperatura de la base" msgid "mm³" msgstr "mm³" msgid "Start calibration" -msgstr "Iniciar calibración" +msgstr "Iniciar" msgid "Next" msgstr "Siguiente" @@ -2013,15 +2033,15 @@ msgid "" "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Calibración completada. Por favor, observe cual es línea de extrusión más " -"uniforme en su cama caliente, parecida a la imagen de abajo, e inserte el " -"valor en el cuadro de texto de su lado izquierdo, donde dice factor K." +"Se completó la calibración. Busque la línea de extrusión más uniforme en la " +"plataforma, como se muestra en la imagen de abajo, y rellene el valor de la " +"parte izquierda en la casilla de entrada del factor K." msgid "Save" msgstr "Guardar" msgid "Last Step" -msgstr "Último Paso" +msgstr "Atrás" msgid "Example" msgstr "Ejemplo" @@ -2031,14 +2051,14 @@ msgid "Calibrating... %d%%" msgstr "Calibrando... %d%%" msgid "Calibration completed" -msgstr "Calibración completada" +msgstr "Calibración finalizada" #, c-format, boost-format msgid "%s does not support %s" -msgstr "%s no soporta %s" +msgstr "%s no es compatible con %s" msgid "Dynamic flow Calibration" -msgstr "Calibración de flujo dinámico" +msgstr "Calibración dinámica de flujo" msgid "Step" msgstr "Paso" @@ -2049,17 +2069,17 @@ msgstr "Ranuras AMS" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Nota: Solo las ranuras AMS cargadas con el mismo tipo de material se pueden " -"seleccionar." +"Nota: Sólo se pueden seleccionar las ranuras AMS que tengan el mismo tipo de " +"material." msgid "Enable AMS" -msgstr "Activar AMS" +msgstr "Habilitar AMS" msgid "Print with filaments in the AMS" -msgstr "Imprimir con filamentos en el AMS" +msgstr "Imprima con filamento en el AMS" msgid "Disable AMS" -msgstr "Desactivar AMS" +msgstr "Deshabilitar AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Imprimir con el filamento montado en la parte posterior del chasis" @@ -2071,20 +2091,19 @@ msgid "" "Green means that AMS humidity is normal, orange represent humidity is high, " "red represent humidity is too high.(Hygrometer: lower the better.)" msgstr "" -"El verde significa que la humedad de AMS es normal, el naranja representa " -"que la humedad es alta, el rojo representa que la humedad es demasiado alta." -"(Hygrometro: menos que el mejor.)" +"El verde significa que la humedad del AMS es normal, el naranja significa " +"que la humedad es alta y el rojo significa que la humedad es demasiado alta. " +"(Higrómetro: cuanto más bajo, mejor)." msgid "Desiccant status" -msgstr "Estado del secante" +msgstr "Estado del desecante" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " "inactive. Please change the desiccant.(The bars: higher the better.)" msgstr "" -"Si estado del secante es menor que las dos barras indica que el secante " -"puede estar inactivo. Por favor cambie el secante(Las barras: más que el " -"mejor)" +"Un estado desecante inferior a dos barras indica que el desecante puede " +"estar inactivo. Cambie el desecante, por favor. (Cuanto más alto, mejor)." msgid "" "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -2093,42 +2112,49 @@ msgid "" "accurately." msgstr "" "Nota: Cuando se abre la tapa o se cambia el paquete desecante, puede tardar " -"horas o una noche en absorber la humedad. Las bajas temperaturas también " -"ralentizan el proceso. Durante este tiempo, es posible que el indicador no " -"represente la cámara con precisión." +"horas o una noche entera en absorber la humedad. Las bajas temperaturas " +"también ralentizan el proceso. Durante este tiempo, es posible que el " +"indicador no represente la humedad de la cámara con precisión." msgid "" "Config which AMS slot should be used for a filament used in the print job" -msgstr "" -"La configuración de ranura la cual debe ser usada para el filamento es usada " -"en el trabajo de impresión" +msgstr "Configure qué ranura AMS debe utilizarse para la impresión." msgid "Filament used in this print job" -msgstr "Filamento usado en este trabajo de impresión" +msgstr "Filamento utilizado en este trabajo de impresión" msgid "AMS slot used for this filament" -msgstr "Ranura AMS usada para este filamento" +msgstr "Ranura AMS utilizada para este filamento" msgid "Click to select AMS slot manually" -msgstr "Presiona para seleccionar la ranura AMS automaticamente" +msgstr "Haga clic para seleccionar la posición del AMS manualmente" msgid "Do not Enable AMS" -msgstr "No Activar AMS" +msgstr "No habilite AMS" msgid "Print using materials mounted on the back of the case" -msgstr "Imprimir usando materiales montados en la parte de atrás de la carcasa" +msgstr "Imprima con filamento en una bobina externa." msgid "Print with filaments in ams" -msgstr "Imprimir usando filamentos en AMS" +msgstr "Impresión con filamento en AMS" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Imprimir con filamentos montados en la parte de atrás del chasis" +msgstr "Impresión con filamento en una bobina externa" -msgid "Filaments replace" -msgstr "Reemplazar filamentos" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" -msgstr "Agrupar" +msgstr "Group" + +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 "" msgid "AMS Settings" msgstr "Ajustes del AMS" @@ -2179,26 +2205,26 @@ msgstr "" "último apagado." msgid "Update remaining capacity" -msgstr "Actualizar capacidad restante" +msgstr "Actualizar la capacidad restante" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"El AMS estimará la capacidad del filamento Bambú restante después de que la " -"información sea actualizada. Durante la impresión, la capacidad restante " -"será actualizada automaticamente." +"El AMS estimará la capacidad restante del filamento Bambu después de " +"actualizar la información del filamento. Durante la impresión, la capacidad " +"restante se actualizará automáticamente." msgid "AMS filament backup" -msgstr "Copia de Seguridad del Filamento AMS" +msgstr "AMS filament backup" msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" -"El AMS continuará con otra bobina con las mismas propiedades de filamento " -"automáticamente cuando el filamento se termine" +"AMS continuará con otra bobina con las mismas propiedades de filamento " +"automáticamente cuando el filamento actual se agote." msgid "File" msgstr "Archivo" @@ -2210,28 +2236,29 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Fallo al descargar el complemento. Por favor, compruebe el cortafuegos y la " -"vpn, e inténtelo de nuevo." +"No se pudo descargar el complemento. Compruebe la configuración del firewall " +"y el software de VPN e inténtelo de nuevo." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Fallo al instalar el complemento. Por favor, compruebe si ha sido bloqueado " -"o borrado por un antivirus." +"No se pudo instalar el complemento. Compruebe si está bloqueado o si el " +"software antivirus lo ha eliminado." msgid "click here to see more info" -msgstr "presiona aquí para mostrar más información" +msgstr "haga clic aquí para ver más información" msgid "Please home all axes (click " -msgstr "Por favor, mandar a inicio todos los ejes (presione " +msgstr "Por favor, haga un home de todos los ejes (pulse" msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -") para localizar la posición del cabezal. Esto previene que el dispositivo " -"se mueva más allá de los limites de impresión y cause desgaste en el equipo." +"el icono de la casa) para localizar la posición del cabezal. Esto evita que " +"el dispositivo se mueva más allá del límite imprimible y provoque el " +"desgaste del equipo." msgid "Go Home" msgstr "Ir al Inicio" @@ -2247,7 +2274,7 @@ msgid "Please save project and restart the program. " msgstr "Guarde el proyecto y reinicie el programa. " msgid "Processing G-Code from Previous file..." -msgstr "Procesando el G-Code del archivo anterior..." +msgstr "Procesando el código G del archivo anterior..." msgid "Slicing complete" msgstr "Laminado terminado" @@ -2271,10 +2298,10 @@ msgid "Floating reserved operand" msgstr "Operando reservado flotante" msgid "Stack overflow" -msgstr "Columna de Sobreflujo" +msgstr "Columna de Sobre Flujo" msgid "Unknown error when export G-code." -msgstr "Error desconocido al exportar el G-Code." +msgstr "Error desconocido al exportar el código G." #, boost-format msgid "" @@ -2282,25 +2309,25 @@ msgid "" "Error message: %1%.\n" "Source file %2%." msgstr "" -"Fallo al guardar el archivo G-Code.\n" +"Fallo al guardar el archivo gcode.\n" "Mensaje de error: %1%.\n" "Archivo fuente %2%." #, boost-format msgid "Succeed to export G-code to %1%" -msgstr "Exportación de G-Code a %1% con éxito" +msgstr "Exportación de código G a %1% con éxito" msgid "Running post-processing scripts" -msgstr "Ejecutando scripts de post-procesado" +msgstr "Ejecución de scripts de posprocesamiento" msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "Copiado del G-code temporal al G-code de salida fallido" +msgstr "No se pudo copiar el G-code temporal al G-code final." #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -"Programación de la carga a %1%. Mire la Ventana -> Cola de Impresión del " -"Anfitrión" +"Programar la subida al `%1% `. Consulte Ventana -> Imprimir la cola del " +"usuario" msgid "Origin" msgstr "Origen" @@ -2309,20 +2336,20 @@ msgid "Diameter" msgstr "Diámetro" msgid "Size in X and Y of the rectangular plate." -msgstr "Tamaño en X e Y de la bandeja rectangular." +msgstr "Tamaño en X e Y de la placa rectangular." msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -"Distancia de la coordenada del G-Code de 0,0 de la esquina frontal izquierda " -"del rectángulo." +"Distancia de la coordenada del código G de 0,0 de la esquina frontal " +"izquierda del rectángulo." msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" -"Diámetro de la cama de impresión. Se supone que el origen (0,0) está ubicado " +"Diámetro de la base de impresión. Se supone que el origen (0,0) está ubicado " "en el centro." msgid "Rectangular" @@ -2353,7 +2380,7 @@ msgid "Model" msgstr "Modelo" msgid "Choose an STL file to import bed shape from:" -msgstr "Escoge un archivo STL para importar la forma de la cama:" +msgstr "Escoge un archivo STL para importar la forma de la base:" msgid "Invalid file format." msgstr "Formato inválido de archivo." @@ -2372,13 +2399,13 @@ msgstr "" msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "" -"Escoge un archivo para importar la textura de la cama de impresión (PNG/SVG):" +"Escoge un archivo para importar la textura de la base de impresión (PNG/SVG):" msgid "Choose an STL file to import bed model from:" -msgstr "Escoge un archivo STL para importar el modelo de la cama de impresión:" +msgstr "Escoge un archivo STL para importar el modelo de la base de impresión:" msgid "Bed Shape" -msgstr "Forma de la cama de impresión" +msgstr "Forma de la base de impresión" msgid "" "Nozzle may be blocked when the temperature is out of recommended range.\n" @@ -2404,9 +2431,9 @@ msgid "" "This may cause model broken free from build plate during printing" msgstr "" "La temperatura del lecho de la otra capa es inferior a la temperatura del " -"lecho de la primera capa durante más de %d grados centígrados.\n" -"Esto puede hacer que el modelo se desprenda de la bandeja durante la " -"impresión" +"lecho de la capa inicial durante más de %d grados centígrados.\n" +"Esto puede hacer que el modelo se desprenda de la placa de impresión durante " +"la impresión." msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" @@ -2414,19 +2441,19 @@ msgid "" "Please keep the printer open during the printing process to ensure air " "circulation or reduce the temperature of the hot bed" msgstr "" -"La temperatura de capa es superior que la temperatura de vitrificación de " -"este filamento. \n" -" Esto podría causar que la boquilla se bloquee y produzca un fallo de " -"impresión. Por favor, mantenga la impresora abierta durante el proceso para " -"garantizar la circulación de aire o reducir la temperatura de la cama " -"caliente" +"La temperatura de la plataforma es superior a la temperatura de " +"vitrificación de este filamento.\n" +"Esto puede provocar la obstrucción de la boquilla y un fallo de impresión.\n" +"Mantenga la impresora abierta durante el proceso de impresión para " +"garantizar la circulación del aire o reducir la temperatura de la plataforma " +"de impresión." msgid "" "Too small max volumetric speed.\n" "Reset to 0.5" msgstr "" -"Velocidad volumétrica máxima demasiado baja.\n" -"Reajustar a 0.5" +"Velocidad volumétrica máxima demasiado pequeña.\n" +"El valor se restableció a 0.5" msgid "" "Too small layer height.\n" @@ -2435,6 +2462,13 @@ msgstr "" "Altura de la capa demasiado pequeña.\n" "Reajustar a 0,2" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Altura de la capa demasiado grande.\n" +"Reajustar a 0,2" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2447,7 +2481,7 @@ msgid "" "\n" "The first layer height will be reset to 0.2." msgstr "" -"La altura de primera capa cero no es válida.\n" +"La altura de capa inicial cero no es válida.\n" "\n" "La altura de la primera capa se restablecerá a 0,2." @@ -2462,7 +2496,7 @@ msgstr "" "Este ajuste sólo se utiliza para afinar el tamaño del modelo con un valor " "pequeño en algunos casos.\n" "Por ejemplo, cuando el tamaño del modelo tiene un pequeño error y es difícil " -"de agrupar.\n" +"de montar.\n" "Para el ajuste de tamaño grande, por favor utilice la función de escala del " "modelo.\n" "\n" @@ -2486,9 +2520,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 "" -"El modo espiral sólo funciona cuando los bucles de perímetro son 1, el " -"soporte está desactivado, las capas superiores de la cáscara son 0, la " -"densidad de relleno disperso es 0 y el tipo de timelapse es tradicional." +"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." msgid "" "Change these settings automatically? \n" @@ -2506,10 +2539,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"La torre de purga no funciona cuando la altura de la capa adaptable o la " +"La torre principal no funciona cuando la altura de la capa adaptable o la " "altura de la capa de soporte independiente están activadas.\n" "¿Qué desea mantener?\n" -"SÍ - Mantener la torre de purga\n" +"SÍ - Mantener la torre principal\n" "NO - Mantener la altura de capa adaptable y la altura de capa de soporte " "independiente" @@ -2519,10 +2552,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"La torre de purga no funciona cuando la altura de capa adaptativa está " +"La torre principal no funciona cuando la altura de capa adaptativa está " "activada.\n" "¿Qué quieres mantener?\n" -"SÍ - Mantener la torre de purga\n" +"SÍ - Mantener la torre principal\n" "NO - Mantener la altura de capa adaptable" msgid "" @@ -2531,10 +2564,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"La torre de purga no funciona cuando la altura de la capa de soporte " +"La torre principal no funciona cuando la altura de la capa de soporte " "independiente está activada.\n" "¿Qué quieres mantener?\n" -"SÍ - Mantener la torre de purga\n" +"SÍ - Mantener la torre principal\n" "NO - Mantener la altura de la capa de soporte independiente" #, boost-format @@ -2546,16 +2579,17 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly" msgstr "" -"¿Cambiar a patrón rectilíneo?\n" -"Sí - cambiar a patrón rectilíneo automaticamente\n" -"No - reiniciar a valor de densidad no 100% por defecto automáticamente" +"¿Cambiar a un patrón rectilíneo?\n" +"Sí: cambia automáticamente al patrón rectilíneo\n" +"No: restablece automáticamente la densidad a un valor predeterminado que no " +"sea del 100%" msgid "" "While printing by Object, the extruder may collide skirt.\n" "Thus, reset the skirt layer to 1 to avoid that." msgstr "" -"Mientras se imprime por objeto, el extrusor puede chocar contra la falda.\n" -"En ese caso, reinicie la capa de falda a 1 para evitarlo." +"While printing by object, the extruder may collide with a skirt.\n" +"Thus, reset the skirt layer to 1 to avoid collisions." msgid "Auto bed leveling" msgstr "Nivelación de cama automática" @@ -2588,7 +2622,7 @@ msgid "Inspecting first layer" msgstr "Inspeccionando la primera capa" msgid "Identifying build plate type" -msgstr "Identificando el tipo de bandeja de impresión" +msgstr "Identificando el tipo de placa de impresión" msgid "Calibrating Micro Lidar" msgstr "Calibrando el Micro Lidar" @@ -2627,7 +2661,7 @@ msgid "MC" msgstr "MC" msgid "MainBoard" -msgstr "Placa Base" +msgstr "Placa Madre" msgid "TH" msgstr "TH" @@ -2660,13 +2694,35 @@ msgid "Update failed." msgstr "Actualización fallida." msgid "Failed to start printing job" -msgstr "Fallo iniciando el trabajo de impresión" +msgstr "No se pudo iniciar la impresión" + +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" msgid "default" msgstr "por defecto" msgid "parameter name" -msgstr "nombre del parámetro" +msgstr "Nombre del parámetro" msgid "N/A" msgstr "N/A" @@ -2703,7 +2759,7 @@ msgid "Layer Height" msgstr "Altura de la capa" msgid "Line Width" -msgstr "Ancho de extrusión" +msgstr "Ancho de línea" msgid "Fan Speed" msgstr "Velocidad del ventilador" @@ -2720,29 +2776,26 @@ msgstr "Herramienta" msgid "Layer Time" msgstr "Tiempo de capa" -msgid "Layer Time (log)" -msgstr "Tiempo de capa (log)" - msgid "Height: " -msgstr "Altura: " +msgstr "Altura:" msgid "Width: " -msgstr "Anchura: " +msgstr "Ancho:" msgid "Speed: " -msgstr "Velocidad: " +msgstr "Velocidad:" msgid "Flow: " -msgstr "Flujo: " +msgstr "Flujo:" msgid "Layer Time: " -msgstr "Tiempo de Capa: " +msgstr "Tiempo de capa:" msgid "Fan Speed: " -msgstr "Velocidad del Ventilador: " +msgstr "Velocidad del ventilador:" msgid "Temperature: " -msgstr "Temperatura: " +msgstr "Temperatura:" msgid "Loading G-codes" msgstr "Carga de códigos G" @@ -2754,19 +2807,19 @@ msgid "Generating geometry index data" msgstr "Generación de datos de índices geométricos" msgid "Statistics of All Plates" -msgstr "Estadísticas de todas las Bandejas" +msgstr "Statistics of All Plates" msgid "Display" msgstr "Pantalla" msgid "Flushed" -msgstr "Descargado" +msgstr "Expulsado" msgid "Total" msgstr "Total" msgid "Total Time Estimation" -msgstr "Tiempo Total Estimado" +msgstr "Total Time Estimation" msgid "Total time" msgstr "Tiempo total" @@ -2793,7 +2846,7 @@ msgid "Layer Height (mm)" msgstr "Altura de la capa (mm)" msgid "Line Width (mm)" -msgstr "Ancho de extrusión (mm)" +msgstr "Ancho de línea (mm)" msgid "Speed (mm/s)" msgstr "Velocidad (mm/s)" @@ -2807,6 +2860,9 @@ msgstr "Temperatura (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Tasa de flujo volumétrico (mm³/seg)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "Filamento usado" @@ -2832,7 +2888,7 @@ msgid "Options" msgstr "Opciones" msgid "travel" -msgstr "recorrido" +msgstr "Recorrido" msgid "Extruder" msgstr "Extrusor" @@ -2862,7 +2918,7 @@ msgid "Total Estimation" msgstr "Estimación total" msgid "Time Estimation" -msgstr "Estimación de Tiempo" +msgstr "Estimación de tiempo" msgid "Normal mode" msgstr "Modo normal" @@ -2889,13 +2945,13 @@ msgid "Quality / Speed" msgstr "Calidad / Velocidad" msgid "Smooth" -msgstr "Suave" +msgstr "Alisado" msgid "Radius" msgstr "Radio" msgid "Keep min" -msgstr "Mantener el mínimo" +msgstr "minutos restantes" msgid "Left mouse button:" msgstr "Botón izquierdo del ratón:" @@ -2907,25 +2963,25 @@ msgid "Right mouse button:" msgstr "Botón derecho del ratón:" msgid "Remove detail" -msgstr "Borrar detalle" +msgstr "Eliminar detalle" msgid "Shift + Left mouse button:" -msgstr "Shift + botón izquierdo del ratón:" +msgstr "Shift + Botón izquierdo del ratón:" msgid "Reset to base" -msgstr "Volver a la base" +msgstr "Restablecer a la base" msgid "Shift + Right mouse button:" msgstr "Shift + Botón derecho del ratón:" msgid "Smoothing" -msgstr "Suavidad" +msgstr "Suavizado" msgid "Mouse wheel:" msgstr "Rueda del ratón:" msgid "Increase/decrease edit area" -msgstr "Incrementar/decrementar el área de edición" +msgstr "Aumentar/reducir el área de edición" msgid "Sequence" msgstr "Secuencia" @@ -2937,7 +2993,7 @@ msgid "Tool Move" msgstr "Herramienta Mover" msgid "Tool Rotate" -msgstr "Herramienta Rotar" +msgstr "Tool Rotate" msgid "Move Object" msgstr "Mover Objeto" @@ -2964,7 +3020,7 @@ msgid "Auto rotate for arrangement" msgstr "Rotación automática para el posicionamiento" msgid "Allow multiple materials on same plate" -msgstr "Permitir varios materiales en la misma bandeja" +msgstr "Permitir varios materiales en la misma placa" msgid "Avoid extrusion calibration region" msgstr "Evitar la zona de calibración del extrusor" @@ -2973,7 +3029,7 @@ msgid "Add" msgstr "Añadir" msgid "Add plate" -msgstr "Añadir bandeja" +msgstr "Añadir placa" msgid "Auto orient" msgstr "Orientar automáticamente" @@ -2982,7 +3038,7 @@ msgid "Arrange all objects" msgstr "Ordenar todos los objetos" msgid "Arrange objects on selected plates" -msgstr "Colocar los objetos en las bandejas seleccionadas" +msgstr "Colocar los objetos en las placas seleccionadas" msgid "Split to objects" msgstr "Partir en varias piezas" @@ -2994,10 +3050,10 @@ msgid "Assembly View" msgstr "Vista de conjunto" msgid "Select Plate" -msgstr "Seleccione la Bandeja" +msgstr "Seleccione la placa" msgid "Assembly Return" -msgstr "Volver a agrupar" +msgstr "Volver a montar" msgid "return" msgstr "volver" @@ -3009,10 +3065,10 @@ msgid "Explosion Ratio" msgstr "Ratio de Explosión" msgid "Section View" -msgstr "Vista de Sección" +msgstr "Vista de la sección" msgid "Assemble Control" -msgstr "Control de Ensamblado" +msgstr "Control de ensamblaje" msgid "Total Volume:" msgstr "Volumen total:" @@ -3028,20 +3084,20 @@ msgstr "Tamaño:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" -"Se han encontrado conflictos de rutas G-Code en la capa %d, z = %.2lf mm. " -"Por favor, separe más los objetos en conflicto (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicting objects further (%s <-> %s)." msgid "An object is layed over the boundary of plate." -msgstr "Un objeto está sobre el límite de la bandeja." +msgstr "Un objeto está sobre el límite de la placa." msgid "A G-code path goes beyond the max print height." -msgstr "Una ruta de G-Code va más allá de la altura máxima de impresión." +msgstr "" msgid "A G-code path goes beyond the boundary of plate." -msgstr "Una ruta de G-Code va más allá del límite de la bandeja." +msgstr "Una ruta de código G va más allá del límite de la placa." msgid "Only the object being edit is visible." msgstr "Sólo es visible el objeto que se está editando." @@ -3051,22 +3107,22 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"Un objeto está colocado en el límite de la bandeja o excede el límite de " +"Un objeto se coloca sobre el límite de la placa o supera el límite de " "altura.\n" -"Por favor solucione el problema moviéndolo totalmente fuera o dentro de la " -"bandeja, y confirme que la altura está entre el volumen de construcción." +"Resuelva el problema colocándolo totalmente dentro de la placa y confirmando " +"que la altura esté dentro del limite de altura." msgid "Calibration step selection" -msgstr "Seleccionar paso de calibración" +msgstr "Selección del paso de calibración" msgid "Micro lidar calibration" -msgstr "Calibración Micro lidar" +msgstr "Calibración del Micro Lidar" msgid "Bed leveling" -msgstr "Nivelación de la cama" +msgstr "Nivelación de la plataforma de impresión" msgid "Resonance frequency identification" -msgstr "Identificación de frecuencia de resonancia" +msgstr "Identificación de la frecuencia de resonancia" msgid "Calibration program" msgstr "Programa de calibración" @@ -3087,22 +3143,22 @@ msgid "Start Calibration" msgstr "Iniciar Calibración" msgid "Completed" -msgstr "Completado" +msgstr "Terminado" msgid "Calibrating" msgstr "Calibrando" msgid "Auto-record Monitoring" -msgstr "Monitorización de Auto-Grabado" +msgstr "Supervisión de grabación automática" msgid "Go Live" -msgstr "Ir A En Vivo" +msgstr "Streaming en directo" msgid "Resolution" msgstr "Resolución" msgid "Show \"Live Video\" guide page." -msgstr "Mostrar guía de \"Video En vivo\"." +msgstr "Mostrar la página de la guía de \"Vídeo en directo\"." msgid "720p" msgstr "720p" @@ -3124,13 +3180,13 @@ msgstr "" "en la impresora, como se muestra en la figura:" msgid "Invalid input." -msgstr "Introducción inválida." +msgstr "Entrada no valida " msgid "New Window" -msgstr "Nueva Ventana" +msgstr "Nueva ventana" msgid "Open a new window" -msgstr "Abrir nueva ventana" +msgstr "Abrir una ventana nueva" msgid "Application is closing" msgstr "La aplicación se está cerrando" @@ -3160,13 +3216,16 @@ msgid "No" msgstr "No" msgid "will be closed before creating a new model. Do you want to continue?" -msgstr "se cerrará antes de crear un nuevo modelo. ¿Quiere continuar?" +msgstr "will be closed before creating a new model. Do you want to continue?" + +msgid "Upload" +msgstr "" msgid "Slice plate" -msgstr "Laminar bandeja" +msgstr "Laminar placa" msgid "Print plate" -msgstr "Imprimir bandeja de impresión" +msgstr "Imprimir placa" msgid "Slice all" msgstr "Laminar todo" @@ -3178,16 +3237,16 @@ msgid "Send" msgstr "Enviar" msgid "Export plate sliced file" -msgstr "Explorar archivo de laminado de bandeja de impresión" +msgstr "Exportar la placa de impresión actual" msgid "Export all sliced file" -msgstr "Exportar todos los archivos de laminado" +msgstr "Exportar todas las placas" msgid "Print all" msgstr "Imprimir todo" msgid "Send all" -msgstr "Mandar todo" +msgstr "Enviar todo" msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" @@ -3202,23 +3261,26 @@ msgid "Show Configuration Folder" msgstr "Mostrar Carpeta de Configuración" msgid "Show Tip of the Day" -msgstr "Mostrar Consejo Diario" +msgstr "Mostrar el consejo del día" + +msgid "Report issue" +msgstr "Report issue" msgid "Check for Update" -msgstr "Comprobar Actualizaciones" +msgstr "Comprobar Actualicaciones" msgid "Open Network Test" -msgstr "Abrir Test de Red" +msgstr "Abrir prueba de red" #, c-format, boost-format msgid "&About %s" msgstr "&Acerca de %s" msgid "Upload Models" -msgstr "Cargar Modelos" +msgstr "Cargar modelos" msgid "Download Models" -msgstr "Descargar Modelos" +msgstr "Descargar modelos" msgid "Default View" msgstr "Vista por Defecto" @@ -3262,7 +3324,7 @@ msgid "Right View" msgstr "Vista derecha" msgid "Start a new window" -msgstr "Abrir nueva ventana" +msgstr "Iniciar una nueva ventana" msgid "New Project" msgstr "Nuevo proyecto" @@ -3316,22 +3378,22 @@ msgid "Export 3mf file without using some 3mf-extensions" msgstr "Exporte el archivo 3mf sin usar algunas de las extensiones" msgid "Export current sliced file" -msgstr "Exportar archivo de laminado actual" +msgstr "Exportar el archivo cortado actual" msgid "Export all plate sliced file" -msgstr "Exportar todos los archivos de laminado de bandeja" +msgstr "Exportar todos los archivos cortados en trozos" msgid "Export G-code" -msgstr "Exportar G-Code" +msgstr "Exportar código G" msgid "Export current plate as G-code" -msgstr "Exportar bandeja actual cómo G-code" +msgstr "Exportar la placa actual como gcode" msgid "Export &Configs" -msgstr "Exportar &Configuraciones" +msgstr "Exportar & Configuración" msgid "Export current configuration to files" -msgstr "Exportar configuración actual a archivos" +msgstr "Exportar la configuración actual" msgid "Export" msgstr "Exportar" @@ -3394,13 +3456,19 @@ msgid "Use Perspective View" msgstr "Utilizar vista en perspectiva" msgid "Use Orthogonal View" -msgstr "Utilizar Vista Octogonal" +msgstr "Utilizar Vista Ortogonal" msgid "Show &Labels" -msgstr "Mostrar &Etiquetas" +msgstr "Mostrar y etiquetar" msgid "Show object labels in 3D scene" -msgstr "Mostrar etiquetas en escena 3D" +msgstr "Mostrar etiquetas de objetos en una escena 3D" + +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Show object overhang highlight in 3D scene" msgid "Preferences" msgstr "Preferencias" @@ -3412,58 +3480,52 @@ msgid "Help" msgstr "Ayuda" msgid "Temperature Calibration" -msgstr "Calibración de temperatura" +msgstr "" msgid "Pass 1" -msgstr "Paso 1" +msgstr "" msgid "Flow rate test - Pass 1" -msgstr "Test de caudal - Paso 1" +msgstr "" msgid "Pass 2" -msgstr "Paso 2" +msgstr "" msgid "Flow rate test - Pass 2" -msgstr "Test de Caudal - Paso 2" +msgstr "" msgid "Flow rate" -msgstr "Test de caudal" +msgstr "" msgid "Pressure advance" msgstr "" msgid "Retraction test" -msgstr "Test de retracción" - -msgid "Orca Tolerance Test" -msgstr "Test de Tolerancia Orca" +msgstr "" msgid "Max flowrate" -msgstr "Máximo caudal" +msgstr "" msgid "VFA" msgstr "" msgid "More..." -msgstr "Más..." +msgstr "" msgid "Tutorial" msgstr "" msgid "Calibration help" -msgstr "Ayuda de calibración" +msgstr "" msgid "More calibrations" -msgstr "Más calibraciones" - -msgid "3D Models" -msgstr "Modelos 3D" +msgstr "" msgid "&Open G-code" -msgstr "Abrir G-Code (&O)" +msgstr "Abrir código G (&O)" msgid "Open a G-code file" -msgstr "Abrir un archivo G-Code" +msgstr "Abrir un archivo código G" msgid "Re&load from Disk" msgstr "Re&cargar desde el Disco" @@ -3478,35 +3540,34 @@ msgid "Export toolpaths as OBJ" msgstr "Exportar trayectorias de herramientas como OBJ" msgid "Open &Studio" -msgstr "Abrir $Studio" +msgstr "Abrir & Studio" msgid "Open Studio" -msgstr "Abrir Studio" +msgstr "Estudio abierto" msgid "&Quit" -msgstr "Salir (&Q)" +msgstr "Sa&lir" #, c-format, boost-format msgid "Quit %s" -msgstr "Salir %s" +msgstr "Cerrar %s" msgid "&File" msgstr "&Archivo" msgid "&View" -msgstr "&Ver" +msgstr "Ve&r" msgid "&Help" -msgstr "Ayuda (&H)" +msgstr "Ayu&da" #, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." -msgstr "Existe un archivo con el mismo nombre: %s, ¿desea sobreescribirlo?." +msgstr "A file exists with the same name: %s. Do you want to override it?" #, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." -msgstr "" -"Existe unaconfiguración con el mismo nombre: %s, ¿desea sobreescribirla?." +msgstr "A config exists with the same name: %s. Do you want to override it?" msgid "Overwrite file" msgstr "Sobrescribir archivo" @@ -3518,34 +3579,26 @@ msgid "No to All" msgstr "No a todo" msgid "Choose a directory" -msgstr "Elegir un directorio" +msgstr "Seleccionar directorio" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" msgid_plural "There are %d configs exported. (Only non-system configs)" msgstr[0] "" -"Hay %d configuración exportada. (solo configuraciones que no sean del " -"sistema)" msgstr[1] "" -"Hay %d configuraciones exportadas. (solo configuraciones que no sean del " -"sistema)" msgid "Export result" msgstr "Exportar resultado" msgid "Select profile to load:" -msgstr "Seleccionar perfil a cargar:" +msgstr "Seleccione el perfil que desea cargar:" #, c-format, 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)" msgstr[0] "" -"Hay %d configuración exportada. (solo configuraciones que no sean del " -"sistema y compatibles)" msgstr[1] "" -"Hay %d configuraciones importadas. (Solo las configuraciones compatibles y " -"no-del-sistema)" msgid "Import result" msgstr "Importar resultado" @@ -3557,7 +3610,7 @@ msgid "The project is no longer available." msgstr "El proyecto ya no está disponible." msgid "Filament Settings" -msgstr "Configuración de Filamento" +msgstr "Configuración del filamento" msgid "" "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -3566,10 +3619,11 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"¿Quieres sincronizar tus datos personales desde la Bambú Cloud? \n" -"Esta contiene la siguiente información:\n" -"1. Los Preajustes de Proceso\n" -"2. Los Preajustes de Filamento3. Los preajustes de la Impressora" +"¿Quieres sincronizar tus datos personales desde Bambu Cloud? \n" +"Contiene la siguiente información:\n" +"1. Ajustes preestablecidos de proceso\n" +"2. Ajustes preestablecidos de filamento\n" +"3. Ajustes preestablecidos de impresora" msgid "Synchronization" msgstr "Sincronización" @@ -3577,70 +3631,70 @@ msgstr "Sincronización" msgid "Initialize failed (No Device)!" msgstr "¡Inicialización fallida (No hay dispositivo)!" -msgid "Initialize failed (No Camera Device)!" -msgstr "¡Inicialización fallida (No hay Cámara)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" -msgid "Initializing..." -msgstr "Iniciando..." +msgid "Initialize failed (No Camera Device)!" +msgstr "" +"¡Falló la inicialización (no se ha encontrado ningún dispositivo de cámara)!" + +msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgstr "La impresora está descargando; espere a que finalice la descarga." msgid "Loading..." msgstr "Cargando..." -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Inicialización fallida (No soportada con el modo Solo Red Local)" +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicialización fallida (No accesible en el modo solo Red Local)" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "" -"La impresora está ocupada descargando. Por favor, espere a que finalice." +msgstr "Error de inicialización (no se puede acceder en modo LAN)." msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialización fallida (Perdida la IP de red de la impresora)" +msgstr "¡Fallo en la inicialización (falta la IP LAN de la impresora)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Inicialización fallida (No soportada por la impresora)" +msgid "Initializing..." +msgstr "Iniciando..." #, c-format, boost-format msgid "Initialize failed (%s)!" -msgstr "¡Fallo al inicializar (%s)!" +msgstr "¡Falló la inicialización (%s)!" msgid "Network unreachable" -msgstr "Red inalcanzable" +msgstr "Red inaccesible" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "Parado [%d]" +msgstr "¡Detenido [%d]!" msgid "Stopped." msgstr "Detenido." msgid "LAN Connection Failed (Failed to start liveview)" -msgstr "Fallo de Conexión de Red Local (Fallo al iniciar vista en vivo)" +msgstr "Conexión LAN fallida (no se pudo iniciar la vista en vivo)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Virtual Camera Tools es necesario para esta tarea.\n" -"¿Desea instalarlas?" +"¡Se necesitan herramientas de cámara virtual para esta tarea!\n" +"¿Quieres instalarlos?" msgid "Downloading Virtual Camera Tools" -msgstr "Descargando Herramientas de Cámara Virtual" +msgstr "Descargando herramientas de cámara virtual" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" -"Otra cámara virtual se está ejecutando.\n" -"Orca Slicer solo soporta una cámara virtual.\n" -"¿Desea detener esta cámara virtual?" +"Hay otra cámara virtual en funcionamiento.\n" +"Bambu Studio solo admite una cámara virtual.\n" +"¿Quieres detener esta cámara virtual?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Inicialización de cámara virtual (%s)" +msgstr "¡Falló la inicialización de la cámara virtual (%s)!" msgid "Information" msgstr "Información" @@ -3659,53 +3713,50 @@ msgid "Month" msgstr "Mes" msgid "All Files" -msgstr "Todos los Archivos" +msgstr "Todos los archivos" msgid "Group files by year, recent first." -msgstr "Agrupar archivos por año, primero los recientes." +msgstr "Agrupar ficheros por año, primero los más recientes" msgid "Group files by month, recent first." -msgstr "Agrupar archivos por mes, primero los recientes." +msgstr "Agrupar ficheros por mes, primero los más recientes." msgid "Show all files, recent first." -msgstr "Mostrar todos los archivos, primero los recientes." +msgstr "Mostrar todos los fciheros, primero los más recientes." msgid "Timelapse" -msgstr "Intervalo" +msgstr "Timelapse" msgid "Switch to timelapse files." -msgstr "Cambiar a archivos de timelapse." +msgstr "Cambia a archivos de timelapse." msgid "Video" msgstr "Video" msgid "Switch to video files." -msgstr "Cambiar a archivos de video." +msgstr "Cambia a archivos de vídeo." + +msgid "Switch to 3mf model files." +msgstr "Switch to 3mf model files." msgid "Delete selected files from printer." -msgstr "Borrar archivos seleccionados desde la impresora." +msgstr "Delete selected files from printer." msgid "Download" msgstr "Descargar" msgid "Download selected files from printer." -msgstr "Descargar achivos seleccionados desde la impresora." +msgstr "Descargar archivos seleccionados de la impresora." msgid "Select" msgstr "Seleccionar" msgid "Batch manage files." -msgstr "Arhivos de proceso por lotes." +msgstr "Gestion de archivos por lotes." msgid "No printers." msgstr "No hay impresoras." -msgid "Not supported by this model of printer!" -msgstr "¡No soportado por este modelo de impresora!" - -msgid "Connecting..." -msgstr "Conectando…" - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "Error de conexión [%d]!" @@ -3713,34 +3764,57 @@ msgstr "Error de conexión [%d]!" msgid "Loading file list..." msgstr "Cargando lista de archivos..." -msgid "No files" -msgstr "No hay archivos" - -msgid "Not accessible in LAN-only mode!" -msgstr "¡No accesible en modelo de solo red local!" - -msgid "Missing LAN ip of printer!" -msgstr "¡IP de red local pérdida!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "No files [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "Va a borrar %u archivos. ¿Está seguro de continuar?" +msgid "Load failed [%d]" +msgstr "Load failed [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" -msgstr "Borrar archivos" +msgstr "Delete files" + +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Do you want to delete the file '%s' from printer?" + +msgid "Delete file" +msgstr "Delete file" + +msgid "Fetching model infomations ..." +msgstr "Fetching model information..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Failed to fetch model infomation from printer." + +msgid "Failed to parse model infomations." +msgstr "Failed to parse model infomation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." -msgstr "¡El archivo '%s' se perdió!\" Por favor, vuelva a descargárselo." +msgstr "El archivo '%s' se ha perdido. Por favor, descárguelo de nuevo." msgid "Download waiting..." -msgstr "Descarga esperando..." +msgstr "Descarga en espera..." msgid "Play" msgstr "Reproducir" msgid "Open Folder" -msgstr "Abrir Carpeta" +msgstr "Abrir carpeta" msgid "Download finished" msgstr "Descarga finalizada" @@ -3749,6 +3823,12 @@ msgstr "Descarga finalizada" msgid "Downloading %d%%..." msgstr "Descargando %d%%..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Velocidad:" @@ -3762,7 +3842,7 @@ msgid "Zoom" msgstr "Zoom" msgid "Translation/Zoom" -msgstr "Conversión/Zoom" +msgstr "Translación/zoom" msgid "3Dconnexion settings" msgstr "Ajustes de conexión 3D" @@ -3770,15 +3850,6 @@ msgstr "Ajustes de conexión 3D" msgid "Swap Y/Z axes" msgstr "Intercambiar los ejes Y/Z" -msgid "Camera" -msgstr "Cámara" - -msgid "SD Card" -msgstr "Tarjeta SD" - -msgid "Camera Setting" -msgstr "Ajuste de Cámara" - msgid "Printing Progress" msgstr "Progreso de impresión" @@ -3792,16 +3863,28 @@ msgid "0" msgstr "0" msgid "Layer: N/A" -msgstr "Capa: N/A" +msgstr "Layer: N/A" + +msgid "Immediately score" +msgstr "Immediately score" msgid "Clear" -msgstr "Vaciar" +msgstr "Borrar" + +msgid "Camera" +msgstr "Cámara" + +msgid "SD Card" +msgstr "Tarjeta SD" + +msgid "Camera Setting" +msgstr "Configuración de cámara" msgid "Control" msgstr "Control" msgid "Print Options" -msgstr "Opciones de Impresora" +msgstr "Opciones de impresión" msgid "100%" msgstr "100%" @@ -3810,10 +3893,10 @@ msgid "Lamp" msgstr "Luz" msgid "Aux" -msgstr "Aux" +msgstr "aux" msgid "Cham" -msgstr "Costura" +msgstr "Cámara" msgid "Bed" msgstr "Cama" @@ -3825,76 +3908,67 @@ msgid "Debug Info" msgstr "Información de Depuración" msgid "No SD Card" -msgstr "Sin tarjeta SD" +msgstr "Tarjeta SD no encontrada" msgid "SD Card Abnormal" -msgstr "Tarjeta SD Anormal" - -msgid "Printing List" -msgstr "Imprimiendo Lista" +msgstr "Tarjeta SD errónea" msgid "Cancel print" -msgstr "Cancelar Impresión" +msgstr "Cancelar impresión" msgid "Are you sure you want to cancel this print?" -msgstr "¿Está seguro que desea cancelar esta impresión?" +msgstr "¿Está seguro de cancelar la impresión?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Desconectado de la impresora [%s] debido a modo de red deshabilitado. Por " -"favor, reconéctese la impresora ingresando con su cuenta de usuario." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Desconectado de la impresora [%s] debido a modo de red habilitado. Por " -"favor, reconéctese la impresora ingresando con su cuenta de usuario." +msgid "Done" +msgstr "Done" msgid "Downloading..." msgstr "Descargando…" msgid "Cloud Slicing..." -msgstr "Laminado en la Nube..." +msgstr "Slicing en la nube..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." -msgstr "Hay %s tareas por delante, en la Cola de Laminado en la Nube." +msgstr "In Cloud Slicing Queue, there are %s tasks ahead of you." #, c-format, boost-format msgid "Layer: %s" -msgstr "Capa: %s" +msgstr "Layer: %s" + +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Please give a score for your favorite Bambu Market model." + +msgid "Score" +msgstr "Score" #, c-format, boost-format msgid "Layer: %d/%d" -msgstr "Capa: %d/%d" +msgstr "Layer: %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." -msgstr "Caliente la boquilla a más de 170 grados antes de cargar el filamento." +msgstr "" +"Por favor, calienta la boquilla a más de 170 grados antes de cargar el " +"filamento." msgid "Still unload" -msgstr "Aún descargado" +msgstr "Todavía estoy descargando" msgid "Still load" -msgstr "Aún cargado" +msgstr "Todavía estoy cargando" msgid "Please select an AMS slot before calibration" -msgstr "Seleccione una ranura AMS antes de la calibración" +msgstr "Seleccione una ranura AMS antes de realizar la calibración." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." msgstr "" "No se puede leer la información del filamento: el filamento está cargado en " -"el cabezal de la herramienta, por favor, descargue el filamento y vuelva a " -"intentarlo." +"el cabezal; descargue el filamento e inténtelo de nuevo." msgid "This only takes effect during printing" -msgstr "Esto solo tendrá efecto durante la impresión" +msgstr "Esto solo tiene efecto durante la impresión" msgid "Silent" msgstr "Silencio" @@ -3909,26 +3983,17 @@ msgid "Ludicrous" msgstr "Lúdico" msgid "Can't start this without SD card." -msgstr "No puede iniciarse sin una tarjeta SD." - -msgid "Failed to connect to the server" -msgstr "No se ha podido conectar con el servidor" +msgstr "No puedo empezar sin una tarjeta microSD." msgid "Status" msgstr "Estado" -msgid "Media" -msgstr "Medios" - msgid "Update" msgstr "Actualizar" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "No se ha podido conectar a la impresora" - msgid "Don't show again" msgstr "No mostrar de nuevo" @@ -3978,7 +4043,7 @@ msgid "Undo integration was successful." msgstr "La operación de deshacer se ha realizado con éxito." msgid "New network plug-in available." -msgstr "Nuevo complemento de red disponible." +msgstr "Nuevo complemento de red disponible" msgid "Details" msgstr "Detalles" @@ -3999,7 +4064,7 @@ msgid "Open Folder." msgstr "Abrir Carpeta." msgid "Safely remove hardware." -msgstr "Quitar hardware con seguridad." +msgstr "Safely remove hardware." #, c-format, boost-format msgid "%1$d Object has custom supports." @@ -4016,11 +4081,11 @@ msgstr[1] "%1$d Los objetos tienen pintura de color." #, 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 El objeto se ha cargado como parte del objeto de corte." -msgstr[1] "%1$d Los objetos se han cargado como partes del objeto de corte" +msgstr[0] "" +msgstr[1] "" msgid "ERROR" -msgstr "ERROR" +msgstr "¡Error!" msgid "CANCELED" msgstr "CANCELADO" @@ -4029,10 +4094,10 @@ msgid "COMPLETED" msgstr "COMPLETADO" msgid "Cancel upload" -msgstr "Carga cancelada" +msgstr "Cancelar envío" msgid "Slice ok." -msgstr "Laminado correcto." +msgstr "Rebanado correcto." msgid "Jump to" msgstr "Ir a" @@ -4044,16 +4109,16 @@ msgid "Warning:" msgstr "Advertencia:" msgid "Export successfully." -msgstr "Exportación exitosa." +msgstr "Exportado correctamente" msgid "Serious warning:" -msgstr "Seria advertencia:" +msgstr "" msgid " (Repair)" msgstr " (Reparación)" msgid " Click here to install it." -msgstr " Presiona aquí para instalarlo." +msgstr " Haga clic aquí para instalarlo." msgid "WARNING:" msgstr "AVISO:" @@ -4064,7 +4129,7 @@ msgstr "" "habilitado." msgid "Gcode path overlap" -msgstr "Superposición de la ruta del G-Code" +msgstr "Superposición de la ruta del Gcode" msgid "Support painting" msgstr "Soporte pintado" @@ -4073,7 +4138,7 @@ msgid "Color painting" msgstr "Pintura en color" msgid "Cut connectors" -msgstr "Cortar Conectores" +msgstr "Cut connectors" msgid "Layers" msgstr "Capas" @@ -4114,24 +4179,26 @@ msgid "Bottom" msgstr "Inferior" msgid "Enable AI monitoring of printing" -msgstr "Activar monitorización por IA de la impresión" +msgstr "Permitir la supervisión de la impresión mediante IA" msgid "Sensitivity of pausing is" -msgstr "La sensibilidad de pausa es" +msgstr "La sensibilidad de la pausa es" msgid "Enable detection of build plate position" -msgstr "Activar detección de posición de bandeja" +msgstr "Activar la detección de la posición de la placa de impresión" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." -msgstr "La etiqueta de localización." +msgstr "" +"Se detectará la etiqueta de localización de la placa de impresión y se " +"detendrá la impresión si la etiqueta no se encuentra en un rango predefinido." msgid "First Layer Inspection" -msgstr "Inspección de Primera Capa" +msgstr "Inspección de la primera capa" msgid "Auto-recovery from step loss" -msgstr "Autorecuperar desde pérdida de paso" +msgstr "Recuperación automática de la pérdida de pasos" msgid "Global" msgstr "Global" @@ -4154,12 +4221,9 @@ msgstr "Ajustes del filamento" msgid "Printer settings" msgstr "Ajustes de la impresora" -msgid "Untitled" -msgstr "Sin título" - #, boost-format -msgid " plate %1%:" -msgstr " bandeja %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Nombre no válido, los siguientes caracteres no están permitidos:" @@ -4201,19 +4265,19 @@ msgid "Add one filament" msgstr "Añadir un filamento" msgid "Remove last filament" -msgstr "Borrar último filamento" +msgstr "Retirar el último filamento" msgid "Synchronize filament list from AMS" -msgstr "Sicronizar filamentos de la lista AMS" +msgstr "Sincronizar filamentos desde AMS" msgid "Set filaments to use" -msgstr "Elegir filamentos para usar" +msgstr "Establecer filamentos a utilizar" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"No hay filamentos AMS. Por favor, seleccione una impresora en la página " -"'Dispositivos' para cargar información AMS." +"Sin filamentos en AMS. Seleccione una impresora en la página «Dispositivo» " +"para cargar la información de AMS." msgid "Sync filaments with AMS" msgstr "Sincronizar filamentos con AMS" @@ -4222,33 +4286,31 @@ msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Sincronizar filamentos con AMS descartará todos los preajustes de filamento " -"y colores. ¿Desea continuar?" +"Al sincronizar los filamentos con AMS, se eliminarán todos los ajustes " +"preestablecidos y colores de filamento seleccionados actualmente. ¿Quieres " +"continuar?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " "all?" msgstr "" -"Se realizó la sincronización, ¿Desea sincronizar solo los cambios o " -"resincronizar todo?" +"Already did a synchronization; do you want to sync only changes or resync " +"all?" msgid "Sync" -msgstr "Sincronizar" +msgstr "Sync" msgid "Resync" -msgstr "Resincronizar" +msgstr "Resync" msgid "There are no compatible filaments, and sync is not performed." -msgstr "No hay filamentos compatible, y no se ha realizado la sincronización." +msgstr "No hay filamentos compatibles y no se puede realiza la sincronización." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" -"Hay algunos filamentos desconocidos mapeados en el preajuste genérico. Por " -"favor actualice o reinicie Orca Slicer para comprobar si hay una " -"actualización de preajustes del sistema." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -4259,8 +4321,8 @@ msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -"Desmontado correctamente. El dispositivo %s(%s) ahora puede ser eliminado de " -"forma segura." +"Se expulsó el dispositivo correctamente. El dispositivo %s (%s) ahora se " +"puede quitar del ordenador de forma segura." #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -4277,45 +4339,44 @@ msgid "" "The bed temperature exceeds filament's vitrification temperature. Please " "open the front door of printer before printing to avoid nozzle clog." msgstr "" -"La temperatura de la cama excede la temperatura de vitrificación del " -"filamento. Por favor, abra la puerta frontal de la impresora antes de " -"imprimir para evitar atascos en la boquilla." +"La temperatura del lecho supera la temperatura de vitrificación del " +"filamento. Abra la puerta frontal de la impresora antes de imprimir para " +"evitar que se obstruya la boquilla." 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 "" -"La dureza de la boquilla requerida por el filamento es más alta que la " -"dureza por defecto de la impresora. Por favor, reemplace la boquilla " -"endurecida y el filamento, de otra forma, la boquilla se atascará o se " -"dañará." +"La dureza de la boquilla requerida por el filamento es superior a la dureza " +"de la boquilla predeterminada de la impresora. Sustituya la boquilla o el " +"filamento, de lo contrario, la boquilla se desgastará o dañará." #, c-format, boost-format msgid "Loading file: %s" msgstr "Cargando archivo: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "El 3mf no es de Bambu Lab, cargar datos de geometría solo." +msgstr "El 3mf no es Bambu lab, solo se carga datos de geometría." msgid "Load 3mf" msgstr "Cargar 3mf" msgid "The Config can not be loaded." -msgstr "La Configuración no será cargada." +msgstr "La configuración no puede ser cargada." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"El 3mf está generado por un Orca Slicer antiguo, cargar solo datos de " -"geometría." +"3mf generado con versión antigua de Bambu Studio, se cargan datos de " +"geometría unicamente." #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" msgstr "" -"La versión de 3mf %s es más nueva que la versión de %s %s, encontradas las " -"siguientes llaves no reconocidas:" +"La versión %s del 3mf es más reciente que la versión %s de %s. Se " +"encontraron las siguientes claves sin reconocer:" msgid "You'd better upgrade your software.\n" msgstr "Será mejor que actualices tu software.\n" @@ -4328,25 +4389,25 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"La versión de 3mf %s es más nueva que la versión de %s %s, se sugiere " -"actualizar su sofware." +"La versión %s del 3mf es más reciente que la versión %s de %s. Por favor " +"actualice su software." msgid "Invalid values found in the 3mf:" -msgstr "Valores inválidos encontrados en el 3mf:" +msgstr "Invalid values found in the 3mf:" msgid "Please correct them in the param tabs" -msgstr "Por favor, corrijalos en las pestañas de parámetros" +msgstr "Please correct them in the Param tabs" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "¡El 3mf no es compatible, cargue solamente los datos de geometría!" +msgstr "el 3mf no es compatible, ¡cargue sólo los datos geométricos!" msgid "Incompatible 3mf" -msgstr "3mf Incompatible" +msgstr "3mf Incompatible " msgid "Name of components inside step file is not UTF8 format!" msgstr "" -"¡El nombre de los componentes dentro del archivo de pasos no tiene formato " -"UTF8!" +"El nombre de los componentes dentro del archivo de pasos no tiene formato " +"UTF8." msgid "The name may show garbage characters!" msgstr "¡El nombre puede mostrar caracteres no válidos!" @@ -4381,17 +4442,17 @@ msgid "" "the file be loaded as a single object having multiple parts?" msgstr "" "Este archivo contiene varios objetos colocados a varias alturas.\n" -"En lugar de considerarlos como objetos múltiples, ¿debería \n" -"el archivo como un único objeto con múltiples piezas?" +"En lugar de considerarlos como objetos múltiples. Debería\n" +"cargarse el archivo como un único objeto con múltiples partes?" msgid "Multi-part object detected" -msgstr "Objeto multipieza detectado" +msgstr "Se detectó un objeto de varias partes" msgid "Load these files as a single object with multiple parts?\n" -msgstr "¿Cargar estos archivos como un objeto único con múltiples piezas?\n" +msgstr "¿Cargar estos archivos como un objeto único con múltiples partes?\n" msgid "Object with multiple parts was detected" -msgstr "Se ha detectado un objeto con varias piezas" +msgstr "Se ha detectado un objeto con varias partes" msgid "The file does not contain any geometry data." msgstr "El archivo no contiene ninguna información geométrica." @@ -4400,8 +4461,8 @@ msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Tu objeto parece demasiado grande, ¿Deseas disminuirlo para que quepa en la " -"cama caliente automaticamente?" +"Su objeto parece ser demasiado grande. ¿Desea reducirlo para que se ajuste a " +"la cama de impresión?" msgid "Object too large" msgstr "Objeto demasiado grande" @@ -4413,16 +4474,16 @@ msgid "Save file as:" msgstr "Guardar archivo como:" msgid "Delete object which is a part of cut object" -msgstr "Borrar objetos los cuales son piezas del objeto cortado" +msgstr "Delete object which is a part of cut object" msgid "" "You try to delete an object which is a part of a cut object.\n" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed." msgstr "" -"Se intenta eliminar un objeto que forma parte de un objeto cortado.\n" -"Esta acción romperá una correspondencia de corte.\n" -"Después de eso la consistencia del modelo no puede ser garantizada." +"You are trying to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that, model consistency can't be guaranteed." msgid "The selected object couldn't be split." msgstr "El objeto seleccionado no ha podido ser dividido." @@ -4431,13 +4492,13 @@ msgid "Another export job is running." msgstr "Otro trabajo de exportación está en marcha." msgid "Select a new file" -msgstr "Seleccione un nuevo archivo" +msgstr "Selecciona un archivo nuevo" msgid "File for the replace wasn't selected" -msgstr "El archivo de reemplazo no ha sido seleccionado" +msgstr "No se ha seleccionado el archivo para la sustitución" msgid "Error during replace" -msgstr "Error durante el reemplazo" +msgstr "Error durante la sustitución" msgid "Please select a file" msgstr "Por favor, seleccione un archivo" @@ -4455,11 +4516,11 @@ msgid "Invalid data" msgstr "Datos inválidos" msgid "Slicing Canceled" -msgstr "Laminado Cancelado" +msgstr "Se canceló el proceso de slicing" #, c-format, boost-format msgid "Slicing Plate %d" -msgstr "Bandeja de corte %d" +msgstr "Placa de corte %d" msgid "Please resolve the slicing errors and publish again." msgstr "Por favor, resuelve los errores de corte y publica de nuevo." @@ -4467,15 +4528,16 @@ msgstr "Por favor, resuelve los errores de corte y publica de nuevo." msgid "" "Network Plug-in is not detected. Network related features are unavailable." msgstr "" -"Complemento de red no detectado. Características relacionadas no disponibles." +"No se ha detectado el complemento de red. Las funciones relacionadas con la " +"red no están disponibles." msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -"Previsualizar solo el modo:\n" -"El archivo cargado contiene solo G-Code, no puedo entrar a la página de " -"Preparación" +"Modo de vista previa:\n" +"El archivo cargado contiene solo el código G, no puede entrar en la página " +"Preparar" msgid "You can keep the modified presets to the new project or discard them" msgstr "" @@ -4486,41 +4548,41 @@ msgid "Creating a new project" msgstr "Creando un nuevo proyecto" msgid "Load project" -msgstr "Cargar Proyecto" +msgstr "Carga de Proyecto" msgid "" "Failed to save the project.\n" "Please check whether the folder exists online or if other programs open the " "project file." msgstr "" -"Fallo salvando el proyecto.\n" -"Por favor, comprobar si la carpeta existe en línea o si otros programas " -"tienen abierto el archivo de proyecto." +"No se pudo guardar el proyecto.\n" +"Compruebe si la carpeta existe en línea o si otros programas tienen abierto " +"el archivo del proyecto." msgid "Save project" -msgstr "Salvar proyecto" +msgstr "Guardar proyecto" msgid "Importing Model" msgstr "Importando modelo" msgid "prepare 3mf file..." -msgstr "preparar el archivo 3mf..." +msgstr "preparando el archivo 3mf..." msgid "downloading project ..." msgstr "descargando proyecto..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Proyecto descargado %d%%" +msgstr "Proyecto %d%% descargado" msgid "The selected file" msgstr "El archivo seleccionado" msgid "does not contain valid gcode." -msgstr "no contiene G-Code válido." +msgstr "no contiene gcode válido." msgid "Error occurs while loading G-code file" -msgstr "Se produce un error al cargar el archivo de G-Code" +msgstr "Se produce un error al cargar el archivo de código G" msgid "Drop project file" msgstr "Soltar el archivo del proyecto" @@ -4535,16 +4597,16 @@ msgid "Import geometry only" msgstr "Importar geometría solo" msgid "Only one G-code file can be opened at the same time." -msgstr "Sólo se puede abrir un archivo de G-Code al mismo tiempo." +msgstr "Sólo se puede abrir un archivo de código G al mismo tiempo." msgid "G-code loading" -msgstr "Carga del G-Code" +msgstr "Carga del código G" msgid "G-code files can not be loaded with models together!" -msgstr "¡Los archivos de G-Code no pueden cargarse con los modelos juntos!" +msgstr "¡Los archivos de código G no pueden cargarse con los modelos juntos!" msgid "Can not add models when in preview mode!" -msgstr "No se pueden añadir modelos en el modo de vista previa!" +msgstr "No se pueden añadir modelos en el modo de vista previa" msgid "Add Models" msgstr "Añadir Modelos" @@ -4557,7 +4619,7 @@ msgstr "" "El proyecto actual tiene cambios sin guardar, ¿guardarlos antes de continuar?" msgid "Remember my choice." -msgstr "Recordar my elección." +msgstr "Remember my choice." msgid "Number of copies:" msgstr "Número de copias:" @@ -4566,18 +4628,18 @@ msgid "Copies of the selected object" msgstr "Copias del objeto seleccionado" msgid "Save G-code file as:" -msgstr "Guardar archivo G-Code como:" +msgstr "Guardar archivo Código G como:" msgid "Save Sliced file as:" -msgstr "Guardar el archivo laminado como:" +msgstr "Guardar el archivo rebanado como:" #, c-format, boost-format msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"El archivo %s ha sido mandado al almacenamiento de la impresora y puede ser " -"visto en la impresora." +"El archivo %s se envió al almacenamiento de la impresora y se puede ver en " +"la impresora." msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " @@ -4594,7 +4656,7 @@ msgstr "" "Sugiere utilizar el auto-posicionamiento para evitar colisiones al imprimir." msgid "Send G-code" -msgstr "Enviar G-Code" +msgstr "Enviar código G" msgid "Send to printer" msgstr "Enviar a la impresora" @@ -4608,7 +4670,7 @@ msgid "Invalid number" msgstr "Número inválido" msgid "Plate Settings" -msgstr "Configuración de Bandeja" +msgstr "Plate Settings" #, boost-format msgid "Number of currently selected parts: %1%\n" @@ -4616,7 +4678,7 @@ msgstr "Number of currently selected parts: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "Número de objetos seleccionados actualmente: %1%\n" +msgstr "" #, boost-format msgid "Part name: %1%\n" @@ -4646,17 +4708,17 @@ msgstr "Volumen: %1% mm³\n" #, boost-format msgid "Triangles: %1%\n" -msgstr "Triángulos: %1%\n" +msgstr " Triángulos: %1%\n" msgid "Tips:" -msgstr "Consejos:" +msgstr "Consejos" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" -"La característica \"Arreglar Modelo\" está actualmente solo en Windows. Por " -"favor, en Orca Slicer(windows) o el software CAD." +"Actualmente, la función «Fix Model» solo está disponible en Windows. Repare " +"el modelo en Bambu Studio (Windows) o en el software CAD." #, c-format, boost-format msgid "" @@ -4664,9 +4726,9 @@ msgid "" "still want to do this printing, please set this filament's bed temperature " "to non zero." msgstr "" -"Bandeja% d: %s no está sugerido para ser usado para imprimir filamento " -"%s(%s). Si usted aún quiere imprimir, por favor, seleccione 0 en la " -"temperatura de Bandeja." +"Plate% d: %s is not suggested for use printing filament %s(%s). If you still " +"want to do this print job, please set this filament's bed temperature to a " +"number that is not zero." msgid "Switching the language requires application restart.\n" msgstr "El cambio de idioma requiere el reinicio de la aplicación.\n" @@ -4695,10 +4757,10 @@ msgid "Second" msgstr "Segundo" msgid "Browse" -msgstr "Explorar" +msgstr "Navegar" msgid "Choose Download Directory" -msgstr "Elegir Directorio de Descarga" +msgstr "Elija el directorio de descargas" msgid "General Settings" msgstr "Configuración General" @@ -4721,9 +4783,6 @@ msgstr "Otros" msgid "Login Region" msgstr "Región de inicio de sesión" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Métrico" @@ -4734,29 +4793,23 @@ msgid "Units" msgstr "Unidades" msgid "Zoom to mouse position" -msgstr "Hacer zoom en la posición del ratón" +msgstr "Zoom to mouse position" msgid "" "Zoom in towards the mouse pointer's position in the 3D view, rather than the " "2D window center." msgstr "" -"Hacer zoom hacia la posición del puntero de ratón en la vista 3D, en vez del " -"centro de la ventana 2D." +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." msgid "Show \"Tip of the day\" notification after start" -msgstr "Mostrar la notificación \"Consejo del Día\" después de empezar" +msgstr "Mostrar la «Sugerencia del día» después del inicio" msgid "If enabled, useful hints are displayed at startup." -msgstr "Si está activado, las sugerencias útiles serán mostradas al inicio." - -msgid "Show g-code window" -msgstr "Mostrar la ventana de g-code" - -msgid "If enabled, g-code window will be displayed." -msgstr "Si está activado, se mostrará la ventana de G-Code." +msgstr "Si está activado, se muestran sugerencias útiles al inicio." msgid "Presets" -msgstr "Preajustes" +msgstr "Presets" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4767,49 +4820,55 @@ msgid "User Sync" msgstr "Sincronización de usuario" msgid "Update built-in Presets automatically." -msgstr "Actualizar preajustes integrados automaticamente." +msgstr "Update built-in presets automatically." msgid "System Sync" -msgstr "Sincronizar sistema" +msgstr "System Sync" msgid "Clear my choice on the unsaved presets." -msgstr "Limpiar mi selección de preajustes no guardados." +msgstr "Clear my choice on the unsaved presets." -msgid "Associate files to OrcaSlicer" -msgstr "Asociar archivos a OrcaSlicer" +msgid "Associate files to BambuStudio" +msgstr "Asociar archivos a BambuStudio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Asociar archivos .3mf a OrcaSlicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Asociar archivos .3mf a BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"Si se activa, ajusta OrcaSlicer como aplicación por defecto para abrir " +"Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " "archivos .3mf" -msgid "Associate .stl files to OrcaSlicer" -msgstr "Asociar archivos .stl a OrcaSlicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Asociar archivos .stl a BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"Si se activa, ajusta OrcaSlicer como aplicación por defecto para abrir " +"Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " "archivos .stl" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Asociar archivos .step/.stp a OrcaSlicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Asociar archivos .step/.stp a BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"Si se activa, ajusta OrcaSlicer como aplicación por defecto para abrir " +"Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " "archivos .step" +msgid "Online Models" +msgstr "Online Models" + +msgid "Show online staff-picked models on the home page" +msgstr "Show online staff-picked models on the home page" + msgid "Maximum recent projects" -msgstr "Proyectos recientes máximos" +msgstr "Maximum recent projects" msgid "Maximum count of recent projects" -msgstr "Máxima cantidad de proyectos recientes" +msgstr "Maximum count of recent projects" msgid "Clear my choice on the unsaved projects." -msgstr "Limpiar mi elección de proyectos no guardados." +msgstr "Clear my choice on the unsaved projects." msgid "Auto-Backup" msgstr "Copia de seguridad automática" @@ -4817,23 +4876,29 @@ msgstr "Copia de seguridad automática" msgid "" "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Haga copia de seguridad periodicamente para restaurar en caso de fallo " -"ocasional." +"Backup your project periodically to help with restoring from an occasional " +"crash." msgid "every" -msgstr "todo" +msgstr "every" msgid "The peroid of backup in seconds." -msgstr "El periodo de copia de seguridad en segundos." +msgstr "The period of backup in seconds." msgid "Downloads" msgstr "Descargas" msgid "Dark Mode" -msgstr "Modo Oscuro" +msgstr "Modo oscuro" msgid "Enable Dark mode" -msgstr "Activar Modo Oscuro" +msgstr "Activar modo oscuro" + +msgid "Develop mode" +msgstr "Modo de desarrollo" + +msgid "Skip AMS blacklist check" +msgstr "Skip AMS blacklist check" msgid "Home page and daily tips" msgstr "Página de inicio y consejos diarios" @@ -4871,11 +4936,14 @@ msgstr "Otro" msgid "Mouse wheel reverses when zooming" msgstr "La rueda del ratón se invierte al hacer zoom" -msgid "Develop mode" -msgstr "Modo de desarrollo" +msgid "Enable SSL(MQTT)" +msgstr "Enable SSL(MQTT)" -msgid "Dump video" -msgstr "Volcar vídeo" +msgid "Enable SSL(FTP)" +msgstr "Enable SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internal developer mode" msgid "Log Level" msgstr "Nivel de registro" @@ -4923,7 +4991,7 @@ msgid "DEBUG settings have saved successfully!" msgstr "¡Los ajustes de depuración se han guardado con éxito!" msgid "Switch cloud environment, Please login again!" -msgstr "¡Cambiado a entorno de nube, Por favor vuelva a autenticarse!" +msgstr "Se cambió el entorno de nube; ¡vuelva a iniciar sesión!" msgid "System presets" msgstr "Ajustes del sistema" @@ -4941,7 +5009,7 @@ msgid "Click to pick filament color" msgstr "Haga clic para elegir el color del filamento" msgid "Please choose the filament colour" -msgstr "Por favor elija el color del filamento" +msgstr "Please choose the filament color" msgid "Add/Remove presets" msgstr "Añadir/Quitar ajustes preestablecidos" @@ -4953,55 +5021,52 @@ msgid "Project-inside presets" msgstr "Preajustes internos del proyecto" msgid "Add/Remove filaments" -msgstr "Añadir/Borrar filamentos" +msgstr "Añadir/quitar filamento" msgid "Add/Remove materials" -msgstr "Añadir/Borrar materiales" +msgstr "Añadir/quitar materiales" msgid "Add/Remove printers" -msgstr "Añadir/Borrar impresoras" +msgstr "Añadir/quitar impresoras" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" msgid "Same as Global Print Sequence" -msgstr "Lo mismo que la Secuencia Global de Impresión" +msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Secuencia de impresión" -msgid "Plate name" -msgstr "Nombre de Bandeja" - msgid "Customize" -msgstr "Personalizar" +msgstr "" -msgid "First Layer print sequence" -msgstr "Secuencia de impresión de primera capa" +msgid "First layer filament sequence" +msgstr "" + +msgid "Same as Global Plate Type" +msgstr "Same as Global Plate Type" msgid "Same as Global Bed Type" -msgstr "Lo mismo que el Tipo de Cama Global" - -msgid "Cool Plate" -msgstr "Bandeja Fría" - -msgid "Engineering Plate" -msgstr "Bandeja de Ingeniería" - -msgid "High Temp Plate" -msgstr "Bandeja de alta temperatura" - -msgid "Textured PEI Plate" -msgstr "Bandeja PEI Texturizada" +msgstr "Igual que el tipo de cama global" msgid "By Layer" -msgstr "Por Capa" +msgstr "By Layer" msgid "By Object" -msgstr "Por Objeto" +msgstr "By Object" + +msgid "Plate name" +msgstr "Plate name" msgid "Accept" -msgstr "Aceptar" +msgstr "Accept" msgid "Log Out" -msgstr "Desconectarse" +msgstr "Log Out" msgid "Slice all plate to obtain time and filament estimation" msgstr "" @@ -5028,7 +5093,7 @@ msgid "Publish was cancelled" msgstr "La publicación fue cancelada" msgid "Slicing Plate 1" -msgstr "Bandeja de corte 1" +msgstr "Placa de corte 1" msgid "Packing data to 3mf" msgstr "Empaquetando datos a 3mf" @@ -5113,14 +5178,11 @@ msgstr "Para \"%1%\", añada \"%2%\" como un nuevo preajuste" msgid "Simply switch to \"%1%\"" msgstr "Simplemente cambia a \"%1%\"" -msgid "Online" -msgstr "En línea" - -msgid "Offline" -msgstr "Fuera de línea" +msgid "Task canceled" +msgstr "Tarea cancelada" msgid "(LAN)" -msgstr "(Red local)" +msgstr "(LAN)" msgid "My Device" msgstr "Mi dispositivo" @@ -5128,26 +5190,35 @@ msgstr "Mi dispositivo" msgid "Other Device" msgstr "Otro dispositivo" +msgid "Online" +msgstr "En línea" + msgid "Input access code" msgstr "Introducir el código de acceso" msgid "Can't find my devices?" -msgstr "No puedo encontrar mis dispositivos?" +msgstr "¿No puedes encontrar dispositivos?" msgid "Log out successful." msgstr "Cierre de sesión con éxito." +msgid "Offline" +msgstr "Fuera de línea" + msgid "Busy" msgstr "Ocupado" msgid "Bambu Cool Plate" -msgstr "Bandeja frío Bambu" +msgstr "Placa frío Bambu" + +msgid "PLA Plate" +msgstr "PLA Plate" msgid "Bamabu Engineering Plate" -msgstr "Bandeja de Ingeniería Bambú" +msgstr "Placa de Ingenieria Bambu" msgid "Bamabu High Temperature Plate" -msgstr "Bandeja de alta temperatura Bambú" +msgstr "Placa de alta temperatura Bambu" msgid "Send print job to" msgstr "Enviar el trabajo de impresión a" @@ -5158,12 +5229,24 @@ msgstr "Actualizar" msgid "Bed Leveling" msgstr "Nivelación de la cama" -msgid "Flow Calibration" -msgstr "Calibración del flujo" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "No se puede conectar a la impresora" msgid "send completed" msgstr "envío completo" +msgid "Error code" +msgstr "Error code" + +msgid "Check the status of current system services" +msgstr "Check the status of current system services" + +msgid "Printer local connection failed, please try again." +msgstr "Printer local connection failed; please try again." + msgid "No login account, only printers in LAN mode are displayed" msgstr "Sin cuenta de acceso, sólo se muestran las impresoras en modo LAN" @@ -5179,7 +5262,7 @@ msgstr "" msgid "Cannot send the print job when the printer is updating firmware" msgstr "" -"No es posible enviar el trabajo cuando la impresora está actualizando el " +"No se puede enviar una impresión mientras la impresora está actualizando el " "firmware" msgid "" @@ -5189,22 +5272,22 @@ msgstr "" "cuando termine" msgid "The printer is busy on other print job" -msgstr "La impresora está ocupada con otro trabajo de impresión" +msgstr "La impresora está ocupada con otro trabajo de impresión." #, c-format, boost-format msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"El %s del filamento excede el número de ranuras AMS. Por favor actualice el " -"firmwareimpresora para que soporte la asignación de ranuras AMS." +"El filamento %s supera el número de ranuras AMS. Actualice el firmware de la " +"impresora para admitir la asignación de ranuras AMS." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"El %s del filamento excede el número de ranuras AMS. Por favor actualice el " -"firmwareimpresora para que soporte la asignación de ranuras AMS." +"El filamento supera el número de ranuras AMS. Actualice el firmware de la " +"impresora para admitir la asignación de ranuras AMS." msgid "" "Filaments to AMS slots mappings have been established. You can click a " @@ -5225,85 +5308,104 @@ msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"El filamento %s no coincide con el filamento la ranura AMS %s. Por favor " -"actualice el firmware de la impresora para que soporte la asignación de " -"ranuras AMS." +"El filamento %s no coincide con el filamento de la ranura AMS %s. Actualice " +"el firmware de la impresora para admitir la asignación de ranuras AMS." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"El %s del filamento excede el número de ranuras AMS. Por favor actualice el " -"firmwareimpresora para que soporte la asignación de ranuras AMS." +"El filamento no coincide con el filamento de la ranura AMS. Actualice el " +"firmware de la impresora para admitir la asignación de ranuras AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"El firmware de la impresora solo soporta el mapeo secuencial de filamento => " +"El firmware de la impresora solo admite el mapeo secuencial del filamento => " "ranura AMS." msgid "An SD card needs to be inserted before printing." -msgstr "Es necesario introducir una tarjeta SD antes de imprimir." +msgstr "Se debe insertar una tarjeta microSD antes de imprimir." + +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" msgid "An SD card needs to be inserted to record timelapse." -msgstr "Es necesario insertar una tarjeta SD para guardar el timelapse." +msgstr "Es necesario insertar una tarjeta microSD para grabar un timelapse." msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." msgstr "" -"No es posible enviar el trabajo de impresión a una impresora la cual " -"necesita una actualización de firmware." +"No se puede enviar la impresión a una impresora cuyo firmware deba " +"actualizarse." msgid "Cannot send the print job for empty plate" -msgstr "No es posible enviar el trabajo de impresión a una bandeja vacía" +msgstr "No se puede enviar una impresión de una plancha vacía." msgid "This printer does not support printing all plates" -msgstr "Esta impresora no soporta la impresión en todas las bandejas" +msgstr "Esta impresora no admite la impresión de todas las planchas" msgid "Errors" msgstr "Errores" msgid "Please check the following:" -msgstr "Por favor compruebe lo siguiente:" +msgstr "Please check the following:" 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 "" -"El tipo de impresora seleccionado cuando se genera el G-Code no tiene " -"consistencia con la impresora seleccionada actualmente. Es recomendable que " -"use el mismo tipo de impresora para laminar." +"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." #, c-format, boost-format msgid "%s is not supported by AMS." -msgstr "%s no está soportado por el AMS." +msgstr "%s is not supported by the AMS." 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 "" -"Hay algunos filamentos desconocidos en los mapeados AMS. Por favor, " -"compruebe si son los filamentos requeriso. Si lo son, presione \"Confirmar\" " -"para empezar a imprimir." +"Hay algunos filamentos desconocidos en los mapeos del AMS. Compruebe si son " +"los filamentos necesarios. Si están bien, haga clic en «Confirmar» para " +"empezar a imprimir." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" -"Por favor, presione el botón de confirmar si aún quieres proceder con la " -"impresión." +"Please click the confirm button if you still want to proceed with printing." + +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" msgid "Preparing print job" msgstr "Preparando el trabajo de impresión" +msgid "Abnormal print file data. Please slice again" +msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "Modificar el nombre del dispositivo" msgid "Send to Printer SD card" -msgstr "Enviar a la tarjeta SD de la impresora" +msgstr "Enviar a la tarjeta microSD de la impresora" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" @@ -5312,15 +5414,40 @@ msgstr "" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" -"Es necesario insertar una tarjeta SD antes de enviar a la tarjeta SD de la " -"impresora." +"A MicroSD card needs to be inserted before sending to the printer SD card." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "" -"Es necesaria que la impresora esté en la misma red local que Orca Slicer." +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "La impresora debe estar en la misma LAN que Bambu Studio." msgid "The printer does not support sending to printer SD card." -msgstr "La impresora no soporta el envio directo a la tarjeta SD." +msgstr "La impresora no admite el envío a la tarjeta MicroSD." + +msgid "Failed to create socket" +msgstr "Failed to create socket" + +msgid "Failed to connect socket" +msgstr "Failed to connect socket" + +msgid "Failed to publish login request" +msgstr "Failed to publish login request" + +msgid "Get ticket from device timeout" +msgstr "Timeout getting ticket from device" + +msgid "Get ticket from server timeout" +msgstr "Timeout getting ticket from server" + +msgid "Failed to post ticket to server" +msgstr "Failed to post ticket to server" + +msgid "Failed to parse login report reason" +msgstr "Failed to parse login report reason" + +msgid "Receive login report timeout" +msgstr "Receive login report timeout" + +msgid "Unknown Failure" +msgstr "Error desconocido" msgid "Log in printer" msgstr "Iniciar sesión en la impresora" @@ -5328,6 +5455,69 @@ msgstr "Iniciar sesión en la impresora" msgid "Would you like to log in this printer with current account?" msgstr "¿Desea iniciar sesión en esta impresora con la cuenta actual?" +msgid "Check the reason" +msgstr "Check the reason" + +msgid "Read and accept" +msgstr "Read and accept" + +msgid "Terms and Conditions" +msgstr "Terms and Conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"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 " +"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." + +msgid "and" +msgstr "and" + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "We ask for your help to improve everyone's printer" + +msgid "Statement about User Experience Improvement Program" +msgstr "Statement about User Experience Improvement Program" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"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 " +"same principle and uses machine learning to improve its performance from the " +"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." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Statement on User Experience Improvement Plan" + msgid "Log in successful." msgstr "Inicio de sesión con éxito." @@ -5357,54 +5547,55 @@ msgid "Delete this preset" msgstr "Borra este ajuste" msgid "Search in preset" -msgstr "Buscar en los ajustes por defecto" +msgstr "Buscar en ajustes preestablecidos" msgid "Click to reset all settings to the last saved preset." msgstr "" -"Presionar para reiniciar todos los ajustes a los últimos ajustes por defecto." +"Haga clic aquí para restablecer todos los ajustes al último ajuste " +"preestablecido guardado." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"Se requiere la torre de purga para un timelapse suave. Puede haber defectos " -"modelos sin torre de purga.¿Está seguro de que quiere deshabilitar la torre " -"principal?" +"Se requiere una torre de purga para el modo timeplase suave. Sin ella puede " +"haber fallos en el modelo. ¿Está seguro de que desea desactivarla?" 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 "" -"La torre de purga es necesaria para que el timelapse sea fluido. Puede haber " -"defectos en el modelo sin torre de purga. ¿Desea activar la torre de purga?" +"Se requiere una torre de purga para el modo timeplase suave. Sin ella puede " +"haber fallos en el modelo. ¿Quieres activarla?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"Hemos añadido al estilo esperimental \"Árboles Delgados\" que presenta " -"volumenes de soportemás pequeños con menos fuerza.\n" -"Recomendamos usarlo con: 0 capas de interfaz, 0 distancia superior, 2 " -"perímetros." +"Hemos añadido un tipo de soporte experimental, «Tree Slim», que presenta un " +"volumen de soporte más pequeño pero una resistencia más débil.\n" +"Recomendamos usarlo con: 0 capas de interfaz, 0 de distancia superior, 2 " +"paredes." msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Cambiar estos ajustes automaticamente? \n" -"Sí - Cambiar estos ajustes automaticamente\n" -"No - No cambiar estos ajustes" +"¿Cambiar esta configuración automáticamente? \n" +"Sí, cambia esta configuración automáticamente.\n" +"No, no cambies la configuración por mí." 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." msgstr "" -"Para \"Árboles fuertes\" y \"Árboles Híbridos\", recomendamos lo siguiente " -"ajustes: al menos 2 capas de interfaz, al menos 0.1mm de distancia superior " -"en z o usar materiales de soporte en la interfaz." +"Para los tipos de soporte «Tree Strong» y «Tree Hybrid», recomendamos los " +"siguientes ajustes: al menos 2 capas de interfaz, una distancia mínima de " +"0,1 mm entre la parte superior z o utilizar materiales de apoyo en la " +"interfaz." msgid "" "When using support material for the support interface, We recommend the " @@ -5412,10 +5603,10 @@ msgid "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" msgstr "" -"Cuando se use material de soporte para las interfaces de soporte, " -"recomendamos los siguientes ajustes:\n" -"distancia z0, espaciado de interfaz 0, patrón concéntrico y desactivar " -"altura de soporte independiente de altura de capa" +"When using support material for the support interface, we recommend the " +"following settings:\n" +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5423,13 +5614,13 @@ msgid "" "by right-click the empty position of build plate and choose \"Add Primitive" "\"->\"Timelapse Wipe Tower\"." msgstr "" -"Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir " -"un \"Torre de Purga de Intervalo\" \n" -"presionando con el botón derecho la posición vacía de la bandeja de " -"construcción y elegir \"Añadir Primitivo\"->\"Intervalo de Torre de Purga\"." +"Al grabar timelapse sin el cabezal de la herramienta, se recomienda añadir " +"una «Torre de purga para el timelapse» \n" +"haciendo clic con el botón derecho en la posición vacía de la placa de " +"construcción y elige «Añadir primitivo» -> «Timelapse Wipe Tower»." msgid "Line width" -msgstr "Ancho de extrusión" +msgstr "Ancho de línea" msgid "Seam" msgstr "Costura" @@ -5438,16 +5629,19 @@ msgid "Precision" msgstr "Precisión" msgid "Wall generator" -msgstr "Generador de perímetros" +msgstr "Generador de pared" msgid "Walls" -msgstr "Perímetros" +msgstr "Paredes" msgid "Top/bottom shells" msgstr "Capas Superiores/Inferiores" +msgid "Sparse infill" +msgstr "Relleno poco denso" + msgid "Initial layer speed" -msgstr "Velocidad de la primera capa" +msgstr "Velocidad de la capa inicial" msgid "Other layers speed" msgstr "Velocidad de otras capas" @@ -5463,13 +5657,7 @@ msgstr "" "Esta es la velocidad para varios grados de voladizo. Los grados de voladizo " "se expresan como un porcentaje del ancho de la línea. La velocidad 0 " "significa que no hay ralentización para el rango de grados de voladizo y se " -"utiliza la velocidad del perímetro" - -msgid "Bridge" -msgstr "Puente" - -msgid "Set speed for external and internal bridges" -msgstr "Configurar velocidad para puentes externos e internos" +"utiliza la velocidad de la pared" msgid "Travel speed" msgstr "Velocidad de desplazamiento" @@ -5478,25 +5666,25 @@ msgid "Acceleration" msgstr "Aceleración" msgid "Jerk(XY)" -msgstr "Jerk(XY)" +msgstr "" msgid "Raft" -msgstr "Base de impresión" +msgstr "Balsa" msgid "Support filament" msgstr "Filamento de soporte" msgid "Prime tower" -msgstr "Torre de Purga" +msgstr "Torre Principal" msgid "Special mode" -msgstr "Ajustes especiales" +msgstr "Modo especial" msgid "G-code output" -msgstr "G-code de salida" +msgstr "Resultado gcode" -msgid "Post-processing Scripts" -msgstr "Script de Post-procesado" +msgid "Post-processing scripts" +msgstr "Post-processing scripts" msgid "Frequent" msgstr "Frecuente" @@ -5551,49 +5739,54 @@ msgstr "Boquilla" msgid "Nozzle temperature when printing" msgstr "Temperatura de la boquilla al imprimir" -msgid "Cool plate" -msgstr "Bandeja Fría" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Esta es la temperatura de la bandeja cuando la Bandeja Fría está instalada. " -"Un valor de 0 significa que el filamento no admite la impresión en la " -"Bandeja Fría" +"Esta es la temperatura de la cama cuando la placa fría está instalada. Un " +"valor de 0 significa que el filamento no admite la impresión en la placa " +"fría." -msgid "Engineering plate" -msgstr "Bandeja de Ingeniería" +msgid "Engineering Plate" +msgstr "Placa de ingeniería" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"Esta es la temperatura de la cama cuando la Bandeja de Ingeniería está " +"Esta es la temperatura de la cama cuando la placa de ingeniería está " "instalada. Un valor de 0 significa que el filamento no admite la impresión " -"en la Bandeja de Ingeniería" +"en la placa de ingeniería." + +msgid "High Temp Plate" +msgstr "Placa de alta temperatura" 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 "" -"Esta es la temperatura de la cama cuando la bandeja de alta temperatura está " +"Esta es la temperatura de la cama cuando la placa de alta temperatura está " "instalada. Un valor de 0 significa que el filamento no admite la impresión " -"en la bandeja de alta temperatura" +"en la placa de alta temperatura." + +msgid "Textured PEI Plate" +msgstr "Placa PEI texturizada" 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 "" -"Temperatura del lecho cuando la Bandeja PEI Texturizada está instalada. El " -"valor 0 significa que el filamento no es compatible para imprimir en la " -"Bandeja PEI Texturizada" +"Temperatura de la cama cuando se instala la placa de PEI texturizada. 0 " +"significa que el filamento no es compatible con esta placa." msgid "Volumetric speed limitation" msgstr "Limitación de la velocidad volumétrica" msgid "Cooling" -msgstr "Refrigeración" +msgstr "Enfriando" msgid "Cooling for specific layer" msgstr "Ventilación para la capa específica" @@ -5615,7 +5808,7 @@ msgstr "" "superior al tiempo de la capa ajustado. Cuando el tiempo de la capa es " "inferior al umbral, la velocidad del ventilador se interpola entre la " "velocidad mínima y máxima del ventilador según el tiempo de impresión de la " -"capa" +"capa." msgid "Max fan speed threshold" msgstr "Umbral de velocidad máxima del ventilador" @@ -5628,52 +5821,46 @@ msgstr "" "estimado sea inferior al valor ajustado" msgid "Auxiliary part cooling fan" -msgstr "Ventilador de parte auxiliar" +msgstr "Ventilador de la parte auxiliar" msgid "Filament start G-code" -msgstr "G-Code de inicio de filamento" +msgstr "Código G de inicio de filamento" msgid "Filament end G-code" -msgstr "Final del G-Code de filamento" +msgstr "Final del Código G de filamento " msgid "Printable space" msgstr "Espacio imprimible" -msgid "Cooling Fan" -msgstr "Ventilador de enfriamento" - -msgid "Fan speed-up time" -msgstr "Tiempo de aumento de velocidad del ventilador" - msgid "Extruder Clearance" -msgstr "Margen del extrusor" +msgstr "Holgura del extrusor" msgid "Accessory" msgstr "Accesorio" msgid "Machine gcode" -msgstr "G-Code de la máquina" +msgstr "Código g de la máquina" msgid "Machine start G-code" -msgstr "G-Code de inicio" +msgstr "Código G de inicio" msgid "Machine end G-code" -msgstr "G-Code final" +msgstr "Código G final" msgid "Before layer change G-code" -msgstr "G-Code para antes del cambio de capa" +msgstr "Código G para antes del cambio de capa" msgid "Layer change G-code" -msgstr "Cambiar el G-Code tras el cambio de capa" +msgstr "Cambiar el código G de la capa" msgid "Change filament G-code" -msgstr "G-Code para el cambio de filamento" +msgstr "Cambiar el código G del filamento" msgid "Pause G-code" -msgstr "G-Code de pausa" +msgstr "Código G de pausa" msgid "Template Custom G-code" -msgstr "G-Code para el cambio de plantilla" +msgstr "Plantilla de G-code personalizada" msgid "Motion ability" msgstr "Capacidad de movimiento" @@ -5693,31 +5880,15 @@ msgstr "Limitación de Jerk" msgid "Layer height limits" msgstr "Límites de altura de la capa" -msgid "Lift Z Enforcement" -msgstr "Forzar elevación Z" - msgid "Retraction when switching material" msgstr "Retracción al cambiar de material" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" -"La opción Wipe no está disponible cuando se utiliza el modo Retracción de " -"Firmware.\n" -"\n" -"Debo desactivarla para activar la retracción de firmware?" - -msgid "Firmware Retraction" -msgstr "Retracción de firmware" - msgid "Detached" msgstr "Separado" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "El siguiente preajuste también se eliminará." +msgstr[0] "Los siguientes preajustes también se eliminarán" msgstr[1] "Los siguientes preajustes también se eliminarán." #, boost-format @@ -5831,18 +6002,18 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Has modificado algunos ajustes del perfil \"%1%\". \n" -"¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) después " -"de cambiar de perfil?" +"Ha cambiado algunos ajustes de la configuración por defecto\"%1%\".\n" +"¿Desea conservar estos ajustes modificados (nuevo valor) después de cambiar " +"el perfil de impresión?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Has cambiado algunos ajustes de perfil. \n" -"¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) después " -"de cambiar de perfil?" +"Ha cambiado algunos ajustes preestablecidos.\n" +"Desea conservar estos ajustes modificados (nuevo valor) después de cambiar " +"los ajustes?" msgid "Extruders count" msgstr "Contador de extrusores" @@ -5854,13 +6025,14 @@ msgid "Capabilities" msgstr "Capacidades" msgid "Select presets to compare" -msgstr "Seleccionar perfiles para comparar" +msgstr "Select presets to compare" msgid "Show all presets (including incompatible)" -msgstr "Mostrar todos los perfiles (incluyendo los compatibles)" +msgstr "" +"Mostrar todos los ajustes preestablecidos (incluidos los incompatibles)" msgid "Add File" -msgstr "Añadir archivo" +msgstr "Agregar archivo" msgid "Set as cover" msgstr "Ajustar como cubierta" @@ -5950,11 +6122,11 @@ msgstr "Volumen de limpieza (mm³) para cada par de filamentos." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Sugerencias: Volumen de Flujo en rango [%d, %d]" +msgstr "Sugerencia: Volumen de descarga en el rango [%d, %d]" #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." -msgstr "El multiplicador debería estar en el rango [%.2f, %.2f]." +msgstr "El multiplicador debe estar en el rango [%.2f, %.2f]." msgid "unloaded" msgstr "descargado" @@ -5988,7 +6160,7 @@ msgid "Objects list" msgstr "Lista de objetos" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" -msgstr "Importar datos de geometría de los archivos STL/STEP/3MF/OBJ/AMF" +msgstr "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgid "⌘+Shift+G" msgstr "⌘+Shift+G" @@ -6003,7 +6175,9 @@ msgid "Paste from clipboard" msgstr "Pegar desde el portapapeles" msgid "Show/Hide 3Dconnexion devices settings dialog" -msgstr "Mostrar/Ocultar el diálogo de ajustes de los dispositivos 3Dconnexion" +msgstr "" +"Mostrar u ocultar el cuadro de diálogo de la configuración de la conexión de " +"las impresoras 3D." msgid "Show keyboard shortcuts list" msgstr "Muestra lista de atajos de teclado" @@ -6012,16 +6186,16 @@ msgid "Global shortcuts" msgstr "Atajos globales" msgid "Rotate View" -msgstr "Rotar Vista" +msgstr "Rotación de vista" msgid "Pan View" -msgstr "Vista Panorámica" +msgstr "Movimiento de la vista" msgid "Mouse wheel" msgstr "Rueda de ratón" msgid "Zoom View" -msgstr "Vista de Zoom" +msgstr "Zoom de vista" msgid "Shift+A" msgstr "Shift+A" @@ -6051,13 +6225,13 @@ msgid "Movement in camera space" msgstr "Movimiento en el espacio de la cámara" msgid "⌥+Left mouse button" -msgstr "Botón de ratón ⌥+Left" +msgstr "+Botón izquierdo del ratón" msgid "Select a part" -msgstr "Seleccionar una pieza" +msgstr "Seleccionar pieza" msgid "⌘+Left mouse button" -msgstr "⌘+botón izquierdo de ratón" +msgstr "⌘+Botón izquierdo del ratón" msgid "Select multiple objects" msgstr "Seleccionar varios objetos" @@ -6066,13 +6240,13 @@ msgid "Ctrl+Any arrow" msgstr "Ctrl+Cualquier flecha" msgid "Alt+Left mouse button" -msgstr "Alt+Botón izquierdo de ratón" +msgstr "Alt+botón izquierdo del ratón" msgid "Ctrl+Left mouse button" -msgstr "Ctrl+Botón izquierdo de ratón" +msgstr "Ctrl+Botón izquierdo del ratón" msgid "Shift+Left mouse button" -msgstr "Shift+Left+Botón izquierdo de ratón" +msgstr "Mayús+botón izquierdo del ratón" msgid "Select objects by rectangle" msgstr "Seleccionar objetos por rectángulo" @@ -6138,28 +6312,25 @@ msgid "Select all objects" msgstr "Seleccionar todos los objetos" msgid "Gizmo move" -msgstr "Movimiento Gizmo" +msgstr "Movimiento" msgid "Gizmo scale" -msgstr "Escala Gizmo" +msgstr "Escala" msgid "Gizmo rotate" -msgstr "Rotación Gizmo" +msgstr "Rotación" msgid "Gizmo cut" -msgstr "Corte Gizmo" +msgstr "Corte" msgid "Gizmo Place face on bed" -msgstr "Situar cara en cama en modo Gizmo" +msgstr "Colocar cara sobre la cama" msgid "Gizmo SLA support points" -msgstr "Puntos de soporte SLA Gizmo" +msgstr "Puntos de soporte de SLA" msgid "Gizmo FDM paint-on seam" -msgstr "Costura de pintura Gizmo FDM" - -msgid "Swtich between Prepare/Prewview" -msgstr "Cambiar entre Preparar/Previsualizar" +msgstr "Pintado de costura FDM" msgid "Plater" msgstr "Plataforma" @@ -6174,7 +6345,7 @@ msgid "Support/Color Painting: adjust pen radius" msgstr "Soporte/Pintado en color: ajuste del radio de la pluma" msgid "⌥+Mouse wheel" -msgstr "⌥+Rueda del ratón" +msgstr "+Rueda del ratón" msgid "Support/Color Painting: adjust section position" msgstr "Soporte/Pintado de color: ajuste de la posición de la sección" @@ -6192,14 +6363,14 @@ msgid "Set extruder number for the objects and parts" msgstr "Ajustar el número de extrusor para los objetos y las piezas" msgid "Delete objects, parts, modifiers " -msgstr "Eliminar objetos, piezas, modificadores " +msgstr "Eliminar objetos, partes, modificadores " msgid "Space" msgstr "Espacio" msgid "Select the object/part and press space to change the name" msgstr "" -"Seleccione el objeto/pieza y pulse la barra espaciadora para cambiar el " +"Seleccione el objeto/parte y pulse la barra espaciadora para cambiar el " "nombre" msgid "Mouse click" @@ -6229,71 +6400,64 @@ msgstr "" msgid "On/Off one layer mode of the vertical slider" msgstr "Activar/Desactivar el modo de una capa del control deslizante vertical" -msgid "On/Off g-code window" -msgstr "Activar/Desactivar ventana de g-code" - msgid "Move slider 5x faster" msgstr "Mover el deslizador 5 veces más rápido" msgid "Shift+Mouse wheel" -msgstr "Shit+Rueda de ratón" +msgstr "Mayús+rueda del ratón" msgid "Release Note" -msgstr "Notas de lanzamiento" +msgstr "Nota de lanzamiento" #, c-format, boost-format msgid "version %s update information :" msgstr "información de actualización de la versión %s:" msgid "Network plug-in update" -msgstr "Actualizar plug-in de red" +msgstr "Actualización del complemento de red" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"Click en Aceptar para actualizar el plug-in de red cuando Orca Slicer vuelva " -"a iniciarse." +"Haga clic en Aceptar para actualizar el complemento de red la próxima vez " +"que se inicie Bambu Studio." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "Un nuevo plug-in de red(%s) está disponible. ¿Desea instalarlo?" +msgstr "Un nuevo plug-in de red (%s) está disponible. ¿Desea instalarlo?" -msgid "New version of Orca Slicer" -msgstr "Nueva versión de Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Nueva versión de Bambu Studio" msgid "Don't remind me of this version again" -msgstr "No volver a recordarme está versión otra vez" - -msgid "Done" -msgstr "Hecho" +msgstr "No vuelvas a recordarme esta versión." msgid "LAN Connection Failed (Sending print file)" -msgstr "Conexión de red fallida (Mandando archivo de impresión)" +msgstr "Fallo en la conexión LAN (envío del archivo de impresión)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Paso 1, por favor confirmar que Orca Slicer y tu impresora se encuentran en " -"la misma red local." +"Paso 1: confirme que Bambu Studio y su impresora estén en la misma LAN." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Paso 2, si la IP y el Código de Acceso de abajo son diferentes de los " -"valores actuales en su impresora, por favor, corríjalos." +"Paso 2: Si la IP y el código de acceso que aparecen a continuación son " +"diferentes de los valores reales de la impresora, corríjalos." msgid "IP" msgstr "IP" msgid "Access Code" -msgstr "Código de Acceso" +msgstr "Código de acceso" msgid "Where to find your printer's IP and Access Code?" -msgstr "¿Dónde encontrar la IP de su impresora y el Código de Acceso?" +msgstr "¿Dónde puedo encontrar la IP y el código de acceso de la impresora?" msgid "Error: IP or Access Code are not correct" -msgstr "Error: la IP o el Código de Acceso no son correctos" +msgstr "Error: la IP o el código de acceso no son correctos" msgid "Model:" msgstr "Modelo:" @@ -6305,10 +6469,10 @@ msgid "Version:" msgstr "Versión:" msgid "Update firmware" -msgstr "Actualizar firmware" +msgstr "Actualizar Firmware" msgid "Printing" -msgstr "Imprimendo" +msgstr "Imprimiendo…" msgid "Idle" msgstr "Inactivo" @@ -6317,41 +6481,42 @@ msgid "Latest version" msgstr "Última versión" msgid "Updating" -msgstr "Actualizando" +msgstr "Actualizando…" msgid "Updating failed" -msgstr "Fallo Actualizando" +msgstr "Actualización fallida" msgid "Updating successful" -msgstr "Actualización exitosa" +msgstr "La actualización se realizó con éxito" 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 "" -"¿Estás seguro que deseas actualizar? Esto puede llevar sobre 10 minutos. No " -"apague mientras la impresora está actualizando." +"¿Está seguro de que quiere actualizar? La actualización tardará unos 10 " +"minutos. No desconecte la alimentación mientras la impresora se actualiza." 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 "" -"Una actualización importante fue detectada y necesita ejecutarse antes de " -"que la impresión pueda continuar. ¿Quiere actualizar ahora? Puede actualizar " -"después desde \"Actualizar fimware\"." +"Se detectó una actualización importante que debe ejecutarse para poder " +"continuar con la impresión. ¿Quieres actualizar ahora? También puedes " +"actualizar más adelante desde «Actualizar firmware»." 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 the studio." msgstr "" -"La versión de firmware es anormal. Es necesario reparar y actualizar antes " -"de imprimir. ¿Quieres actualizar ahora? Puedes actualizar al iniciar en el " -"siguiente arranque de la impresora o cuando arranque Orca Slicer." +"La versión del firmware es anormal. Es necesario reparar y actualizar antes " +"de imprimir. ¿Quieres actualizar ahora? También puedes actualizar la " +"impresora más adelante o actualizarla la próxima vez que inicies Bambu " +"Studio." msgid "Extension Board" -msgstr "Placa de ampliación" +msgstr "Placa de extensión" msgid "Saving objects into the 3mf failed." msgstr "El guardado de objetos en el 3mf no ha funcionado." @@ -6405,6 +6570,10 @@ msgstr "Reparación cancelada" msgid "Copying of file %1% to %2% failed: %3%" msgstr "La copia del archivo %1% a %2% falló: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "La copia del directorio %1% a %2% ha fallado: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "" "Es necesario comprobar los cambios no guardados antes de actualizar la " @@ -6414,14 +6583,14 @@ msgid "Configuration package updated to " msgstr "Paquete de configuración actualizado a " msgid "Open G-code file:" -msgstr "Abrir archivo G-Code:" +msgstr "Abrir archivo código G:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Un objeto tiene la primera capa vacía y no se puede imprimir. Por favor, " -"corte el fondo o habilite los soportes." +"The following object(s) have an empty initial layer and can't be printed. " +"Please cut the bottom or enable supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6435,7 +6604,7 @@ msgid "" "Maybe parts of the object at these height are too thin, or the object has " "faulty mesh" msgstr "" -"Tal vez las piezas del objeto a esa altura son demasiado finas, o el objeto " +"Tal vez las partes del objeto a esa altura son demasiado finas, o el objeto " "tiene una malla defectuosa" msgid "No object can be printed. Maybe too small" @@ -6445,48 +6614,43 @@ msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" msgstr "" -"La generación ha fallado del G-Code por un G-Code personalizado no válido.\n" +"Ha fallado la generación del código G por un código G personalizado no " +"válido.\n" "\n" msgid "Please check the custom G-code or use the default custom G-code." msgstr "" -"Por favor, compruebe el G-Code personalizado o utilice el G-Code " +"Por favor, compruebe el código G personalizado o utilice el código G " "personalizado por defecto." #, boost-format msgid "Generating G-code: layer %1%" -msgstr "Generando G-Code: capa %1%" +msgstr "Generando código G: capa %1%" msgid "Inner wall" -msgstr "Perímetro interno" +msgstr "Pared interior" msgid "Outer wall" -msgstr "Perímetro externo" +msgstr "Pared exterior" msgid "Overhang wall" msgstr "Pared de voladizo" -msgid "Sparse infill" -msgstr "Relleno poco denso" - msgid "Internal solid infill" msgstr "Relleno sólido interno" msgid "Top surface" -msgstr "Relleno sólido superior" +msgstr "Superficie superior" msgid "Bottom surface" -msgstr "Relleno sólido inferior" +msgstr "Superficie inferior" -msgid "Internal Bridge" -msgstr "Puente Interior" +msgid "Bridge" +msgstr "Puente" msgid "Gap infill" msgstr "Relleno de huecos" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Interfaz de soporte" @@ -6499,7 +6663,7 @@ msgstr "Múltiple" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "" -"Ha fallado el cálculo del ancho de extrusión de %1%. No se puede obtener el " +"Ha fallado el cálculo del ancho de línea de %1%. No se puede obtener el " "valor de \"%2%\". " msgid "undefined error" @@ -6593,14 +6757,14 @@ msgid "validation failed" msgstr "validación fallida" msgid "write callback failed" -msgstr "la llamada de recuperación de la escritura ha fallado" +msgstr "La llamada de recuperación de la escritura ha fallado" #, boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% está muy cerca del área de exclusión, puede conllevar colisiones cuando " -"se imprime." +"%1% está demasiado cerca del área de purga. Puede haber colisiones al " +"imprimir." #, boost-format msgid "%1% is too close to others, and collisions may be caused." @@ -6612,18 +6776,19 @@ msgstr "%1% es demasiado alto, y se producirán colisiones." msgid " is too close to others, there may be collisions when printing." msgstr "" -" está muy cerca de otros, puede conllevar colisiones cuando se imprime." +" está demasiado cerca de otros objetos; pueden producirse colisiones al " +"imprimir." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" está muy cerca del área de exclusión, puede conllevar colisiones cuando se " -"imprime." +" está demasiado cerca del área de purga, pueden producirse colisiones al " +"imprimir." msgid "Prime Tower" -msgstr "Torre de Purga" +msgstr "Torre principal" msgid " is too close to others, and collisions may be caused.\n" -msgstr " está demasiado cerca de otros, y se pueden producir colisiones.\n" +msgstr "está demasiado cerca de otros, y se pueden producir colisiones.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" msgstr "" @@ -6645,8 +6810,8 @@ msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." msgstr "" -"Modo de timelapse suave no está soportado cuando la secuencia \"por objeto\" " -"está activada." +"El modo suave de timelapse no se admite cuando el modo de impresión " +"seuencial de objetos esta habilitado." msgid "" "Please select \"By object\" print sequence to print multiple objects in " @@ -6663,56 +6828,56 @@ msgstr "" "material." msgid "The prime tower is not supported in \"By object\" print." -msgstr "La torre de purga no es compatible con la impresión \"Por objeto\"." +msgstr "La torre principal no es compatible con la impresión \"Por objeto\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"La torre de purga no es compatible cuando la altura de capa adaptativa está " +"La torre principal no es compatible cuando la altura de capa adaptativa está " "activada. Requiere que todos los objetos tengan la misma altura de capa." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"La torre de purga requiere que el \"hueco de apoyo\" sea múltiplo de la " +"La torre principal requiere que el \"hueco de apoyo\" sea múltiplo de la " "altura de la capa" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"La torre de purga requiere que todos los objetos tengan la misma altura de " +"La torre principal requiere que todos los objetos tengan la misma altura de " "capa" msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"La torre de purga requiere que todos los objetos se impriman sobre el mismo " -"número de capas de base de impresión" +"La torre principal requiere que todos los objetos se impriman sobre el mismo " +"número de capas de balsa" msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"La torre de purga requiere que todos los objetos se corten con las mismas " +"La torre principal requiere que todos los objetos se corten con las mismas " "alturas de capa." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"La torre de purga sólo se admite si todos los objetos tienen la misma altura " -"de capa variable" +"La torre de purga solo es compatible si todos los objetos tienen la misma " +"altura de capa variable" msgid "Too small line width" -msgstr "Ancho de extrusión demasiado pequeño" +msgstr "Ancho de línea demasiado pequeño" msgid "Too large line width" -msgstr "Ancho de extrusión demasiado grande" +msgstr "Ancho de línea demasiado grande" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"La torre de purga requiere que el soporte tenga la misma altura de capa con " +"La torre principal requiere que el soporte tenga la misma altura de capa con " "el objeto." msgid "" @@ -6724,31 +6889,15 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "La altura de la capa no puede superar el diámetro de la boquilla" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Bandeja %d: %s no soporta filamento %s" +msgstr "La placa %d: %s no admite el filamento %s." msgid "Generating skirt & brim" -msgstr "Generando falda y borde de adherencia" +msgstr "Generando falda y ala" msgid "Exporting G-code" -msgstr "Exportando G-Code" +msgstr "Exportando código G" msgid "Generating G-code" msgstr "Generando G-code" @@ -6760,7 +6909,7 @@ msgid "Printable area" msgstr "Área imprimible" msgid "Bed exclude area" -msgstr "Área excluida de la cama" +msgstr "La cama excluye el área" msgid "" "Unprintable area in XY plane. For example, X1 Series printers use the front " @@ -6768,15 +6917,15 @@ msgid "" "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" "Área no imprimible en el plano XY. Por ejemplo, las impresoras de la serie " -"X1 utilizan la esquina delantera izquierda para cortar el filamento durante " -"el cambio de filamento. El área se expresa como polígono por puntos en el " -"siguiente formato: \"XxY, XxY, ...\"" +"X1 utilizan la esquina frontal izquierda para cortar el filamento durante el " +"cambio de filamento. El área se expresa como polígono mediante puntos en el " +"siguiente formato: «xxY, xxY,...»" msgid "Bed custom texture" msgstr "Textura personalizada de cama" msgid "Bed custom model" -msgstr "Modelo personalizado de cama" +msgstr "Modelo de cama personalizado" msgid "Elephant foot compensation" msgstr "Compensación del pie de elefante" @@ -6785,7 +6934,7 @@ msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"Contraer la primera capa en la bandeja de impresión para compensar el efecto " +"Contraer la capa inicial en la placa de impresión para compensar el efecto " "de la pata de elefante" msgid "" @@ -6814,32 +6963,29 @@ msgid "" "name and password into the URL in the following format: https://username:" "password@your-octopi-address/" msgstr "" -"OrcaSlicer puede subir archivos G-Code a una impresora. Este campo debería " -"contener el nombre de host, la dirección IP o la URL de la instancia de la " -"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/" +"Slic3r puede cargar archivos de G-code a un host de impresora. Este campo " +"debe contener el nombre de host, la dirección IP o la URL de la instancia " +"host de la impresora. Se puede acceder al servidor de impresión detrás de " +"HAProxy con la autenticación básica habilitada introduciendo el nombre de " +"usuario y la contraseña en la URL en el siguiente formato: https://username:" +"password@your-octopi-address/" msgid "Device UI" -msgstr "IU de dispositivo" +msgstr "" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Especifica la URL de tu IU de dispositivo si no es el mismo que el host de " -"impresión" msgid "API Key / Password" -msgstr "Clave API / Contraseña" +msgstr "Clave de API/Contraseña" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -"OrcaSlicer puede cargar archivos G-Cpde a un host de impresora. Este campo " -"debería contener una clave API o una contraseña requerida para la " -"autenticación." +"Slic3r puede cargar archivos G-code a un host de impresora. Este campo debe " +"contener la clave de API o la contraseña necesaria para la autenticación." msgid "Name of the printer" msgstr "Nombre de la impresora" @@ -6852,9 +6998,10 @@ msgid "" "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"Es posible especificar un archivo Certificado CA personalizado para " -"conexiones, en formato crt/pem. Si se deja en blanco, se usará el " -"reposittorio de certificados CA del SO." +"Se puede especificar un archivo de certificado CA personalizado para las " +"conexiones HTTPS OctoPrint, en formato crt/pem. Si se deja en blanco, se " +"utiliza el repositorio de certificados CA del sistema operativo " +"predeterminado." msgid "User" msgstr "Usuario" @@ -6863,19 +7010,21 @@ msgid "Password" msgstr "Contraseña" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Ignorar comprobaciones de revocación de certificado HTTPS" +msgstr "Ignore las comprobaciones de revocación de certificados HTTPS" 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 "" -"Ignorar comprobaciones de certificado de revocación HTTPS en caso de perder " -"o puntos de distribución sin conexión. Se debería activar esta opción de " -"certificados autofirmados si la conexión falla." +"Omita las comprobaciones de revocación de certificados HTTPS en caso de que " +"falten puntos de distribución o estén fuera de línea. Es posible que desee " +"habilitar esta opción para los certificados autofirmados si se produce un " +"error en la conexión." msgid "Names of presets related to the physical printer" -msgstr "Nombres de preajustes relacionados por la impresora física" +msgstr "" +"Nombres de los ajustes preestablecidos relacionados con la impresora física" msgid "Authorization Type" msgstr "Tipo de autorización" @@ -6887,15 +7036,15 @@ msgid "HTTP digest" msgstr "Resumen HTTP" msgid "Avoid crossing wall" -msgstr "Evitar cruzar perímetro" +msgstr "Evite cruzar las paredes" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"Desvíese y evite atravesar el perímetro, ya que puede provocar una mancha en " -"la superficie" +"Desvíese y evite atravesar el muro, ya que puede provocar una mancha en la " +"superficie" msgid "Avoid crossing wall - Max detour length" -msgstr "Evitar cruzar perímetro - Longitud de desvío máximo" +msgstr "Evite cruzar paredes: longitud máxima de desvío" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6903,10 +7052,11 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Distancia de desvio máximo para evitar cruzar el perímetro. No lo evite si " -"la distancia de desvío es más alta que este valor. La distancia de desvío " -"podría tanto como un valor absoluto como pocentaje (por ejemplo 50%) de una " -"trayectoria de viaje directa. Cero para deshabilitar" +"Distancia máxima de desvío para evitar cruzar la pared: la impresora no se " +"desviará si la distancia de desvío es mayor que este valor. La longitud del " +"desvío puede especificarse como un valor absoluto o como un porcentaje (por " +"ejemplo, el 50%) de una ruta de viaje directa. Un valor de 0 deshabilitará " +"esta opción." msgid "mm or %" msgstr "mm o %" @@ -6919,8 +7069,8 @@ msgid "" "filament does not support to print on the Cool Plate" msgstr "" "Esta es la temperatura de la cama para las capas excepto la inicial. Un " -"valor de 0 significa que el filamento no admite la impresión en la Bandeja " -"Fría" +"valor de 0 significa que el filamento no admite la impresión en la placa " +"fría." msgid "°C" msgstr "°C" @@ -6930,23 +7080,23 @@ msgid "" "filament does not support to print on the Engineering Plate" msgstr "" "Esta es la temperatura de la cama para las capas excepto la inicial. Un " -"valor de 0 significa que el filamento no admite la impresión en la Bandeja " -"de Ingeniería" +"valor de 0 significa que el filamento no admite la impresión en la placa de " +"ingeniería." 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 "" "Esta es la temperatura de la cama para las capas excepto la inicial. Un " -"valor de 0 significa que el filamento no admite la impresión en la bandeja " -"de alta temperatura" +"valor de 0 significa que el filamento no admite la impresión en la placa de " +"alta temperatura." 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 "" -"Temperatura de cama para las capas excepto la inicial. El valor 0 significa " -"que el filamento no es compatible para imprimir en la Bandeja PEI Texturizada" +"Temperatura de la plataforma después de la primera capa. 0 significa que el " +"filamento no está soportado en la placa de PEI texturizada." msgid "Initial layer" msgstr "Capa inicial" @@ -6958,39 +7108,39 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" msgstr "" -"Esta es la temperatura de la cama de la primera capa. Un valor de 0 " -"significa que el filamento no admite la impresión en la Bandeja Fría" +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa fría." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" -"Esta es la temperatura de la cama de la primera capa. Un valor de 0 " -"significa que el filamento no admite la impresión en la Bandeja de Ingeniería" +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa de ingeniería." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" -"Esta es la temperatura de la cama de la primera capa. Un valor de 0 " -"significa que el filamento no admite la impresión en la bandeja de alta " -"temperatura" +"Esta es la temperatura de la cama de la capa inicial. Un valor de 0 " +"significa que el filamento no admite la impresión en la placa de alta " +"temperatura." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"Temperatura del lecho de la primera capa. El valor 0 significa que el " -"filamento no es compatible para imprimir en la Bandeja PEI Texturizada" +"La temperatura del plataforma en la primera capa, 0 significa que el " +"filamento no está soportado en la placa de PEI texturizada." msgid "Bed types supported by the printer" msgstr "Tipos de cama que admite la impresora" msgid "First layer print sequence" -msgstr "Secuencia de impresión de primera capa" +msgstr "" msgid "This G-code is inserted at every layer change before lifting z" -msgstr "Este G-Code se inserta en cada cambio de capa antes de levantar z" +msgstr "Este código G se inserta en cada cambio de capa antes de levantar z" msgid "Bottom shell layers" msgstr "Capas inferiores de cubierta" @@ -7018,7 +7168,7 @@ msgstr "" "calculado por las capas del fondo es más fino que este valor. Esto puede " "evitar tener una capa demasiado fina cuando la altura de la capa es pequeña. " "0 significa que este ajuste está desactivado y el grosor de la capa inferior " -"está absolutamente determinado por las capas de la capa inferior" +"está absolutamente determinado por las capas de la capa inferior." msgid "Force cooling for overhang and bridge" msgstr "Refrigeración forzada para el voladizo y el puente" @@ -7040,9 +7190,9 @@ msgid "" "bridge can get better quality for these part" msgstr "" "Forzar el ventilador de la pieza a esta velocidad cuando se imprime el " -"puente o el perímetro del voladizo que tiene un gran grado de voladizo. Al " +"puente o la pared del voladizo que tiene un gran grado de voladizo. Al " "forzar la refrigeración de los voladizos y puentes se puede obtener una " -"mejor calidad para estas piezas" +"mejor calidad para estas piezas." msgid "Cooling overhang threshold" msgstr "Umbral del voladizo de refrigeración" @@ -7054,34 +7204,26 @@ msgid "" "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" -"Fuerza al ventilador de refrigeración a una velocidad específica cuando el " -"grado de voladizo de la pieza impresa excede este valor. Expresado como " -"porcentaje, indica la anchura de la línea sin soporte de la capa inferior. " -"0% m significa forzar la refrigeración de todo el perímetro exterior sin " -"importar el grado de voladizo" +"Haga que el ventilador de refrigeración alcance una velocidad específica " +"cuando el grado de voladizo de la pieza impresa supere este valor. Esto se " +"expresa como un porcentaje que indica el ancho de la línea sin el apoyo de " +"la capa inferior. El 0%% significa forzar el enfriamiento de toda la pared " +"exterior sin importar el grado de voladizo." -msgid "Bridge infill direction" -msgstr "Dirección de relleno de puente" +msgid "Bridge direction" +msgstr "Dirección del puente" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"Anulación del ángulo de puenteo. Si se deja a cero, el ángulo de puente se " -"calculará automáticamente. De lo contrario, se utilizará el ángulo " -"proporcionado para los puentes externos. Utilice 180° para el ángulo cero." - -msgid "Bridge density" -msgstr "Densidad de puente" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" -"Densidad de puentes externos. 100% significa puente sólido. Por defecto es " -"100%." +"Anulación del ángulo de puente. 0 significa que el ángulo de puente se " +"calculará automáticamente. De lo contrario, el ángulo proporcionado se " +"utilizará para puentes externos. Utilice 180° para un ángulo cero." msgid "Bridge flow" -msgstr "Ratio de flujo en puentes" +msgstr "Flujo del puente" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " @@ -7091,82 +7233,41 @@ msgstr "" "de material para el puente, para mejorar el hundimiento" msgid "Top surface flow ratio" -msgstr "Ratio de flujo en superficie superior" +msgstr "" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" -"Este factor afecta a la cantidad de material de para relleno sólido " -"superior. Puede disminuirlo ligeramente para obtener un acabado suave de " -"superficie" -msgid "Bottom surface flow ratio" -msgstr "Ratio de flujo en superficie inferior" - -msgid "This factor affects the amount of material for bottom solid infill" +msgid "Initial layer flow ratio" msgstr "" -"Este factor afecta a la cantidad de material para el relleno sólido inferior" -msgid "Precise wall(experimental)" -msgstr "Pared precisa(experimental)" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" -"Mejorar precisión de la carcasa ajustando el espaciado del perímetro " -"exterior. Esto además mejora la consistencia de capa." msgid "Only one wall on top surfaces" -msgstr "Sólo un perímetro en las capas superiores" +msgstr "Sólo una pared en las superficies superiores" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -"Sólo un perímetro en la capas superiores, para dar más espacio al patrón de " -"relleno superior" -msgid "One wall threshold" -msgstr "Umbral para generar un solo perímetro" - -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" -"Si una superficie superior debe ser impresa y está parcialmente cubierta por " -"otra capa, no será considerada una capa superior donde su anchura esté por " -"debajo ese valor. Esto puede ser de utilidad para que no se active el ajuste " -"perímetro en la parte superior' en las capas que solo deberían ser cubiertas " -"por perímetros. Este valor puede ser en mm o un % o del perímetro de " -"extrusión.\n" -"Advertencia: Si se activa, se pueden crear imperfecciones si tiene alguna " -"característica fina en la siguiente capa, como letras. Ajuste a 0 esta " -"opción para borrar esas imperfecciones." + +msgid "Top surfaces" +msgstr "Superficies superiores" + +msgid "Topmost surface" +msgstr "Superficie superior" msgid "Only one wall on first layer" -msgstr "Solo un perímetro en la primera capa" +msgstr "Only one wall on first layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" -"Usar solo un perímetro en la primera capa, para dar más espacio en el patrón " -"de relleno inferior" - -msgid "Classic mode" -msgstr "Modo clásico" - -msgid "Enable this option to use classic mode" -msgstr "Activar esta opción para usar el modo clásico" +msgid "Use only one wall on the first layer of model" +msgstr "Use only one wall on the first layer of models" msgid "Slow down for overhang" msgstr "Disminución de velocidad de voladizo" @@ -7176,103 +7277,43 @@ msgstr "" "Habilite esta opción para ralentizar la impresión para diferentes grados de " "voladizo" -msgid "mm/s or %" -msgstr "mm/s o %" - -msgid "External" -msgstr "Externo" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Velocidad del puente y perímetro completo en voladizo" - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -msgstr "Interno" - -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 "" -"Velocidad del puente interno. Si el valor es expresado como porcentaje, será " -"calculado en base a bridge_speed. El valor por defecto es 150%." +msgid "Speed of bridge and completely overhang wall" +msgstr "Velocidad del puente y muro completo en voladizo" msgid "Brim width" -msgstr "Ancho del borde de adherencia" +msgstr "Ancho de la balsa" msgid "Distance from model to the outermost brim line" -msgstr "Distancia del modelo a la línea más externa del borde de adherencia" +msgstr "Distancia del modelo a la línea más externa del borde" msgid "Brim type" -msgstr "Tipo de borde de adherencia" +msgstr "Tipo de balsa" msgid "" "This controls the generation of the brim at outer and/or inner side of " "models. Auto means the brim width is analysed and calculated automatically." msgstr "" -"Esto controla la generación del borde de adherencia en el lado exterior y/o " -"interior de los modelos. Auto significa que el ancho de borde de adherencia " -"es analizado y calculado automaticamente." - -msgid "Mouse ear" -msgstr "Oreja de ratón" - -msgid "Outer brim only" -msgstr "Solo borde de adherencia exterior" - -msgid "Inner brim only" -msgstr "Solo borde de adherencia interior" - -msgid "Outer and inner brim" -msgstr "Borde de adherencia exterior e interior" +"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." msgid "Brim-object gap" -msgstr "Espacio borde de adherencia-objeto" +msgstr "Espacio borde-objeto" msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"Un hueco entre la línea más interna del borde de adherencia y el objeto " -"puede hacer que el borde de adherencia se retire más fácilmente" - -msgid "Brim ears" -msgstr "Orejas de borde" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "Solo dibujar bordes sobre los bordes afilados del modelo." - -msgid "Brim ear max angle" -msgstr "Máximo ángulo del borde de la oreja" - -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 "" -"Máximo ángulo para dejar que el borde de oreja aparezca.\n" -"Si se ajusta a 0, no se creará ningún borde.\n" -"Si se ajusta a ~180, se creará el borde en todo menos en las secciones " -"rectas." - -msgid "Brim ear detection radius" -msgstr "Radio de detección de borde de oreja" - -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 "" -"La geometría se verá diezmada antes de detectar angulos agudos. Este " -"parámetro indica la longitud mínima de desviación para el diezmado\n" -"0 para desactivar" +"Un hueco entre la línea más interna del borde y el objeto puede hacer que el " +"borde se retire más fácilmente" msgid "Compatible machine" msgstr "Máquina compatible" msgid "upward compatible machine" -msgstr "máquina compatible ascendente" +msgstr "máquina compatible con versiones anteriores" msgid "Compatible machine condition" msgstr "Condición de máquina compatible" @@ -7306,7 +7347,7 @@ msgstr "" "de la capa final no sea inferior al umbral de tiempo de la capa en \"Umbral " "de velocidad máxima del ventilador\", de modo que la capa pueda enfriarse " "durante más tiempo. Esto puede mejorar la calidad del enfriamiento para las " -"agujas y los detalles pequeños" +"agujas y los detalles pequeños." msgid "Normal printing" msgstr "Impresión normal" @@ -7316,7 +7357,7 @@ msgid "" "layer" msgstr "" "La aceleración por defecto tanto de la impresión normal como del " -"desplazamiento excepto la primera capa" +"desplazamiento excepto la capa inicial" msgid "mm/s²" msgstr "mm/s²" @@ -7336,7 +7377,7 @@ msgstr "" "Perfil de proceso por defecto cuando se cambia a este perfil de máquina" msgid "No cooling for the first" -msgstr "No refrigerar las primeras" +msgstr "No hay refrigeración para la primera" msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " @@ -7344,7 +7385,7 @@ msgid "" msgstr "" "Apague todos los ventiladores de refrigeración de las primeras capas. El " "ventilador de la primera capa debe estar cerrado para conseguir una mejor " -"adhesión de la bandeja de impresión" +"adhesión de la placa de impresión." msgid "layers" msgstr "capas" @@ -7367,9 +7408,9 @@ msgid "" "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"Si están activados, los puentes son más fiables, pueden salvar distancias " -"más largas, pero pueden tener peor aspecto. Si están desactivados, los " -"puentes se ven mejor pero son fiables sólo para distancias más cortas." +"Si están habilitados, los puentes son más seguros y pueden cubrir distancias " +"más largas, pero pueden tener un aspecto peor. Si están desactivados, los " +"puentes se ven mejor, pero son seguros solo para distancias más cortas." msgid "Max bridge length" msgstr "Distancia máxima de puentes" @@ -7384,39 +7425,34 @@ msgstr "" "muy grande si no quieres que ningún puente sea soportado." msgid "End G-code" -msgstr "G-Code final" +msgstr "Código G final" msgid "End G-code when finish the whole printing" -msgstr "Finalizar el G-Code cuando termine la impresión completa" +msgstr "Finalizar el código G cuando termine la impresión completa" msgid "End G-code when finish the printing of this filament" -msgstr "Terminar el G-Code cuando se termine de imprimir este filamento" +msgstr "Terminar el código G cuando se termine de imprimir este filamento" msgid "Ensure vertical shell thickness" -msgstr "Asegurar grosor de carcasa vertical" +msgstr "Asegure el grosor vertical de los perimetros de la impresion" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Añadir relleno sólido al lado de capas inclinadas para garantizar el grosor " -"de carcasa vertical (capas sólidas superior+inferior)" +"Añada un relleno sólido cerca de las superficies inclinadas para garantizar " +"el grosor vertical de la capa (capas sólidas superior/inferior)." msgid "Internal bridge support thickness" -msgstr "Grosor de soportes de puente interno" +msgstr "Grosor del soporte del puente interno" 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" +"If enabled, Studio will generate support loops 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 "" -"Si está activado, los bucles de soporte generarán debajo de los contornos de " -"puentes internos. Estos bucles de soporte pueden prevenir extruir puentes en " -"el aire y mejorar la calidad de la superficie superior, especialmente cuando " -"la densidad de relleno escasa es baja. Este valor determina el grosor de los " -"bucles de soporte. 0 significa deshabilitar esta característica" msgid "Top surface pattern" msgstr "Patrón de la superficie superior" @@ -7437,16 +7473,16 @@ msgid "Monotonic line" msgstr "Linea continua" msgid "Aligned Rectilinear" -msgstr "Alineación Rectilinea" +msgstr "Rectilíneo alineado" msgid "Hilbert Curve" -msgstr "Curva Hilbert" +msgstr "Curva de Hilbert" msgid "Archimedean Chords" -msgstr "Arcodes de Arquímedes" +msgstr "Acordes de Arquímedes" msgid "Octagram Spiral" -msgstr "Octograma en Espiral" +msgstr "Espiral de octagrama" msgid "Bottom surface pattern" msgstr "Patrón de la superficie inferior" @@ -7457,61 +7493,30 @@ msgstr "" "puente" msgid "Internal solid infill pattern" -msgstr "Patrón de relleno sólido interno" +msgstr "" msgid "" "Line pattern of internal solid infill. if the detect nattow internal solid " "infill be enabled, the concentric pattern will be used for the small area." msgstr "" -"Patrón lineal de relleno sólido interno, si se activa la detección de " -"relleno sólido interno nattow, se utilizará el patrón concéntrico para el " -"área pequeña." -msgid "" -"Line width of outer wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Ancho de extrusión del perímetro externo. Si se expresa cómo %, se calculará " -"sobre el diámetro de la boquilla." +msgid "Line width of outer wall" +msgstr "Ancho de línea de la pared exterior" 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 "" -"Velocidad del perímetro exterior, que es el más externo y visible. Se " -"utiliza para ser más lento que la velocidad del perímetro interior para " -"obtener una mejor calidad." - -msgid "Small perimeters" -msgstr "Perímetros pequeños" - -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 "" -"Este ajuste independiente afectará a la velocidad de los perímetros con " -"radio <= small_perimeter_threshold (normalmente agujeros). Si se expresa " -"como porcentaje (por ejemplo: 80%) se calculará sobre el ajuste de velocidad " -"del perímetro exterior anterior. Póngalo a cero para auto." - -msgid "Small perimeters threshold" -msgstr "Umbral Perímetral Pequeño" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" -"Esto configura el umbral para longitud de perímetro pequeño. El umbral por " -"defecto es 0mm" +"Velocidad de la pared exterior, que es la más externa y visible. Se utiliza " +"para ser más lento que la velocidad de la pared interior para obtener una " +"mejor calidad." msgid "Order of inner wall/outer wall/infil" -msgstr "Orden del perímetro interior/perímetro exterior/relleno" +msgstr "Orden de la pared interior/pared exterior/relleno" msgid "Print sequence of inner wall, outer wall and infill. " msgstr "" -"Imprimir la secuencia del perímetro interior, el perímetro exterior y el " -"relleno. " +"Imprimir la secuencia de la pared interior, la pared exterior y el relleno. " msgid "inner/outer/infill" msgstr "interior/exterior/relleno" @@ -7535,8 +7540,8 @@ msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Distancia de la punta de la boquilla hasta la varilla baja. Usado para " -"evitar colisiones en las impresiones por objeto." +"Distancia desde la punta de la boquilla hasta la varilla inferior. Se " +"utiliza para evitar colisiones en la impresión por objetos." msgid "Height to lid" msgstr "Altura hasta la tapa" @@ -7545,15 +7550,25 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Distancia de la punta de la boquilla a la tapa. Usado para evitar la " -"colisión con la impresión por objeto." +"Distancia desde la punta de la boquilla hasta la tapa. Se utiliza para " +"evitar colisiones en la impresión por objetos." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"El radio de claridad alrededor del extrusor. Se utiliza para evitar la " -"colisión con la impresión por objeto." +"Radio de separación alrededor del extrusor: se utiliza para evitar " +"colisiones en la impresión por objetos." + +msgid "Max Radius" +msgstr "Radio máximo" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Radio máximo de separación alrededor del extrusor. Se utiliza para evitar " +"colisiones en la impresión por objetos." msgid "Extruder Color" msgstr "Color del extrusor" @@ -7576,30 +7591,32 @@ msgid "" msgstr "" "El material puede tener un cambio volumétrico después de cambiar entre el " "estado fundido y el estado cristalino. Este ajuste cambia proporcionalmente " -"todo el flujo de extrusión de este filamento en G-Code. El rango de valores " +"todo el flujo de extrusión de este filamento en gcode. El rango de valores " "recomendado es entre 0.95 y 1.05. Tal vez usted puede ajustar este valor " -"para obtener una superficie plana adecuada cuando hay un ligero sobreflujo o " -"subflujo" +"para obtener una superficie plana agradable cuando hay un ligero " +"desbordamiento o sub-desbordamiento" + +msgid "Object flow ratio" +msgstr "Object flow ratio" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "The flow ratio set by object; the meaning is the same as flow ratio." msgid "Enable pressure advance" -msgstr "Activar pressure advance" +msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." +"enabled. Useless for Bambu Printer" msgstr "" -"Al activar Pressure Advance, el resultado de auto calibración se " -"sobreescribirá." - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "Pressure Advance(Klipper) AKA Factor de avance lineal(Marlin)" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" -"Ancho de extrusión por defecto si otros anchos de línea no están a 0. Si se " -"expresa cómo %, se calculará sobre el diámetro de la boquilla." + +msgid "Default line width if some line width is set to be zero" +msgstr "Ancho de línea por defecto si se ajusta algún ancho de línea es cero" msgid "Keep fan always on" msgstr "Mantener el ventilador siempre encendido" @@ -7609,7 +7626,7 @@ msgid "" "at least at minimum speed to reduce the frequency of starting and stoping" msgstr "" "Si se activa este ajuste, el ventilador nunca se detendrá y funcionará al " -"menos a la velocidad mínima para reducir la frecuencia de arranque y parada" +"menos a la velocidad mínima para reducir la frecuencia de arranque y parada." msgid "Layer time" msgstr "Tiempo de capa" @@ -7628,53 +7645,39 @@ msgid "s" msgstr "s" msgid "Default color" -msgstr "Color por defecto" +msgstr "Color predeterminado" msgid "Default filament color" -msgstr "Color de filamento por defecto" +msgstr "Color de filamento predeterminado" msgid "Color" msgstr "Color" msgid "Required nozzle HRC" -msgstr "HRC de boquilla requerido" +msgstr "Boquilla HRC requerida" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." msgstr "" -"HRC mínimo de boquilla requerido para imprimir el filamento. Cero significa " -"no comprobar el HRC de la boquilla." +"HRC mínimo de la boquilla requerido para imprimir el filamento. Un valor de " +"0 significa que no se comprueba el HRC de la boquilla." 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 "" -"Este ajuste representa la cantidad de volumen de filamento puede ser " -"derretido extruido por segundo. La velocidad de impresión está limitado por " -"cuanta velocidad, en caso de velocidad demasiado alta o no razonable. No " -"puede ser cero" +"Este ajuste es el volumen de filamento que se puede fundir y extruir por " +"segundo. La velocidad de impresión está limitada por la velocidad " +"volumétrica máxima, en caso de un ajuste de velocidad demasiado alto e " +"irrazonable. Este valor no puede ser cero." msgid "mm³/s" msgstr "mm³/s" msgid "Minimal purge on wipe tower" -msgstr "Purga mínima en la torre de purga" - -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" -"Tras un cambio de herramienta, es posible que no se conozca la posición " -"exacta del filamento recién cargado dentro de la boquilla y que la presión " -"del filamento aún no sea estable. Antes de purgar el cabezal de impresión en " -"un relleno o un objeto de sacrificio, OrcaSlicer siempre cebará esta " -"cantidad de material en la torre de purga para producir sucesivas " -"extrusiones de relleno u objetos de sacrificio de forma fiable." +msgstr "Purga mínima en la torre de limpieza" msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -7696,26 +7699,8 @@ msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" msgstr "" -"El diámetro del filamento se utiliza para calcular la extrusión en el G-" -"Code, por lo que es importante y debe ser preciso" - -msgid "Shrinkage" -msgstr "Contracción" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" -"Introduzca el porcentaje de encogimiento que tendrá el filamento después de " -"enfriarse ('94% i' si mide 94mm en lugar de 100mm). La pieza se escalará en " -"xy para compensar. Sólo se tiene en cuenta el filamento utilizado para el " -"perímetro.\n" -"Asegúrese de dejar suficiente espacio entre los objetos, ya que esta " -"compensación se realiza después de las comprobaciones." +"El diámetro del filamento se utiliza para calcular la extrusión en el gcode, " +"por lo que es importante y debe ser preciso" msgid "Density" msgstr "Densidad" @@ -7767,10 +7752,10 @@ msgid "money/kg" msgstr "dinero/kg" msgid "Vendor" -msgstr "Fabricante" +msgstr "" msgid "Vendor of filament. For show only" -msgstr "Fabricante del filamento. Para mostrar solamente" +msgstr "" msgid "(Undefined)" msgstr "(No definido)" @@ -7791,8 +7776,8 @@ msgstr "Densidad de relleno" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" msgstr "" -"Densidad del relleno interno disperso, el 100%% significa sólido en toda la " -"superficie" +"Densidad del relleno interno disperso, el 100%% significa sólido en todo el " +"territorio" msgid "Sparse infill pattern" msgstr "Patrón de relleno disperso" @@ -7822,81 +7807,13 @@ msgid "Adaptive Cubic" msgstr "Cúbico Adaptativo" msgid "3D Honeycomb" -msgstr "Panal 3D" +msgstr "Panel de abeja 3D" msgid "Support Cubic" -msgstr "Soporte Cúbico" +msgstr "Soporte cúbico" msgid "Lightning" -msgstr "Rayo" - -msgid "Sparse infill anchor length" -msgstr "Longitud de anclaje de relleno" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" -"Conectar una línea de relleno a un perímetro interno con un segmento corto " -"de un perímetro adicional. Si se expresa como porcentaje (ejemplo: 15%) este " -"es calculado sobre el ancho de extrusión de relleno. OrcaSlicer intenta " -"conectar dos líneas de relleno cercanas a un segmento de perímetro corto. Si " -"no se encuentra ningún segmento más corto que relleno_anclaje_max, la línea " -"de relleno se conecta a un semento de perímetro en un solo lado y la " -"longitud del ancho de segmento de perímetro escogido se limita a este " -"parámetro, pero no más largo que anclage_longitud_max. \n" -"Configue este parámetro a cero para deshabilitar los perímetros de anclaje " -"conectados a una sola línea de relleno." - -msgid "0 (no open anchors)" -msgstr "0 (no abrir anclajes)" - -msgid "1000 (unlimited)" -msgstr "1000 (ilimitada)" - -msgid "Maximum length of the infill anchor" -msgstr "Máxima longitud de relleno de anclaje" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" -"Conectar la línea de relleno a un perímetro interno con un segmento corto de " -"un perímetro adicional. Si se expresa como porcentaje (por ejemplo: 15%) " -"este se calcula sobre el ancho de relleno de extrusión. OrcaSlicer intenta " -"conectar dos líneas de relleno cercanas a un segmento de perímetro corto. Si " -"no hay ningún segmento más corto que este parámetro, esta líena de relleno " -"se conecta a un segmento de perímetro solamente a un lado y la longitud del " -"segmento de perìmetro escogida se limita a relleno_anclaje, pero no más alto " -"que este parámetro. \n" -"Si se deja a 0, el algoritmo antiguo para conexión de relleno se usará, esto " -"debería drear el mismo resultado que con 1000 y 0." - -msgid "0 (Simple connect)" -msgstr "0 (Conexión simple)" - -msgid "Acceleration of outer walls" -msgstr "Aceleración de los perímetros externos" - -msgid "Acceleration of inner walls" -msgstr "Aceleración de los perímetros internos" - -msgid "Acceleration of travel moves" -msgstr "Aceleración de movimiento de viaje" +msgstr "Iluminación" msgid "" "Acceleration of top surface infill. Using a lower value may improve top " @@ -7907,171 +7824,115 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" -"Aceleración del perímetro externo. Usando un valor menor puede mejorar la " -"calidad" +"Aceleración de la pared exterior: el uso de un valor inferior puede mejorar " +"la calidad." -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." +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" -"Aceleración de los puentes. Si el valor es expresado como un porcentaje (por " -"ejemplo 50%), se calculará basándose en la aceleración del perímetro externo." - -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." msgstr "" -"Aceleración de dispersión de relleno. Si el valor se expresa en porcentaje " -"(por ejemplo 100%), se calculará basándose en la aceleración por defecto." -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." +msgid "mm/s² or %" msgstr "" -"Aceleración de relleno sólido interno. Si el valor se expresa como " -"porcentaje (por ejemplo 100%), este se calculará basándose en la aceleración " -"por defecto." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " "adhensive" msgstr "" -"Aceleración de la primera capa. El uso de un valor más bajo puede mejorar la " -"adherencia de la bandeja de impresión" +"Aceleración de la capa inicial. El uso de un valor más bajo puede mejorar la " +"adherencia de la placa de impresión" msgid "Enable accel_to_decel" -msgstr "Activar acel_a_decel" +msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "El max_accel_a_decel de Klipper será ajustado automaticamente" +msgstr "" msgid "accel_to_decel" -msgstr "accel_to_decel" +msgstr "" #, c-format, boost-format msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" -msgstr "El max_accel_to_decel de Klipper se ajustará a este % o de aceleración" +msgstr "" + +msgid "Default jerk" +msgstr "" msgid "Jerk of outer walls" -msgstr "Jerk de los perímetros externos" +msgstr "" msgid "Jerk of inner walls" -msgstr "Jerk de los perímetros internos" - -msgid "Jerk for top surface" -msgstr "Jerk de la superficie superior" - -msgid "Jerk for infill" -msgstr "Jerk de relleno" - -msgid "Jerk for initial layer" -msgstr "Jerk de la primera capa" - -msgid "Jerk for travel" -msgstr "Jerk de viaje" - -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." msgstr "" -"Ancho de extrusión de la primera capa. Si se expresa como %, se calculará " -"sobre el diámetro de la boquilla." + +msgid "Jerk of infill" +msgstr "" + +msgid "Jerk of top surface" +msgstr "" + +msgid "First layer" +msgstr "" + +msgid "Jerk of first layer" +msgstr "" + +msgid "Jerk of travel" +msgstr "" + +msgid "Line width of initial layer" +msgstr "Ancho de línea de la capa inicial" msgid "Initial layer height" -msgstr "Altura de la primera capa" +msgstr "Altura de la capa inicial" msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhension" msgstr "" -"Altura de la primera capa. Hacer que la altura de la primera capa sea " -"ligeramente gruesa puede mejorar la adherencia de la bandeja de impresión" +"Altura de la capa inicial. Hacer que la altura de la capa inicial sea " +"ligeramente gruesa puede mejorar la adherencia de la placa de impresión" msgid "Speed of initial layer except the solid infill part" -msgstr "Velocidad de la primera capa excepto la parte sólida de relleno" +msgstr "Velocidad de la capa inicial excepto la parte sólida de relleno" msgid "Initial layer infill" -msgstr "Relleno de la primera capa" +msgstr "Relleno de la capa inicial" msgid "Speed of solid infill part of initial layer" -msgstr "Velocidad de la parte de relleno sólido de la primera capa" - -msgid "Initial layer travel speed" -msgstr "Velocidad de viaje de la primera capa" - -msgid "Travel speed of initial layer" -msgstr "Velocidad de viaje de primera capa" - -msgid "Number of slow layers" -msgstr "Número de capas lentas" - -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 "" -"Las primeras capas se imprimen más lentamente de lo normal. La velocidad se " -"incrementa gradualmente de una forma lineal sobre un número específico de " -"capas." +msgstr "Velocidad de la parte de relleno sólido de la capa inicial" msgid "Initial layer nozzle temperature" -msgstr "Temperatura de la boquilla de la primera capa" +msgstr "Temperatura de la boquilla de la capa inicial" msgid "Nozzle temperature to print initial layer when using this filament" msgstr "" -"Temperatura de la boquilla para imprimir la primera capa cuando se utiliza " +"Temperatura de la boquilla para imprimir la capa inicial cuando se utiliza " "este filamento" msgid "Full fan speed at layer" msgstr "Velocidad máxima del ventilador en la capa" -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." -msgstr "" -"La velocidad de ventilador se incrementará linealmente de cero a " -"\"close_fan_the_first_x_layers\" al máximo de capa \"full_fan_speed_layer\". " -"\"full_fan_speed_layer\" se ignorará si es menor que " -"\"close_fan_the_first_x_layers\", en cuyo caso el ventilador funcionará al " -"máximo permitido de capa \"close_fan_the_first_x_layers\" + 1." - -msgid "Support interface fan speed" -msgstr "Velocidad de ventilador de interfaz de soporte" - -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 overriden by disable_fan_first_layers." -msgstr "" -"La velocidad de ventilador se fuerza durante todas interfaces de soporte, " -"será capaz de debilitar sus uniones con una velocidad de ventilador más alta." -"Solo puede ser sobreescrita deshabilitando disable_fan_first_layers." - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"Se puede imprimir el perímetro de forma aleatoria, de modo que la superficie " +"Se puede imprimir la pared de forma aleatoria, de modo que la superficie " "tenga un aspecto rugoso. Este ajuste controla la posición difusa" msgid "None" msgstr "Ninguno" msgid "Contour" -msgstr "Contorno" +msgstr "Contour" msgid "Contour and hole" -msgstr "Contorno y agujero" +msgstr "Contour and hole" msgid "All walls" -msgstr "Todas los perímetros" +msgstr "Todas las paredes" msgid "Fuzzy skin thickness" msgstr "Distancia del punto de piel difusa" @@ -8081,7 +7942,7 @@ msgid "" "width" msgstr "" "La anchura dentro de la cual se va a jitear. Se aconseja que esté por debajo " -"de la anchura de la línea del perímetro exterior" +"de la anchura de la línea de la pared exterior" msgid "Fuzzy skin point distance" msgstr "Distancia al punto de superficie irregular" @@ -8094,17 +7955,12 @@ msgstr "" "de línea" msgid "Filter out tiny gaps" -msgstr "Filtrar pequeños huecos" - -msgid "Layers and Perimeters" -msgstr "Capas y Perímetros" +msgstr "" msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" -"Filtrar espacions menores que el umbral especificado. Esta configuración no " -"afectará en las capas superior/inferior" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " @@ -8114,13 +7970,13 @@ msgstr "" "irregular y debe imprimirse más lentamente" msgid "Arc fitting" -msgstr "Activar movimientos en arco" +msgstr "Ajuste del arco" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " "tolerance is same with resolution" msgstr "" -"Habilite esto para obtener un archivo de G-Code que tiene movimientos G2 y " +"Habilite esto para obtener un archivo de código G que tiene movimientos G2 y " "G3. Y la tolerancia de ajuste es la misma con la resolución" msgid "Add line number" @@ -8152,7 +8008,7 @@ msgstr "" "abrasión de la boquilla, y qué tipo de filamento se puede imprimir" msgid "Undefine" -msgstr "Indefinido" +msgstr "Sin definir" msgid "Hardened steel" msgstr "Acero endurecido" @@ -8163,111 +8019,24 @@ msgstr "Acero inoxidable" msgid "Brass" msgstr "Latón" -msgid "Nozzle HRC" -msgstr "HRC Boquilla" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"La dureza de la boquilla. Cero significa no comprobará la dureza de la " -"boquilla durante el laminado." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "" "Habilite esta opción si la máquina tiene un ventilador auxiliar de " "refrigeración de piezas" -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 comands 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 "" -"Inicia el ventilador este número de segundos antes que el tiempo de inicio " -"objetivo (puede usar segundos fraccionales). Se asume aceleración infinita " -"para esta estimación de tiempo, y solo se tendrán en cuenta los movimientos " -"G1 y G0 (no soporta el ajuste de arco).\n" -"Esto no moverá comandos de ventilador desde G-Codes personalizados (estos " -"actúan como un tipo de 'barrera').\n" -"Esto no moverá comandos de ventilador en el G-Code inicial si el 'único G-" -"Code inicial personalizado' está activado\n" -"Usar 0 para desactivar." - -msgid "Only overhangs" -msgstr "Solo voladizos" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" -"Solo se tomará dentro de la cuenta el retraso para enfriar los voladizos." - -msgid "Fan kick-start time" -msgstr "Tiempo de arranque de ventilador" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" -"Emite un comando de velocidad máxima del ventilador durante esta cantidad de " -"segundos antes de reducir a la velocidad objetivo para poner en marcha el " -"ventilador de refrigeración.\n" -"Esto es útil para ventiladores donde un PWM/potencia baja puede ser " -"insuficiente para que el ventilador comience a girar desde una parada, o " -"para que el ventilador alcance la velocidad más rápido.\n" -"Ajústelo a 0 para desactivarlo." - msgid "G-code flavor" -msgstr "Tipo de G-Code" +msgstr "Tipo de código G" msgid "What kind of gcode the printer is compatible with" -msgstr "Con qué tipo de G-Code es compatible la impresora" - -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "Etiquetar objetos" - -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." -msgstr "" -"Habilite esta opción para añadir comentarios en el G-Code etiquetando los " -"movimientos de impresión con el objeto al que pertenecen, lo cual es útil " -"para el plugin Octoprint CancelObject. Esta configuración NO es compatible " -"con la configuración de Extrusor Único Multi Material y Limpiar en Objeto / " -"Limpiar en Relleno." +msgstr "Con qué tipo de gcode es compatible la impresora" msgid "Exclude objects" -msgstr "Excluir objetos" - -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "Activar esta opción para añadir el comando EXCLUDE OBJECT en el G-Code" - -msgid "Verbose G-code" -msgstr "G-Code detallado" +msgstr "" 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" -"Activar esto para escoger un archivo de G-code comentado, con cada línea " -"explicado por un texto descriptivo. Si imprime desde la tarjeta SD, el peso " -"adicional del archivo podría hacer que tu firmware se ralentice." msgid "Infill combination" msgstr "Combinación de relleno" @@ -8277,45 +8046,84 @@ msgid "" "reduce time. Wall is still printed with original layer height." msgstr "" "Combine automáticamente el relleno disperso de varias capas para imprimirlas " -"juntas y reducir el tiempo. La perímetro se sigue imprimiendo con la altura " +"juntas y reducir el tiempo. La pared se sigue imprimiendo con la altura " "original de la capa." +msgid "Length of sparse infill anchor" +msgstr "Length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring " +"perimeters connected to a single infill line." + +msgid "0 (no open anchors)" +msgstr "0 (no open anchors)" + +msgid "1000 (unlimited)" +msgstr "1000 (unlimited)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximum length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." + +msgid "0 (not anchored)" +msgstr "0 (not anchored)" + msgid "Filament to print internal sparse infill." msgstr "Filamento para imprimir el relleno interno disperso." -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" -"Ancho de extrusión de la densidad de relleno interna. Si se expresa como %, " -"se calculará sobre el diámetro de la boquilla." +msgid "Line width of internal sparse infill" +msgstr "Ancho de línea del relleno interno disperso" msgid "Infill/Wall overlap" -msgstr "Superposición de relleno/perímetro" +msgstr "Superposición de relleno/pared" 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 "" -"El área de relleno se amplía ligeramente para que se solape con el perímetro " -"y así mejorar la adherencia. El valor porcentual es relativo a la anchura de " +"El área de relleno se amplía ligeramente para que se solape con el muro y " +"así mejorar la adherencia. El valor porcentual es relativo a la anchura de " "la línea del relleno disperso" msgid "Speed of internal sparse infill" msgstr "Velocidad del relleno interno disperso" -msgid "Interface shells" -msgstr "Carcasas de interfaz" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" -"Fuerza la generación de carcasas sólidas entre materiales/volúmenes " -"adyacentes. Útil para impresiones multiextrusoras con materiales " -"translúcidos o material de soporte soluble manualmente" - msgid "Ironing Type" msgstr "Tipo de alisado" @@ -8323,51 +8131,45 @@ 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 "" -"El alisado es el uso de un pequeño flujo para imprimir en la misma altura de " -"la superficie de nuevo para hacer la superficie plana más suave. Este ajuste " -"controla la capa que se alisa" +"El planchado es el uso de un pequeño flujo para imprimir en la misma altura " +"de la superficie de nuevo para hacer la superficie plana más suave. Este " +"ajuste controla la capa que se plancha" msgid "No ironing" -msgstr "Sin alisado" - -msgid "Top surfaces" -msgstr "Superficies superiores" - -msgid "Topmost surface" -msgstr "Superficie superior" +msgstr "Sin planchado" msgid "All solid layer" -msgstr "Todas la capas sólidas" +msgstr "Toda la capa sólida" msgid "Ironing Pattern" -msgstr "Patrón de Alisado" +msgstr "Ironing Pattern" msgid "Ironing flow" -msgstr "Flujo de alisado" +msgstr "Flujo de planchado" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " "layer height. Too high value results in overextrusion on the surface" msgstr "" -"La cantidad de material a extruir durante el alisado. Relativo al flujo de " +"La cantidad de material a extruir durante el planchado. Relativo al flujo de " "la altura de la capa normal. Un valor demasiado alto provoca una " "sobreextrusión en la superficie" msgid "Ironing line spacing" -msgstr "Espacio entre líneas de alisado" +msgstr "Espacio entre líneas de planchado" msgid "The distance between the lines of ironing" -msgstr "La distancia entre las líneas de alisado" +msgstr "La distancia entre las líneas de planchado" msgid "Ironing speed" -msgstr "Velocidad de alisado" +msgstr "Velocidad de planchado" msgid "Print speed of ironing lines" -msgstr "Velocidad de impresión de las líneas de alisado" +msgstr "Velocidad de impresión de las líneas de planchado" msgid "This gcode part is inserted at every layer change after lift z" msgstr "" -"Esta parte de G-Code se inserta en cada cambio de capa después de levantar z" +"Esta parte de gcode se inserta en cada cambio de capa después de levantar z" msgid "Supports silent mode" msgstr "Admite el modo silencioso" @@ -8383,11 +8185,11 @@ msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"Este G-code se usará como código para la pausa de impresión. El usuario " -"puede insertar una pausa en el visor de G-Code" +"Este G-code se utilizará como código para la impresión en pausa. Los " +"usuarios pueden insertar el G-code de pausa en el visor de G-code." msgid "This G-code will be used as a custom code" -msgstr "Este G-code se usará para el código personalizado" +msgstr "Este G-code se utilizará como código personalizado" msgid "Maximum speed X" msgstr "Velocidad máxima X" @@ -8506,14 +8308,14 @@ msgstr "" "velocidad máxima del ventilador de refrigeración parcial" msgid "Max" -msgstr "" +msgstr "Max" msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" "La mayor altura de capa imprimible para el extrusor. Se utiliza para limitar " -"la altura máxima de la capa cuando se habilita la altura de capa adaptativa" +"la altura máxima de la capa cuando se habilita la altura de capa adaptativa." msgid "Minimum speed for part cooling fan" msgstr "Velocidad mínima del ventilador de refrigeración de la pieza" @@ -8528,14 +8330,14 @@ msgstr "" "capas, que se define por la ausencia de capas de refrigeración" msgid "Min" -msgstr "" +msgstr "Min" msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" msgstr "" "La menor altura de capa imprimible para el extrusor. Se utiliza para limitar " -"la altura mínima de la capa cuando se activa la altura de capa adaptable" +"la altura mínima de la capa cuando se activa la altura de capa adaptable." msgid "Min print speed" msgstr "Velocidad de impresión mínima" @@ -8551,26 +8353,28 @@ msgid "Diameter of nozzle" msgstr "Diámetro de la boquilla" msgid "Host Type" -msgstr "Tipo de host" +msgstr "Tipo de anfitrión" msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -"Orca Slicer puede cargar archivos G-code a un host de impresora. Este campo " -"puede contener el tipo de host." +"Slic3r puede cargar archivos G-code a un host de impresora. Este campo debe " +"contener el tipo de anfitrión." msgid "Nozzle volume" -msgstr "Volumen de la boquilla" +msgstr "Tamaño de la boquilla" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "Volumen de la boquilla entre el cortador y el extremo de la boquilla" +msgstr "Espacio de la boquilla entre el cortador y el extremo de la boquilla" msgid "Start end points" -msgstr "Puntos de inicio fin" +msgstr "Puntos finales e iniciales" msgid "The start and end points which is from cutter area to garbage can." -msgstr "Los puntos de inicio y fin, desde la zona de corte al cubo de basura." +msgstr "" +"Los puntos inicial y final que van desde el área de corte hasta el conducto " +"de purga." msgid "Reduce infill retraction" msgstr "Reducir la retracción del relleno" @@ -8580,10 +8384,11 @@ 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 "" -"No retrae cuando el viaje está totalmente en el área de relleno. Eso " -"significa que el rezume no se pueda ver. Puede reducir los tiempos de " -"retracción para modelos complejos y ahorrar tiempo de impresión, pero hacer " -"que el corte y la generación de G-Code sea más lento" +"No retraer filamento cuando el cabezal esta en un área del relleno. Eso " +"significa que no se vera la supuración (reducir oozing). Esto puede reducir " +"los tiempos de retracción para modelos complejos y ahorrar tiempo de " +"impresión, pero hace que la segmentación y la generación del gcode sean más " +"lentas." msgid "Enable" msgstr "Habilitar" @@ -8596,105 +8401,66 @@ msgstr "" "El usuario puede definir por sí mismo el nombre del archivo del proyecto al " "exportarlo" -msgid "Make overhang printable" -msgstr "Voladizos imprimibles sin soporte" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "Modificar la geometría para imprimir voladizos sin soportes." - -msgid "Make overhang printable maximum angle" -msgstr "Máximo ángulo de impresión de voladizos imprimibles sin soporte" - -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." -msgstr "" -"Máximo ángulo de voladizos para permitir voladizos más pronunciados. 90º no " -"cambiará el modelo del todo y permitirá cualquier voladizo, mientras que 0 " -"reemplazará todos lo voladizos con material cónico." - -msgid "Make overhang printable hole area" -msgstr "Área hueca del voladizo imprimible sin soporte" - -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 "" -"Máxima área hueca en la base del modelo antes de que se lleno por material " -"cónico. El valor 0 llenará todos los huecos en la base del modelo." - -msgid "mm²" -msgstr "" - msgid "Detect overhang wall" -msgstr "Detectar el voladizo del perímetro" +msgstr "Detectar el voladizo de la pared" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Detecta el porcentaje de voladizo en relación con el ancho de la línea y " -"utiliza diferentes velocidades para imprimir. Para el 100%% de voladizo, se " -"utiliza la velocidad de puente." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Ancho de extrusión del perímetro interno. Si se expresa cómo %, se calculará " -"sobre el diámetro de la boquilla." +msgid "Line width of inner wall" +msgstr "Ancho de línea de la pared interior" msgid "Speed of inner wall" -msgstr "Velocidad del perímetro interior" +msgstr "Velocidad de la pared interior" msgid "Number of walls of every layer" -msgstr "Número de perímetros de cada capa" +msgstr "Número de paredes de cada capa" + +msgid "Post-processing Scripts" +msgstr "Post-processing Scripts" msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" -"Si desea procesar el G-code de salida a través de scripts personalizados, " -"simplemente enumere sus rutas absolutas aquí. Separe varios scripts con " -"punto y coma. A los scripts se les pasará la ruta absoluta al archivo G-code " -"como primer argumento, y pueden acceder a los ajustes de configuración de " -"OrcaSlicer leyendo variables de entorno." +"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 via the absolute path to the G-code file as the first " +"argument, and variables of settings can also be read" msgid "Raft contact Z distance" -msgstr "Distancia Z de contacto de la base de impresión" +msgstr "Distancia Z de contacto de la balsa" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"Espacio Z entre el objeto y la base de impresión. Se ignora para la interfaz " -"soluble" +"Espacio Z entre el objeto y la balsa. Se ignora para la interfaz soluble" msgid "Raft expansion" -msgstr "Expansión de la base de impresión" +msgstr "Expansión de la balsa" msgid "Expand all raft layers in XY plane" -msgstr "Expandir todas las capas de la base de impresión en el plano XY" +msgstr "Expandir todas las capas de la balsa en el plano XY" msgid "Initial layer density" -msgstr "Densidad de la primera capa" +msgstr "Densidad de la capa inicial" msgid "Density of the first raft or support layer" -msgstr "Densidad de la primera base de impresión o capa de soporte" +msgstr "Densidad de la primera balsa o capa de soporte" msgid "Initial layer expansion" -msgstr "Expansión de la primera capa" +msgstr "Expansión de la capa inicial" msgid "Expand the first raft or support layer to improve bed plate adhesion" msgstr "" -"Expandir la primera base de impresión o capa de soporte para mejorar la " -"adherencia de la cama de la bandeja" +"Expandir la primera balsa o capa de soporte para mejorar la adherencia de la " +"placa de la cama" msgid "Raft layers" -msgstr "Capas de base de impresión" +msgstr "Capas de balsa" msgid "" "Object will be raised by this number of support layers. Use this function to " @@ -8708,9 +8474,10 @@ msgid "" "much points and gcode lines in gcode file. Smaller value means higher " "resolution and more time to slice" msgstr "" -"La ruta del G-Code se genera después de simplificar el contorno del modelo " -"para evitar demasiados puntos y líneas de código en el archivo de G-Code. Un " -"valor más pequeño significa una mayor resolución y más tiempo para cortar" +"La ruta del código G se genera después de simplificar el contorno del modelo " +"para evitar demasiados puntos y líneas de código G en el archivo de código " +"G. Un valor más pequeño significa una mayor resolución y más tiempo para " +"cortar." msgid "Travel distance threshold" msgstr "Umbral de distancia de desplazamiento" @@ -8732,7 +8499,7 @@ msgstr "" "longitud de la retracción" msgid "Retract when change layer" -msgstr "Retracción al cambiar de capa" +msgstr "Retirada al cambiar de capa" msgid "Force a retraction when changes layer" msgstr "Forzar una retracción al cambiar de capa" @@ -8752,7 +8519,7 @@ msgstr "" "retracción" msgid "Z hop when retract" -msgstr "Salto en Z al retraerse" +msgstr "Salto en Z al replegarse" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " @@ -8764,7 +8531,7 @@ msgstr "" "boquilla golpee la impresión cuando se desplaza. El uso de la línea espiral " "para levantar z puede evitar el encordado" -msgid "Z hop type" +msgid "Z Hop Type" msgstr "Tipo de salto Z" msgid "Slope" @@ -8773,65 +8540,11 @@ msgstr "Pendiente" msgid "Spiral" msgstr "Espiral" -msgid "Only lift Z above" -msgstr "Solo elevar Z por encima" - -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." +msgid "Direct drive" msgstr "" -"Si lo ajusta a un valor positivo, la elevación de Z sólo tendrá lugar por " -"encima de la Z absoluta especificada." -msgid "Only lift Z below" -msgstr "Solo elevar Z por debajo" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." +msgid "Bowden" msgstr "" -"Si se ajusta a un valor positivo, el levantamiento Z sólo tendrá lugar por " -"debajo de la Z absoluta especificada." - -msgid "On surfaces" -msgstr "En las capas" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" -"Forzar el comportamiento de Salto Z. Este ajuste se ve afectado por los " -"ajustes anteriores (Sólo levantar Z arriba/abajo)." - -msgid "All Surfaces" -msgstr "Todas las Superficies" - -msgid "Top Only" -msgstr "Solo Superior" - -msgid "Bottom Only" -msgstr "Solo Inferior" - -msgid "Top and Bottom" -msgstr "Superior e Inferior" - -msgid "Extra length on restart" -msgstr "Longitud extra de reinicio" - -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 "" -"Cuando la retracción se compensa después de un movimiento de viaje, el " -"extrusor expulsará esa cantidad de filamento adicional. Este ajuste " -"raramente se necesitará." - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." -msgstr "" -"Cuando se compensa la retracción después de cambiar de herramienta, el " -"extrusor empujará esta cantidad adicional de filamento." msgid "Retraction Speed" msgstr "Velocidad de retracción" @@ -8849,25 +8562,11 @@ msgstr "" "Velocidad de recarga del filamento en el extrusor. Cero significa la misma " "velocidad con la retracción" -msgid "Use firmware retraction" -msgstr "Usar retracción de firmware" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" -"Esta configuración experimental utiliza los comandos G10 y G11 para que el " -"firmware se encargue de la retracción. Sólo se admite en variables de " -"entorno recientes de Marlin.ding." - -msgid "Show auto-calibration marks" -msgstr "Muestra marcas de autocalibración" - msgid "Seam position" msgstr "Posición de la costura" msgid "The start position to print each part of outer wall" -msgstr "La posición inicial para imprimir cada parte del perímetro exterior" +msgstr "La posición inicial para imprimir cada parte de la pared exterior" msgid "Nearest" msgstr "Más cercano" @@ -8876,61 +8575,23 @@ msgid "Aligned" msgstr "Alineado" msgid "Back" -msgstr "Trasera" +msgstr "Volver" msgid "Random" msgstr "Aleatorio" -msgid "Staggered inner seams" -msgstr "Costuras interiores escalonadas" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" -"Esta opción causa que las costuras internas sean desplazadas hacía detrás en " -"función de su profundidad, formando un patrón en zigzag." - msgid "Seam gap" -msgstr "Separación entre costuras" +msgstr "" 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%." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" -"Para reducir la visibilidad de la costura en una extrusión de bucle cerrado, " -"el bucle se interrumpe y se acorta en una cantidad especificada.\n" -"Esta cantidad puede especificarse en milímetros o como porcentaje del " -"diámetro actual del extrusor. El valor por defecto de este parámetro es 10%." - -msgid "Role base wipe speed" -msgstr "Velocidad de limpieza según tipo de línea" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" -"La velocidad de limpieza viene determinada por la velocidad de extrusión " -"actual. Por ejemplo, si se ejecuta una acción de limpieza inmediatamente " -"después de una extrusión del perímetro exterior, se utilizará la velocidad " -"de la extrusión del perímetro exterior para la acción de limpieza." - -msgid "Wipe on loops" -msgstr "Limpieza en contornos curvos" - -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 "" -"Para minimizar la visibilidad de la costura en un contorno curvo cerrado, se " -"ejecuta un pequeño movimiento hacia dentro antes de que el extrusor abandone " -"la curva." msgid "Wipe speed" -msgstr "Velocidad de limpieza" +msgstr "" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -8938,22 +8599,18 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"La velocidad de barrido viene determinada por el ajuste de velocidad " -"especificado en esta configuración. Si el valor se expresa en porcentaje " -"(por ejemplo, 80%), se calculará en función del ajuste de velocidad de " -"desplazamiento anterior. El valor por defecto de este parámetro es 80%" msgid "Skirt distance" msgstr "Distancia de la falda" msgid "Distance from skirt to brim or object" -msgstr "Distancia de la falda al borde de adherencia o al objeto" +msgstr "Distancia de la falda al borde o al objeto" msgid "Skirt height" -msgstr "Altura de falda" +msgstr "Skirt height" msgid "How many layers of skirt. Usually only one layer" -msgstr "C capas de falda. Normalmente sólo una capa" +msgstr "Number of skirt layers: usually only one" msgid "Skirt loops" msgstr "Contorno de la falda" @@ -8961,19 +8618,11 @@ msgstr "Contorno de la falda" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "Número de bucles de la falda. Cero significa desactivar el faldón" -msgid "Skirt speed" -msgstr "Velocidad de falda" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" -"Velocidad de la falda, en mm/s. Cero significa utilizar la velocidad de capa " -"por defecto." - msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " "layer time is shorter than this value, to get better cooling for these layers" msgstr "" -"La velocidad de impresión en el G-Code exportado se ralentizará, cuando el " +"La velocidad de impresión en el gcode exportado se ralentizará, cuando el " "tiempo estimado de la capa sea inferior a este valor, para conseguir una " "mejor refrigeración de estas capas" @@ -8987,19 +8636,18 @@ msgstr "" "El área de relleno disperso que es menor que el valor del umbral se " "sustituye por un relleno sólido interno" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" -"Ancho de extrusión del relleno sólido interno. Si se expresa cómo %, se " -"calculará sobre el diámetro de la boquilla." +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Ancho de línea del relleno sólido interno" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" "Velocidad del relleno sólido interno, no la superficie superior e inferior" msgid "Spiral vase" -msgstr "Vaso en espiral" +msgstr "Jarrón en espiral" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -9007,7 +8655,7 @@ msgid "" "generated model has no seam" msgstr "" "Spiralize suaviza los movimientos z del contorno exterior. Y convierte un " -"modelo sólido en una impresión de una soel perímetro con capas inferiores " +"modelo sólido en una impresión de una sola pared con capas inferiores " "sólidas. El modelo final generado no tiene costura" msgid "" @@ -9020,14 +8668,14 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"Sí se selecciona el modo suave o tradicional, se generará un vídeo time-" -"lapse para cada impresión. Después de imprimir cada capa, se toma una " -"instantánea con la cámara. Todas estas instantáneas se componen en un vídeo " -"time-lapse cuando finaliza la impresión. Si se selecciona el modo suave, el " -"cabezal de la herramienta se moverá a la rampa de exceso después de cada " -"capa se imprime y luego tomar una instantánea. Dado que el filamento fundido " -"puede gotear de la boquilla durante el proceso de tomar una instantánea, la " -"torre de purga es necesaria para el modo suave de limpiar la boquilla." +"Si se selecciona el modo suave o tradicional, se generará un vídeo timelapse " +"para cada impresión. Después de imprimir cada capa, se toma una instantánea " +"con la cámara. Todas estas instantáneas se componen en un vídeo timelapse " +"cuando finaliza la impresión. Si se selecciona el modo suave, el cabezal de " +"la herramienta se moverá a la zona de purga después de cada capa se imprime " +"y luego tomar una instantánea. Dado que el filamento fundido puede gotear de " +"la boquilla durante el proceso de tomar una instantánea, se requiere una " +"torre de purga para el modo suave para limpiar la boquilla." msgid "Traditional" msgstr "Tradicional" @@ -9036,36 +8684,37 @@ msgid "Temperature variation" msgstr "Variación de temperatura" msgid "Start G-code" -msgstr "G-Code inicial" +msgstr "Código G inicial" msgid "Start G-code when start the whole printing" -msgstr "Inicie el G-Code cuando comience la impresión completa" +msgstr "Inicie el código G cuando comience la impresión completa" msgid "Start G-code when start the printing of this filament" -msgstr "Inicie el G-Code al comenzar la impresión de este filamento" +msgstr "Inicie el código G al comenzar la impresión de este filamento" msgid "Slice gap closing radius" -msgstr "Radio de cierre de laminado" +msgstr "Radio de cierre de la brecha de corte" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Las grietas más pequeñas que el radio de cierre 2x se rellenan durante el " -"corte de la malla triangular. La operación de cierre de huecos puede reducir " -"la resolución de impresión final, por lo que es aconsejable mantener el " -"valor razonablemente bajo." +"Durante el corte de la malla triangular se rellenan las grietas de tamaño " +"inferior a 2 veces el radio de cierre del hueco. La operación de cierre de " +"huecos puede reducir la resolución de impresión final, por lo que es " +"aconsejable mantener el valor razonablemente bajo." msgid "Slicing Mode" -msgstr "Modo de laminado" +msgstr "Modo de corte" msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Utilice \"Par-impar\" para los modelos de avión de 3DLabPrint. Utilice " -"\"Cerrar agujeros\" para cerrar todos los agujeros del modelo." +"Utilice la opción «Par-impar» para los modelos de aviones de 3DLabPrint. " +"Utilice la opción «Cerrar orificios» para cerrar todos los orificios del " +"modelo." msgid "Regular" msgstr "Normal" @@ -9087,9 +8736,9 @@ msgid "" "normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"normal(auto) y tree(auto) se utiliza para generar soporte automáticamente. " -"Si se selecciona normal(manual) o árbol(manual), sólo se generan los " -"refuerzos de apoyo" +"normal (automático) y árbol (automático) se utilizan para generar soporte " +"automáticamente. Si se selecciona normal (manual) o árbol (manual), solo se " +"generan los soportes forzados" msgid "normal(auto)" msgstr "normal(auto)" @@ -9101,7 +8750,7 @@ msgid "normal(manual)" msgstr "normal (manual)" msgid "tree(manual)" -msgstr "árbol(manual)" +msgstr "árbol (manual)" msgid "Support/object xy distance" msgstr "Distancia soporte/objeto xy" @@ -9117,27 +8766,27 @@ msgstr "" "Utilice este ajuste para girar el patrón de soporte en el plano horizontal." msgid "On build plate only" -msgstr "Sólo en la bandeja de impresión" +msgstr "Sólo en la placa de impresión" msgid "Don't create support on model surface, only on build plate" msgstr "" -"No crear soporte en la superficie del modelo, sólo en la bandeja de impresión" +"No crear soporte en la superficie del modelo, sólo en la placa de impresión" msgid "Support critical regions only" -msgstr "Añadir soportes en regiones críticas solo" +msgstr "Soporta solo regiones críticas" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Cree soportes sólo para las regiones críticas, como la cola afilada, el " +"Cree soporte únicamente para regiones críticas, como las puntas afilada, el " "voladizo, etc." msgid "Remove small overhangs" -msgstr "Eliminar voladizos pequeños" +msgstr "" msgid "Remove small overhangs that possibly need no supports." -msgstr "Elimina los voladizos pequeños que posiblemente no necesiten soportes." +msgstr "" msgid "Top Z distance" msgstr "Distancia Z superior" @@ -9149,25 +8798,21 @@ msgid "Bottom Z distance" msgstr "Distancia Z inferior" msgid "The z gap between the bottom support interface and object" -msgstr "La distancia z entre la interfaz de apoyo inferior y el objeto" +msgstr "El espacio z entre la interfaz de soporte inferior y el objeto" msgid "Support/raft base" -msgstr "Soporte/plataforma base" +msgstr "Support/raft base" msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filamento para imprimir la base de soporte y la base de impresión. \"Por " -"defecto\" significa que no hay filamento específico para el soporte y se " -"utiliza el filamento actual" +"Filamento para imprimir bases y balsas de soporte. «Predeterminado» " +"significa que no hay un filamento específico como soporte y se utiliza un " +"filamento actual" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" -"Ancho de extrusión de los soportes Si se expresa cómo %, se calculará sobre " -"el diámetro de la boquilla." +msgid "Line width of support" +msgstr "Ancho de línea del soporte" msgid "Interface use loop pattern" msgstr "Uso de la interfaz en forma de bucle" @@ -9179,15 +8824,15 @@ msgstr "" "por defecto." msgid "Support/raft interface" -msgstr "Interfaz de soporte/base de impresión" +msgstr "Support/raft interface" msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filamento para imprimir interfaz de soporte. \"Por defecto\" significa que " -"no hay filamento específico para la interfaz de soporte y se utiliza el " -"filamento actual" +"Filamento para imprimir interfaces de soporte. \"Por defecto\" significa que " +"no hay filamento específico para la interfaz de soporte, y se utilizará el " +"filamento actual." msgid "Top interface layers" msgstr "Capas de la interfaz superior" @@ -9241,7 +8886,7 @@ msgstr "" "defecto para la interfaz de soporte soluble es Concéntrico" msgid "Rectilinear Interlaced" -msgstr "Entrelazado rectilíneo" +msgstr "Rectilinear Interlaced" msgid "Base pattern spacing" msgstr "Espaciamiento del patrón base" @@ -9250,10 +8895,10 @@ msgid "Spacing between support lines" msgstr "Espacio entre las líneas de apoyo" msgid "Normal Support expansion" -msgstr "Expasión de Soporte Normal" +msgstr "Expansión de soporte normal" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "Ampliar (+) o reducir (-) la expansión horizontal del soporte normal" +msgstr "Ampliar (+) o reducir (-) la distancia horizontal de los soportes" msgid "Speed of support" msgstr "Velocidad de la asistencia" @@ -9266,26 +8911,26 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Estilo y forma del soporte. Para el soporte normal, proyectar los soportes " -"en una cuadrícula regular creará soportes más estables (por defecto), " -"mientras que las torres de soporte ajustadas ahorrarán material y reducirán " -"las cicatrices del objeto.\n" -"Para el soporte arbóreo, el estilo esbelto fusionará las ramas de forma más " -"agresiva y ahorrará mucho material (por defecto), mientras que el estilo " -"híbrido creará una estructura similar a la del soporte normal bajo grandes " -"voladizos planos." +"Tipo y forma del soporte. Para un soporte normal, proyectar los soportes en " +"una rejilla normal creará soportes más estables (opción predeterminada), " +"mientras que los pilares de soporte ahorrarán material y reducirán las " +"marcas en los objetos.\n" +"Para el soporte de árboles, el estilo delgado fusionará las ramas de forma " +"más agresiva y ahorrará mucho material (predeterminado), mientras que el " +"estilo híbrido creará una estructura similar a la de un soporte normal en " +"voladizos grandes y planos." msgid "Snug" msgstr "Ajustado" msgid "Tree Slim" -msgstr "Árbol Delgado" +msgstr "árbol delgado" msgid "Tree Strong" -msgstr "Árbol Fuerte" +msgstr "Árbol fuerte" msgid "Tree Hybrid" -msgstr "Árbol Híbrido" +msgstr "Árbol híbrido" msgid "Independent support layer height" msgstr "Altura de la capa de soporte independiente" @@ -9295,11 +8940,12 @@ msgid "" "support customizing z-gap and save print time.This option will be invalid " "when the prime tower is enabled." msgstr "" -"La capa de soporte utiliza una altura de capa independiente de la capa del " -"objeto. Esta opción no será válida si la torre de purga está activada." +"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." msgid "Threshold angle" -msgstr "Pendiente máxima" +msgstr "Ángulo de umbral" msgid "" "Support will be generated for overhangs whose slope angle is below the " @@ -9329,34 +8975,6 @@ msgstr "" "Este ajuste determina la distancia entre los nodos de soporte del árbol " "vecinos." -msgid "Adaptive layer height" -msgstr "Altura de capa adaptable" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" -"Si se activa esta opción, se calculará automáticamente la altura de todas " -"las capas de soporte de los árboles excepto la primera. " - -msgid "Auto brim width" -msgstr "Ancho de borde de adherencia automático" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" -"Si activa esta opción, se calculará automáticamente la anchura del borde de " -"adherencia para el soporte del árbol" - -msgid "Tree support brim width" -msgstr "Anchura del borde de adherencia" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" -"Distancia desde la rama del árbol hasta la línea más externa del borde de " -"adherencia" - msgid "Tree support branch diameter" msgstr "Diámetro de la rama de soporte del árbol" @@ -9364,28 +8982,23 @@ msgid "This setting determines the initial diameter of support nodes." msgstr "Este ajuste determina el diámetro inicial de los nodos de apoyo." msgid "Tree support wall loops" -msgstr "Perímetros de las ramas" +msgstr "Lazos de pared de soporte para arboles" msgid "This setting specify the count of walls around tree support" msgstr "" -"Este ajuste especifica el número de perímetros alrededor del soporte del " -"árbol" +"Este ajuste especifica el número de muros alrededor del soporte del árbol" -msgid "Tree support with infill" -msgstr "Soporte para árboles con relleno" +msgid "Tree support brim width" +msgstr "Tree support brim width" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"Este ajuste especifica si se añade relleno dentro de los grandes huecos del " -"soporte del árbol" +msgid "The brim width around tree support. 0 means auto." +msgstr "The brim width around tree support. 0 means auto." msgid "Chamber temperature" -msgstr "Temperatura de cámara" +msgstr "" msgid "Target chamber temperature" -msgstr "Temperatura objetivo de la cámara" +msgstr "" msgid "Nozzle temperature for layers after the initial one" msgstr "Temperatura de la boquilla después de la primera capa" @@ -9398,18 +9011,19 @@ msgid "" "layer for more than this threshold. Too low bed temperature of other layer " "may cause the model broken free from build plate" msgstr "" -"No se recomienda que la temperatura de la otra capa sea inferior a la de la " -"primera capa por encima de este umbral. Una temperatura demasiado baja de la " -"otra capa puede hacer que el modelo se desprenda de la bandeja de impresión" +"No se recomienda que la temperatura del la plataforma de impresión de otras " +"capas sea inferior a la primera capa en más de este umbral. Una temperatura " +"demasiado baja de las otras capas puede hacer que el modelo se desprenda de " +"la placa." msgid "Detect thin wall" -msgstr "Detectar el perímetro delgada" +msgstr "Detectar la pared delgada" 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 "" -"Detectar el perímetro delgada que no puede contener dos líneas de ancho. Y " +"Detectar la pared delgada que no puede contener dos líneas de ancho. Y " "utilizar una sola línea para imprimir. Tal vez no se imprime muy bien, " "porque no es de bucle cerrado" @@ -9417,15 +9031,11 @@ msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"Este G-Code se inserta cuando se cambia de filamento, incluyendo el comando " -"T para activar el cambio de herramienta" +"Este gcode se inserta cuando se cambia de filamento, incluyendo el comando T " +"para activar el cambio de herramienta" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" -"Ancho de extrusión de las capas superiores. Si se expresa cómo %, se " -"calculará sobre el diámetro de la boquilla." +msgid "Line width for top surfaces" +msgstr "Ancho de línea para las superficies superiores" msgid "Speed of top surface infill which is solid" msgstr "Velocidad del relleno de la superficie superior que es sólida" @@ -9456,16 +9066,24 @@ msgid "" "is disabled and thickness of top shell is absolutely determained by top " "shell layers" msgstr "" -"El número de capas sólidas superiores se incrementa al laminar si el espesor " +"El número de capas sólidas superiores se incrementa al rebanar si el espesor " "calculado por las capas superiores de la cáscara es más delgado que este " "valor. Esto puede evitar tener una capa demasiado fina cuando la altura de " "la capa es pequeña. 0 significa que este ajuste está desactivado y el grosor " "de la capa superior está absolutamente determinado por las capas de la capa " -"superior" +"superior." msgid "Speed of travel which is faster and without extrusion" msgstr "Velocidad de desplazamiento más rápida y sin extrusión" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Limpiar mientras se retrae" @@ -9491,9 +9109,9 @@ msgid "" "stabilize the chamber pressure inside the nozzle, in order to avoid " "appearance defects when printing objects." msgstr "" -"La torre de purga puede utilizarse para limpiar los residuos de la boquilla " -"y estabilizar la presión de la cámara en el interior de la boquilla, con el " -"fin de evitar defectos de aspecto al imprimir objetos." +"The wiping tower can be used to clean up residue on the nozzle and stabilize " +"the chamber pressure inside the nozzle in order to avoid appearance defects " +"when printing objects." msgid "Purging volumes" msgstr "Volúmenes de purga" @@ -9505,8 +9123,8 @@ msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"El volumen de descarga real es igual al multiplicador de descarga " -"multiplicado por los volúmenes de descarga de la tabla." +"Los volúmenes de descarga reales son iguales al valor del multiplicador de " +"descarga multiplicado por los volúmenes de descarga de la tabla." msgid "Prime volume" msgstr "Volumen principal" @@ -9518,7 +9136,7 @@ msgid "Width" msgstr "Ancho" msgid "Width of prime tower" -msgstr "Anchura de la torre de purga" +msgstr "Anchura de la torre principal" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -9526,20 +9144,20 @@ 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 "" -"La purga tras el cambio de filamento se realizará dentro de los rellenos de " -"los objetos. Esto puede reducir la cantidad de residuos y disminuir el " -"tiempo de impresión. Si los perímetros se imprimen con filamento " -"transparente, el relleno de color mixto se verá en el exterior. No tendrá " -"efecto, a menos que la torre de purga esté activada." +"La purga después del cambio de filamento se realizará dentro de los rellenos " +"de los objetos. Esto puede reducir la cantidad de residuos y reducir el " +"tiempo de impresión. Si las paredes están impresas con filamento " +"transparente, el relleno de colores mezclados será visible. No tendrá efecto " +"a menos que la torre de purga esté habilitada." 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 "" -"La purga tras el cambio de filamento se realizará dentro del soporte de los " -"objetos. Esto puede reducir la cantidad de residuos y disminuir el tiempo de " -"impresión. No tendrá efecto, a menos que la torre de purga esté activada." +"La purga después del cambio de filamento se realizará dentro del soporte de " +"los objetos. Esto puede reducir la cantidad de residuos y reducir el tiempo " +"de impresión. No tendrá efecto a menos que se habilite una torre de purga." msgid "" "This object will be used to purge the nozzle after a filament change to save " @@ -9547,9 +9165,9 @@ msgid "" "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" "Este objeto se utilizará para purgar la boquilla después de un cambio de " -"filamento para ahorrar filamento y disminuir el tiempo de impresión. Los " -"colores de los objetos se mezclarán como resultado. No tendrá efecto, a " -"menos que la torre de purga esté activada." +"filamento para ahorrar filamento y reducir el tiempo de impresión. Como " +"resultado, los colores de los objetos se mezclarán. No tendrá efecto a menos " +"que la torre de purga esté habilitada." msgid "X-Y hole compensation" msgstr "Compensación de huecos X-Y" @@ -9579,61 +9197,36 @@ msgstr "" "negativo hace que el contorno sea más pequeño. Esta función se utiliza para " "ajustar el tamaño ligeramente cuando el objeto tiene problemas de ensamblaje" -msgid "G-code thumbnails" -msgstr "Miniaturas de G-code" - -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 deben almacenarse en archivos .gcode y .sl1 / ." -"sl1s, en el siguiente formato: \"XxY, XxY, ...\"" - -msgid "Use relative E distances" -msgstr "Usar distancias relativas E" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" -"Se recomienda la extrusión relativa cuando se utiliza la opción " -"\"label_objects\". Algunos extrusores funcionan mejor con esta opción " -"desactivada (modo de extrusión absoluta). La torre de borrado sólo es " -"compatible con el modo relativo. Siempre está activada en las impresoras " -"BambuLab. Por defecto está marcada" - 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 "" -"El generador de perímetros clásico produce perímetros con anchura de " -"extrusión constante y para zonas muy finas se utiliza rellenar-espacio. El " -"motor Arachne produce perímetros con anchura de extrusión variable." +"El generador de paredes clásico produce paredes con un ancho de extrusión " +"constante y para áreas muy delgadas, se utiliza el relleno de huecos. El " +"generador Arachne produce paredes con ancho de extrusión variable." msgid "Classic" msgstr "Clásico" msgid "Arachne" -msgstr "" +msgstr "Aracne" msgid "Wall transition length" -msgstr "Anchura de transición de perímetro" +msgstr "Longitud de transición de la pared" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"Cuando se pasa de un número de perímetros a otro a medida que la pieza se " -"vuelve más fina, se asigna una determinada cantidad de espacio para dividir " -"o unir los segmentos de perímetro. Se expresa como un porcentaje sobre el " -"diámetro de la boquilla" +"Al realizar la transición entre diferentes números de paredes a medida que " +"la parte se vuelve más delgada, se asigna una cierta cantidad de espacio " +"para dividir o unir los segmentos de la pared. Se expresa como un porcentaje " +"sobre el diámetro de la boquilla." msgid "Wall transitioning filter margin" -msgstr "Margen del filtro de transición al perímetro" +msgstr "Margen de filtro de transición de pared" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -9644,16 +9237,16 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Evita la transición entre un perímetro de más y uno de menos. Este margen " -"amplía el rango de anchos de extrusión que siguen a [Ancho mínimo de " -"perímetro - margen, 2 * Ancho mínimo de perímetro + margen]. Aumentando este " -"margen se reduce el número de transiciones, lo que reduce el número de " -"arranques/paradas de extrusión y el tiempo de recorrido. Sin embargo, una " -"gran variación de la anchura de extrusión puede provocar problemas de infra " -"o sobreextrusión. Se expresa en porcentaje sobre el diámetro de la boquilla" +"Evita la transición entre una pared de más y una de menos. Este margen " +"amplía el rango de anchos de extrusión que siguen a [Ancho mínimo de pared - " +"margen, 2 * Ancho mínimo de pared + margen]. Aumentando este margen se " +"reduce el número de transiciones, lo que reduce el número de arranques/" +"paradas de extrusión y el tiempo de recorrido. Sin embargo, una gran " +"variación de la anchura de extrusión puede provocar problemas de infra o " +"sobreextrusión. Se expresa en porcentaje sobre el diámetro de la boquilla" msgid "Wall transitioning threshold angle" -msgstr "Ángulo del umbral de transición del perímetro" +msgstr "Ángulo de umbral de transición de pared" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -9662,25 +9255,25 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Cuándo crear transiciones entre números pares e impares de perímetros. Una " -"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 sobresalir" +"Cuándo se crean transiciones entre números pares e impares de paredes. Una " +"forma de cuña con un ángulo mayor que este valor no tendrá transiciones y no " +"se imprimirán paredes en el centro para rellenar el espacio restante. La " +"reducción de este valor reduce el número y la longitud de estas paredes " +"centrales, pero puede dejar huecos o excesos de extrusión" msgid "Wall distribution count" -msgstr "Recuento de la distribución del perímetro" +msgstr "Recuento de distribución de pared" 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 "" -"El número de perímetros, contados desde el centro, sobre los que debe " -"repartirse la variación. Los valores más bajos significan que los perímetros " -"exteriores no cambian de anchura" +"El número de paredes, contadas desde el centro, sobre las que debe " +"extenderse la variación. Los valores más bajos significan que las paredes " +"exteriores no cambian de ancho" msgid "Minimum feature size" -msgstr "Tamaño mínimo del elemento" +msgstr "Tamaño mínimo de detalle" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -9688,14 +9281,14 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Espesor mínimo de los elementos finos. Las características del modelo que " -"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 del elemento se ensancharán " -"hasta el Ancho mínimo de perímetro. Se expresa en porcentaje sobre el " -"diámetro de la boquilla" +"Grosor mínimo de los elementos delgados. Los elementos del modelo que sean " +"más delgados que este valor no se imprimirán, mientras que los elementos con " +"un grosor superior al tamaño mínimo de la característica se ensancharán " +"hasta alcanzar el ancho mínimo de pared. Se expresa como un porcentaje sobre " +"el diámetro de la boquilla" msgid "Minimum wall width" -msgstr "Ancho mínimo del perímetro" +msgstr "Ancho mínimo de pared" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -9703,11 +9296,10 @@ 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 "" -"Anchura del perímetro que sustituirá a los elementos finos (según el tamaño " -"mínimo del elemento) del modelo. Si la anchura mínima del perímetro es menor " -"que el grosor de la característica, el perímetro será tan grueso como la " -"propia característica. Se expresa en porcentaje sobre el diámetro de la " -"boquilla" +"Ancho de la pared que sustituirá a los elementos delgados (según el tamaño " +"mínimo de la función) del modelo. Si el ancho mínimo de pared es inferior al " +"grosor del elemento , la pared será tan gruesa como el propio elemento. Se " +"expresa como un porcentaje sobre el diámetro de la boquilla" msgid "Detect narrow internal solid infill" msgstr "Detectar el relleno sólido interno estrecho" @@ -9723,20 +9315,20 @@ msgstr "" "rectilíneo." msgid "invalid value " -msgstr "valor inválido " +msgstr "invalid value " #, c-format, boost-format msgid " doesn't work at 100%% density " -msgstr " no funciona con una densidad del 100%% " +msgstr " doesn't work at 100%% density " msgid "Invalid value when spiral vase mode is enabled: " -msgstr "Valor no válido cuando está activado el modo jarrón espiral: " +msgstr "Invalid value when spiral vase mode is enabled: " msgid "too large line width " -msgstr "demasiada anchura de línea " +msgstr "too large line width " msgid " not in range " -msgstr " fuera de rango " +msgstr " not in range " msgid "Export 3MF" msgstr "Exportar 3MF" @@ -9745,29 +9337,28 @@ msgid "Export project as 3MF." msgstr "Exportar el proyecto como 3MF." msgid "Export slicing data" -msgstr "Exportar datos de laminado" +msgstr "Exportar datos de slicing" msgid "Export slicing data to a folder." -msgstr "Exportar datos de laminado a una carpeta." +msgstr "Exportar datos de slicing a una carpeta" msgid "Load slicing data" -msgstr "Cargar datos de laminado" +msgstr "Cargar datos de slicing" msgid "Load cached slicing data from directory" -msgstr "Cargar datos de laminado en caché desde el directorio" +msgstr "Cargar datos de slicing en caché desde el directorio" msgid "Export STL" -msgstr "Exportar STL" +msgstr "" msgid "Export the objects as multiple STL." -msgstr "Exportar los objectos como multiples STL." +msgstr "" msgid "Slice" msgstr "Laminar" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" -msgstr "" -"Cortar las bandejas: 0-todas las bandejas, i-bandeja i, otras-inválidas" +msgstr "Cortar las placas: 0-todas las placas, i-placa i, otras-inválidas" msgid "Show command help." msgstr "Mostrar la ayuda del comando." @@ -9776,39 +9367,37 @@ msgid "UpToDate" msgstr "Actualizado" msgid "Update the configs values of 3mf to latest." -msgstr "Actualice los valores de configuración de 3mf a la última versión." +msgstr "Actualice los valores de configuración de 3mf a los más recientes." msgid "Load default filaments" -msgstr "Cargar los filamentos por defecto" +msgstr "" msgid "Load first filament as default for those not loaded" -msgstr "Carga el primer filamento por defecto para los no cargados" +msgstr "" msgid "mtcpp" msgstr "mtcpp" msgid "max triangle count per plate for slicing." -msgstr "número máximo de triángulos por plato para laminar." +msgstr "max triangle count per plate for slicing" msgid "mstpp" msgstr "mstpp" msgid "max slicing time per plate in seconds." -msgstr "tiempo máximo de corte por bandeja en segundos." +msgstr "max slicing time per plate in seconds" msgid "No check" -msgstr "No comprobado" +msgstr "No check" msgid "Do not run any validity checks, such as gcode path conflicts check." -msgstr "" -"No ejecute ninguna comprobación de validez, como la comprobación de " -"conflictos de ruta de G-Code." +msgstr "Do not run any validity checks, such as G-code path conflicts check." msgid "Normative check" -msgstr "Comprobación de normativa" +msgstr "Normative check" msgid "Check the normative items." -msgstr "Comprueba los elementos normativos." +msgstr "Check the normative items." msgid "Output Model Info" msgstr "Información del modelo de salida" @@ -9823,10 +9412,10 @@ msgid "Export settings to a file." msgstr "Exporta los ajustes a un archivo." msgid "Send progress to pipe" -msgstr "Enviar el progreso a la tubería" +msgstr "Enviar progreso a la cola" msgid "Send progress to pipe." -msgstr "Enviar el progreso a la tubería." +msgstr "Envía el progreso a la cola" msgid "Arrange Options" msgstr "Opciones de posicionamiento" @@ -9835,10 +9424,10 @@ msgid "Arrange options: 0-disable, 1-enable, others-auto" msgstr "Opciones de posicionamiento: 0-desactivar, 1-activar, otras-auto" msgid "Repetions count" -msgstr "Cantidad de repeticiones" +msgstr "" msgid "Repetions count of the whole model" -msgstr "Cantidad de repeticiones del modelo completo" +msgstr "" msgid "Convert Unit" msgstr "Convertir Unidad" @@ -9866,33 +9455,18 @@ msgstr "" "Cargar los ajustes del filamento desde la lista de archivos especificada" msgid "Skip Objects" -msgstr "Omitir objetos" +msgstr "Skip Objects" msgid "Skip some objects in this print" -msgstr "Omitir algunos objetos en esta impresión" +msgstr "Skip some objects in this print" msgid "load uptodate process/machine settings when using uptodate" msgstr "" -"carga los ajustes actualizados de proceso/máquina cuando se usa actualizar" msgid "" "load uptodate process/machine settings from the specified file when using " "uptodate" msgstr "" -"carga los ajustes actualizados de proceso/máquina desde el archivo " -"especificado cuando se usa actualizar" - -msgid "Data directory" -msgstr "Directorio de datos" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" -"Carga y almacena configuraciones en el directorio dado. Esto es útil para " -"mantener diferentes perfiles o incluir configuraciones desde un " -"almacenamiento en red." msgid "Output directory" msgstr "Directorio de salida" @@ -9914,7 +9488,7 @@ msgid "Error in zip archive" msgstr "Error en el archivo zip" msgid "Generating walls" -msgstr "Generación de perímetros" +msgstr "Generación de muros" msgid "Generating infill regions" msgstr "Generación de zonas de relleno" @@ -9923,7 +9497,7 @@ msgid "Generating infill toolpath" msgstr "Generación de la trayectoria de la herramienta de relleno" msgid "Detect overhangs for auto-lift" -msgstr "Detección de voladizos para autoelevación" +msgstr "Detectar voladizos para elevación automática" msgid "Generating support" msgstr "Generar soporte" @@ -9932,21 +9506,21 @@ msgid "Checking support necessity" msgstr "Comprobación de la necesidad de soporte" msgid "floating regions" -msgstr "regiones flotantes" +msgstr "floating regions" msgid "floating cantilever" -msgstr "voladizo flotante" +msgstr "floating cantilever" msgid "large overhangs" -msgstr "voladizos grandes" +msgstr "large overhangs" #, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." msgstr "" -"Parece que el objeto %s tiene %s. Por favor, reoriente el objeto o active la " -"generación de soporte." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgid "Optimizing toolpath" msgstr "Optimización de la trayectoria de la herramienta" @@ -9965,8 +9539,8 @@ msgid "" "No layers were detected. You might want to repair your STL file(s) or check " "their size or thickness and retry.\n" msgstr "" -"No se han detectado capas. Es posible que desee reparar su(s) archivo(s) STL " -"o comprobar su tamaño o grosor y volver a intentarlo.\n" +"No layers were detected. You might want to repair your STL file(s) or check " +"their size or thickness and retry.\n" msgid "" "An object's XY size compensation will not be used because it is also color-" @@ -10018,7 +9592,7 @@ msgid "Loading of a model file failed." msgstr "Loading of model file failed." msgid "The supplied file couldn't be read because it's empty" -msgstr "El archivo proporcionado no puede ser leído debido a que está vacío" +msgstr "The supplied file couldn't be read because it's empty." msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "Unknown file format: input file must have .3mf or .zip.amf extension." @@ -10041,167 +9615,422 @@ msgstr "The file contains invalid vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "This OBJ file couldn't be read because it's empty." -msgid "Network lookup" -msgstr "Búsqueda de red" - -msgid "Address" -msgstr "Dirección" - -msgid "Hostname" -msgstr "Nombre de host" - -msgid "Service name" -msgstr "Nombre del servicio" - -msgid "OctoPrint version" -msgstr "Versión de OctoPrint" - -msgid "Searching for devices" -msgstr "Buscando dispositivos" - -msgid "Finished" -msgstr "Terminado" - -msgid "Unable to perform boolean operation on selected parts" +msgid "Flow Rate Calibration" msgstr "" -"No es posible realizar la operación booleana en las partes selecionadas" -msgid "Mesh Boolean" -msgstr "Malla Booleana" - -msgid "Union" -msgstr "Unión" - -msgid "Difference" -msgstr "Diferencia" - -msgid "Intersection" -msgstr "Intersección" - -msgid "Source Volume" -msgstr "Volumen de origen" - -msgid "Tool Volume" -msgstr "Volumen de herramienta" - -msgid "Subtract from" -msgstr "Restar de" - -msgid "Subtract with" -msgstr "Restar con" - -msgid "selected" -msgstr "seleccionado" - -msgid "Part 1" -msgstr "Parte 1" - -msgid "Part 2" -msgstr "Parte 2" - -msgid "Delete input" -msgstr "Borrado de entrada" - -msgid "Send to print" -msgstr "Mandar a imprimir" - -msgid "Upload to Printer Host with the following filename:" -msgstr "Subido al Host de Impresión con el siguiente nombre de archivo:" - -msgid "Use forward slashes ( / ) as a directory separator if needed." +msgid "Max Volumetric Speed Calibration" +msgstr "" + +msgid "Manage Result" +msgstr "" + +msgid "Manual Calibration" +msgstr "" + +msgid "Result can be read by human eyes." +msgstr "" + +msgid "Auto-Calibration" +msgstr "" + +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" +msgstr "Finalizar" + +msgid "Wiki" +msgstr "" + +msgid "How to use calibration result?" +msgstr "" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" + +msgid "Calibration not supported" +msgstr "" + +msgid "Flow Dynamics" +msgstr "" + +msgid "Flow Rate" +msgstr "" + +msgid "Max Volumetric Speed" +msgstr "" + +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + +msgid "The name cannot be empty." +msgstr "" + +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Error" + +msgid "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to overrides the other results?" msgstr "" -"Use barras oblicuas como separador de directorio \n" -"si es necesario." #, c-format, boost-format -msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" -"El nombre de archivo que va a cargar no acaba en \"%s\". ¿Desea continuar?" - -msgid "Upload" -msgstr "Cargar" - -msgid "Upload and Print" -msgstr "Cargar e imprimir" - -msgid "Simulate" -msgstr "Simular" - -msgid "Print host upload queue" -msgstr "Imprimir cola de carga del host" - -msgid "ID" +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 "" -msgid "Progress" -msgstr "Progreso" - -msgid "Host" +msgid "Please find the best line on your plate" msgstr "" -msgctxt "OfFile" -msgid "Size" -msgstr "Tamaño" +msgid "Input Value" +msgstr "" -msgid "Filename" -msgstr "Nombre de archivo" +msgid "Save to Filament Preset" +msgstr "" -msgid "Error Message" -msgstr "Mensaje de error" +msgid "Preset" +msgstr "" -msgid "Cancel selected" -msgstr "Cancelar selección" +msgid "Record Factor" +msgstr "" -msgid "Show error message" -msgstr "Mostrar mensaje de error" +msgid "We found the best flow ratio for you" +msgstr "" -msgid "Enqueued" -msgstr "En cola" +msgid "Flow Ratio" +msgstr "" -msgid "Uploading" -msgstr "Subiendo" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "" -msgid "Cancelling" -msgstr "Cancelado" +msgid "Please enter the name of the preset you want to save." +msgstr "" -msgid "Error uploading to print host:" -msgstr "Error cargando al host de impresión:" +msgid "Calibration1" +msgstr "" + +msgid "Calibration2" +msgstr "" + +msgid "Please find the best object on your plate" +msgstr "" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "" + +msgid "Skip Calibration2" +msgstr "" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Plate Type" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" +msgstr "" msgid "PA Calibration" -msgstr "Calibración PA" - -msgid "DDE" msgstr "" -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "Tipo de extrusor" - msgid "PA Tower" -msgstr "Torre PA" +msgstr "" msgid "PA Line" -msgstr "Línea PA" +msgstr "" msgid "PA Pattern" -msgstr "Modelo PA" +msgstr "" msgid "Method" -msgstr "Método" +msgstr "" msgid "Start PA: " -msgstr "Iniciar PA: " +msgstr "" msgid "End PA: " -msgstr "Finalizar PA: " +msgstr "" msgid "PA step: " -msgstr "Paso PA: " +msgstr "" msgid "Print numbers" -msgstr "Imprimir números" +msgstr "" msgid "" "Please input valid values:\n" @@ -10209,13 +10038,9 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" -"Por favor, introduzca valores válidos:\n" -"Iniciar PA: >=0.0\n" -"Finalizar PA:> Iniciar PA\n" -"Paso PA:>=0.001)" msgid "Temperature calibration" -msgstr "Calibración de temperatura" +msgstr "" msgid "PLA" msgstr "" @@ -10236,16 +10061,16 @@ msgid "PET-CF" msgstr "" msgid "Filament type" -msgstr "Tipo de filamento" +msgstr "" msgid "Start temp: " -msgstr "Temperatura inicial: " +msgstr "" -msgid "End end: " -msgstr "Temperatura final: " +msgid "End temp: " +msgstr "" msgid "Temp step: " -msgstr "Paso temperatura: " +msgstr "" msgid "" "Please input valid values:\n" @@ -10253,110 +10078,164 @@ msgid "" "End temp: >= 180\n" "Start temp > End temp + 5)" msgstr "" -"Por favor introduzca valores válidos:\n" -"Temperatura inicial: <= 350\n" -"Temperatura final: >= 180\n" -"Temperatura inicial > Temperatura final + 5)" msgid "Max volumetric speed test" -msgstr "Test de velocidad volumétrica máxima" +msgstr "" msgid "Start volumetric speed: " -msgstr "Velocidad volumétrica inicial: " +msgstr "" msgid "End volumetric speed: " -msgstr "Velocidad volumétrica final: " +msgstr "" msgid "step: " -msgstr "paso: " +msgstr "" msgid "" "Please input valid values:\n" "start > 0 step >= 0\n" "end > start + step)" msgstr "" -"Por favor, introduzca valores válidos:\n" -"inicio>paso 0 >= 0\n" -"fin > inicio + paso)" msgid "VFA test" -msgstr "Test VFA" +msgstr "" msgid "Start speed: " -msgstr "Velocidad inicial: " +msgstr "" msgid "End speed: " -msgstr "Velocidad final: " +msgstr "" msgid "" "Please input valid values:\n" "start > 10 step >= 0\n" "end > start + step)" msgstr "" -"Por favor, introduzca valores válidos:\n" -"inicio > paso 10 >= 0\n" -"final > inicio + paso)" msgid "Start retraction length: " -msgstr "Iniciar anchura de retracción: " +msgstr "" msgid "End retraction length: " -msgstr "Finalizar " +msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" -msgstr "Impresora física" - -msgid "Print Host upload" -msgstr "Carga de Host de Impresión" - -msgid "Test" +msgid "Network lookup" msgstr "" -msgid "Could not get a valid Printer Host reference" -msgstr "No se ha podido obtener una referencia de host de impresora válida" - -msgid "Success!" -msgstr "¡Exitoso!" - -msgid "Refresh Printers" -msgstr "Refrescar Impresoras" - -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Address" msgstr "" -"El archivo HTTPS CA es opcional. Solo es necesario si utiliza HTTPS con un " -"certificado autofirmado." -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Hostname" msgstr "" -"Archivos de certificado (*.crt, *.pem)|*.crt;*.pem|Todos los archivos|*.*" -msgid "Open CA certificate file" -msgstr "Abrir archivo de certificado CA" +msgid "Service name" +msgstr "" + +msgid "OctoPrint version" +msgstr "" + +msgid "Searching for devices" +msgstr "" + +msgid "Finished" +msgstr "Terminado" + +msgid "Send to print" +msgstr "" + +msgid "Upload to Printer Host with the following filename:" +msgstr "" + +msgid "Use forward slashes ( / ) as a directory separator if needed." +msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -"En este sistema, %s utiliza certificados HTTPS del almacén de certificados o " -"llavero del sistema." -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -"Para utilizar un archivo de CA personalizado, importe su archivo de CA a " -"Almacén de certificados / Llavero." -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Subiendo" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" -"Ha fallado la conexión a impresoras conectadas a través del host de " -"impresión." #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -10364,9 +10243,9 @@ msgid "" "Did you know how to control view and object/part selection with mouse and " "touchpanel in the 3D scene?" msgstr "" -"Operaciones de la escena 3D\n" -"¿Sabías cómo controlar la vista y la selección de objetos/partes con el " -"ratón y el panel táctil en la escena 3D?" +"Operaciones de escena 3D\n" +"¿Sabe cómo controlar la vista y la selección de objetos/piezas con el ratón " +"y el panel táctil en la escena 3D?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -10375,7 +10254,7 @@ msgid "" "cutting tool?" msgstr "" "Herramienta de corte\n" -"¿Sabías que puedes cortar un modelo en cualquier ángulo y posición con la " +"¿Sabía que puede cortar un modelo en cualquier ángulo y posición con la " "herramienta de corte?" #: resources/data/hints.ini: [hint:Fix Model] @@ -10384,8 +10263,8 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems?" msgstr "" -"Fijar modelo\n" -"¿Sabías que puedes arreglar un modelo 3D dañado para evitar muchos problemas " +"Reparar modelo \n" +"¿Sabía que puede reparar un modelo 3D corrupto para evitar muchos problemas " "de corte?" #: resources/data/hints.ini: [hint:Timelapse] @@ -10393,16 +10272,15 @@ msgid "" "Timelapse\n" "Did you know that you can generate a timelapse video during each print?" msgstr "" -"Intervalo\n" -"¿Sabías que puedes generar un vídeo de intervalo de trabajo durante cada " -"impresión?" +"Timelapse\n" +"¿Sabía que puede generar un vídeo timelapse durante cada impresión?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" -"Auto-organizar\n" +"Ordenación automática\n" "¿Sabías que puedes ordenar automáticamente todos los objetos de tu proyecto?" #: resources/data/hints.ini: [hint:Auto-Orient] @@ -10422,10 +10300,10 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" -"Colocar en la cara\n" -"¿Sabías que puedes orientar rápidamente un modelo para que una de sus caras " -"quede sobre el lecho de impresión? Seleccione la función \"Colocar en la cara" -"\" o pulse la tecla F." +"Colocar la cara\n" +"Sabías que puedes orientar rápidamente un modelo para que una de sus caras " +"se asiente sobre la cama de impresión? Selecciona la función \"Colocar sobre " +"cara\" o pulsa la tecla F." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -10455,7 +10333,7 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" -"Tabla de parámetros de laminado\n" +"Tabla de parámetros de corte\n" "¿Sabía que puede ver todos los objetos/partes de una tabla y cambiar los " "parámetros de cada objeto/parte?" @@ -10474,12 +10352,12 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" "Restar una parte\n" "¿Sabías que puedes sustraer una malla de otra utilizando el modificador de " -"pieza Negativa? De esta forma puedes, por ejemplo, crear agujeros fácilmente " -"redimensionables directamente en Orca Slicer. Más información en la " +"pieza negativa? De esta forma puedes, por ejemplo, crear agujeros fácilmente " +"redimensionables directamente en Bambu Studio. Más información en la " "documentación." #: resources/data/hints.ini: [hint:STEP] @@ -10487,14 +10365,14 @@ 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" "STEP\n" "¿Sabías que puedes mejorar la calidad de impresión cortando 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!" +"Bambu Studio admite el corte de archivos STEP, lo que proporciona resultados " +"más suaves que un archivo STL de menor resolución. ¡Pruébalo!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10515,7 +10393,7 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Ajuste fino del caudal\n" +"Ajuste fino del ratio de flujo\n" "¿Sabías que el caudal puede ajustarse para obtener impresiones aún más " "atractivas? Dependiendo del material, puede mejorar el acabado general del " "modelo impreso realizando algunos ajustes." @@ -10528,7 +10406,7 @@ msgid "" "track of all the parts." msgstr "" "Divide tus impresiones en planchas\n" -"¿Sabías que puedes dividir un modelo con muchas piezas en bandejas " +"¿Sabías que puedes dividir un modelo con muchas piezas en placas " "individuales listas para imprimir? Esto simplificará el proceso de " "seguimiento de todas las piezas." @@ -10576,7 +10454,7 @@ msgid "" msgstr "" "Impresión de filamento de seda\n" "¿Sabías que el filamento de seda necesita una consideración especial para " -"imprimirlo con éxito? Se recomienda siempre una temperatura más alta y una " +"imprimir con éxito? Siempre se recomienda una temperatura más alta y una " "velocidad más baja para obtener los mejores resultados." #: resources/data/hints.ini: [hint:Brim for better adhesion] @@ -10585,10 +10463,9 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" -"Borde de adherencia para una mejor adherencia\n" -"¿Sabía 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?" +"Borde para una mejor adherencia\n" +"¿Sabía que cuando los modelos impresos tienen una interfaz de contacto " +"pequeña con la superficie de impresión, se recomienda utilizar un borde?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -10596,8 +10473,8 @@ msgid "" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" -"Establecer parámetros para varios objetos\n" -"¿Sabías que puedes establecer parámetros de corte para todos los objetos " +"Definir parámetros para varios objetos\n" +"¿Sabía que puede configurar los parámetros de corte para todos los objetos " "seleccionados a la vez?" #: resources/data/hints.ini: [hint:Stack objects] @@ -10606,7 +10483,7 @@ msgid "" "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?" +"¿Sabías que puedes apilar objetos como un objeto único?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -10614,9 +10491,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Descarga en soporte/objetos/relleno\n" -"¿Sabías que puedes ahorrarte el filamento desperdiciado vertiéndolo en " -"soporte/objetos/relleno durante el cambio de filamento?" +"Purgar en soporte/objetos/relleno\n" +"¿Sabías que puedes reducir el desperdicio de filamento purgándolo en support/" +"objects/infill durante los cambios de filamento?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -10624,1280 +10501,38 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" msgstr "" -"Mejorar la resistencia\n" -"¿Sabías que puedes utilizar más bucles de perímetro y mayor densidad de " -"relleno disperso para mejorar la resistencia del modelo?" +"Mejorar la fuerza\n" +"¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " +"dispersa más alta para mejorar la resistencia del modelo?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "La configuración puede ser generada por una versión más reciente de " -#~ "BambuStudio." +#~ "Sólo una pared en la superficies superiores, para dar más espacio a la " +#~ "placa de relleno superior" -#~ msgid "Internal Version" -#~ msgstr "Versión interna" +#~ msgid "Nozzle HRC" +#~ msgstr "Boquilla HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "BambuStudio terminará porque se está quedando sin memoria. Le " -#~ "agradeceremos que comunique el problema a nuestro equipo." +#~ "La dureza de la boquilla. Cero significa que no se comprueba la dureza de " +#~ "la boquilla durante la generación del G-code." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "BambuStudio terminará debido a un error de localización. Le agradeceremos " -#~ "que nos informe del escenario específico en el que se ha producido este " -#~ "problema." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "" -#~ "BambuStudio recibió una notificación de excepción no controlada: %1%." - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "El archivo de configuración de BambuStudio puede estar dañado y no puede " -#~ "ser procesado." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio necesita una actualización" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Elija un archivo (gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "La versión de Bambu Studio es una versión demasiado antigua y necesita " -#~ "ser actualizada a la última versión antes de poder utilizarla con " -#~ "normalidad" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Ha fallado la inicialización de la interfaz gráfica de Bambu Studio" - -#~ msgid "Check cloud service status" -#~ msgstr "Check cloud service status" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Failed to connect to cloud service" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Please click on the hyperlink above to view the cloud service status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connection to printer failed" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Please check the network connection of the printer and Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Push new filament into the extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Grab new filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormal print file data: please slice again." - -#~ msgid "Task canceled." -#~ msgstr "Task canceled." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Upload task timed out. Please check the network status and try again." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Print file not found; please slice again." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Failed to upload file to ftp. Please try again." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Check the current status of the Bambu Lab server by clicking on the link " -#~ "above." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Print file not found; please slice it again and send it for printing." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Failed to upload print file via FTP. Please check the network status and " -#~ "try again." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio tiene licencia bajo " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio se basa en PrusaSlicer de Prusa Research, que proviene de " -#~ "Slic3r de Alessandro Ranellucci y la comunidad RepRap" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio está basado en PrusaSlicer de PrusaResearch y SuperSlicer de " -#~ "Merill (supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "" -#~ "Bambu Studio también hace referencia a algunas ideas de Cura de Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "Hay muchas partes del software que provienen de las contribuciones de la " -#~ "comunidad, por lo que no podemos enumerarlas una por una, sino que se " -#~ "atribuirán en los comentarios del código correspondientes." - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicting objects further (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Report issue" - -#~ msgid "Show &Overhang" -#~ msgstr "Show &Overhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Show object overhang highlight in 3D scene" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initialization failed (Device connection not ready)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Hay otra cámara virtual en funcionamiento.\n" -#~ "Bambu Studio solo admite una cámara virtual.\n" -#~ "¿Quieres detener esta cámara virtual?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Switch to 3mf model files." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Load failed [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Do you want to delete the file '%s' from printer?" - -#~ msgid "Delete file" -#~ msgstr "Delete file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Fetching model information..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Failed to fetch model infomation from printer." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Failed to parse model infomation" - -#~ msgid "Immediately score" -#~ msgstr "Immediately score" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Please give a score for your favorite Bambu Market model." - -#~ msgid "Score" -#~ msgstr "Score" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "3mf generado con versión antigua de Bambu Studio, se cargan datos de " -#~ "geometría unicamente." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "Actualmente, la función «Fix Model» solo está disponible en Windows. " -#~ "Repare el modelo en Bambu Studio (Windows) o en el software CAD." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Asociar archivos a BambuStudio" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Asociar archivos .3mf a BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " -#~ "archivos .3mf" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Asociar archivos .stl a BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " -#~ "archivos .stl" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Asociar archivos .step/.stp a BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " -#~ "archivos .step" - -#~ msgid "Online Models" -#~ msgstr "Online Models" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Show online staff-picked models on the home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Skip AMS blacklist check" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Enable SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Enable SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internal developer mode" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Same as Global Plate Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "No se puede conectar a la impresora" - -#~ msgid "Error code" -#~ msgstr "Error code" - -#~ msgid "Check the status of current system services" -#~ msgstr "Check the status of current system services" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Printer local connection failed; please try again." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "The name length exceeds the limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "La impresora debe estar en la misma LAN que Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Failed to create socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Failed to connect socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Failed to publish login request" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout getting ticket from device" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout getting ticket from server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Failed to post ticket to server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Failed to parse login report reason" - -#~ msgid "Receive login report timeout" -#~ msgstr "Receive login report timeout" - -#~ msgid "Check the reason" -#~ msgstr "Check the reason" - -#~ msgid "Read and accept" -#~ msgstr "Read and accept" - -#~ msgid "Terms and Conditions" -#~ msgstr "Terms and Conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "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 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." - -#~ msgid "and" -#~ msgstr "and" - -#~ msgid "Privacy Policy" -#~ msgstr "Privacy Policy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "We ask for your help to improve everyone's printer" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Statement about User Experience Improvement Program" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "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 same principle and uses machine learning to improve its performance " -#~ "from the 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." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Statement on User Experience Improvement Plan" - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-processing scripts" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Haga clic en Aceptar para actualizar el complemento de red la próxima vez " -#~ "que se inicie Bambu Studio." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Nueva versión de Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Paso 1: confirme que Bambu Studio y su impresora estén en la misma LAN." - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "The following object(s) have an empty initial layer and can't be printed. " -#~ "Please cut the bottom or enable supports." - -#~ msgid "Bridge direction" -#~ msgstr "Dirección del puente" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Use only one wall on the first layer of models" - -#~ msgid "Max Radius" -#~ msgstr "Radio máximo" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Radio máximo de separación alrededor del extrusor. Se utiliza para evitar " -#~ "colisiones en la impresión por objetos." - -#~ msgid "Object flow ratio" -#~ msgstr "Object flow ratio" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "The flow ratio set by object; the meaning is the same as flow ratio." - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximum length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (not anchored)" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "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 via the absolute path to the G-code " -#~ "file as the first argument, and variables of settings can also be read" - -#~ msgid "Z Hop Type" -#~ msgstr "Tipo de salto Z" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "The brim width around tree support. 0 means auto." - -#~ msgid "Plate Type" -#~ msgstr "Plate Type" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Restar una parte\n" -#~ "¿Sabías que puedes sustraer una malla de otra utilizando el modificador " -#~ "de pieza negativa? De esta forma puedes, por ejemplo, crear agujeros " -#~ "fácilmente redimensionables directamente en Bambu Studio. Más información " -#~ "en la documentación." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "¿Sabías que puedes mejorar la calidad de impresión cortando un archivo " -#~ "STEP en lugar de un STL?\n" -#~ "Bambu Studio admite el corte de archivos STEP, lo que proporciona " -#~ "resultados más suaves que un archivo STL de menor resolución. ¡Pruébalo!" - -#~ msgid "ERROR:" -#~ msgstr "ERROR:" - -#~ msgid "Bed temperatures for the used filaments differ significantly." -#~ msgstr "" -#~ "Las temperaturas de la cama para los filamentos usados difieren bastante." - -#~ msgid "Line width of outer wall" -#~ msgstr "Ancho de línea de la pared exterior" - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "" -#~ "Ancho de línea por defecto si se ajusta algún ancho de línea es cero" - -#~ msgid "Line width of initial layer" -#~ msgstr "Ancho de línea de la capa inicial" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Ancho de línea del relleno interno disperso" - -#~ msgid "Line width of inner wall" -#~ msgstr "Ancho de línea de la pared interior" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Ancho de línea del relleno sólido interno" - -#~ msgid "Line width of support" -#~ msgstr "Ancho de línea del soporte" - -#~ msgid "Line width for top surfaces" -#~ msgstr "Ancho de línea para las superficies superiores" - -# 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?" -# msgstr "Mejorar la fuerza\n" -# "¿Sabías que puedes utilizar más bucles de pared y mayor densidad de relleno disperso para mejorar la resistencia del modelo?" -#~ msgid "Keep upper part" -#~ msgstr "Mantener la parte superior" - -#~ msgid "Keep lower part" -#~ msgstr "Mantener la parte inferior" - -#~ msgid "Backup" -#~ msgstr "Copia de seguridad" - -#~ msgid "Backup interval" -#~ msgstr "Intervalo de copia de seguridad" - -#~ msgid "" -#~ "Print a tower to prime material in nozzle after switching to a new " -#~ "material." -#~ msgstr "" -#~ "Imprimir una torre para cebar el material en la boquilla después de " -#~ "cambiar a un nuevo material." - -#~ msgid "Loading user presets..." -#~ msgstr "Cargando los preajustes del usuario..." - -#~ msgid "" -#~ "Orca Slicer is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Orca Slicer se basa en PrusaSlicer de Prusa Research, que proviene de " -#~ "Slic3r de Alessandro Ranellucci y la comunidad RepRap" - -#~ msgid "Export G-Code." -#~ msgstr "Exportar G-Code." - -#~ msgid "Export." -#~ msgstr "Exportar." - -#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." -#~ msgstr "" -#~ "Importación de datos geométricos desde archivos STL/STEP/3MF/OBJ/AMF." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "La copia del directorio %1% a %2% ha fallado: %3%" - -#~ msgid "" -#~ "This controls brim position including outer side of models, inner side of " -#~ "holes or both. Auto means both the brim position and brim width is " -#~ "analysed and calculated automatically" -#~ msgstr "" -#~ "Esto controla la posición del borde de adherencia, incluyendo el lado " -#~ "exterior de los modelos, el lado interior de los huecos o ambos. Auto " -#~ "significa que tanto la posición como la anchura del borde de adherencia " -#~ "se analizan y calculan automáticamente" - -#~ msgid "Choose one file (G-Code/.gco/.g/.ngc/ngc):" -#~ msgstr "Elija un archivo (G-Code/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Altura de la capa demasiado grande.\n" -#~ "Reajustar a 0,2" - -#~ msgid "" -#~ "\n" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "\n" -#~ "%1% está demasiado cerca del área de exclusión, habrá colisiones al " -#~ "imprimir." - -#~ msgid "" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "%1% está demasiado cerca del área de exclusión, habrá colisiones al " -#~ "imprimir." - -#~ msgid "0%" -#~ msgstr "0%" - -#~ msgid "" -#~ "An object is layed over the boundary of plate.\n" -#~ "Please solve the problem by moving it totally inside or outside plate." -#~ msgstr "" -#~ "Un objeto está colocado sobre el límite de la bandeja.\n" -#~ "Por favor, resuelva el problema moviéndolo totalmente dentro o fuera de " -#~ "la bandeja." - -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly\n" -#~ msgstr "\n" - -#~ msgid "Auto arrange" -#~ msgstr "Auto posicionamiento" - -#~ 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 project." -#~ msgstr "" -#~ "Orienta automáticamente los objetos seleccionados o todos los objetos.Si " -#~ "hay objetos seleccionados, sólo orienta los seleccionados.En caso " -#~ "contrario, orienta todos los objetos del proyecto." - -#~ msgid "Aux Cooling" -#~ msgstr "Enfriamiento Auxiliar" - -#~ msgid "Avoid crossing wall when travel" -#~ msgstr "Evitar cruzar el muro en los desplazamientos" - -#~ msgid "" -#~ "Bed temperature is higher than vitrification temperature of this " -#~ "filament.\n" -#~ "This may cause nozzle blocked and printing failure" -#~ msgstr "" -#~ "La temperatura del lecho es superior a la temperatura de vitrificación de " -#~ "este filamento.\n" -#~ "Esto puede causar el bloqueo de la boquilla y el fracaso de la impresión" - -#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Elija uno o varios archivos (3mf/step/stl/obj/amf):" - -#~ msgid "Clear all" -#~ msgstr "Borrar todo" - -#~ msgid "" -#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " -#~ "collision when print object by object" -#~ msgstr "" -#~ "Radio de separación alrededor del extrusor. Se utiliza como entrada de " -#~ "auto-organización para evitar la colisión cuando se imprime objeto por " -#~ "objeto" - -#~ msgid "Click the pencil icon to edit the filament." -#~ msgstr "Haga clic en el icono del lápiz para editar el filamento." - -#~ msgid "Color Print" -#~ msgstr "Impresión en color" - -#~ msgid "Comsumption" -#~ msgstr "Consumo" - -#~ msgid "Creating" -#~ msgstr "Creando" - -#~ msgid "Ctrl + Any arrow" -#~ msgstr "Ctrl + Cualquier tecla" - -#~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Botón izquierdo del ratón" - -#~ msgid "Debug" -#~ msgstr "Depurar" - -#~ msgid "Designer" -#~ msgstr "Diseñador" - -#~ msgid "Device:" -#~ msgstr "Dispositivo:" - -#~ msgid "Display printable box" -#~ msgstr "Caja de visualización imprimible " - -#~ msgid "Display shadow of objects" -#~ msgstr "Mostrar la sombra de los objetos" - -#~ msgid "Display triangles of models" -#~ msgstr "Mostrar los triángulos de los modelos" - -#~ msgid "" -#~ "Do not recommand 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 "" -#~ "No se recomienda que la temperatura de la cama de la otra capa sea " -#~ "inferior a la de la capa inicial por más de este umbral. Una temperatura " -#~ "demasiado baja de la otra capa puede hacer que el modelo se desprenda de " -#~ "la bandeja de impresión." - -#~ msgid "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "Contains the following information:\n" -#~ "1. The Process presets\n" -#~ "2. The Filament presets\n" -#~ "3. The Printer presets\n" -#~ msgstr "" -#~ "¿Quieres sincronizar tus datos personales desde Bambu Cloud? \n" -#~ "Contiene la siguiente información:\n" -#~ "1. Preajustes del proceso\n" -#~ "2. Preajustese de filamentos\n" -#~ "3. Preajustes de la impresora\n" - -#~ msgid "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "It contains the following information:\n" -#~ "1. The Process presets\n" -#~ "2. The Filament presets\n" -#~ "3. The Printer presets\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "Don't retract when the travel is in infill area absolutely. That means " -#~ "the oozing can't been seen" -#~ msgstr "" -#~ "No se repliegue cuando el recorrido esté en zona de relleno " -#~ "absolutamente. Eso significa que el rezago no puede ser visto" - -#~ msgid "" -#~ "Enabling this option means the height of every layer except the first " -#~ "will be automatically calculated during slicing according to the slope of " -#~ "the model’s surface.\n" -#~ "Note that this option only takes effect if no prime tower is generated in " -#~ "current plate." -#~ msgstr "" -#~ "Si se activa esta opción, la altura de cada capa, excepto la primera, se " -#~ "calculará automáticamente durante el corte en función de la pendiente de " -#~ "la superficie del modelo.\n" -#~ "Tenga en cuenta que esta opción sólo surte efecto si no se genera ninguna " -#~ "torre de purga en la bandeja actual." - -#~ msgid "Enter a search term" -#~ msgstr "Teclea un término de búsqueda" - -#~ msgid "Erase painting" -#~ msgstr "Borrar lo pintado" - -#~ msgid "Error at line %1%:\n" -#~ msgstr "Error en la línea %1%:\n" - -#~ msgid "Export Sliced File" -#~ msgstr "Exportar Archivo laminado" - -#~ msgid "Export current Sliced file" -#~ msgstr "Exportar el archivo laminado actual" - -#~ msgid "Export ok." -#~ msgstr "Exportación correcta." - -#~ msgid "Export sliced file" -#~ msgstr "Exportar archivo laminado" - -#~ msgid "Extruder position" -#~ msgstr "Posición del extrusor" - -#~ msgid "Failed" -#~ msgstr "Error" - -#~ msgid "Filament 1" -#~ msgstr "Filamento 1" - -#~ msgid "Filament N XX" -#~ msgstr "Filamento N XX" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filamento para imprimir el soporte y el faldón. 0 significa que no hay " -#~ "filamento específico para el soporte y se utiliza el filamento actual" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Filamento para imprimir la interfaz de soporte. 0 significa que no hay " -#~ "filamento específico para la interfaz de soporte y se utiliza el " -#~ "filamento actual" - -#~ msgid "Filaments Selection" -#~ msgstr "Selección de filamentos" - -#~ msgid "Finish" -#~ msgstr "Finalizar" - -#~ msgid "Fix model locally" -#~ msgstr "Fijar el modelo localmente" - -#~ msgid "Fix model through cloud" -#~ msgstr "Fijar el modelo a través de la nube" - -#~ msgid "Flushed filament" -#~ msgstr "Filamento limpiado" - -#~ msgid "" -#~ "Force cooling fan to be specific speed when overhang degree of printed " -#~ "part exceeds this value. Expressed as percentage which indicides how much " -#~ "width of the line without support from lower layer" -#~ msgstr "" -#~ "Fuerza al ventilador de refrigeración a una velocidad específica cuando " -#~ "el grado de voladizo de la pieza impresa supera este valor. Expresado en " -#~ "porcentaje, indica la anchura de la línea sin apoyo de la capa inferior." - -#~ msgid "Fragment Filter" -#~ msgstr "Filtro de fragmentos" - -#~ msgid "Fragment area" -#~ msgstr "Zona de fragmentos" - -#~ msgid "Fragment filter" -#~ msgstr "Filtro de Fragmentos" - -#~ msgid "" -#~ "Heat the nozzle to target \n" -#~ "temperature" -#~ msgstr "" -#~ "Calentar la boquilla a la temperatura deseada \n" -#~ "temperatura" - -#~ msgid "Height:" -#~ msgstr "Altura:" - -#~ msgid "" -#~ "Height of the clearance cylinder around extruder. Used as input of auto-" -#~ "arrange to avoid collision when print object by object" -#~ msgstr "" -#~ "Altura del cilindro de separación alrededor del extrusor. Se utiliza como " -#~ "entrada de auto-organización para evitar la colisión cuando se imprime " -#~ "objeto por objeto." - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importar 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "In the calibration of extrusion flow" -#~ msgstr "En la calibración del flujo de extrusión" - -#~ msgid "In the calibration of laser scanner" -#~ msgstr "En la calibración del escáner láser" - -#~ msgid "Initialize failed [%d]!" -#~ msgstr "¡Ha fallado la inicialización [%d]!" - -#~ msgid "Inner wall speed" -#~ msgstr "Velocidad de la pared interior" - -#~ msgid "" -#~ "It seems object %s needs support to print. Please enable support " -#~ "generation." -#~ msgstr "" -#~ "Parece que el objeto %s necesita soporte para imprimir. Por favor, active " -#~ "la generación de soporte." - -#~ msgid "Line type" -#~ msgstr "Tipo de línea" - -#~ msgid "Management" -#~ msgstr "Gestión" - -#~ msgid "Max travel detour distance" -#~ msgstr "Distancia máxima de desvío de viaje" - -#~ msgid "" -#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " -#~ "detour distance is large than this value" -#~ msgstr "" -#~ "Distancia máxima de desvío para evitar cruzar el muro. No se desvía si la " -#~ "distancia de desvío es mayor que este valor" - -#~ msgid "Module" -#~ msgstr "Módulo" - -#~ msgid "Monitoring" -#~ msgstr "Monitorizando" - -#~ msgid "Monitoring Recording" -#~ msgstr "Monitoreo de grabación" - -#~ msgid "Open &PrusaSlicer" -#~ msgstr "Abrir &PrusaSlicer" - -#~ msgid "Open PrusaSlicer" -#~ msgstr "Abrir PrusaSlicer" - -#~ msgid "Output file" -#~ msgstr "Archivo de salida" - -#~ msgid "Part Cooling" -#~ msgstr "Refrigeración de Piezas" - -#~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Pausa (error de temperatura de la cama caliente)" - -#~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pausa (error de temperatura del hotend)" - -#~ msgid "Pause(toolhead shell off)" -#~ msgstr "Pausa (cabezal apagado)" - -#~ msgid "Per object edit" -#~ msgstr "Por objeto editar" - -#~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "\n" - -#~ msgid "Plate %d: %s does not support filament %s.\n" -#~ msgstr "La bandeja %d: %s no admite el filamento %s.\n" - -#~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:\n" -#~ msgstr "\n" - -#~ msgid "Please fill report first." -#~ msgstr "Por favor, rellene primero el informe." - -#~ msgid "Please upgrade your printer first" -#~ msgstr "Por favor, actualice su impresora primero" - -#~ msgid "Position:" -#~ msgstr "Posición:" - -#~ msgid "" -#~ "Preview only mode:\n" -#~ "The loaded file contains G-Code only." -#~ msgstr "" -#~ "Modo de vista previa solamente:\n" -#~ "El archivo cargado sólo contiene G-Code." - -#~ msgid "Preview only mode for G-Code file." -#~ msgstr "Modo de vista previa sólo para el archivo G-Code." - -#~ msgid "Printer Selection" -#~ msgstr "Selección de la impresora" - -#~ 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 printed with transparent filament, the mixed color infill will be " -#~ "seen outside" -#~ msgstr "" -#~ "La purga tras el cambio de filamento se realizará dentro del relleno de " -#~ "los objetos. Esto puede reducir la cantidad de residuos y disminuir el " -#~ "tiempo de impresión. Si las paredes se imprimen con filamento " -#~ "transparente, el mezclado se podrá ver en el exterior." - -#~ msgid "" -#~ "Purging after filament change will be done inside objects' support. This " -#~ "may lower the amount of waste and decrease the print time" -#~ msgstr "" -#~ "La purga después del cambio de filamento se hará dentro del soporte de " -#~ "los objetos. Esto puede reducir la cantidad de residuos y disminuir el " -#~ "tiempo de impresión." - -#~ msgid "" -#~ "Push new filament \n" -#~ "into extruder" -#~ msgstr "" -#~ "Empujar el nuevo filamento \n" -#~ "en el extrusor" - -#~ msgid "" -#~ "Record timelapse video of printing without showing toolhead. In this mode " -#~ "the toolhead docks near the excess chute at each layer change, and then a " -#~ "snapshot is taken with the chamber camera. When printing finishes a " -#~ "timelapse video is composed of all the snapshots." -#~ msgstr "" -#~ "Record timelapse video of printing without showing the toolhead. In this " -#~ "mode the toolhead docks near the excess chute at each layer change, and " -#~ "then a snapshot is taken with the chamber camera. When printing finishes, " -#~ "a timelapse video is created from all the snapshots." - -#~ msgid "Reduce Triangles" -#~ msgstr "Reducir los triángulos" - -#~ msgid "Reload item" -#~ msgstr "Volver a cargar el objeto" - -#~ msgid "Reload items" -#~ msgstr "Recarga de objetos" - -#~ msgid "Repair" -#~ msgstr "Reparar" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Reparar las mallas del modelo si se trata de una malla no plegable" - -#~ msgid "Report" -#~ msgstr "Informe" - -#~ msgid "Rotation:" -#~ msgstr "Rotación:" - -#~ msgid "Save configuration as:" -#~ msgstr "Guardar la configuración como:" - -#~ msgid "Sending" -#~ msgstr "Enviando" - -#~ msgid "Set pen size" -#~ msgstr "Ajustar el tamaño del lápiz" - -#~ msgid "Shift + Any arrow" -#~ msgstr "Mayúsculas + Cualquier flecha" - -#~ msgid "Shift + Mouse wheel" -#~ msgstr "Mayúsculas + rueda del ratón" - -#~ msgid "Show Model Mesh(TODO)" -#~ msgstr "Mostrar modelo de malla(TODO)" - -#~ msgid "Show Model Shadow(TODO)" -#~ msgstr "Mostrar sombra del modelo(TODO)" - -#~ msgid "Show Printable Box(TODO)" -#~ msgstr "Mostrar caja imprimible(TODO)" - -#~ msgid "Spiral mode" -#~ msgstr "Modo espiral" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, \n" -#~ "support is disabled, top shell layers is 0 and sparse infill density is " -#~ "0\n" -#~ msgstr "" -#~ "El modo espiral sólo funciona cuando los bucles de pared son 1, \n" -#~ "el soporte está desactivado, las capas superiores de la cáscara es 0 y la " -#~ "densidad de relleno dispersa es 0\n" - -#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" -#~ msgstr "" -#~ "Enviado con éxito. Saltará automáticamente a la página del dispositivo en " -#~ "%s s" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support custom support gap,but may cause extra filament switches if " -#~ "support is specified as different extruder with object" -#~ msgstr "" -#~ "La capa de soporte utiliza la altura de la capa independientemente de la " -#~ "capa del objeto. Esto es para soportar la brecha de soporte " -#~ "personalizada, pero puede causar cambios de filamento adicionales si el " -#~ "soporte se especifica como un extrusor diferente con el objeto" - -#~ msgid "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "Switch to zig-zag pattern?\n" -#~ "Yes - switch to zig-zag pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" -#~ msgstr "" -#~ "¿Cambiar al patrón en zig-zag?\n" -#~ "Sí - cambia automáticamente al patrón en zig-zag\n" -#~ "No - restablecer automáticamente la densidad al valor por defecto que no " -#~ "es del 100%.\n" - -#~ msgid "Swith cloud environment, Please login again!" -#~ msgstr "Cambiar el entorno de la nube, ¡Por favor, inicie sesión de nuevo!" - -#~ msgid "" -#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " -#~ "unrecognized:\n" -#~ msgstr "" -#~ "La versión %s de 3mf es más reciente que la versión %s de %s, se han " -#~ "encontrado las siguientes claves no reconocidas:\n" - -#~ msgid "" -#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " -#~ "your software.\n" -#~ msgstr "\n" - -#~ msgid "The Config is not compatible and can not be loaded." -#~ msgstr "La configuración no es compatible y no se puede cargar." - -#~ msgid "" -#~ "The firmware versions of printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" -#~ msgstr "" -#~ "Las versiones del firmware de la impresora y del AMS son demasiado " -#~ "antiguas, por favor, actualice a la última versión antes de enviar el " -#~ "trabajo de impresión." - -#~ msgid "" -#~ "The model has overlapping or self-intersecting facets. I tried to repair " -#~ "it, however you might want to check the results or repair the input file " -#~ "and retry." -#~ msgstr "" -#~ "El modelo tiene facetas superpuestas o auto-intersecadas. He intentado " -#~ "repararlo, sin embargo, es posible que desee comprobar los resultados o " -#~ "reparar el archivo de entrada y volver a intentarlo." - -#~ msgid "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type.\n" -#~ msgstr "\n" - -#~ 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" -#~ msgstr "" -#~ "Este objeto se utilizará para purgar la boquilla después de un cambio de " -#~ "filamento para ahorrar filamento y disminuir el tiempo de impresión. Los " -#~ "colores de los objetos se mezclarán como resultado" - -#~ 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. Zero means no limit" -#~ msgstr "" -#~ "Este ajuste representa la cantidad de volumen de filamento que se puede " -#~ "fundir y extruir por segundo. La velocidad de impresión está limitada por " -#~ "la velocidad volumétrica máxima, en caso de ajustar una velocidad " -#~ "demasiado alta y poco razonable. Cero significa que no hay límite" - -#~ msgid "Timelapse Wipe Tower" -#~ msgstr "Intervalo torre de purga" - -#~ msgid "Translation" -#~ msgstr "Translación" - -#~ msgid "Unable to create zip file" -#~ msgstr "No se puede crear un archivo zip" - -#~ msgid "User pause" -#~ msgstr "Pausa de usuario" - -#~ msgid "Waiting" -#~ msgstr "Esperando" - -#~ 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\".\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings after switching preset?" -#~ msgstr "" -#~ "Has cambiado algunos ajustes de preajuste. \n" -#~ "¿Desea mantener estos ajustes cambiados después de cambiar de preajuste?" - -#~ msgid "Zig zag" -#~ msgstr "Zig zag" - -#~ msgid " Object:" -#~ msgstr "Objeto" - -#~ msgid "" -#~ " is too close to exclusion area, there may be collisions when printing.\n" -#~ msgstr "\n" - -#~ msgid "" -#~ " is too close to exclusion area, there will be collisions when printing.\n" -#~ msgstr "" -#~ " está demasiado cerca del área de exclusión, habrá colisiones al " -#~ "imprimir.\n" - -#~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr "\n" - -#~ msgid " is too close to others, there will be collisions when printing.\n" -#~ msgstr " está demasiado cerca de otros, habrá colisiones al imprimir.\n" - -#~ msgid "hybrid(auto)" -#~ msgstr "híbrido(auto)" - -#~ msgid "normal" -#~ msgstr "normal" - -#~ msgid "" -#~ "normal(auto) and tree(auto) is used to generate support automatically. If " -#~ "normal or tree is selected, only support enforcers are generated" -#~ msgstr "" -#~ "normal(auto) y tree(auto) se utiliza para generar soporte " -#~ "automáticamente. Si se selecciona normal o árbol, sólo se generan los " -#~ "soportes" - -#~ msgid "the 3mf is not compatible, load geometry data only!" -#~ msgstr "el 3mf no es compatible, ¡cargue sólo los datos geométricos!" - -#~ msgid "tree" -#~ msgstr "árbol" +#~ "Detecta el porcentaje de voladizo en relación con el ancho de la línea y " +#~ "utiliza diferentes velocidades para imprimir. Para el 100%% de voladizo, " +#~ "se utiliza la velocidad de puente." #~ msgid "Pause Print" #~ msgstr "Pause Print" @@ -11908,15 +10543,43 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Delete Pause Print" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "calibración de factores de flujo dinámico" + #~ msgid "\\u2103" #~ msgstr "\\ u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\ u00b3" +#~ msgid "Flow Calibration" +#~ msgstr "Calibración del flujo" + +#~ msgid "" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "\n" +#~ "%1% está demasiado cerca del área de exclusión, habrá colisiones al " +#~ "imprimir." + +#~ msgid "" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "%1% está demasiado cerca del área de exclusión, habrá colisiones al " +#~ "imprimir." + #~ msgid "&Edit" #~ msgstr "Editar" +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "3D Models" +#~ msgstr "Modelos 3D" + #~ msgid "AMSMaterialsSetting" #~ msgstr "Configuración de materiales AMS" @@ -11936,9 +10599,23 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Volumen real = Volumen de descarga * Multiplicador" +#~ msgid "Adaptive layer height" +#~ msgstr "Altura de capa adaptable" + #~ msgid "Add Custom Printer" #~ msgstr "Añadir impresora personalizada" +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" + +#~ msgid "" +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." +#~ msgstr "" +#~ "Un objeto está colocado sobre el límite de la placa.\n" +#~ "Por favor, resuelva el problema moviéndolo totalmente dentro o fuera de " +#~ "la placa." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -11949,9 +10626,46 @@ msgstr "" #~ "Esto puede provocar una disminución en la calidad de los voladizos al " #~ "imprimir rápidamente." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly\n" +#~ msgstr "" +#~ "El motor Arachne sólo funciona cuando la ralentización de los voladizos " +#~ "está desactivada.\n" +#~ "Esto puede provocar una disminución de la calidad de las superficies " +#~ "salientes cuando se imprime rápidamente.\n" + +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Ensamblar las piezas seleccionadas en una sola pieza" + +#~ msgid "Auto arrange" +#~ msgstr "Auto posicionamiento" + +#~ 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 project." +#~ msgstr "" +#~ "Orienta automáticamente los objetos seleccionados o todos los objetos.Si " +#~ "hay objetos seleccionados, sólo orienta los seleccionados.En caso " +#~ "contrario, orienta todos los objetos del proyecto." + #~ msgid "Auto refill" #~ msgstr "Auto refill" +#~ msgid "Aux Cooling" +#~ msgstr "Enfriamiento Auxiliar" + +#~ msgid "Avoid crossing wall when travel" +#~ msgstr "Evitar cruzar el muro en los desplazamientos" + +#~ msgid "Backup" +#~ msgstr "Copia de seguridad" + +#~ msgid "Backup interval" +#~ msgstr "Intervalo de copia de seguridad" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -11964,6 +10678,21 @@ msgstr "" #~ "se expresa como polígono mediante puntos en el siguiente formato: «xxY, " #~ "xxY,...»" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "La temperatura del lecho es superior a la temperatura de vitrificación de " +#~ "este filamento.\n" +#~ "Esto puede causar el bloqueo de la boquilla y el fracaso de la impresión" + +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Espesor mínimo del cuerpo inferior" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Capas sólidas inferiores" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11978,15 +10707,59 @@ msgstr "" #~ "No se puede detectar la dirección IP LAN de %s. ¿Están %s y Bambu Studio " #~ "en la misma LAN?" +#~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Elija uno o varios archivos (3mf/step/stl/obj/amf):" + #~ msgid "Choose save directory" #~ msgstr "Elija directorio de guardado" #~ msgid "Clean" #~ msgstr "Limpiar" +#~ msgid "Clear all" +#~ msgstr "Borrar todo" + +#~ msgid "" +#~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " +#~ "collision when print object by object" +#~ msgstr "" +#~ "Radio de separación alrededor del extrusor. Se utiliza como entrada de " +#~ "auto-organización para evitar la colisión cuando se imprime objeto por " +#~ "objeto" + +#~ msgid "Click the pencil icon to edit the filament." +#~ msgstr "Haga clic en el icono del lápiz para editar el filamento." + #~ msgid "Clipping of view" #~ msgstr "Recorte de vista" +#~ msgid "Color Print" +#~ msgstr "Impresión en color" + +#~ msgid "Comsumption" +#~ msgstr "Consumo" + +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Confirm whether the filament has been extruded" + +#~ msgid "Cool Plate" +#~ msgstr "Placa fría" + +#~ msgid "Cool plate" +#~ msgstr "Placa fría" + +#~ msgid "Creating" +#~ msgstr "Creando" + +#~ msgid "Ctrl + Any arrow" +#~ msgstr "Ctrl + Cualquier tecla" + +#~ msgid "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Botón izquierdo del ratón" + +#~ msgid "Debug" +#~ msgstr "Depurar" + #~ msgid "" #~ "Desiccant status lower than two bars indicates that desiccant can be " #~ "inactive. Please change the desiccant.(Higher the better)" @@ -11995,6 +10768,12 @@ msgstr "" #~ "puede estar inactivo. Cambie el desecante, por favor. (cuanto más alto, " #~ "mejor)" +#~ msgid "Designer" +#~ msgstr "Diseñador" + +#~ msgid "Device:" +#~ msgstr "Dispositivo:" + #~ msgid "" #~ "Disable overhang slowing down automatically? \n" #~ "Yes - Enable arachne and disable overhang slowing down\n" @@ -12004,15 +10783,133 @@ msgstr "" #~ "Sí - Activar Arachne y desactivar la ralentización del voladizo\n" #~ "No - No utilizar Arachne para esta impresión" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Se desconectó de la impresora [%s] debido a que el modo LAN está " +#~ "desactivado. Vuelva a conectar la impresora iniciando sesión con su " +#~ "cuenta de usuario." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Se ha desconectado de la impresora [%s] debido a que el modo LAN está " +#~ "activado. Vuelva a conectar la impresora introduciendo el código de " +#~ "acceso que se puede obtener de la pantalla de la impresora." + +#~ msgid "Display printable box" +#~ msgstr "Caja de visualización imprimible " + +#~ msgid "Display shadow of objects" +#~ msgstr "Mostrar la sombra de los objetos" + +#~ msgid "Display triangles of models" +#~ msgstr "Mostrar los triángulos de los modelos" + +#~ msgid "" +#~ "Do not recommand 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 "" +#~ "No se recomienda que la temperatura de la cama de la otra capa sea " +#~ "inferior a la de la capa inicial por más de este umbral. Una temperatura " +#~ "demasiado baja de la otra capa puede hacer que el modelo se desprenda de " +#~ "la placa de impresión." + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "Contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "¿Quieres sincronizar tus datos personales desde Bambu Cloud? \n" +#~ "Contiene la siguiente información:\n" +#~ "1. Preajustes del proceso\n" +#~ "2. Preajustese de filamentos\n" +#~ "3. Preajustes de la impresora\n" + +#~ msgid "" +#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" +#~ "It contains the following information:\n" +#~ "1. The Process presets\n" +#~ "2. The Filament presets\n" +#~ "3. The Printer presets\n" +#~ msgstr "" +#~ "¿Quieres sincronizar tus datos personales desde Bambu Cloud? \n" +#~ "Contiene la siguiente información:\n" +#~ "1. Los ajustes preestablecidos del proceso\n" +#~ "2. Los ajustes preestablecidos de Filamento\n" +#~ "3. Los ajustes preestablecidos de la impresora\n" + +#~ msgid "" +#~ "Don't retract when the travel is in infill area absolutely. That means " +#~ "the oozing can't been seen" +#~ msgstr "" +#~ "No se repliegue cuando el recorrido esté en zona de relleno " +#~ "absolutamente. Eso significa que el rezago no puede ser visto" + #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Descargando el complemento Bambu Network" +#~ msgid "Dump video" +#~ msgstr "Volcar vídeo" + #~ msgid "Edit plate setitngs" #~ msgstr "Edit plate settings" +#~ msgid "" +#~ "Enabling this option means the height of every layer except the first " +#~ "will be automatically calculated during slicing according to the slope of " +#~ "the model’s surface.\n" +#~ "Note that this option only takes effect if no prime tower is generated in " +#~ "current plate." +#~ msgstr "" +#~ "Si se activa esta opción, la altura de cada capa, excepto la primera, se " +#~ "calculará automáticamente durante el corte en función de la pendiente de " +#~ "la superficie del modelo.\n" +#~ "Tenga en cuenta que esta opción sólo surte efecto si no se genera ninguna " +#~ "torre principal en la placa actual." + +#~ msgid "Engineering plate" +#~ msgstr "Placa de ingeniería" + +#~ msgid "Enter a search term" +#~ msgstr "Teclea un término de búsqueda" + #~ msgid "Entering Seam painting" #~ msgstr "Entrando en la sección de pintado de costura" +#~ msgid "Erase painting" +#~ msgstr "Borrar lo pintado" + +#~ msgid "Error at line %1%:\n" +#~ msgstr "Error en la línea %1%:\n" + +#~ msgid "Export." +#~ msgstr "Exportar." + +#~ msgid "Export G-Code." +#~ msgstr "Exportar Código G." + +#~ msgid "Export Sliced File" +#~ msgstr "Exportar Archivo Rebanado" + +#~ msgid "Export current Sliced file" +#~ msgstr "Exportar el archivo rebanado actual" + +#~ msgid "Export ok." +#~ msgstr "Exportación correcta." + +#~ msgid "Export sliced file" +#~ msgstr "Exportar archivo rebanado" + +#~ msgid "Extruder position" +#~ msgstr "Posición del extrusor" + #~ msgid "" #~ "Extrusion compensation calibration is not supported when using Textured " #~ "PEI Plate" @@ -12027,14 +10924,35 @@ msgstr "" #~ "No se pudo conectar a la impresora a través de LAN. Introduzca la " #~ "dirección IP de la impresora y el código de acceso correctos." +#~ msgid "Failed to get ticket" +#~ msgstr "No se ha podido conseguir el ticket" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Failed to parse login report reason" +#~ msgid "Failed uploading print file" +#~ msgstr "Fallo al cargar el archivo de impresión" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "" #~ "Error al cargar el archivo de impresión. Vuelva a introducir la dirección " #~ "IP." +#~ msgid "Failure of bind" +#~ msgstr "Fallo en la vinculación" + +#~ msgid "Failure of printer login" +#~ msgstr "Fallo en el inicio de sesión de la impresora" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Feed new filament from external spool" + +#~ msgid "Filament 1" +#~ msgstr "Filamento 1" + +#~ msgid "Filament N XX" +#~ msgstr "Filamento N XX" + #~ msgid "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." @@ -12073,9 +10991,57 @@ msgstr "" #~ "no se utiliza un filamento específico como soporte y se utiliza un " #~ "filamento actual" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filamento para imprimir el soporte y el faldón. 0 significa que no hay " +#~ "filamento específico para el soporte y se utiliza el filamento actual" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Filamento para imprimir la interfaz de soporte. 0 significa que no hay " +#~ "filamento específico para la interfaz de soporte y se utiliza el " +#~ "filamento actual" + #~ msgid "Filaments Auto refill" #~ msgstr "Filament Auto-refill" +#~ msgid "Filaments Selection" +#~ msgstr "Selección de filamentos" + +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + +#~ msgid "Fix model locally" +#~ msgstr "Fijar el modelo localmente" + +#~ msgid "Fix model through cloud" +#~ msgstr "Fijar el modelo a través de la nube" + +#~ msgid "Flushed filament" +#~ msgstr "Filamento limpiado" + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "Fuerza al ventilador de refrigeración a una velocidad específica cuando " +#~ "el grado de voladizo de la pieza impresa supera este valor. Expresado en " +#~ "porcentaje, indica la anchura de la línea sin apoyo de la capa inferior." + +#~ msgid "Fragment Filter" +#~ msgstr "Filtro de fragmentos" + +#~ msgid "Fragment area" +#~ msgstr "Zona de fragmentos" + +#~ msgid "Fragment filter" +#~ msgstr "Filtro de Fragmentos" + #~ msgid "G-code" #~ msgstr "G-code" @@ -12087,9 +11053,27 @@ msgstr "" #~ "rojo representan que la humedad es demasiado alta. (cuanto más bajo, " #~ "mejor)" +#~ msgid "" +#~ "Heat the nozzle to target \n" +#~ "temperature" +#~ msgstr "" +#~ "Calentar la boquilla a la temperatura deseada \n" +#~ "temperatura" + #~ msgid "Heat the nozzle to target temperature" #~ msgstr "Calentar la boquilla a la temperatura deseada" +#~ msgid "Height:" +#~ msgstr "Altura:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "Altura del cilindro de separación alrededor del extrusor. Se utiliza como " +#~ "entrada de auto-organización para evitar la colisión cuando se imprime " +#~ "objeto por objeto." + #~ msgid "" #~ "If enabled, a timelapse video will be generated for each print. After " #~ "each layer is printed, the toolhead will move to the excess chute, and " @@ -12106,10 +11090,35 @@ msgstr "" #~ "boquilla durante el proceso de toma de una instantánea, se requiere una " #~ "torre de purga para limpiar la boquilla." +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importar 3MF/STL/STEP/OBJ/AMF" + +#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +#~ msgstr "" +#~ "Importación de datos geométricos desde archivos STL/STEP/3MF/OBJ/AMF." + +#~ msgid "In the calibration of extrusion flow" +#~ msgstr "En la calibración del flujo de extrusión" + +#~ msgid "In the calibration of laser scanner" +#~ msgstr "En la calibración del escáner láser" + +#~ msgid "Initialize failed [%d]!" +#~ msgstr "¡Ha fallado la inicialización [%d]!" + +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "¡Fallo en la inicialización (no es compatible con la impresora)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Error de inicialización (no es compatible con el modo solo LAN)." + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "Falló la inicialización (no se admite sin el túnel de vídeo remoto)." +#~ msgid "Inner wall speed" +#~ msgstr "Velocidad de la pared interior" + #~ msgid "" #~ "It seems object %s has completely floating regions. Please re-orient the " #~ "object or enable support generation." @@ -12123,9 +11132,25 @@ msgstr "" #~ "Parece que el objeto %s tiene grandes voladizos. Habilite la generación " #~ "de soporte." +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "Parece que el objeto %s necesita soporte para imprimir. Por favor, active " +#~ "la generación de soporte." + +#~ msgid "Keep lower part" +#~ msgstr "Mantener la parte inferior" + +#~ msgid "Keep upper part" +#~ msgstr "Mantener la parte superior" + #~ msgid "Layer Time(log): " #~ msgstr "Tiempo de capa (registro): " +#~ msgid "Layer Time (log)" +#~ msgstr "Tiempo de capa (registro)" + #~ msgid "Layers: %d/%d" #~ msgstr "Capas: %d/%d" @@ -12135,24 +11160,89 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Capas: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Capas y perímetros" + #~ msgid "Leaving Seam painting" #~ msgstr "Saliendo de la sección de pintado de la costura" +#~ msgid "Line type" +#~ msgstr "Tipo de línea" + +#~ msgid "Loading user presets..." +#~ msgstr "Cargando los preajustes del usuario..." + +#~ msgid "Management" +#~ msgstr "Gestión" + +#~ msgid "Manual" +#~ msgstr "Manual" + +#~ msgid "Max travel detour distance" +#~ msgstr "Distancia máxima de desvío de viaje" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "Distancia máxima de desvío para evitar cruzar el muro. No se desvía si la " +#~ "distancia de desvío es mayor que este valor" + +#~ msgid "Media" +#~ msgstr "Medios" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "¡Falta la IP LAN de la impresora!" + #~ msgid "Modify" #~ msgstr "Modificar" +#~ msgid "Module" +#~ msgstr "Módulo" + +#~ msgid "Monitoring" +#~ msgstr "Monitorizando" + +#~ msgid "Monitoring Recording" +#~ msgstr "Monitoreo de grabación" + #~ msgid "NO AMS" #~ msgstr "NO AMS" +#~ msgid "No files" +#~ msgstr "No hay archivos" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "¡No se puede acceder en modo solo LAN!" + #~ msgid "Not supported." #~ msgstr "No soportado" +#~ msgid "Not supported by this model of printer!" +#~ msgstr "¡Modelo de impresora no soportado!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Nota: La ubicación de la IP y el código de acceso en el equipo es la " #~ "siguiente:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Un objeto tiene la capa inicial vacía y no se puede imprimir. Por favor, " +#~ "corte el fondo o habilite los soportes." + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "Abrir &PrusaSlicer" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "Abrir PrusaSlicer" + +#~ msgid "Output file" +#~ msgstr "Archivo de salida" + #~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" #~ msgstr "" #~ "Configuración general de P1P: WLAN en la barra lateral de la pantalla " @@ -12161,9 +11251,33 @@ msgstr "" #~ msgid "Paint-on seam editing" #~ msgstr "Edición de costuras pintadas" +#~ msgid "Part Cooling" +#~ msgstr "Refrigeración de Piezas" + +#~ msgid "Pause(heated bed temperature error)" +#~ msgstr "Pausa (error de temperatura de la cama caliente)" + +#~ msgid "Pause(hotend temperature error)" +#~ msgstr "Pausa (error de temperatura del hotend)" + +#~ msgid "Pause(toolhead shell off)" +#~ msgstr "Pausa (cabezal apagado)" + +#~ msgid "Per object edit" +#~ msgstr "Por objeto editar" + +#~ msgid "Plate %d: %s does not support filament %s\n" +#~ msgstr "Placa %d: %s no admite el filamento %s\n" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "La placa %d: %s no admite el filamento %s.\n" + #~ msgid "Plate %d: %s does not support filament %s (%s)." #~ msgstr "Placa %d: %s no admite el filamento %s (%s)." +#~ msgid "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "Placa %d: %s no admite el filamento %s (%s).\n" + #~ msgid "Plate type" #~ msgstr "Plate type" @@ -12180,6 +11294,25 @@ msgstr "" #~ "Compruebe la siguiente información y haga clic en Confirmar para " #~ "continuar con el envío de la impresión:" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:\n" +#~ msgstr "" +#~ "Compruebe la siguiente información y haga clic en Confirmar para " +#~ "continuar con el envío de la impresión:\n" + +#~ msgid "Please fill report first." +#~ msgstr "Por favor, rellene primero el informe." + +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Cierre sesión y vuelva a iniciarla en la impresora." + +#~ msgid "Please upgrade your printer first" +#~ msgstr "Por favor, actualice su impresora primero" + +#~ msgid "Position:" +#~ msgstr "Posición:" + #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." @@ -12201,17 +11334,130 @@ msgstr "" #~ "Se requiere torre de purga para los time-lapses. ¿Está seguro de que " #~ "desea deshabilitarla?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Imprimir una torre para cebar el material en la boquilla después de " +#~ "cambiar a un nuevo material." + +#~ msgid "Print file not found, please slice again" +#~ msgstr "" +#~ "No se ha encontrado el archivo de impresión, por favor, vuelva a " +#~ "procesarlo" + +#~ msgid "Printer Selection" +#~ msgstr "Selección de la impresora" + #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "" #~ "El firmware de la impresora no soporta el material => Mapeo de ranuras " #~ "AMS" +#~ msgid "Printing List" +#~ msgstr "Imprimiendo Lista" + +#~ 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 printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "La purga tras el cambio de filamento se realizará dentro del relleno de " +#~ "los objetos. Esto puede reducir la cantidad de residuos y disminuir el " +#~ "tiempo de impresión. Si las paredes se imprimen con filamento " +#~ "transparente, el mezclado se podrá ver en el exterior." + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "La purga después del cambio de filamento se hará dentro del soporte de " +#~ "los objetos. Esto puede reducir la cantidad de residuos y disminuir el " +#~ "tiempo de impresión." + +#~ msgid "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "" +#~ "Empujar el nuevo filamento \n" +#~ "en el extrusor" + +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "" +#~ "Graba un vídeo timelapse de la impresión sin mostrar el cabezal de la " +#~ "herramienta. En este modo, el cabezal de la herramienta se espera cerca " +#~ "de la ranura de purga en cada cambio de capa y, a continuación, se toma " +#~ "una instantánea con la cámara de la cámara. Cuando finaliza la impresión, " +#~ "se crea un vídeo timelapse a partir de todas las instantáneas." + +#~ msgid "Reduce Triangles" +#~ msgstr "Reducir los triángulos" + +#~ msgid "Reload item" +#~ msgstr "Volver a cargar el objeto" + +#~ msgid "Reload items" +#~ msgstr "Recarga de objetos" + +#~ msgid "Repair" +#~ msgstr "Reparar" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Reparar las mallas del modelo si se trata de una malla no plegable" + +#~ msgid "Report" +#~ msgstr "Informe" + +#~ msgid "Rotation:" +#~ msgstr "Rotación:" + +#~ msgid "Save configuration as:" +#~ msgstr "Guardar la configuración como:" + #~ msgid "Select Bed Type" #~ msgstr "Seleccione el tipo de cama" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "No se pudo enviar a la impresora. Vuelve a intentarlo." + +#~ msgid "Sending" +#~ msgstr "Enviando" + +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Envío de archivos G-code a través del servicio en la nube" + +#~ msgid "Set Printable" +#~ msgstr "Establecer Imprimible" + +#~ msgid "Set Unprintable" +#~ msgstr "Establecer No imprimible" + +#~ msgid "Set pen size" +#~ msgstr "Ajustar el tamaño del lápiz" + +#~ msgid "Shift + Any arrow" +#~ msgstr "Mayúsculas + Cualquier flecha" + +#~ msgid "Shift + Mouse wheel" +#~ msgstr "Mayúsculas + rueda del ratón" + #~ msgid "Show Log" #~ msgstr "Mostrar registro" +#~ msgid "Show Model Mesh(TODO)" +#~ msgstr "Mostrar modelo de malla(TODO)" + +#~ msgid "Show Model Shadow(TODO)" +#~ msgstr "Mostrar sombra del modelo(TODO)" + +#~ msgid "Show Printable Box(TODO)" +#~ msgstr "Mostrar caja imprimible(TODO)" + #~ msgid "Spaghetti Detection" #~ msgstr "Detección de hilos" @@ -12220,6 +11466,18 @@ msgstr "" #~ "Detección de hilos en la impresión y exceso de material de purga en el " #~ "vertedero." +#~ msgid "Spiral mode" +#~ msgstr "Modo espiral" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "El modo espiral sólo funciona cuando los bucles de pared son 1, \n" +#~ "el soporte está desactivado, las capas superiores de la cáscara es 0 y la " +#~ "densidad de relleno dispersa es 0\n" + #~ 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 " @@ -12240,6 +11498,11 @@ msgstr "" #~ msgid "Stop printing when spaghetti detected" #~ msgstr "Detener la impresión cuando se detecten hilos" +#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" +#~ msgstr "" +#~ "Enviado con éxito. Saltará automáticamente a la página del dispositivo en " +#~ "%s s" + #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" @@ -12252,6 +11515,16 @@ msgstr "" #~ msgid "Support base" #~ msgstr "Base de soporte" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "La capa de soporte utiliza la altura de la capa independientemente de la " +#~ "capa del objeto. Esto es para soportar la brecha de soporte " +#~ "personalizada, pero puede causar cambios de filamento adicionales si el " +#~ "soporte se especifica como un extrusor diferente con el objeto" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support customizing z-gap and save print time." @@ -12260,15 +11533,55 @@ msgstr "" #~ "capa de objetos. Esto es para permitir la personalización de z-gap y " #~ "ahorrar tiempo de impresión." +#~ msgid "" +#~ "Switch to rectilinear pattern?\n" +#~ "Yes - switch to rectilinear pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "¿Cambiar a un patrón rectilíneo?\n" +#~ "Sí, cambia automáticamente al patrón rectilíneo\n" +#~ "No: restablezca automáticamente la densidad a un valor predeterminado que " +#~ "no sea del 100%\n" + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "¿Cambiar al patrón en zig-zag?\n" +#~ "Sí - cambia automáticamente al patrón en zig-zag\n" +#~ "No - restablecer automáticamente la densidad al valor por defecto que no " +#~ "es del 100%.\n" + +#~ msgid "Swith cloud environment, Please login again!" +#~ msgstr "Cambiar el entorno de la nube, ¡Por favor, inicie sesión de nuevo!" + #~ msgid "Sync material list from AMS" #~ msgstr "Sincronizar la lista de materiales de AMS" #~ msgid "The %s filament is too soft to be used with the AMS" #~ msgstr "El filamento %s es demasiado blando para usarlo con el AMS" +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " +#~ "unrecognized:\n" +#~ msgstr "" +#~ "La versión %s de 3mf es más reciente que la versión %s de %s, se han " +#~ "encontrado las siguientes claves no reconocidas:\n" + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " +#~ "your software.\n" +#~ msgstr "" +#~ "La versión %s del 3mf es más reciente que la versión %s de %s; se sugiere " +#~ "actualizar el software.\n" + #~ msgid "The 3mf is not from Bambu lab, load geometry data only." #~ msgstr "El 3mf no es de Bambu lab, solo se cargaran datos de geometría." +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "La configuración no es compatible y no se puede cargar." + #~ msgid "" #~ "The P1P printer does not support smooth timelapse, use traditional " #~ "timelapse instead." @@ -12276,6 +11589,14 @@ msgstr "" #~ "La impresora P1P no admite timelapse fluido; en su lugar, utilice el " #~ "timelapse tradicional." +#~ msgid "" +#~ "The firmware versions of printer and AMS are too low.Please update to the " +#~ "latest version before sending the print job" +#~ msgstr "" +#~ "Las versiones del firmware de la impresora y del AMS son demasiado " +#~ "antiguas, por favor, actualice a la última versión antes de enviar el " +#~ "trabajo de impresión." + #~ msgid "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." @@ -12283,6 +11604,22 @@ msgstr "" #~ "El volumen de purga es inferior al valor mínimo y se establecerá " #~ "automáticamente en el valor mínimo." +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "El modelo tiene facetas superpuestas o auto-intersecadas. He intentado " +#~ "repararlo, sin embargo, es posible que desee comprobar los resultados o " +#~ "reparar el archivo de entrada y volver a intentarlo." + +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "El archivo de impresión supera el tamaño máximo permitido (1GB). Por " +#~ "favor, simplifique el modelo y vuelva a procesarlo" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -12293,6 +11630,18 @@ msgstr "" #~ "volver a generar el g-code después de seleccionar el tipo de impresora " #~ "correcto." +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type.\n" +#~ msgstr "" +#~ "El tipo de impresora que se ha utilizado para generar el G-code no es el " +#~ "mismo que el de la impresora actualmente seleccionada. Se recomienda " +#~ "volver a generar el G-code seleccionando el mismo tipo de impresora.\n" + +#~ msgid "The region parameter is incorrrect" +#~ msgstr "El parámetro de región es incorrecto." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -12302,12 +11651,88 @@ msgstr "" #~ "genéricos. Actualice Bambu Studio o reinicie Bambu Studio para comprobar " #~ "si hay alguna actualización en los ajustes preestablecidos del sistema." +#~ msgid "" +#~ "This controls brim position including outer side of models, inner side of " +#~ "holes or both. Auto means both the brim position and brim width is " +#~ "analysed and calculated automatically" +#~ msgstr "" +#~ "Esto controla la posición del borde, incluyendo el lado exterior de los " +#~ "modelos, el lado interior de los huecos o ambos. Auto significa que tanto " +#~ "la posición como la anchura del borde se analizan y calculan " +#~ "automáticamente" + +#~ 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" +#~ msgstr "" +#~ "Este objeto se utilizará para purgar la boquilla después de un cambio de " +#~ "filamento para ahorrar filamento y disminuir el tiempo de impresión. Los " +#~ "colores de los objetos se mezclarán como resultado" + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Este ajuste especifica si se añade relleno dentro de los grandes huecos " +#~ "del soporte del árbol" + +#~ 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. Zero means no limit" +#~ msgstr "" +#~ "Este ajuste representa la cantidad de volumen de filamento que se puede " +#~ "fundir y extruir por segundo. La velocidad de impresión está limitada por " +#~ "la velocidad volumétrica máxima, en caso de ajustar una velocidad " +#~ "demasiado alta y poco razonable. Cero significa que no hay límite" + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "Timelapse Torre de limpieza" + #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse sin cabezal" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Espesor mínimo de la carcasa superior" + +#~ msgid "Top Solid Layers" +#~ msgstr "Capas sólidas superiores" + +#~ msgid "Translation" +#~ msgstr "Translación" + +#~ msgid "Tree support with infill" +#~ msgstr "Soporte para árboles con relleno" + #~ msgid "Unable to connect printer" #~ msgstr "No se puede conectar la impresora" +#~ msgid "Unable to create zip file" +#~ msgstr "No se puede crear un archivo zip" + +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "La tarea de carga ha terminado. Por favor, compruebe el problema de red e " +#~ "inténtelo de nuevo" + +#~ msgid "User authorization timeout" +#~ msgstr "Límite de tiempo de espera de la autorización del usuario" + +#~ msgid "User pause" +#~ msgstr "Pausa de usuario" + +#~ msgid "Waiting" +#~ msgstr "Esperando" + +#~ 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\".\n" +#~ msgstr "\n" + #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " #~ "bridge may have no archor at the end of line. This cause falling and bad " @@ -12340,6 +11765,9 @@ msgstr "" #~ "los siguientes ajustes:\n" #~ "Distancia z superior a 0, espaciado de interfaz 0, patrón concéntrico." +#~ msgid "Wrong Access code" +#~ msgstr "Código de acceso incorrecto" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -12352,9 +11780,44 @@ msgstr "" #~ "You are going to delete %u files from the printer. Are you sure you want " #~ "to continue?" +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "Has cambiado algunos ajustes de preajuste. \n" +#~ "¿Desea mantener estos ajustes cambiados después de cambiar de preajuste?" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "(Sort)" #~ msgstr "Ordenar" +#~ msgid " Object:" +#~ msgstr "Objeto" + +#~ msgid "" +#~ " is too close to exclusion area, there may be collisions when printing.\n" +#~ msgstr "" +#~ " está demasiado cerca de un área de purga; puede producirse colisiones al " +#~ "imprimir.\n" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr "" +#~ " está demasiado cerca del área de exclusión, habrá colisiones al " +#~ "imprimir.\n" + +#~ msgid " is too close to others, there may be collisions when printing.\n" +#~ msgstr "" +#~ " está demasiado cerca de otros; puede haber colisiones al imprimir.\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr " está demasiado cerca de otros, habrá colisiones al imprimir.\n" + +#~ msgid " plate %1%:" +#~ msgstr " placa %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr " se cerrará antes de crear un nuevo modelo. ¿Quieres continuar?" @@ -12362,5 +11825,25 @@ msgstr "" #~ msgid "default value" #~ msgstr "Valor por defecto" +#~ msgid "hybrid(auto)" +#~ msgstr "híbrido(auto)" + +#~ msgid "normal" +#~ msgstr "normal" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto) y tree(auto) se utiliza para generar soporte " +#~ "automáticamente. Si se selecciona normal o árbol, sólo se generan los " +#~ "soportes" + #~ msgid "preparing, export 3mf failed!" #~ msgstr "Preparando; ¡Error al exportar 3MF!" + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "el 3mf no es compatible, ¡cargue sólo los datos geométricos!" + +#~ msgid "tree" +#~ msgstr "árbol" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index e491f88c9..4b3928632 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -1,15 +1,11 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# 5axes <5axes@free.fr>, 2023. msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" -"Language-Team: Guislain Cyril\n" +"Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,10 +14,10 @@ msgstr "" "X-Generator: Poedit 3.3.1\n" msgid "Supports Painting" -msgstr "Peindre les supports" +msgstr "Prend en charge la peinture" msgid "Alt + Mouse wheel" -msgstr "Alt + Molette de la souris" +msgstr "Alt + molette de la souris" msgid "Section view" msgstr "Vue en coupe" @@ -30,10 +26,10 @@ msgid "Reset direction" msgstr "Réinitialiser la direction" msgid "Ctrl + Mouse wheel" -msgstr "Ctrl + Molette de la souris" +msgstr "Ctrl + molette de la souris" msgid "Pen size" -msgstr "Taille du pinceau" +msgstr "Taille du stylo" msgid "Left mouse button" msgstr "Bouton gauche de la souris" @@ -48,25 +44,25 @@ msgid "Block supports" msgstr "Bloquer les supports" msgid "Shift + Left mouse button" -msgstr "Maj + Bouton gauche de la souris" +msgstr "Maj + bouton gauche de la souris" msgid "Erase" msgstr "Effacer" msgid "Erase all painting" -msgstr "Effacer tout" +msgstr "Effacer toute la peinture" msgid "Highlight overhang areas" -msgstr "Mettre en surbrillance les zones en surplomb" +msgstr "Mettez en surbrillance les zones en surplomb" msgid "Gap fill" -msgstr "Remplir les espaces" +msgstr "Remplir les trous" msgid "Perform" msgstr "Exécuter" msgid "Gap area" -msgstr "Zone d'espacement" +msgstr "Aire des trous" msgid "Tool type" msgstr "Type d'outil" @@ -78,7 +74,7 @@ msgid "On overhangs only" msgstr "Sur les surplombs uniquement" msgid "Auto support threshold angle: " -msgstr "Angle de seuil de supports automatique : " +msgstr "Angle de seuil de support automatique :" msgid "Circle" msgstr "Cercle" @@ -87,10 +83,10 @@ msgid "Sphere" msgstr "Sphère" msgid "Fill" -msgstr "Remplissage" +msgstr "Remplir" msgid "Gap Fill" -msgstr "Remplir les espaces" +msgstr "Remplissage des trous" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" @@ -98,16 +94,16 @@ msgstr "" "Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Mettre en surbrillance les faces en fonction de l'angle de surplomb." +msgstr "Mettez en surbrillance les faces en fonction de l'angle de surplomb." msgid "No auto support" -msgstr "Pas de support automatique" +msgstr "Pas de support auto" msgid "Support Generated" msgstr "Supports générés" msgid "Lay on face" -msgstr "Poser sur la face" +msgstr "Positionner sur une face" #, boost-format msgid "" @@ -115,23 +111,23 @@ msgid "" "the first %1% filaments will be available in painting tool." msgstr "" "Le nombre de filaments dépasse le nombre maximum pris en charge par l'outil " -"de peinture. Seuls les %1% premiers filaments seront disponibles dans " +"de peinture. seuls les %1% premiers filaments seront disponibles dans " "l'outil de peinture." msgid "Color Painting" -msgstr "Peindre" +msgstr "Couleur Peinture" msgid "Pen shape" -msgstr "Forme du pinceau" +msgstr "Forme de stylo" msgid "Paint" msgstr "Peindre" msgid "Key 1~9" -msgstr "Touche 1 ~ 9" +msgstr "Clé 1 ~ 9" msgid "Choose filament" -msgstr "Choisir le filament" +msgstr "Choisissez le filament" msgid "Edge detection" msgstr "Détection des contours" @@ -143,13 +139,13 @@ msgid "Filaments" msgstr "Filaments" msgid "Brush" -msgstr "Brosse" +msgstr "Pinceau" msgid "Smart fill" msgstr "Remplissage intelligent" msgid "Bucket fill" -msgstr "Remplissage du seau" +msgstr "Pot de peinture" msgid "Height range" msgstr "Plage de hauteur" @@ -158,10 +154,10 @@ msgid "Ctrl + Shift + Enter" msgstr "Ctrl + Maj + Entrée" msgid "Toggle Wireframe" -msgstr "Basculer la structure" +msgstr "Activer Filaire" msgid "Shortcut Key " -msgstr "Raccourci " +msgstr "Touche de raccourci" msgid "Triangle" msgstr "Triangle" @@ -174,13 +170,13 @@ msgstr "Supprimer la couleur peinte" #, boost-format msgid "Painted using: Filament %1%" -msgstr "Peint avec : Filament %1%" +msgstr "Peint avec : filament %1%" msgid "Move" msgstr "Déplacer" msgid "Rotate" -msgstr "Rotation" +msgstr "Pivoter" msgid "Optimize orientation" msgstr "Optimiser l'orientation" @@ -189,13 +185,13 @@ msgid "Apply" msgstr "Appliquer" msgid "Scale" -msgstr "Échelle" +msgstr "Redimensionner" msgid "Error: Please close all toolbar menus first" msgstr "Erreur : Veuillez d'abord fermer tous les menus de la barre d'outils" msgid "Tool-Lay on Face" -msgstr "Pose de l’outil sur la face" +msgstr "Outil-Positionner sur une face" msgid "in" msgstr "dans" @@ -204,7 +200,7 @@ msgid "mm" msgstr "mm" msgid "Position" -msgstr "Position" +msgstr "Emplacement" msgid "Rotation" msgstr "Rotation" @@ -225,22 +221,22 @@ msgid "Group Operations" msgstr "Opérations de groupe" msgid "Set Position" -msgstr "Définir la position" +msgstr "Définir la Position" msgid "Set Orientation" -msgstr "Définir l'orientation" +msgstr "Définir l'Orientation" msgid "Set Scale" -msgstr "Définir l'échelle" +msgstr "Définir l'Échelle" msgid "Reset Position" -msgstr "Réinitialiser la position" +msgstr "Position de réinitialisation" msgid "Reset Rotation" -msgstr "Réinitialiser la rotation" +msgstr "Réinitialiser la Rotation" msgid "World coordinates" -msgstr "Coordonnées" +msgstr "Les coordonnées mondiales" msgid "°" msgstr "°" @@ -252,7 +248,7 @@ msgid "%" msgstr "%" msgid "uniform scale" -msgstr "Échelle uniforme" +msgstr "échelle uniforme" msgid "Left click" msgstr "Clic gauche" @@ -264,7 +260,7 @@ msgid "Right click" msgstr "Clic droit" msgid "Remove connector" -msgstr "Supprimer le connecteur" +msgstr "Retirer le connecteur" msgid "Drag" msgstr "Glisser" @@ -276,7 +272,7 @@ msgid "Add connector to selection" msgstr "Ajouter un connecteur à la sélection" msgid "Remove connector from selection" -msgstr "Supprimer le connecteur de la sélection" +msgstr "Retirer le connecteur de la sélection" msgid "Select all connectors" msgstr "Sélectionner tous les connecteurs" @@ -297,7 +293,7 @@ msgid "Height" msgstr "Hauteur" msgid "Edit connectors" -msgstr "Éditer les connecteurs" +msgstr "Modifier les connecteurs" msgid "Add connectors" msgstr "Ajouter des connecteurs" @@ -309,7 +305,7 @@ msgid "Lower part" msgstr "Partie inférieure" msgid "Keep" -msgstr "Conserver" +msgstr "Garder" msgid "Place on cut" msgstr "Placer sur la coupe" @@ -321,13 +317,13 @@ msgid "After cut" msgstr "Après la coupe" msgid "Cut to parts" -msgstr "Couper en pièces" +msgstr "Couper la sélection dans le presse-papiers" msgid "Auto Segment" msgstr "Segmentation automatique" msgid "Perform cut" -msgstr "Couper" +msgstr "Effectuer la coupe" msgid "Reset" msgstr "Réinitialiser" @@ -339,16 +335,16 @@ msgid "Type" msgstr "Type" msgid "Style" -msgstr "Style & Forme" +msgstr "Style" msgid "Shape" msgstr "Forme" msgid "Depth ratio" -msgstr "Profondeur" +msgstr "Rapport de profondeur" msgid "Remove connectors" -msgstr "Supprimer les connecteurs" +msgstr "Retirer les connecteurs" msgid "Prizm" msgstr "Prisme" @@ -369,22 +365,22 @@ msgid "Cancel" msgstr "Annuler" msgid "Warning" -msgstr "Avertissement" +msgstr "Alerte" msgid "Invalid connectors detected" -msgstr "Connecteurs non valides détectés" +msgstr "Connecteurs invalides détectés" msgid "connector is out of cut contour" -msgstr " connecteur est hors contour de coupe" +msgstr "le connecteur est hors du contour de la coupe" msgid "connectors are out of cut contour" -msgstr " connecteurs sont hors contour de coupe" +msgstr "les connecteurs sont hors du contour de la coupe" msgid "connector is out of object" -msgstr " connecteur est hors de l’objet" +msgstr "le connecteur est hors de l'objet" msgid "connectors is out of object" -msgstr " connecteurs sont hors de l’objet" +msgstr "les connecteurs sont hors de l'objet" msgid "Some connectors are overlapped" msgstr "Certains connecteurs se chevauchent" @@ -393,14 +389,14 @@ msgid "" "Invalid state. \n" "No one part is selected for keep after cut" msgstr "" -"Etat non valide.\n" -"Aucune pièce n’est sélectionnée pour être conservée après la coupe" +"État non valide. \n" +"Aucune pièce n'est sélectionnée pour être conservée après la découpe" msgid "Plug" -msgstr "Plug" +msgstr "Connecteur" msgid "Dowel" -msgstr "Goujon" +msgstr "Tourillon" msgid "Tolerance" msgstr "Tolérance" @@ -412,7 +408,7 @@ msgid "Detail level" msgstr "Niveau de détail" msgid "Decimate ratio" -msgstr "Ratio de décimation" +msgstr "Rapport de décimation" #, boost-format msgid "" @@ -440,13 +436,13 @@ msgid "Extra high" msgstr "Très haut" msgid "High" -msgstr "Haut" +msgstr "Élevé" msgid "Medium" msgstr "Moyen" msgid "Low" -msgstr "Bas" +msgstr "Faible" msgid "Extra low" msgstr "Très bas" @@ -456,14 +452,14 @@ msgid "%d triangles" msgstr "%d triangles" msgid "Show wireframe" -msgstr "Afficher la structure" +msgstr "Afficher la vue filaire" #, boost-format msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Ne peut pas s'appliquer lors de l'aperçu du processus." +msgstr "Ne peut pas s'appliquer lors du processus de prévisualisation." msgid "Operation already cancelling. Please wait few seconds." msgstr "Opération déjà annulée. Veuillez patienter quelques secondes." @@ -475,10 +471,10 @@ msgid "Perform Recognition" msgstr "Effectuer la reconnaissance" msgid "Brush size" -msgstr "Taille de la brosse" +msgstr "Taille du pinceau" msgid "Brush shape" -msgstr "Forme de la brosse" +msgstr "Forme du pinceau" msgid "Enforce seam" msgstr "Forcer la couture" @@ -487,16 +483,16 @@ msgid "Block seam" msgstr "Bloquer la couture" msgid "Seam painting" -msgstr "Peindre la couture" +msgstr "Peinture des coutures" msgid "Remove selection" msgstr "Supprimer la sélection" msgid "Shift + Mouse move up or dowm" -msgstr "Shift + Déplacement de la souris vers le haut ou le bas" +msgstr "Maj + souris vers le haut ou vers le bas" msgid "Rotate text" -msgstr "Rotation du texte" +msgstr "Faire pivoter le texte" msgid "Text shape" msgstr "Forme du texte" @@ -508,7 +504,7 @@ msgid "Thickness" msgstr "Épaisseur" msgid "Input text" -msgstr "Texte" +msgstr "Texte entré" msgid "Embeded" msgstr "Intégré" @@ -522,9 +518,7 @@ msgstr "Angle" msgid "" "Embeded\n" "depth" -msgstr "" -"Profondeur\n" -"intégrée" +msgstr "Profondeur intégrée" msgid "Surface" msgstr "Surface" @@ -545,22 +539,22 @@ msgstr "Non défini" msgid "%1% was replaced with %2%" msgstr "%1% a été remplacé par %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" -"La configuration peut être générée par une version plus récente de Orca " -"Slicer." +"La configuration peut être générée par une version plus récente de " +"BambuStudio." msgid "Some values have been replaced. Please check them:" msgstr "Certaines valeurs ont été remplacées. Veuillez les vérifier :" msgid "Process" -msgstr "Processus" +msgstr "Traiter" msgid "Filament" msgstr "Filament" msgid "Machine" -msgstr "Imprimante" +msgstr "Machine" msgid "Configuration package was loaded, but some values were not recognized." msgstr "" @@ -577,21 +571,28 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Version Interne" + +msgid "Version" +msgstr "Version" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 va s'arrêter à cause d'un manque de mémoire. Il peut s'agir d'un " -"bogue. Il sera apprécié de signaler le problème à notre équipe." +"BambuStudio va se terminer à cause d'un manque de mémoire. Il peut s'agir " +"d'un bogue. Nous vous serions reconnaissants de signaler le problème à notre " +"équipe." msgid "Fatal error" msgstr "Erreur fatale" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" -"Orca Slicer va s'arrêter à cause d'une erreur de localisation. Il sera " +"BambuStudio va s'arrêter à cause d'une erreur de localisation. Il sera " "apprécié si vous signalez le scénario spécifique dans lequel ce problème " "s'est produit." @@ -599,24 +600,30 @@ msgid "Critical error" msgstr "Erreur critique" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "Orca Slicer a reçu une exception non gérée : %1%" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio a reçu une exception non gérée : %1%" + +msgid "Untitled" +msgstr "Sans titre" msgid "Downloading Bambu Network Plug-in" -msgstr "Téléchargement du plug-in réseau Bambu" +msgstr "Téléchargement du plug-in Bambu Network" + +msgid "Login information expired. Please login again." +msgstr "Les informations de connexion ont expiré. Veuillez vous reconnecter." msgid "Incorrect password" msgstr "Mot de passe incorrect" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "Connexion %s échouée ! [SN:%s, code=%s]" +msgstr "La connexion à %s a échoué ! [SN : %s, code = %s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" -"Le fichier de configuration de Orca Slicer est peut-être corrompu et ne peut " +"Le fichier de configuration de BambuStudio est peut-être corrompu et ne peut " "pas être analysé. Veuillez supprimer le fichier et réessayer." #, c-format, boost-format @@ -635,10 +642,12 @@ msgstr "Chargement de la configuration" #, c-format, boost-format msgid "Click to download new version in default browser: %s" -msgstr "Cliquez pour télécharger la nouvelle version : %s" +msgstr "" +"Cliquez pour télécharger la nouvelle version dans le navigateur par défaut : " +"%s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer a besoin d’être mis à jour" +msgid "The Bambu Studio needs an upgrade" +msgstr "Le Bambu Studio a besoin d'une mise à niveau" msgid "This is the newest version." msgstr "Il s'agit de la version la plus récente." @@ -653,16 +662,16 @@ msgid "Loading current presets" msgstr "Chargement des préréglages actuels" msgid "Loading a mode view" -msgstr "Chargement d'un mode de vue" +msgstr "Chargement d'une vue de mode" msgid "Choose one file (3mf):" msgstr "Choisissez un fichier (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/svg/obj/amf) :" +msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/svg/obj/amf) :" -msgid "Choose one file (gcode/3mf):" -msgstr "Choisissez un fichier (gcode/3mf):" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Choisissez un fichier (gcode/.gco/.g/.ngc/ngc) :" msgid "Some presets are modified." msgstr "Certains préréglages sont modifiés." @@ -679,24 +688,21 @@ msgstr "Utilisateur déconnecté" msgid "new or open project file is not allowed during the slicing process!" msgstr "" -"un nouveau projet ou l’ouverture d’un projet existant n'est pas autorisé " -"pendant le processus de découpage !" +"L'ouverture ou la création d'un fichier de projet n'est pas autorisée " +"pendant le processus de tranchage !" msgid "Open Project" -msgstr "Ouvrir un projet" +msgstr "Ouvrir Projet" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"La version de Orca Slicer est trop ancienne et doit être mise à jour vers la " -"dernière version afin qu’il puisse être utilisé normalement" - -msgid "Login information expired. Please login again." -msgstr "Les informations de connexion ont expiré. Veuillez vous reconnecter." +"La version de Bambu Studio est trop ancienne et doit être mise à jour vers " +"la dernière version avant de pouvoir être utilisée normalement." msgid "Privacy Policy Update" -msgstr "Mise à jour de la politique de confidentialité" +msgstr "Mise à jour de politique de confidentialité" msgid "Loading" msgstr "Chargement" @@ -708,7 +714,7 @@ msgid "Switching application language" msgstr "Changer la langue de l'application" msgid "Select the language" -msgstr "Sélectionnez la langue" +msgstr "Sélectionner la langue" msgid "Language" msgstr "Langue" @@ -717,28 +723,28 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "Les téléchargements sont toujours en cours" +msgstr "Les téléversements sont toujours en cours" msgid "Stop them and continue anyway?" -msgstr "Désirez-vous les arrêter et continuer ?" +msgstr "Les arrêter et continuer quand même ?" msgid "Ongoing uploads" -msgstr "Téléchargements en cours" +msgstr "Téléversements en cours" msgid "Select a G-code file:" msgstr "Sélectionnez un fichier G-code :" msgid "Import File" -msgstr "Importer un fichier" +msgstr "Importer un Fichier..." msgid "Delete" -msgstr "Effacer" +msgstr "Supprimer" msgid "Choose files" msgstr "Choisir des fichiers" msgid "New Folder" -msgstr "Nouveau dossier" +msgstr "Nouveau Dossier" msgid "Open" msgstr "Ouvrir" @@ -746,8 +752,8 @@ msgstr "Ouvrir" msgid "Rename" msgstr "Renommer" -msgid "Orca Slicer GUI initialization failed" -msgstr "L'initialisation de l'interface de Orca Slicer a échoué" +msgid "Bambu Studio GUI initialization failed" +msgstr "L'initialisation de l'interface de Bambu Studio a échoué" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -757,7 +763,7 @@ msgid "Quality" msgstr "Qualité" msgid "Shell" -msgstr "Coque" +msgstr "Coquille" msgid "Infill" msgstr "Remplissage" @@ -772,46 +778,34 @@ msgid "Speed" msgstr "Vitesse" msgid "Strength" -msgstr "Solidité" - -msgid "Top Solid Layers" -msgstr "Couches solides supérieures" - -msgid "Top Minimum Shell Thickness" -msgstr "Épaisseur minimale de la coque supérieure" - -msgid "Bottom Solid Layers" -msgstr "Couches solides inférieures" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Épaisseur minimale de la coque inférieure" +msgstr "Résistance" msgid "Ironing" msgstr "Lissage" msgid "Fuzzy Skin" -msgstr "Surface floue" +msgstr "Surface Irrégulière" msgid "Extruders" msgstr "Extrudeurs" msgid "Extrusion Width" -msgstr "Largeur d'extrusion" +msgstr "Largeur d'Extrusion" msgid "Wipe options" -msgstr "Options d'essuyage" +msgstr "Options de nettoyage" msgid "Bed adhension" -msgstr "Adhérence au plateau" +msgstr "Adhérence au lit" msgid "Advanced" -msgstr "Avancés" +msgstr "Avancé" msgid "Add part" msgstr "Ajouter une pièce" msgid "Add negative part" -msgstr "Ajouter une pièce négative" +msgstr "Ajouter une partie négative" msgid "Add modifier" msgstr "Ajouter un modificateur" @@ -820,7 +814,7 @@ msgid "Add support blocker" msgstr "Ajouter un bloqueur de support" msgid "Add support enforcer" -msgstr "Ajouter un support forcé" +msgstr "Ajouter un générateur de supports" msgid "Select settings" msgstr "Sélectionnez les paramètres" @@ -832,29 +826,17 @@ msgid "Show" msgstr "Afficher" msgid "Del" -msgstr "Suppr" +msgstr "Eff." msgid "Delete the selected object" msgstr "Supprimer l'objet sélectionné" msgid "Edit Text" -msgstr "Editer le texte" +msgstr "Modifier texte" msgid "Load..." msgstr "Charger..." -msgid "Orca Cube" -msgstr "Cube Orca" - -msgid "3DBenchy" -msgstr "3DBenchy" - -msgid "Autodesk FDM Test" -msgstr "Test Autodesk FDM" - -msgid "Voron Cube" -msgstr "Cube Voron" - msgid "Cube" msgstr "Cube" @@ -864,28 +846,33 @@ msgstr "Cylindre" msgid "Cone" msgstr "Cône" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Modificateur de plage de hauteur" msgid "Add settings" -msgstr "Ajouter des paramètres" +msgstr "Ajouter des réglages" msgid "Change type" msgstr "Changer le type" msgid "Set as an individual object" -msgstr "Définir en tant qu’objet individuel" +msgstr "Définir comme un objet individuel" msgid "Set as individual objects" msgstr "Définir en tant qu'objets individuels" -msgid "Fill bed with copies" -msgstr "Remplir le plateau de copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "" -"Remplissez la zone restante du plateau avec des copies de l'objet sélectionné" - msgid "Printable" msgstr "Imprimable" @@ -893,28 +880,28 @@ msgid "Fix model" msgstr "Réparer le modèle" msgid "Export as STL" -msgstr "Exporter en STL" +msgstr "Exporter en tant que STL" msgid "Reload from disk" msgstr "Recharger à partir du disque" msgid "Reload the selected parts from disk" -msgstr "Recharger les modèles sélectionnés à partir du disque" +msgstr "Recharger les pièces sélectionnées à partir du disque" msgid "Replace with STL" -msgstr "Remplacer par un STL" +msgstr "Remplacer par le STL" msgid "Replace the selected part with new STL" -msgstr "Remplacer le modèle sélectionné par un nouveau STL" +msgstr "Remplacer la pièce sélectionnée par un nouveau STL" msgid "Change filament" -msgstr "Changer le filament" +msgstr "Changer de filament" msgid "Set filament for selected items" msgstr "Définir le filament pour les éléments sélectionnés" msgid "Default" -msgstr "Par défaut" +msgstr "Défaut" #, c-format, boost-format msgid "Filament %d" @@ -924,37 +911,37 @@ msgid "active" msgstr "actif" msgid "Scale to build volume" -msgstr "Mettre à l’échelle par rapport au volume" +msgstr "Échelle pour créer du volume" msgid "Scale an object to fit the build volume" -msgstr "Mettre à l'échelle un objet pour l'adapter au volume d’impression" +msgstr "Mettre à l'échelle un objet pour l'adapter au volume de construction" msgid "Flush Options" -msgstr "Paramètres de purge" +msgstr "Options de Rinçage" msgid "Flush into objects' infill" -msgstr "Purger dans le remplissage" +msgstr "Purger dans le remplissage d'objet" msgid "Flush into this object" msgstr "Purger dans cet objet" msgid "Flush into objects' support" -msgstr "Purger dans les supports" +msgstr "Purger dans les supports de l'objet" msgid "Edit in Parameter Table" -msgstr "Modifier dans le tableau des paramètres" +msgstr "Modifier dans la Table des Paramètres" msgid "Convert from inch" msgstr "Convertir en pouce" msgid "Restore to inch" -msgstr "Restaurer en pouce" +msgstr "Restaurer en pouces" msgid "Convert from meter" msgstr "Convertir en mètre" msgid "Restore to meter" -msgstr "Restaurer en mètre" +msgstr "Restaurer au compteur" msgid "Assemble" msgstr "Assembler" @@ -963,10 +950,13 @@ msgid "Assemble the selected objects to an object with multiple parts" msgstr "Assembler les objets sélectionnés à un objet en plusieurs parties" msgid "Assemble the selected objects to an object with single part" -msgstr "Assembler les objets sélectionnés à un objet en une seule partie" +msgstr "Assembler les objets sélectionnés à un objet en une seule pièce" -msgid "Assemble the selected parts to a single part" -msgstr "Assembler les pièces sélectionnées en une seule pièce" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "Le long de l'axe X" @@ -987,13 +977,13 @@ msgid "Mirror along the Z axis" msgstr "Miroir le long de l'axe Z" msgid "Mirror" -msgstr "Miroir" +msgstr "Symétrie" msgid "Mirror object" -msgstr "Objet miroir" +msgstr "Symétriser l'Objet" msgid "Invalidate cut info" -msgstr "Invalider les informations de coupe" +msgstr "Invalider les informations de découpe" msgid "Add Primitive" msgstr "Ajouter une primitive" @@ -1002,29 +992,29 @@ msgid "Show Labels" msgstr "Afficher les étiquettes" msgid "To objects" -msgstr "En objets" +msgstr "Vers les objets" msgid "Split the selected object into multiple objects" msgstr "Diviser l'objet sélectionné en plusieurs objets" msgid "To parts" -msgstr "En parties" +msgstr "Vers les parties" msgid "Split the selected object into multiple parts" msgstr "Diviser l'objet sélectionné en plusieurs parties" msgid "Split" -msgstr "Diviser" +msgstr "Scinder" msgid "Split the selected object" -msgstr "Diviser l'objet sélectionné" +msgstr "Scinder l'objet sélectionné" msgid "Auto orientation" msgstr "Orientation automatique" msgid "Auto orient the object to improve print quality." msgstr "" -"Orienter automatiquement l'objet pour améliorer la qualité d'impression." +"Orientez automatiquement l'objet pour améliorer la qualité d'impression." msgid "Split the selected object into mutiple objects" msgstr "Diviser l'objet sélectionné en plusieurs objets" @@ -1036,43 +1026,43 @@ msgid "Select All" msgstr "Tout sélectionner" msgid "select all objects on current plate" -msgstr "sélectionner tous les objets sur le plateau actuel" +msgstr "sélectionner tous les objets sur la plaque actuelle" msgid "Delete All" msgstr "Tout Supprimer" msgid "delete all objects on current plate" -msgstr "supprimer tous les objets sur le plateau actuel" +msgstr "supprimer tous les objets sur la plaque actuelle" msgid "Arrange" -msgstr "Organiser" +msgstr "Agencer" msgid "arrange current plate" -msgstr "organiser le plateau actuel" +msgstr "organiser la plaque actuelle" msgid "Auto Rotate" msgstr "Rotation automatique" msgid "auto rotate current plate" -msgstr "rotation automatique du plateau actuel" +msgstr "rotation automatique de la plaque actuelle" msgid "Delete Plate" msgstr "Supprimer le plateau" msgid "Remove the selected plate" -msgstr "Supprimer le plateau sélectionné" +msgstr "Supprimer la plaque sélectionnée" msgid "Clone" msgstr "Cloner" msgid "Simplify Model" -msgstr "Simplifier le modèle" +msgstr "Simplifier le Modèle" msgid "Center" -msgstr "Centrer" +msgstr "Centre" msgid "Edit Process Settings" -msgstr "Modifier les paramètres de processus" +msgstr "Modifier les paramètres du processus" msgid "Edit print parameters for a single object" msgstr "Modifier les paramètres d'impression d'un seul objet" @@ -1086,18 +1076,22 @@ msgstr "Définir le filament pour les éléments sélectionnés" msgid "current" msgstr "courant" -msgid "Set Unprintable" -msgstr "Définir en non imprimable" - -msgid "Set Printable" -msgstr "Définir en imprimable" - msgid "Unlock" msgstr "Ouvrir" msgid "Lock" msgstr "Bloquer" +msgid "Fill bed with copies" +msgstr "Remplir le plateau de copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "" +"Remplissez la zone restante du plateau avec des copies de l'objet sélectionné" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Nom" @@ -1108,13 +1102,13 @@ msgstr "Fila." msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" msgstr[0] "%1$d erreur réparée" -msgstr[1] "%1$d erreurs réparées" +msgstr[1] "%1$d erreur réparée" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." msgstr[0] "Erreur : %1$d arête non multiple." -msgstr[1] "Erreur : %1$d arêtes non multiple." +msgstr[1] "Erreur : %1$d arête non multiple." msgid "Remaining errors" msgstr "Erreurs restantes" @@ -1123,36 +1117,35 @@ msgstr "Erreurs restantes" msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" msgstr[0] "%1$d arête non multiple" -msgstr[1] "%1$d arêtes non multiple" +msgstr[1] "%1$d arête non multiple" msgid "Right click the icon to fix model object" -msgstr "" -"Cliquez sur l’icône avec le bouton droit de la souris pour corriger le modèle" +msgstr "Cliquez avec le bouton droit sur l'icône pour fixer l'objet modèle" msgid "Right button click the icon to drop the object settings" msgstr "" -"Cliquez sur l’icône avec le bouton droit de la souris pour supprimer les " -"paramètres de l'objet" +"Cliquez avec le bouton droit sur l'icône pour supprimer les paramètres de " +"l'objet" msgid "Click the icon to reset all settings of the object" msgstr "Cliquez sur l'icône pour réinitialiser tous les paramètres de l'objet" msgid "Right button click the icon to drop the object printable property" msgstr "" -"Cliquez sur l’icône avec le bouton droit de la souris pour déposer la " -"propriété imprimable de l'objet" +"Cliquez avec le bouton droit sur l'icône pour déposer la propriété " +"imprimable de l'objet" msgid "Click the icon to toggle printable property of the object" msgstr "Cliquez sur l'icône pour basculer la propriété imprimable de l'objet" msgid "Click the icon to edit support painting of the object" -msgstr "Cliquez sur l'icône pour modifier la peinture des supports de l'objet" +msgstr "Cliquez sur l'icône pour modifier la peinture de support de l'objet" msgid "Click the icon to edit color painting of the object" msgstr "Cliquez sur l'icône pour modifier la couleur de peinture de l'objet" msgid "Click the icon to shift this object to the bed" -msgstr "Cliquez sur l’icône pour déplacer cet objet vers le plateau" +msgstr "Cliquez sur l'icône pour déplacer cet objet vers le plateau" msgid "Loading file" msgstr "Chargement du fichier" @@ -1160,6 +1153,9 @@ msgstr "Chargement du fichier" msgid "Error!" msgstr "Erreur!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Générique" @@ -1168,24 +1164,24 @@ msgstr "Ajouter un modificateur" msgid "Switch to per-object setting mode to edit modifier settings." msgstr "" -"Basculer en mode de réglage par objet pour modifier les paramètres du " +"Basculez vers le mode de réglage par objet pour modifier les paramètres du " "modificateur." msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Basculer en mode de réglage par objet pour modifier les paramètres de " +"Passez en mode de réglage \"par objet\" pour modifier les paramètres de " "processus des objets sélectionnés." msgid "Delete connector from object which is a part of cut" -msgstr "Supprimer le connecteur de l’objet qui fait partie de la coupe" +msgstr "Supprimer le connecteur de l'objet qui fait partie de la découpe" msgid "Delete solid part from object which is a part of cut" -msgstr "Supprimer la partie solide de l’objet qui fait partie de la coupe" +msgstr "Supprimer la partie solide de l'objet qui est une partie découpée" msgid "Delete negative volume from object which is a part of cut" -msgstr "Supprimer le volume négatif de l’objet qui fait partie de la coupe" +msgstr "Supprimer le volume négatif de l'objet qui fait partie de la découpe" msgid "" "To save cut correspondence you can delete all connectors from all related " @@ -1202,10 +1198,10 @@ msgid "" "cut infornation first." msgstr "" "Cette action rompra une correspondance coupée.\n" -"Après cela, la cohérence du modèle ne peut plus être garantie.\n" +"Après cela, la cohérence du modèle ne peut être garantie.\n" "\n" "Pour manipuler des pièces solides ou des volumes négatifs, vous devez " -"d’abord invalider les informations de coupe." +"d'abord invalider les informations de coupe." msgid "Delete all connectors" msgstr "Supprimer tous les connecteurs" @@ -1221,40 +1217,40 @@ msgid "Assembly" msgstr "Assemblé" msgid "Cut Connectors information" -msgstr "Informations sur les connecteurs coupés" +msgstr "Informations sur les connecteurs de coupe" msgid "Object manipulation" -msgstr "Manipulation d’objets" +msgstr "Manipulation d'objets" msgid "Group manipulation" msgstr "Manipulation de groupe" msgid "Object Settings to modify" -msgstr "Paramètres de l’objet à modifier" +msgstr "Paramètres de l'objet à modifier" msgid "Part Settings to modify" msgstr "Paramètres de la pièce à modifier" msgid "Layer range Settings to modify" -msgstr "Paramètres de la plage de couche à modifier" +msgstr "Paramètres de plage de couches à modifier" msgid "Part manipulation" msgstr "Manipulation de pièces" msgid "Instance manipulation" -msgstr "Manipulation d’instances" +msgstr "Manipulation d'instances" msgid "Height ranges" msgstr "Plages de hauteur" msgid "Settings for height range" -msgstr "Paramètres de la plage de hauteur" +msgstr "Réglages de la plage de hauteur" msgid "Object" msgstr "Objet" msgid "Part" -msgstr "Hotend" +msgstr "Pièce" msgid "Layer" msgstr "Couche" @@ -1286,35 +1282,35 @@ msgid "Modifier" msgstr "Modificateur" msgid "Support Blocker" -msgstr "Bloqueur de support" +msgstr "Bloqueur de Support" msgid "Support Enforcer" -msgstr "Support forcé" +msgstr "Générateur de Support" msgid "Type:" -msgstr "Type:" +msgstr "Type :" msgid "Choose part type" msgstr "Choisissez le type de pièce" msgid "Enter new name" -msgstr "Entrez le nouveau nom" +msgstr "Entrer de nouveaux noms" msgid "Renaming" -msgstr "Renommer" +msgstr "Renommage" msgid "Repairing model object" -msgstr "Réparer le modèle" +msgstr "Réparer l'objet modèle" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" -msgstr[0] "Le modèle suivant a été réparé" -msgstr[1] "Les modèles suivants ont été réparés" +msgstr[0] "L'objet modèle suivant a été réparé" +msgstr[1] "L'objet modèle suivant a été réparé" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" -msgstr[0] "Échec de la réparation du modèle suivant" -msgstr[1] "Échec de la réparation des modèles suivants" +msgstr[0] "Échec de la réparation de l'objet modèle suivant" +msgstr[1] "Échec de la réparation des objets de modèle suivants" msgid "Repairing was canceled" msgstr "La réparation a été annulée" @@ -1346,19 +1342,10 @@ msgid "multiple cells copy is not supported" msgstr "la copie de plusieurs cellules n'est pas prise en charge" msgid "Outside" -msgstr "En dehors" - -msgid "Auto" -msgstr "Automatique" - -msgid "Manual" -msgstr "Manuelle" - -msgid "No-brim" -msgstr "Aucune" +msgstr "Hors plaque" msgid " " -msgstr " " +msgstr "" msgid "Layer height" msgstr "Hauteur de couche" @@ -1370,19 +1357,34 @@ msgid "Infill density(%)" msgstr "Densité de remplissage(%)" msgid "Auto Brim" -msgstr "Bordure automatique" +msgstr "Bord automatique" + +msgid "Auto" +msgstr "Auto" + +msgid "Outer brim only" +msgstr "Bordure extérieure uniquement" + +msgid "Inner brim only" +msgstr "Bordure intérieure uniquement" + +msgid "Outer and inner brim" +msgstr "Bordure extérieure et intérieure" + +msgid "No-brim" +msgstr "Sans bord" msgid "Outer wall speed" -msgstr "Vitesse de la paroi extérieure" +msgstr "Vitesse du mur extérieur" msgid "Plate" -msgstr "Plateau" +msgstr "Plaque" msgid "Brim" msgstr "Bordure" msgid "Object/Part Setting" -msgstr "Réglages Objets" +msgstr "Réglage objet/pièce" msgid "Reset parameter" msgstr "Paramètre de réinitialisation" @@ -1391,25 +1393,25 @@ msgid "Multicolor Print" msgstr "Impression multicolore" msgid "Line Type" -msgstr "Type de lignes" +msgstr "Type de ligne" msgid "More" msgstr "Plus" msgid "Open Preferences." -msgstr "Ouvrir les Préférences." +msgstr "Ouvrir les Préférences" msgid "Open next tip." -msgstr "Ouvrir le conseil suivant." +msgstr "Ouvrir le conseil suivant" msgid "Open Documentation in web browser." -msgstr "Ouvrir la documentation dans le navigateur Web." +msgstr "Ouvrir la documentation dans un navigateur Web" msgid "Pause:" msgstr "Pause:" msgid "Custom Template:" -msgstr "Modèle personnalisé:" +msgstr "Modèle personnalisé :" msgid "Custom G-code:" msgstr "G-code personnalisé:" @@ -1418,8 +1420,7 @@ msgid "Custom G-code" msgstr "G-code personnalisé" msgid "Enter Custom G-code used on current layer:" -msgstr "" -"Saisissez les commandes personnalisées à utiliser sur la couche actuelle :" +msgstr "Entrez le G-code personnalisé a utiliser sur la couche actuelle :" msgid "OK" msgstr "OK" @@ -1431,34 +1432,34 @@ msgid "Jump to layer" msgstr "Aller à la couche" msgid "Please enter the layer number" -msgstr "Veuillez entrer le numéro de couche" +msgstr "Veuillez entrer le numéro de la couche." msgid "Add Pause" -msgstr "Ajouter une pause" +msgstr "Ajouter une Pause" msgid "Insert a pause command at the beginning of this layer." -msgstr "Insérer une commande de pause au début de cette couche." +msgstr "Insérez une commande de pause au début de cette couche." msgid "Add Custom G-code" -msgstr "Ajouter une commande personnalisée" - -msgid "Insert custom G-code at the beginning of this layer." -msgstr "Insérer des commandes personnalisées au début de cette couche." - -msgid "Add Custom Template" msgstr "Ajouter un G-code personnalisé" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "Insérez un G-code personnalisé au début de cette couche." + +msgid "Add Custom Template" +msgstr "Ajouter un Modèle Personnalisé" + msgid "Insert template custom G-code at the beginning of this layer." -msgstr "Insérer un G-code personnalisé au début de cette couche." +msgstr "Insérer un modèle de G-code personnalisé au début de cette couche." msgid "Filament " -msgstr "Filament " +msgstr "Filament" msgid "Change filament at the beginning of this layer." -msgstr "Changer de filament au début de cette couche." +msgstr "Changez le filament au début de cette couche." msgid "Delete Pause" -msgstr "Supprimer la pause" +msgstr "" msgid "Delete Custom Template" msgstr "Supprimer le modèle personnalisé" @@ -1473,28 +1474,55 @@ msgid "Delete Filament Change" msgstr "Supprimer le changement de filament" msgid "No printer" -msgstr "Aucun appareil" +msgstr "Pas d'imprimante" msgid "..." -msgstr "…" +msgstr "" + +msgid "Failed to connect to the server" +msgstr "Impossible de se connecter au serveur" + +msgid "Check cloud service status" +msgstr "Vérifiez l'état du service cloud" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Impossible de se connecter au service cloud" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Cliquez sur l'hyperlien ci-dessus pour voir l'état du service cloud" + +msgid "Failed to connect to the printer" +msgstr "Échec de la connexion à l'imprimante" + +msgid "Connection to printer failed" +msgstr "La connexion à l'imprimante a échoué" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Vérifiez la connexion réseau entre l'imprimante et Studio." + +msgid "Connecting..." +msgstr "Connexion…" msgid "?" msgstr "?" msgid "Empty" -msgstr "Vide" +msgstr "verser" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "Sauvegarde du filament de l’AMS" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS non connecté" msgid "Cali" -msgstr "Calibration" +msgstr "Calib." msgid "Calibration of extrusion" msgstr "Calibration de l'extrusion" @@ -1503,10 +1531,10 @@ msgid "Load Filament" msgstr "Charger" msgid "Unload Filament" -msgstr "Décharger" +msgstr "Déchargement" msgid "Ext Spool" -msgstr "Bobine externe" +msgstr "Bobine Ext." msgid "Tips" msgstr "Astuces" @@ -1518,7 +1546,7 @@ msgid "Retry" msgstr "Réessayer" msgid "Calibrating AMS..." -msgstr "Calibration de l'AMS..." +msgstr "Étalonnage de l'AMS..." msgid "A problem occured during calibration. Click to view the solution." msgstr "" @@ -1526,38 +1554,38 @@ msgstr "" "solution." msgid "Calibrate again" -msgstr "Calibrer à nouveau" +msgstr "Etalonner de nouveau" msgid "Cancel calibration" msgstr "Annuler la calibration" msgid "Heat the nozzle" -msgstr "Chauffe de la buse" +msgstr "Chauffer la buse" msgid "Cut filament" -msgstr "Coupe du filament" +msgstr "filament coupé" msgid "Pull back current filament" -msgstr "Retrait du filament actuel" +msgstr "Retirer le filament actuel" msgid "Push new filament into extruder" -msgstr "Insertion du nouveau filament dans l'extrudeur" +msgstr "Poussez le nouveau filament dans l'extrudeur" msgid "Purge old filament" -msgstr "Purge de l’ancien filament" +msgstr "Purger l'ancien filament" -msgid "Feed new filament from external spool" -msgstr "Insertion du nouveau filament dans l'extrudeur" +msgid "Push new filament into the extruder" +msgstr "Poussez le nouveau filament dans l'extrudeur" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirmer que le filament a été extrudé" +msgid "Grab new filament" +msgstr "Saisir un nouveau filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choisissez un emplacement de l’AMS puis appuyez sur le bouton \"Charger\" ou " -"\"Décharger\" pour charger ou décharger automatiquement le filament." +"Choisissez un emplacement AMS puis appuyez sur le bouton correspondant pour " +"Charger ou Décharger le filament." msgid "Edit" msgstr "Éditer" @@ -1566,8 +1594,8 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"Tous les objets sélectionnés sont sur un plateau verrouillé,\n" -"La disposition automatique sur ces objets n'est pas possible." +"Tous les objets sélectionnés sont sur la plaque verrouillée, nous ne pouvons " +"pas faire d'auto-arrangement sur ces objets" msgid "No arrangable objects are selected." msgstr "Aucun objet réorganisable n'est sélectionné." @@ -1576,32 +1604,32 @@ msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." msgstr "" -"Ce plateau est verrouillé,\n" -"la disposition automatique n'est pas possible." +"Cette plaque est verrouillée, nous ne pouvons pas faire d'auto-arrangement " +"sur cette plaque" msgid "Arranging..." -msgstr "Organisation…" +msgstr "Organiser..." msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Échec de l’organisation. Quelques exceptions ont été trouvées lors du " -"traitement des géométries d'objets." +"Échec de l'arrangement. Trouvé quelques exceptions lors du traitement des " +"géométries d'objets." msgid "Arranging" -msgstr "Organiser" +msgstr "Agencement" msgid "Arranging canceled." -msgstr "Organisation annulée." +msgstr "Agencement annulé." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"L’organisation est faite mais il y a des éléments non réorganisés. Réduisez " +"L'arrangement est fait mais il y a des articles non emballés. Réduisez " "l'espacement et réessayez." msgid "Arranging done." -msgstr "Organisation terminée." +msgstr "Agencement terminé." #, c-format, boost-format msgid "" @@ -1609,26 +1637,26 @@ msgid "" "bed:\n" "%s" msgstr "" -"L’organisation a ignoré les objets suivants qui ne peuvent pas tenir sur un " -"seul plateau :\n" +"L'agencement a ignoré les objets suivants qui ne peuvent pas tenir dans un " +"seul plateau :\n" "%s" msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" -"Tous les objets sélectionnés sont sur un plateau verrouillé,\n" -"l'auto-orientation sur ces objets n'est pas possible." +"Tous les objets sélectionnés sont sur la plaque verrouillée, on ne peut pas " +"faire d'auto-orientation sur ces objets" msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" -"Ce plateau est verrouillé,\n" -"l'auto-orientation n'est pas possible." +"Cette plaque est verrouillée, on ne peut pas faire d'auto-orientation sur " +"cette plaque." msgid "Orienting..." -msgstr "Orientation…" +msgstr "Orienter..." msgid "Orienting" msgstr "Orienter" @@ -1643,7 +1671,7 @@ msgid "Bed filling done." msgstr "Remplissage du plateau fait." msgid "Error! Unable to create thread!" -msgstr "Erreur ! Impossible de créer le fil !" +msgstr "Erreur! Impossible de créer le fil !" msgid "Exception" msgstr "Anomalie" @@ -1654,65 +1682,73 @@ msgstr "Connexion en cours" msgid "Login failed" msgstr "Échec d'identification" -msgid "The region parameter is incorrrect" -msgstr "Le paramètre de la région est incorrect" - -msgid "Failure of printer login" -msgstr "Échec de la connexion" - -msgid "Failed to get ticket" -msgstr "Impossible d'obtenir un ticket" - -msgid "User authorization timeout" -msgstr "Expiration de l'autorisation utilisateur" - -msgid "Failure of bind" -msgstr "Échec de liaison" - -msgid "Unknown Failure" -msgstr "Erreur inconnue" - msgid "Please check the printer network connection." -msgstr "Veuillez vérifier la connexion réseau de l'imprimante." +msgstr "Vérifiez la connexion réseau de l'imprimante." -msgid "Abnormal print file data. Please slice again" +msgid "Abnormal print file data. Please slice again." msgstr "" -"Données de fichier d'impression anormales. Veuillez redécouper le fichier" +"Données de fichier d'impression anormales, veuillez retrancher le fichier." -msgid "Task canceled" -msgstr "Tâche annulée" +msgid "Task canceled." +msgstr "Tâche annulée." -msgid "Upload task timed out. Please check the network problem and try again" +msgid "Upload task timed out. Please check the network status and try again." msgstr "" -"La tâche de téléchargement a expiré. Veuillez vérifier le réseau et réessayer" +"Le délai de téléversement de la tâche a expiré. Vérifiez l'état du réseau et " +"réessayez." msgid "Cloud service connection failed. Please try again." msgstr "La connexion au service cloud a échoué. Veuillez réessayer." -msgid "Print file not found, please slice again" -msgstr "Fichier d'impression introuvable, veuillez redécouper" +msgid "Print file not found. please slice again." +msgstr "Fichier d'impression introuvable, veuillez le retrancher." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" "Le fichier d'impression dépasse la taille maximale autorisée (1 Go). " -"Veuillez simplifier le modèle et le découper à nouveau" +"Veuillez simplifier le modèle puis le retrancher." -msgid "Failed uploading print file" -msgstr "Échec du téléchargement du fichier d'impression" +msgid "Failed to send the print job. Please try again." +msgstr "L'envoi de la tâche d'impression a échoué. Veuillez réessayer." -msgid "Wrong Access code" -msgstr "Code d'accès erroné" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Échec du téléversement du fichier vers le ftp. Veuillez réessayer." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Vérifiez l'état actuel du serveur Bambu Lab en cliquant sur le lien ci-" +"dessus." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"La taille du fichier d'impression est trop importante. Ajustez la taille du " +"fichier et réessayez." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "" +"Fichier d'impression introuvable, retranchez le et renvoyez le pour " +"impression." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Impossible de charger le fichier d'impression via FTP. Vérifiez l'état du " +"réseau et réessayez." msgid "Sending print job over LAN" -msgstr "Envoi de la tâche d'impression via le réseau local" +msgstr "Envoi de la tâche d'impression sur le réseau local" msgid "Sending print job through cloud service" msgstr "Envoi de la tâche d'impression via le service cloud" msgid "Service Unavailable" -msgstr "Service non disponible" +msgstr "Service Indisponible" msgid "Unkown Error." msgstr "Erreur inconnue." @@ -1723,28 +1759,20 @@ msgstr "Envoi de la configuration d'impression" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" -"Envoyée avec succès. Bascule automatique sur la page de l’imprimante dans %ss" +"Envoyé avec succès. Basculement automatique vers la page Appareil dans %ss" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "Une carte SD doit être insérée avant l'impression via le réseau local." - -msgid "Failed to send the print job. Please try again." -msgstr "Échec de l'envoi de la tâche d'impression. Veuillez réessayer." - -msgid "Send to Printer failed. Please try again." -msgstr "Échec de l'envoi vers l'imprimante. Veuillez réessayer." - -msgid "No space left on Printer SD card" -msgstr "Plus d’espace libre sur la carte SD de l’imprimante" +msgstr "Une carte SD doit être insérée avant d'imprimer via le réseau local." msgid "Sending gcode file over LAN" -msgstr "Envoyer un fichier gcode via le réseau local" - -msgid "Sending gcode file through cloud service" -msgstr "Envoyer un fichier gcode via le service cloud" +msgstr "Envoi d'un fichier G-code via le réseau local" msgid "Sending gcode file to sdcard" -msgstr "Envoyer un fichier gcode vers la carte SD" +msgstr "Envoi du fichier G-code sur la carte SD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" @@ -1753,23 +1781,20 @@ msgstr "Envoyé avec succès. Fermeture de la page actuelle dans %ss" msgid "An SD card needs to be inserted before sending to printer." msgstr "Une carte SD doit être insérée avant l'envoi à l'imprimante." -msgid "Please log out and login to the printer again." -msgstr "Veuillez vous déconnecter et vous reconnecter à l'imprimante." - msgid "Choose SLA archive:" -msgstr "Choisissez l’archive SLA :" +msgstr "Choisissez l'archive SLA:" msgid "Import file" msgstr "Importer un fichier" msgid "Import model and profile" -msgstr "Importer le modèle et le profil" +msgstr "Importer modèle et profil" msgid "Import profile only" -msgstr "Importer un profil uniquement" +msgstr "Importer le profil uniquement" msgid "Import model only" -msgstr "Importer un modèle uniquement" +msgstr "Importer le modèle uniquement" msgid "Accurate" msgstr "Précis" @@ -1781,14 +1806,14 @@ msgid "Quick" msgstr "Rapide" msgid "Importing SLA archive" -msgstr "Importation de l’archive SLA" +msgstr "Importation d'une archive SLA" msgid "" "The SLA archive doesn't contain any presets. Please activate some SLA " "printer preset first before importing that SLA archive." msgstr "" -"L’archive SLA ne contient aucun préréglage. Veuillez d’abord activer un " -"préréglage d’imprimante SLA avant d’importer cette archive SLA." +"L'archive SLA ne contient aucun préréglage. Veuillez d'abord activer " +"certains préréglages d'imprimante SLA avant d'importer cette archive SLA." msgid "Importing canceled." msgstr "Importation annulée." @@ -1800,7 +1825,7 @@ msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." msgstr "" -"L’archive SLA importée ne contenait aucun préréglage. Les préréglages SLA " +"L'archive SLA importée ne contenait aucun préréglage. Les préréglages SLA " "actuels ont été utilisés comme solution de secours." msgid "You cannot load SLA project with a multi-part object on the bed" @@ -1809,7 +1834,7 @@ msgstr "" "sur le plateau" msgid "Please check your object list before preset changing." -msgstr "Veuillez vérifier votre liste d’objets avant de changer de préréglage." +msgstr "Vérifiez votre liste d'objets avant de modifier le préréglage." msgid "Attention!" msgstr "Attention !" @@ -1824,37 +1849,36 @@ msgid "Cancelled" msgstr "Annulé" msgid "Install successfully." -msgstr "Installation réussie." +msgstr "Installé avec succès" msgid "Installing" -msgstr "Installation" +msgstr "Installation…" msgid "Install failed" msgstr "Échec de l'installation" msgid "Portions copyright" -msgstr "Copyright" +msgstr "Copyright des sections" msgid "Copyright" -msgstr "Copyright" +msgstr "Droits d'auteur" msgid "License" -msgstr "License" +msgstr "Longueur" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer est sous licence " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio est sous licence " msgid "GNU Affero General Public License, version 3" -msgstr "GNU Affero General Public License, version 3" +msgstr "GNU Affero Licence Publique Générale, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" -"Orca Slicer est basé sur Orca Slicer de Bambulab qui a été développé sur la " -"base de PrusaSlicer de Prusa Research, qui est lui même développé sur la " -"base de Slic3r par Alessandro Ranelucci et la communauté RepRap" +"Bambu Studio a été développé sur la base de PrusaSlicer de Prusa Research, " +"qui est lui même développé sur la base de Slic3r par Alessandro Ranelucci et " +"la communauté RepRap" msgid "Libraries" msgstr "Bibliothèques" @@ -1864,23 +1888,21 @@ msgid "" "proprietary rights belong to their respective owners" msgstr "" "Ce logiciel utilise des composants open source dont les droits d'auteur et " -"autres droits de propriété appartiennent à leurs propriétaires respectifs" +"autres droits de propriété appartiennent à leurs propriétaires respectifs." #, c-format, boost-format msgid "About %s" -msgstr "À propos de %s" +msgstr "Au sujet de %s" -msgid "Orca Slicer " -msgstr "Orca Slicer" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "Orca Slicer est basé sur BambuStudio, PrusaSlicer, et SuperSlicer." - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." -msgstr "Orca Slicer est basé sur PrusaSlicer de PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." +msgstr "" +"Bambu Studio est basé sur PrusaSlicer de PrusaResearch et SuperSlicer de " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." -msgstr "PrusaSlicer est à l'origine basé sur Slic3r d'Alessandro Ranellucci." +msgstr "PrusaSlicer est initialement basé sur Slic3r d'Alessandro Ranellucci." msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " @@ -1889,11 +1911,22 @@ msgstr "" "Slic3r a été créé par Alessandro Ranellucci avec l'aide de nombreux autres " "contributeurs." -msgid "Version" -msgstr "Version" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio a également fait référence à certaines idées de Cura par " +"Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"De nombreuses parties du logiciel proviennent de contributions de la " +"communauté. Nous ne sommes donc pas en mesure de les répertorier une par " +"une. Elles seront attribuées dans les commentaires de code correspondants." msgid "AMS Materials Setting" -msgstr "Réglage des matériaux de l'AMS" +msgstr "Réglage des matériaux AMS" msgid "Confirm" msgstr "Confirmer" @@ -1924,11 +1957,14 @@ msgstr "Numéro de série" msgid "Setting AMS slot information while printing is not supported" msgstr "" -"La configuration des informations sur l'emplacement dans l'AMS lors de " -"l'impression ne sont pas prises en charge" +"La définition des informations relatives aux emplacements AMS pendant " +"l'impression n'est pas prise en charge." -msgid "Factors of dynamic flow cali" -msgstr "Facteurs de calibration dynamique du débit" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Facteur K" @@ -1938,22 +1974,21 @@ msgstr "Facteur N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" -"La configuration des informations d’emplacement virtuel pendant l’impression " -"n’est pas prise en charge" +"Le réglage des informations relatives à l'emplacement virtuel pendant " +"l'impression n'est pas pris en charge" msgid "Are you sure you want to clear the filament information?" -msgstr "Voulez-vous vraiment effacer les informations sur le filament ?" +msgstr "Êtes-vous sûr de vouloir effacer les informations du filament ?" + +msgid "You need to select the material type and color first." +msgstr "Vous devez d'abord sélectionner le type de matériau et sa couleur." msgid "Please input a valid value (K in 0~0.5)" -msgstr "Veuillez entrer une valeur valide (K dans la plage 0~0.5)" +msgstr "Veuillez saisir une valeur valide (K entre 0 et 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" -"Veuillez entrer une valeur valide (K dans la plage 0~0.5, N dans la plage " -"0.6~2.0)" - -msgid "You need to select the material type and color first." -msgstr "Vous devez d’abord sélectionner le type de matériau et la couleur." +"Veuillez saisir une valeur valide (K entre 0 et 0,5, N entre 0,6 et 2,0)" msgid "Other Color" msgstr "Autre couleur" @@ -1962,7 +1997,7 @@ msgid "Custom Color" msgstr "Couleur perso" msgid "Dynamic flow calibration" -msgstr "Calibration dynamique du débit" +msgstr "Calibrage dynamique du débit" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " @@ -1970,27 +2005,27 @@ msgid "" "auto-filled by selecting a filament preset." msgstr "" "La température de la buse et la vitesse volumétrique maximale affecteront " -"les résultats de la calibration. Veuillez remplir les mêmes valeurs qu’en " -"impression réelle. Elles peuvent être remplis automatiquement en " +"les résultats de la calibration. Veuillez saisir les mêmes valeurs que lors " +"de l'impression réelle. Ils peuvent être remplis automatiquement en " "sélectionnant un préréglage de filament." msgid "Nozzle Diameter" -msgstr "Diamètre de la buse" +msgstr "Diamètre de la Buse" msgid "Bed Type" -msgstr "Type du plateau" +msgstr "Type de plaque" msgid "Nozzle temperature" msgstr "Température de la buse" msgid "Bed Temperature" -msgstr "Température du plateau" +msgstr "Température du lit" msgid "Max volumetric speed" msgstr "Vitesse volumétrique maximale" msgid "℃" -msgstr "℃" +msgstr "" msgid "Bed temperature" msgstr "Température du plateau" @@ -2009,32 +2044,32 @@ msgid "" "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Calibration terminée. Veuillez trouver la ligne d’extrusion la plus uniforme " -"sur votre plateau comme l’image ci-dessous, et remplissez la valeur sur son " -"côté gauche dans la zone de saisie du facteur K." +"Calibrage terminé. Veuillez trouver la ligne d'extrusion la plus uniforme " +"sur votre lit chaud comme dans l'image ci-dessous, et entrez la valeur sur " +"son côté gauche dans le champ de saisie du facteur K." msgid "Save" -msgstr "Sauvegarder" +msgstr "Enregistrer" msgid "Last Step" -msgstr "Dernière étape" +msgstr "Retour" msgid "Example" msgstr "Exemple" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "Calibration… %d%%" +msgstr "Calibration...%d%%" msgid "Calibration completed" -msgstr "Calibration terminée" +msgstr "Calibration terminé" #, c-format, boost-format msgid "%s does not support %s" msgstr "%s ne prend pas en charge %s" msgid "Dynamic flow Calibration" -msgstr "Calibration dynamique du débit" +msgstr "Calibrage dynamique du débit" msgid "Step" msgstr "Étape" @@ -2045,45 +2080,42 @@ msgstr "Emplacements AMS" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Remarque : Seuls les emplacements dans l’AMS chargés avec le même type de " -"filament peuvent être sélectionnés." +"Remarque : seuls les emplacements AMS chargés avec le même type de matériau " +"peuvent être sélectionnés." msgid "Enable AMS" msgstr "Activer l'AMS" msgid "Print with filaments in the AMS" -msgstr "" -"Imprimer avec les filaments\n" -"dans l'AMS" +msgstr "Imprimer avec du filament de l'AMS" msgid "Disable AMS" msgstr "Désactiver l'AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "" -"Imprimer avec le filament placé\n" -"à l'arrière du châssis" +msgstr "Impression avec du filament de la bobine externe" msgid "Cabin humidity" -msgstr "Humidité dans l’AMS" +msgstr "Humidité dans l'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 "" -"Vert signifie que l’humidité dans l’AMS est normale, orange représente une " -"humidité élevée, rouge représente une humidité trop élevée. (Hygromètre : un " -"niveau bas est meilleur, les barres : un niveau haut est meilleur)" +"Le vert signifie que l'humidité de l'AMS est normale, l'orange signifie que " +"l'humidité est élevée et le rouge signifie que l'humidité est trop élevée. " +"(Hygromètre : plus c'est bas, mieux c'est.)" msgid "Desiccant status" -msgstr "Statut des déshydrateurs" +msgstr "État du déshydratant" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " "inactive. Please change the desiccant.(The bars: higher the better.)" msgstr "" -"Un état du déshydrateur inférieur à deux barres indique qu’il est peut-être " -"inactif. Veuillez le remplacer. (Plus le niveau haut, mieux c’est)" +"Un état du dessicant inférieur à deux barres indique que le dessicant est " +"peut-être inactif. Veuillez changer le déshydratant. (Plus c'est élevé, " +"mieux c'est.)" msgid "" "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -2091,55 +2123,65 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"Remarque : Lorsque le couvercle est ouvert ou que le sachet déshydrateur est " -"remplacé, cela peut prendre plusieurs heures ou une nuit pour absorber " -"l’humidité. Les basses températures ralentissent également le processus. " -"Pendant ce temps, l’indicateur peut ne pas représenter l’état avec précision." +"Remarque: Lorsque le couvercle est ouvert ou que le sachet de dessicant est " +"changé, cela peut prendre plusieurs heures ou une nuit pour absorber " +"l'humidité. Les basses températures ralentissent également le processus. " +"Pendant ce temps, l'indicateur pourrait ne pas representer l'humidité dans " +"l'AMS avec précision." msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Configurer le ou les emplacements utilisés dans l’AMS pour un ou des " -"filaments utilisés pour cette impression" +"Configurez l'emplacement AMS qui doit être utilisé pour un filament utilisé " +"dans la tâche d'impression." msgid "Filament used in this print job" -msgstr "Filament utilisé dans cette tâche d'impression" +msgstr "Filament utilisé dans ce travail d'impression" msgid "AMS slot used for this filament" -msgstr "Emplacement utilisé dans l’AMS pour ce filament" +msgstr "Emplacement AMS utilisé pour ce filament" msgid "Click to select AMS slot manually" -msgstr "Cliquez pour sélectionner manuellement l'emplacement" +msgstr "Cliquez pour sélectionner manuellement l'emplacement AMS" msgid "Do not Enable AMS" msgstr "Ne pas activer l'AMS" msgid "Print using materials mounted on the back of the case" -msgstr "Imprimer avec le filament placé à l'arrière du châssis" +msgstr "Imprimez en utilisant le filament de la bobine externe." msgid "Print with filaments in ams" -msgstr "Imprimer avec les filaments dans l'AMS" +msgstr "Imprimer avec du filament de l'AMS" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Imprimer avec le filament placé à l'arrière du châssis" +msgstr "Impression avec du filament de la bobine externe" -msgid "Filaments replace" -msgstr "Remplacement des filaments" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Groupe" +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 "" + msgid "AMS Settings" -msgstr "Paramètres de l’AMS" +msgstr "Paramètres AMS" msgid "Insertion update" -msgstr "Mise à jour à l’insertion" +msgstr "Insertion de la mise à jour" msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"L'AMS lira automatiquement les informations relatives au filament lors de " +"L'AMS lit automatiquement les informations relatives au filament lors de " "l'insertion d'une nouvelle bobine de filament Bambu Lab. Cela prend environ " "20 secondes." @@ -2148,26 +2190,26 @@ msgid "" "automatically read any information until printing is completed." msgstr "" "Remarque : si un nouveau filament est inséré pendant l'impression, l'AMS ne " -"lira les informations qu'à la fin de l'impression." +"lira automatiquement aucune information avant la fin de l'impression." msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" -"Lors de l'insertion d'un nouveau filament, l'AMS ne lira pas automatiquement " -"ses informations, les laissant vides pour que vous les saisissiez " -"manuellement." +"Lors de l'insertion d'un nouveau filament, l'AMS ne lit pas automatiquement " +"ses informations. Elles sont laissées vides pour que vous puissiez les " +"saisir manuellement." msgid "Power on update" -msgstr "Mise à jour au démarrage" +msgstr "Mise à jour de la mise sous tension" 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 "" -"Au démarrage, l'AMS lira automatiquement les informations relatives aux " -"filaments insérés. Cela prend environ 1 minute et ce processus fait tourner " +"Au démarrage, l'AMS lit automatiquement les informations relatives au " +"filament inséré. Cela prend environ 1 minute et ce processus fait tourner " "les bobines de filament." msgid "" @@ -2175,12 +2217,12 @@ msgid "" "during startup and will continue to use the information recorded before the " "last shutdown." msgstr "" -"L'AMS ne lira pas automatiquement les informations des filaments insérés " -"lors du démarrage et continuera à utiliser les informations enregistrées " +"L'AMS ne lira pas automatiquement les informations du filament inséré " +"pendant le démarrage et continuera à utiliser les informations enregistrées " "avant le dernier arrêt." msgid "Update remaining capacity" -msgstr "Mise à jour de la capacité restante" +msgstr "Mettre à jour la capacité restante" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " @@ -2188,21 +2230,21 @@ msgid "" "automatically." msgstr "" "L'AMS estimera la capacité restante du filament Bambu après la mise à jour " -"des informations sur le filament. Pendant l'impression, la capacité restante " -"sera mise à jour automatiquement." +"des infos du filament. Pendant l'impression, la capacité restante sera " +"automatiquement mise à jour." msgid "AMS filament backup" -msgstr "Sauvegarde du filament dans l’AMS" +msgstr "Filament de secours AMS" msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" -"L'AMS continuera automatiquement vers une autre bobine de filament avec les " -"mêmes propriétés lorsque la bobine utilisée est terminée" +"L'AMS passera automatiquement à une autre bobine avec les mêmes propriétés " +"de filament lorsque la bobine actuelle est épuisé." msgid "File" -msgstr "Fichier" +msgstr "Dossier" msgid "Calibration" msgstr "Calibration" @@ -2212,47 +2254,46 @@ msgid "" "software, check and retry." msgstr "" "Échec du téléchargement du plug-in. Veuillez vérifier les paramètres de " -"votre pare-feu et de votre logiciel VPN, puis réessayez." +"votre pare-feu et votre logiciel VPN puis réessayer." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Échec de l'installation du plug-in. Veuillez vérifier s'il n'a pas été " -"bloqué ou supprimé par un logiciel antivirus." +"Échec de l'installation du plug-in. Veuillez vérifier s'il est bloqué ou " +"s'il a été supprimé par un logiciel anti-virus." msgid "click here to see more info" msgstr "cliquez ici pour voir plus d'informations" msgid "Please home all axes (click " -msgstr "Veuillez mettre en Home tous les axes (cliquez sur " +msgstr "Veuillez mettre à 0 les axes (cliquer " msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -") pour localiser la position de la tête d'outil. Cela empêche l’imprimante " -"de se déplacer au-delà de la limite imprimable et d'entraîner l'usure de " -"l'équipement." +") pour localiser la position de la tête. Cela éviter de dépasser la limite " +"imprimable et de provoquer une usure de l'équipement." msgid "Go Home" -msgstr "Home" +msgstr "Retour 0" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"Une erreur s'est produite. Il est possible que la mémoire du système ne soit " -"pas suffisante ou que ce soit un bug du programme" +"Une erreur s'est produite. Peut-être que la mémoire du système n'est pas " +"suffisante ou c'est un bug du programme" msgid "Please save project and restart the program. " -msgstr "Veuillez enregistrer le projet et redémarrer le programme. " +msgstr "Veuillez enregistrer le projet et redémarrer le programme." msgid "Processing G-Code from Previous file..." -msgstr "Traitement G-Code du fichier précédent..." +msgstr "Traitement du G-Code du fichier précédent..." msgid "Slicing complete" -msgstr "Découpage terminé" +msgstr "Découpe terminée" msgid "Access violation" msgstr "Violation d'accès" @@ -2267,13 +2308,13 @@ msgid "Overflow" msgstr "Débordement" msgid "Underflow" -msgstr "Sous-dépassement" +msgstr "Soupassement" msgid "Floating reserved operand" -msgstr "Opérande réservé flottant" +msgstr "Opérande réservée flottante" msgid "Stack overflow" -msgstr "Stack overflow" +msgstr "Débordement de pile" msgid "Unknown error when export G-code." msgstr "Erreur inconnue lors de l'exportation du G-code." @@ -2284,25 +2325,24 @@ msgid "" "Error message: %1%.\n" "Source file %2%." msgstr "" -"Échec de l'enregistrement du fichier gcode.\n" -"Message d'erreur : %1%. \n" -"Fichier source %2%." +"Échec de l'enregistrement du fichier gcode. Message d'erreur : %1%. Fichier " +"source %2%." #, boost-format msgid "Succeed to export G-code to %1%" -msgstr "G-code exporté avec succès vers %1%" +msgstr "Succès! G-code exporté vers %1%" msgid "Running post-processing scripts" msgstr "Exécution de scripts de post-traitement" msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué" +msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué." #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -"Planification du téléchargement vers `%1%`. Voir Fenêtre -> Imprimer la file " -"d'attente de téléchargement de l'hôte" +"Planification du téléversement vers `%1% `. Voir Fenêtre -> File d'attente " +"de téléversement de l'hôte d'impression" msgid "Origin" msgstr "Origine" @@ -2317,7 +2357,7 @@ msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -"Distance de la coordonnée 0,0 du G-code à partir du coin avant gauche du " +"Distance des coordonnées 0,0 du G-code depuis le coin avant gauche du " "rectangle." msgid "" @@ -2328,16 +2368,16 @@ msgstr "" "située au centre." msgid "Rectangular" -msgstr "Rectangulaire" +msgstr "Rectangle" msgid "Circular" msgstr "Circulaire" msgid "Custom" -msgstr "Personnalisée" +msgstr "Personnalisé" msgid "Load shape from STL..." -msgstr "Charger la forme depuis un STL..." +msgstr "Charger une forme depuis un STL..." msgid "Settings" msgstr "Réglages" @@ -2346,19 +2386,20 @@ msgid "Texture" msgstr "Texture" msgid "Remove" -msgstr "Supprimer" +msgstr "Retirer" msgid "Not found:" -msgstr "Non trouvé:" +msgstr "Introuvable:" msgid "Model" msgstr "Modèle" msgid "Choose an STL file to import bed shape from:" -msgstr "Choisissez un fichier STL pour importer une forme de plateau :" +msgstr "" +"Choisissez un fichier STL à partir duquel importer la forme du plateau :" msgid "Invalid file format." -msgstr "Format de fichier invalide." +msgstr "Format de fichier non valide." msgid "Error! Invalid model" msgstr "Erreur ! Modèle invalide" @@ -2369,14 +2410,15 @@ msgstr "Le fichier sélectionné ne contient aucune géométrie." msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -"Le fichier sélectionné contient plusieurs zones disjointes. Ceci n'est pas " -"pris en charge." +"Le fichier sélectionné contient plusieurs zones disjointes. Cela n'est pas " +"utilisable." msgid "Choose a file to import bed texture from (PNG/SVG):" -msgstr "Choisissez un fichier pour importer une texture de plateau (PNG/SVG) :" +msgstr "" +"Choisir un fichier à partir duquel importer la texture du plateau (PNG/SVG) :" msgid "Choose an STL file to import bed model from:" -msgstr "Choisissez un fichier STL pour importer un modèle de plateau :" +msgstr "Choisissez un fichier STL à partir duquel importer le modèle de lit :" msgid "Bed Shape" msgstr "Forme du plateau" @@ -2386,9 +2428,9 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"La buse peut être bouchée lorsque la température est hors de la plage " +"La buse peut être bloquée lorsque la température est hors de la plage " "recommandée.\n" -"Veuillez vous assurer d'utiliser la température adéquate pour imprimer.\n" +"Veuillez vous assurer d'utiliser la température pour imprimer.\n" #, c-format, boost-format msgid "" @@ -2405,9 +2447,8 @@ msgid "" "This may cause model broken free from build plate during printing" msgstr "" "La température du plateau des autres couches est inférieure à la température " -"du plateau de la couche initiale de plus de %d degrés.\n" -"Cela peut entraîner le décollement du modèle sur le plateau pendant " -"l'impression" +"du plateau de la couche initiale de plus de %d degrés. Cela peut entraîner " +"la séparation du modèle du plateau pendant l'impression" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" @@ -2415,41 +2456,42 @@ msgid "" "Please keep the printer open during the printing process to ensure air " "circulation or reduce the temperature of the hot bed" msgstr "" -"La température du plateau est supérieure à la température de vitrification " -"de ce filament.\n" -"Cela peut entraîner le bouchage de la buse et l'échec de l'impression.\n" -"Veuillez garder l'imprimante ouverte pendant le processus d'impression pour " -"assurer la circulation de l'air ou réduire la température du plateau" +"La température du lit est supérieure à la température de vitrification de ce " +"filament.\n" +"Cela peut provoquer un blocage de la buse et une défaillance de " +"l'impression.\n" +"Veuillez laisser l'imprimante ouverte pendant le processus d'impression afin " +"de garantir la circulation de l'air ou de réduire la température du plateau." msgid "" "Too small max volumetric speed.\n" "Reset to 0.5" msgstr "" -"Vitesse volumétrique maximale trop petite.\n" -"Réinitialiser à 0.5" +"Vitesse volumétrique maximale trop faible.\n" +"La valeur a été réinitialisée à 0,5" msgid "" "Too small layer height.\n" "Reset to 0.2" -msgstr "" -"Hauteur de couche trop petite.\n" -"Réinitialiser à 0.2" +msgstr "Hauteur de couche trop petite. Réinitialiser à 0,2" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "Hauteur de couche trop grande. Réinitialiser à 0,2" msgid "" "Too small ironing spacing.\n" "Reset to 0.1" -msgstr "" -"Espacement de lissage trop petit.\n" -"Réinitialiser à 0.1" +msgstr "Espacement de repassage trop petit. Réinitialiser à 0.1" msgid "" "Zero initial layer height is invalid.\n" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Une hauteur de couche initiale nulle n'est pas valide.\n" -"\n" -"La hauteur de la première couche sera réinitialisée à 0.2." +"La hauteur de couche initiale nulle n'est pas valide. La hauteur de la " +"première couche sera réinitialisée à 0,2." msgid "" "This setting is only used for model size tunning with small value in some " @@ -2460,13 +2502,10 @@ msgid "" "The value will be reset to 0." msgstr "" "Ce paramètre n'est utilisé que pour le réglage de la taille du modèle avec " -"une petite valeur dans certains cas.\n" -"Par exemple, lorsque la taille du modèle présente une petite erreur et est " -"difficile à assembler.\n" -"Pour un réglage de grande taille, veuillez utiliser la fonction d'échelle de " -"modèle.\n" -"\n" -"La valeur sera réinitialisée à 0." +"une petite valeur dans certains cas. Par exemple, lorsque la taille du " +"modèle présente une petite erreur et est difficile à assembler. Pour un " +"réglage de grande taille, veuillez utiliser la fonction d'échelle de modèle. " +"La valeur sera remise à 0." msgid "" "Too large elefant foot compensation is unreasonable.\n" @@ -2475,29 +2514,28 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Une trop grande compensation du pied d'éléphant est déraisonnable.\n" -"Si vous avez vraiment un effet de pied d'éléphant sérieux, veuillez vérifier " -"d'autres paramètres.\n" -"Par exemple, si la température du plateau est trop élevée.\n" -"\n" -"La valeur sera réinitialisée à 0." +"Une trop grande compensation du pied d'éléphant est déraisonnable. Si vous " +"avez vraiment un effet de pied d'éléphant sérieux, veuillez vérifier " +"d'autres paramètres. Par exemple, si la température du lit est trop élevée. " +"La valeur sera remise à 0." msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Le mode vase ne fonctionne que lorsque le nombre de paroi est définie à 1, " -"le nombre de couches supérieures à 0, la densité de remplissage à 0% et le " -"type de timelapse sur Traditionnel." +"Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'un seul mur, les " +"supports sont désactivés, que les couches supérieures de la coque sont à 0, " +"qu'il n'y a pas de remplissage et que le type timelapse est traditionnel" msgid "" "Change these settings automatically? \n" "Yes - Change these settings and enable spiral mode automatically\n" "No - Give up using spiral mode this time" msgstr "" -"Modifier ces paramètres automatiquement ?\n" -"Oui - Modifier ces paramètres et activer automatiquement le mode vase\n" -"Non - Abandonner l'utilisation du mode vase" +"Modifier ces paramètres automatiquement ? \n" +"Oui - Modifiez ces paramètres et activez automatiquement le mode spirale/" +"vase\n" +"Non - Annuler l'activation du mode spirale" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -2506,10 +2544,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"La tour de purge ne fonctionne pas lorsque la hauteur de couche adaptative " -"ou la hauteur de couche de support indépendante est activée.\n" -"Voulez-vous conserver la tour de purge ?\n" -"OUI - Conserver la tour de purge\n" +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de couche " +"adaptative ou la hauteur de couche de support indépendante est activée. \n" +"Que souhaitez-vous conserver ? \n" +"OUI - Conserver la tour de nettoyage \n" "NON - Conserver la hauteur de la couche adaptative et la hauteur de la " "couche de support indépendante" @@ -2519,10 +2557,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"La tour de purge ne fonctionne pas lorsque la hauteur de couche adaptative " -"est activée.\n" -"Voulez-vous conserver la tour de purge ?\n" -"OUI - Conserver la tour de purge\n" +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de couche " +"adaptative est activée. \n" +"Que souhaitez-vous conserver ? \n" +"OUI - Conserver la tour de nettoyage \n" "NON - Conserver la hauteur de la couche adaptative" msgid "" @@ -2531,11 +2569,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"La tour de purge ne fonctionne pas lorsque la hauteur de la couche de " +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de la couche de " "support indépendante est activée.\n" -"Voulez-vous conserver la tour de purge ?\n" -"OUI - Conserver la tour de purge\n" -"NON - Conserver la hauteur de la couche de support indépendante" +"Que souhaitez-vous conserver ?\n" +"OUI - Garder la tour de nettoyage\n" +"NON - Gardez la hauteur de la couche de support indépendante" #, boost-format msgid "%1% infill pattern doesn't support 100%% density." @@ -2547,26 +2585,26 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly" msgstr "" -"Basculer vers le motif rectiligne ?\n" -"Oui - Basculer vers le motif rectiligne\n" -"Non - Réinitialiser automatiquement la densité par défaut" +"Passer à un motif rectiligne ?\n" +"Oui - Passez automatiquement au modèle rectiligne\n" +"Non - Réinitialise automatiquement la densité à la valeur par défaut" msgid "" "While printing by Object, the extruder may collide skirt.\n" "Thus, reset the skirt layer to 1 to avoid that." msgstr "" -"Lors de l’impression par objet, la hotend peut entrer en collision avec la " -"jupe.\n" -"Réinitialisez le nombre de couche de la jupe à 1 pour éviter cela." +"Lors de l'impression par objet, l'extrudeur peut entrer en collision avec " +"une jupe.\n" +"Il faut donc remettre la couche de la jupe à 1 pour éviter les collisions." msgid "Auto bed leveling" -msgstr "Nivellement automatique" +msgstr "Niveau de plateau automatique" msgid "Heatbed preheating" -msgstr "Préchauffage du plateau" +msgstr "Préchauffage du plateau chauffant" msgid "Sweeping XY mech mode" -msgstr "Mode mécanique de balayage X-Y" +msgstr "Mesure fréquence axes XY" msgid "Changing filament" msgstr "Changement de filament" @@ -2575,16 +2613,16 @@ msgid "M400 pause" msgstr "Pause M400" msgid "Paused due to filament runout" -msgstr "Mise en pause en raison d'un manque de filament" +msgstr "Pause en raison d'un manque de filament" msgid "Heating hotend" msgstr "Préchauffage de la buse" msgid "Calibrating extrusion" -msgstr "Calibration de l'extrusion" +msgstr "Étalonnage de l'extrusion" msgid "Scanning bed surface" -msgstr "Analyse de la surface du plateau" +msgstr "Balayage de la surface du plateau" msgid "Inspecting first layer" msgstr "Inspection de la première couche" @@ -2593,10 +2631,10 @@ msgid "Identifying build plate type" msgstr "Identification du type de plateau" msgid "Calibrating Micro Lidar" -msgstr "Calibration du Micro Lidar" +msgstr "Calibrage du Micro-Lidar" msgid "Homing toolhead" -msgstr "Positionnement en Home" +msgstr "Tête d'outil de guidage" msgid "Cleaning nozzle tip" msgstr "Nettoyage de la buse" @@ -2605,24 +2643,23 @@ msgid "Checking extruder temperature" msgstr "Vérification de la température de l'extrudeur" msgid "Printing was paused by the user" -msgstr "L'impression a été suspendue par l'utilisateur" +msgstr "L’impression a été suspendue par l’utilisateur" msgid "Pause of front cover falling" -msgstr "Mise en pause en raison de la chute du capot" +msgstr "Pause de la chute de la couverture avant" msgid "Calibrating the micro lida" -msgstr "Calibration du Micro Lidar" +msgstr "Calibrage du micro-Lidar" msgid "Calibrating extrusion flow" -msgstr "Calibration du débit d'extrusion" +msgstr "Calibrage du débit d'extrusion" msgid "Paused due to nozzle temperature malfunction" -msgstr "" -"Mise en pause en raison d'un dysfonctionnement de la température de la buse" +msgstr "Pause en raison d'un dysfonctionnement de la température de la buse" msgid "Paused due to heat bed temperature malfunction" msgstr "" -"Mise en pause en raison d'un dysfonctionnement de la température du plateau" +"Pause en raison d'un dysfonctionnement de la température du plateau chauffant" msgid "MC" msgstr "MC" @@ -2637,10 +2674,10 @@ msgid "XCam" msgstr "XCam" msgid "Unknown" -msgstr "Inconnue" +msgstr "Inconnu" msgid "Fatal" -msgstr "Fatal" +msgstr "Mortel" msgid "Serious" msgstr "Sérieux" @@ -2661,7 +2698,29 @@ msgid "Update failed." msgstr "Mise à jour a échoué." msgid "Failed to start printing job" -msgstr "Échec du démarrage de la tâche d'impression" +msgstr "Échec du lancement de la tâche d'impression" + +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" msgid "default" msgstr "défaut" @@ -2670,7 +2729,7 @@ msgid "parameter name" msgstr "nom du paramètre" msgid "N/A" -msgstr "N/A" +msgstr "N / A" #, c-format, boost-format msgid "%s can't be percentage" @@ -2681,7 +2740,7 @@ msgid "Value %s is out of range, continue?" msgstr "La valeur %s est hors plage, continuer ?" msgid "Parameter validation" -msgstr "Validation des paramètres" +msgstr "Validation du paramètre" msgid "Value is out of range." msgstr "La valeur est hors plage." @@ -2691,17 +2750,14 @@ msgid "" "Is it %s%% or %s %s?\n" "YES for %s%%, \n" "NO for %s %s." -msgstr "" -"Est-ce %s%% ou %s %s ?\n" -"OUI pour %s%%, \n" -"NON pour %s %s." +msgstr "Est-ce %s%% ou %s %s ? OUI pour %s%%, NON pour %s %s." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format invalide. Format vectoriel attendu : \"%1%\"" msgid "Layer Height" -msgstr "Hauteur de couche" +msgstr "Hauteur de la couche" msgid "Line Width" msgstr "Largeur de ligne" @@ -2713,16 +2769,13 @@ msgid "Temperature" msgstr "Température" msgid "Flow" -msgstr "Débit" +msgstr "Flux" msgid "Tool" msgstr "Outil" msgid "Layer Time" -msgstr "Durée de couche" - -msgid "Layer Time (log)" -msgstr "Durée de couche (log)" +msgstr "Temps de couche" msgid "Height: " msgstr "Hauteur: " @@ -2737,16 +2790,16 @@ msgid "Flow: " msgstr "Débit: " msgid "Layer Time: " -msgstr "Durée de couche:" +msgstr "Temps de couche:" msgid "Fan Speed: " -msgstr "Vitesse du ventilateur: " +msgstr "Vitesse du ventilateur:" msgid "Temperature: " -msgstr "Température: " +msgstr "Température:" msgid "Loading G-codes" -msgstr "Chargement des G-codes" +msgstr "Chargement des codes G" msgid "Generating geometry vertex data" msgstr "Génération de données de sommet de géométrie" @@ -2755,7 +2808,7 @@ msgid "Generating geometry index data" msgstr "Génération de données d'index de géométrie" msgid "Statistics of All Plates" -msgstr "Statistiques de tous les plateaux" +msgstr "Statistiques de toutes les plaques" msgid "Display" msgstr "Afficher" @@ -2767,7 +2820,7 @@ msgid "Total" msgstr "Total" msgid "Total Time Estimation" -msgstr "Estimation totale" +msgstr "Estimation du temps total" msgid "Total time" msgstr "Durée totale" @@ -2776,7 +2829,7 @@ msgid "up to" msgstr "jusqu'à" msgid "above" -msgstr "au dessus" +msgstr "au-dessus" msgid "from" msgstr "de" @@ -2788,7 +2841,7 @@ msgid "Time" msgstr "Durée" msgid "Percent" -msgstr "%" +msgstr "Pour cent" msgid "Layer Height (mm)" msgstr "Hauteur de couche (mm)" @@ -2808,38 +2861,41 @@ msgstr "Température (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Débit volumétrique (mm³/s)" +msgid "Layer Time (s)" +msgstr "Durée de couche (s)" + msgid "Used filament" msgstr "Filament utilisé" msgid "Travel" -msgstr "Déplacements" +msgstr "Déplacement" msgid "Seams" msgstr "Coutures" msgid "Retract" -msgstr "Rétraction" +msgstr "Se rétracter" msgid "Unretract" -msgstr "Réinsertion" +msgstr "Annuler le retrait" msgid "Filament Changes" msgstr "Changements de filaments" msgid "Wipe" -msgstr "Essuyage" +msgstr "Nettoyer" msgid "Options" -msgstr "Options" +msgstr "Choix" msgid "travel" -msgstr "déplacements" +msgstr "Déplacement" msgid "Extruder" -msgstr "Hotend" +msgstr "Extrudeur" msgid "Filament change times" -msgstr "Durée de changement de filament" +msgstr "Temps de changement de filament" msgid "Cost" msgstr "Coût" @@ -2848,7 +2904,7 @@ msgid "Color change" msgstr "Changement de couleur" msgid "Print" -msgstr "Impression" +msgstr "Imprimer" msgid "Pause" msgstr "Pause" @@ -2857,22 +2913,22 @@ msgid "Printer" msgstr "Imprimante" msgid "Print settings" -msgstr "Paramètres d'impression" +msgstr "Réglages d'impression" msgid "Total Estimation" msgstr "Estimation totale" msgid "Time Estimation" -msgstr "Durée estimée" +msgstr "Estimation de temps" msgid "Normal mode" msgstr "Mode normal" msgid "Prepare time" -msgstr "Durée de préparation" +msgstr "Temps de préparation" msgid "Model printing time" -msgstr "Durée d'impression du modèle" +msgstr "Temps d'impression du modèle" msgid "Switch to silent mode" msgstr "Passer en mode silencieux" @@ -2884,64 +2940,64 @@ msgid "Variable layer height" msgstr "Hauteur de couche variable" msgid "Adaptive" -msgstr "Adaptatives" +msgstr "Adaptatif" msgid "Quality / Speed" msgstr "Qualité / Vitesse" msgid "Smooth" -msgstr "Lissé" +msgstr "Lisse" msgid "Radius" msgstr "Rayon" msgid "Keep min" -msgstr "Conserver le minimum" +msgstr "Garder min" msgid "Left mouse button:" -msgstr "Bouton gauche de la souris:" +msgstr "Bouton gauche de la souris :" msgid "Add detail" -msgstr "Ajouter un détail" +msgstr "Ajouter Détail" msgid "Right mouse button:" -msgstr "Bouton droit de la souris:" +msgstr "Bouton droit de la souris :" msgid "Remove detail" -msgstr "Supprimer un détail" +msgstr "Supprimer détail" msgid "Shift + Left mouse button:" -msgstr "Maj + Bouton gauche de la souris:" +msgstr "Maj + bouton gauche de la souris :" msgid "Reset to base" -msgstr "Réinitialiser" +msgstr "Revenir de base" msgid "Shift + Right mouse button:" -msgstr "Maj + Bouton droit de la souris:" +msgstr "Maj + bouton droit de la souris:" msgid "Smoothing" -msgstr "Lisser" +msgstr "Lissage" msgid "Mouse wheel:" -msgstr "Molette de la souris:" +msgstr "Molette de la souris :" msgid "Increase/decrease edit area" -msgstr "Augmenter/Diminuer la zone d'édition" +msgstr "Augmenter/diminuer la zone d'édition" msgid "Sequence" msgstr "Séquence" msgid "Mirror Object" -msgstr "Objet miroir" +msgstr "Symétriser l'Objet" msgid "Tool Move" -msgstr "Déplacements de l'outil" +msgstr "Déplacement d'outil" msgid "Tool Rotate" -msgstr "Rotation de l’outil" +msgstr "Rotation de l'outil" msgid "Move Object" -msgstr "Déplacer l'objet" +msgstr "Déplacer l'Objet" msgid "Auto Orientation options" msgstr "Options d'orientation automatique" @@ -2956,84 +3012,84 @@ msgid "Orient" msgstr "Orienter" msgid "Arrange options" -msgstr "Options d'organisation" +msgstr "Options d'agencement" msgid "Spacing" msgstr "Espacement" msgid "Auto rotate for arrangement" -msgstr "Rotation automatique lors de l’organisation" +msgstr "Rotation automatique pour l'arrangement" msgid "Allow multiple materials on same plate" -msgstr "Autoriser plusieurs matériaux sur le même plateau" +msgstr "Autoriser plusieurs matériaux sur la même plaque" msgid "Avoid extrusion calibration region" -msgstr "Éviter la zone de calibration de l'extrusion" +msgstr "Éviter la région de calibration de l'extrusion" msgid "Add" msgstr "Ajouter" msgid "Add plate" -msgstr "Ajouter un plateau" +msgstr "Ajouter une plaque" msgid "Auto orient" msgstr "Orientation automatique" msgid "Arrange all objects" -msgstr "Organiser tous les objets" +msgstr "Disposer tous les objets" msgid "Arrange objects on selected plates" -msgstr "Organiser les objets sur les plateaux sélectionnés" +msgstr "Disposer les objets sur les plaques sélectionnées" msgid "Split to objects" -msgstr "Diviser en objets" +msgstr "Diviser en objets individuels" msgid "Split to parts" -msgstr "Diviser en parties" +msgstr "Scinder en pièces" msgid "Assembly View" msgstr "Vue de l'assemblage" msgid "Select Plate" -msgstr "Sélectionner le plateau" +msgstr "Sélectionner la plaque" msgid "Assembly Return" msgstr "Retour d'assemblage" msgid "return" -msgstr "retour" +msgstr "Retour" msgid "Paint Toolbar" msgstr "Barre d'outils de peinture" msgid "Explosion Ratio" -msgstr "Ratio d'explosion" +msgstr "Taux d'explosion" msgid "Section View" msgstr "Vue en coupe" msgid "Assemble Control" -msgstr "Contrôle de l'assemblage" +msgstr "Contrôle de l'Assemblage" msgid "Total Volume:" -msgstr "Volume total :" +msgstr "Volume total:" msgid "Assembly Info" msgstr "Informations sur l'assemblage" msgid "Volume:" -msgstr "Volume :" +msgstr "Le volume:" msgid "Size:" -msgstr "Taille :" +msgstr "Taille:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" -"Des conflits de chemins G-code ont été trouvés au niveau de la couche %d, z " -"= %.2lf mm. Veuillez séparer davantage les objets en conflit (%s <-> %s)." +"Des conflits de trajet dans le G-code sur la couche %d ont été détectés. " +"Veuillez séparer davantage les objets en conflit (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Un objet est posé sur la limite du plateau." @@ -3042,7 +3098,7 @@ msgid "A G-code path goes beyond the max print height." msgstr "" msgid "A G-code path goes beyond the boundary of plate." -msgstr "Un chemin du G-code va au-delà de la limite du plateau." +msgstr "Un chemin de code G va au-delà de la limite de la plaque" msgid "Only the object being edit is visible." msgstr "Seul l'objet en cours d'édition est visible." @@ -3052,19 +3108,19 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"Un objet est posé sur la limite du plateau ou dépasse la limite de hauteur.\n" -"Veuillez résoudre le problème en le déplaçant totalement sur ou en dehors du " -"plateau et en vous assurant que la hauteur ne dépasse pas le volume " -"d’impression." +"Un objet est posé sur la limite de la plaque ou dépasse la limite de " +"hauteur.\n" +"Veuillez résoudre le problème en le déplaçant totalement sur ou hors du " +"plateau, et en confirmant que la hauteur entre dans le volume d'impression." msgid "Calibration step selection" -msgstr "Sélection des étapes de calibration" +msgstr "Sélection de l'étape de calibration" msgid "Micro lidar calibration" -msgstr "Calibration du Micro Lidar" +msgstr "Calibration du Micro-Lidar" msgid "Bed leveling" -msgstr "Nivellement du plateau" +msgstr "Mise à niveau du lit" msgid "Resonance frequency identification" msgstr "Identification de la fréquence de résonance" @@ -3077,33 +3133,33 @@ msgid "" "minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"Le processus de calibration détecte automatiquement l'état de votre " -"imprimante pour minimiser les écarts. Il permet à l’imprimante de " -"fonctionner de manière optimale." +"Le processus de calibration détecte automatiquement l'état de votre appareil " +"pour minimiser les écarts. Il permet à l'appareil de fonctionner de manière " +"optimale." msgid "Calibration Flow" -msgstr "Calibration du débit" +msgstr "Calibration débit" msgid "Start Calibration" -msgstr "Démarrer" +msgstr "Démarrer la calibration" msgid "Completed" msgstr "Terminé" msgid "Calibrating" -msgstr "Calibration" +msgstr "Étalonnage" msgid "Auto-record Monitoring" -msgstr "Surveillance d'enregistrement automatique" +msgstr "Surveillance de l'enregistrement automatique" msgid "Go Live" -msgstr "Passer en direct" +msgstr "Passer en LIVE" msgid "Resolution" msgstr "Résolution" msgid "Show \"Live Video\" guide page." -msgstr "Afficher la page du guide \"Live Video\"." +msgstr "Afficher la page de guide « Vidéo en direct »." msgid "720p" msgstr "720p" @@ -3115,26 +3171,26 @@ msgid "ConnectPrinter(LAN)" msgstr "Connecter l'imprimante (LAN)" msgid "Please input the printer access code:" -msgstr "Veuillez saisir le code d'accès à l'imprimante :" +msgstr "Veuillez saisir le code d’accès à l’imprimante :" msgid "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" msgstr "" -"Vous pouvez le trouver dans \"Paramètres > Réseau > Code de connexion\"\n" -"sur l'imprimante, comme illustré sur le schéma :" +"Vous pouvez le trouver dans « Paramètres > Réseau > Code de connexion » sur " +"l'imprimante, comme illustré sur le schéma:" msgid "Invalid input." -msgstr "Entrée invalide." +msgstr "Saisie non valide" msgid "New Window" -msgstr "Nouvelle fenêtre" +msgstr "Nouvelle Fenêtre" msgid "Open a new window" msgstr "Ouvrir une nouvelle fenêtre" msgid "Application is closing" -msgstr "Fermeture de l'application" +msgstr "L'application se ferme" msgid "Closing Application while some presets are modified." msgstr "" @@ -3150,7 +3206,7 @@ msgid "Preview" msgstr "Aperçu" msgid "Device" -msgstr "Imprimante" +msgstr "Appareil" msgid "Project" msgstr "Projet" @@ -3164,14 +3220,17 @@ msgstr "Non" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "sera fermé avant de créer un nouveau modèle. Voulez-vous continuer ?" +msgid "Upload" +msgstr "" + msgid "Slice plate" -msgstr "Découper le plateau" +msgstr "Trancher le plateau" msgid "Print plate" -msgstr "Imprimer le plateau" +msgstr "Imprimer plateau" msgid "Slice all" -msgstr "Découper toutes les plateaux" +msgstr "Tout trancher" msgid "Export G-code file" msgstr "Exporter le fichier G-code" @@ -3180,19 +3239,19 @@ msgid "Send" msgstr "Envoyer" msgid "Export plate sliced file" -msgstr "Exporter les fichiers découpés du plateau" +msgstr "Exporter fichier tranché du plateau" msgid "Export all sliced file" -msgstr "Exporter tous les fichiers découpés" +msgstr "Exporter tous les fichiers tranchés" msgid "Print all" -msgstr "Imprimer tous les plateaux" +msgstr "Tout imprimer" msgid "Send all" -msgstr "Envoyer tous les plateaux" +msgstr "Tout envoyer" msgid "Keyboard Shortcuts" -msgstr "Raccourcis clavier" +msgstr "Raccourcis Clavier" msgid "Show the list of the keyboard shortcuts" msgstr "Afficher la liste des raccourcis clavier" @@ -3204,70 +3263,73 @@ msgid "Show Configuration Folder" msgstr "Afficher le dossier de configuration" msgid "Show Tip of the Day" -msgstr "Afficher l'astuce du jour" +msgstr "Afficher l'Astuce du Jour" + +msgid "Report issue" +msgstr "Signaler un problème" msgid "Check for Update" -msgstr "Vérifier les mises à jour" +msgstr "Vérifier la mise à jour" msgid "Open Network Test" -msgstr "Lancer un test réseau" +msgstr "Ouvrir le Test de Réseau" #, c-format, boost-format msgid "&About %s" -msgstr "&À propos de %s" +msgstr "&Au sujet de %s" msgid "Upload Models" -msgstr "Envoyer des modèles" +msgstr "Téléverser les Modèles" msgid "Download Models" -msgstr "Télécharger les modèles" +msgstr "Télécharger des Modèles" msgid "Default View" msgstr "Vue par défaut" #. TRN To be shown in the main menu View->Top msgid "Top" -msgstr "Vue de dessus" +msgstr "Haut" msgid "Top View" -msgstr "Vue de dessus" +msgstr "Vue du Dessus" #. TRN To be shown in the main menu View->Bottom msgid "Bottom" -msgstr "Vue de dessous" +msgstr "Dessous" msgid "Bottom View" -msgstr "Vue de dessous" +msgstr "Vue du Dessous" msgid "Front" -msgstr "Vue de face" +msgstr "Avant" msgid "Front View" -msgstr "Vue de face" +msgstr "Vue Avant" msgid "Rear" -msgstr "Vue arrière" +msgstr "Arrière" msgid "Rear View" -msgstr "Vue arrière" +msgstr "Vue Arrière" msgid "Left" -msgstr "Vue de gauche" +msgstr "Gauche" msgid "Left View" -msgstr "Vue de gauche" +msgstr "Vue Gauche" msgid "Right" -msgstr "Vue de droite" +msgstr "Droite" msgid "Right View" -msgstr "Vue de droite" +msgstr "Vue Droite" msgid "Start a new window" -msgstr "Ouvrir une nouvelle fenêtre" +msgstr "Démarrer une nouvelle fenêtre" msgid "New Project" -msgstr "Nouveau projet" +msgstr "Nouveau Projet" msgid "Start a new project" msgstr "Démarrer un nouveau projet" @@ -3282,28 +3344,28 @@ msgid "Save Project" msgstr "Sauvegarder le projet" msgid "Save current project to file" -msgstr "Enregistrer le projet actuel vers un fichier" +msgstr "Enregistrer le projet actuel dans un fichier" msgid "Save Project as" msgstr "Enregistrer le projet sous" msgid "Shift+" -msgstr "Shift+" +msgstr "Maj+" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" -msgstr "Importer un fichier 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Charger un modèle" msgid "Import Configs" -msgstr "Importer des configurations" +msgstr "Importer des Configs" msgid "Load configs" -msgstr "Charger des configurations" +msgstr "Charger les Configs" msgid "Import" msgstr "Importer" @@ -3312,25 +3374,25 @@ msgid "Export all objects as STL" msgstr "Exporter tous les objets au format STL" msgid "Export Generic 3MF" -msgstr "Exporter au format 3MF" +msgstr "Exporter en fichier 3MF Générique" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Exporter au format 3mf sans utiliser certaines extensions 3mf" +msgstr "Exportation de fichiers 3MF sans utiliser d'extensions" msgid "Export current sliced file" -msgstr "Exporter le fichier découpé actuel" +msgstr "Exporter le fichier tranché actuel" msgid "Export all plate sliced file" -msgstr "Exporter tous les fichiers des plateaux" +msgstr "Exportation de tous les fichiers slicés de la plaque" msgid "Export G-code" msgstr "Exporter le G-code" msgid "Export current plate as G-code" -msgstr "Exporter le plateau actuel au format G-code" +msgstr "Exporter le plateau actuel en G-code" msgid "Export &Configs" -msgstr "Exporter les configurations" +msgstr "Exportation & Configs" msgid "Export current configuration to files" msgstr "Exporter la configuration actuelle vers des fichiers" @@ -3345,7 +3407,7 @@ msgid "Undo" msgstr "Annuler" msgid "Redo" -msgstr "Rétablir" +msgstr "Recommencer" msgid "Cut selection to clipboard" msgstr "Couper la sélection dans le presse-papiers" @@ -3354,31 +3416,31 @@ msgid "Copy" msgstr "Copier" msgid "Copy selection to clipboard" -msgstr "Copier la sélection dans le presse-papiers" +msgstr "Copier la sélection dans le presse-papier" msgid "Paste" msgstr "Coller" msgid "Paste clipboard" -msgstr "Coller le presse-papiers" +msgstr "Coller le presse-papier" msgid "Delete selected" msgstr "Supprimer la sélection" msgid "Deletes the current selection" -msgstr "Supprimer la sélection actuelle" +msgstr "Supprime la sélection en cours" msgid "Delete all" -msgstr "Supprimer tout" +msgstr "Tout Supprimer" msgid "Deletes all objects" msgstr "Supprimer tous les objets" msgid "Clone selected" -msgstr "Cloner la sélection" +msgstr "Cloner sélectionné" msgid "Clone copies of selections" -msgstr "Cloner les sélections" +msgstr "Cloner des copies de sélections" msgid "Select all" msgstr "Tout sélectionner" @@ -3387,7 +3449,7 @@ msgid "Selects all objects" msgstr "Sélectionner tous les objets" msgid "Deselect all" -msgstr "Tout désélectionner" +msgstr "Désélectionner tout" msgid "Deselects all objects" msgstr "Désélectionner tous les objets" @@ -3399,11 +3461,17 @@ msgid "Use Orthogonal View" msgstr "Utiliser la vue orthogonale" msgid "Show &Labels" -msgstr "Afficher les étiquettes" +msgstr "Afficher &Les Étiquettes" msgid "Show object labels in 3D scene" msgstr "Afficher les étiquettes des objets dans la scène 3D" +msgid "Show &Overhang" +msgstr "Montrer Surplombs" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Afficher la surbrillance des surplombs d'un objet dans la scène 3D" + msgid "Preferences" msgstr "Préférences" @@ -3414,52 +3482,46 @@ msgid "Help" msgstr "Aide" msgid "Temperature Calibration" -msgstr "Température de calibration" +msgstr "" msgid "Pass 1" -msgstr "Passe 1" +msgstr "" msgid "Flow rate test - Pass 1" -msgstr "Test de débit - Passe 1" +msgstr "" msgid "Pass 2" -msgstr "Passe 2" +msgstr "" msgid "Flow rate test - Pass 2" -msgstr "Test de débit - Passe 2" +msgstr "" msgid "Flow rate" -msgstr "Débit" +msgstr "" msgid "Pressure advance" -msgstr "Pressure Advance" +msgstr "" msgid "Retraction test" -msgstr "Test de rétraction" - -msgid "Orca Tolerance Test" -msgstr "Test de tolérance Orca" +msgstr "" msgid "Max flowrate" -msgstr "Débit maximal" +msgstr "" msgid "VFA" -msgstr "VFA" +msgstr "" msgid "More..." -msgstr "Plus…" +msgstr "" msgid "Tutorial" -msgstr "Didacticiel" +msgstr "" msgid "Calibration help" -msgstr "Aide à la calibration" +msgstr "" msgid "More calibrations" -msgstr "Plus de calibrations" - -msgid "3D Models" -msgstr "Modèles 3D" +msgstr "" msgid "&Open G-code" msgstr "&Ouvrir G-code" @@ -3471,10 +3533,10 @@ msgid "Re&load from Disk" msgstr "Recharger à partir du disque" msgid "Reload the plater from disk" -msgstr "Recharger un plateau à partir du disque" +msgstr "Rechargez la machine à partir du disque" msgid "Export &Toolpaths as OBJ" -msgstr "Exporter les &parcours d'outils en OBJ" +msgstr "Exporter &Toolpaths en OBJ" msgid "Export toolpaths as OBJ" msgstr "Exporter les parcours d'outils en OBJ" @@ -3493,31 +3555,33 @@ msgid "Quit %s" msgstr "Quitter %s" msgid "&File" -msgstr "&Fichier" +msgstr "&File" msgid "&View" -msgstr "&Vue" +msgstr "&Voir" msgid "&Help" msgstr "&Aide" #, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." -msgstr "Un fichier existe avec le même nom : %s. Voulez-vous le remplacer ?" +msgstr "" +"Il existe un fichier portant le même nom : %s. Voulez-vous le remplacer ?" #, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." msgstr "" -"Une configuration existe avec le même nom : %s. Voulez-vous la remplacer ?" +"Il existe une configuration portant le même nom : %s. Voulez-vous la " +"remplacer ?" msgid "Overwrite file" -msgstr "Écraser le fichier" +msgstr "Remplacer le fichier" msgid "Yes to All" -msgstr "Oui pour Tous" +msgstr "Oui à Tout" msgid "No to All" -msgstr "Non pour Tous" +msgstr "Non à Tout" msgid "Choose a directory" msgstr "Choisir un dossier" @@ -3526,13 +3590,10 @@ msgstr "Choisir un dossier" msgid "There is %d config exported. (Only non-system configs)" msgid_plural "There are %d configs exported. (Only non-system configs)" msgstr[0] "" -"Il y a %d configuration exportée. (Uniquement les configurations non système)" msgstr[1] "" -"Il y a %d configurations exportées. (Uniquement les configurations non " -"système)" msgid "Export result" -msgstr "Exporter le résultat" +msgstr "Exporter le Résultat" msgid "Select profile to load:" msgstr "Sélectionnez le profil à charger :" @@ -3542,11 +3603,7 @@ 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)" msgstr[0] "" -"Il y a %d configuration importée. (Uniquement les configurations non système " -"et compatibles)" msgstr[1] "" -"Il y a %d configurations importées. (Uniquement les configurations non " -"système et compatibles)" msgid "Import result" msgstr "Importer le résultat" @@ -3558,7 +3615,7 @@ msgid "The project is no longer available." msgstr "Le projet n'est plus disponible." msgid "Filament Settings" -msgstr "Paramètres des filaments" +msgstr "Réglages du filament" msgid "" "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -3567,91 +3624,93 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Souhaitez-vous synchroniser vos données personnelles depuis Bambu Cloud ?\n" -"Il contient les informations suivantes :\n" -"1. Les préréglages de processus\n" -"2. Les préréglages de filaments\n" -"3. Les préréglages de l'imprimante" +"Voulez-vous synchroniser vos données personnelles à partir de Bambu Cloud ?\n" +"Il contient les informations suivantes :\n" +"1. Les préréglages du Processus\n" +"2. Les préréglages du Filament\n" +"3. Les préréglages de l'Imprimante" msgid "Synchronization" msgstr "Synchronisation" msgid "Initialize failed (No Device)!" -msgstr "Échec de l'initialisation (pas de périphérique) !" +msgstr "Échec de l'initialisation (pas de périphérique) !" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"L'initialisation a échoué (la connexion de l'appareil n'est pas prête) !" msgid "Initialize failed (No Camera Device)!" -msgstr "Échec de l'initialisation (aucune caméra) !" +msgstr "L'initialisation a échoué (Pas de caméra)!" -msgid "Initializing..." -msgstr "Initialisation..." +msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgstr "" +"L'imprimante est occupée à télécharger, veuillez attendre la fin du " +"téléchargement." msgid "Loading..." msgstr "Chargement..." -msgid "Initialize failed (Not supported with LAN-only mode)!" +msgid "Initialize failed (Not supported on the current printer version)!" msgstr "" -"Échec de l'initialisation (non pris en charge avec le mode LAN uniquement) !" msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Échec de l'initialisation (non accessible en mode LAN uniquement) !" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "" -"L’imprimante est en cours de téléchargement, veuillez attendre la fin du " -"téléchargement." +msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Échec de l'initialisation (IP LAN de l'imprimante manquante) !" +msgstr "" +"Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Échec de l'initialisation (non pris en charge par l'imprimante) !" +msgid "Initializing..." +msgstr "Initialisation..." #, c-format, boost-format msgid "Initialize failed (%s)!" -msgstr "Échec de l'initialisation (%s) !" +msgstr "L'initialisation a échoué (%s)!" msgid "Network unreachable" msgstr "Réseau inaccessible" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "[%d] arrêté !" +msgstr "Arrêté [%d] !" msgid "Stopped." msgstr "Arrêté." msgid "LAN Connection Failed (Failed to start liveview)" msgstr "" -"Échec de la connexion LAN (échec du démarrage de la visualisation en direct)" +"Échec de la connexion au réseau local (échec du démarrage de la vue en " +"direct)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Virtual Camera Tools est requis pour cette tâche !\n" -"Voulez-vous l'installer ?" +"Les outils de caméra virtuelle sont nécessaires pour cette tâche !\n" +"Vous souhaitez les installer ?" msgid "Downloading Virtual Camera Tools" -msgstr "Téléchargement de Virtual Camera Tools" +msgstr "Téléchargement des Outils de Caméra Virtuelle" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" "Une autre caméra virtuelle est en cours d'exécution.\n" -"Orca Slicer ne prend en charge qu'une seule caméra virtuelle.\n" +"Bambu Studio ne prend en charge qu'une seule caméra virtuelle.\n" "Voulez-vous arrêter cette caméra virtuelle ?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Échec de l'initialisation de la caméra virtuelle (%s) !" +msgstr "L'initialisation de la caméra virtuelle a échoué (%s) !" msgid "Information" -msgstr "Informations" +msgstr "Information" msgid "Playing..." -msgstr "Lecture…" +msgstr "En jouant..." #, c-format, boost-format msgid "Load failed [%d]!" @@ -3664,7 +3723,7 @@ msgid "Month" msgstr "Mois" msgid "All Files" -msgstr "Tous les fichiers" +msgstr "Tous les Fichiers" msgid "Group files by year, recent first." msgstr "Regroupez les fichiers par année, les plus récents en premier." @@ -3676,92 +3735,119 @@ msgid "Show all files, recent first." msgstr "Afficher tous les fichiers, les plus récents en premier." msgid "Timelapse" -msgstr "Timelapse" +msgstr "Laps de temps" msgid "Switch to timelapse files." -msgstr "Basculer vers les fichiers Timelapse." +msgstr "Passez aux fichiers timelapse." msgid "Video" msgstr "Vidéo" msgid "Switch to video files." -msgstr "Basculer vers les fichiers vidéo." +msgstr "Passez aux fichiers vidéo." + +msgid "Switch to 3mf model files." +msgstr "Passez aux fichiers de modèle 3mf." msgid "Delete selected files from printer." -msgstr "Supprimer les fichiers sélectionnés de l'imprimante." +msgstr "Supprimez les fichiers sélectionnés de l'imprimante." msgid "Download" msgstr "Télécharger" msgid "Download selected files from printer." -msgstr "Télécharger les fichiers sélectionnés à partir de l'imprimante." +msgstr "Téléchargez les fichiers sélectionnés depuis l'imprimante." msgid "Select" msgstr "Sélectionner" msgid "Batch manage files." -msgstr "Gestion des lots de fichiers." +msgstr "Gérer les fichiers par lots." msgid "No printers." -msgstr "Aucune imprimante." - -msgid "Not supported by this model of printer!" -msgstr "Non pris en charge par ce modèle d'imprimante !" - -msgid "Connecting..." -msgstr "Connexion…" +msgstr "Aucune imprimante" #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "La connexion a échoué [%d] !" +msgstr "La connexion a échoué [%d] !" msgid "Loading file list..." -msgstr "Chargement de la liste des fichiers…" - -msgid "No files" -msgstr "Aucun fichier" - -msgid "Not accessible in LAN-only mode!" -msgstr "Non accessible en mode LAN uniquement !" - -msgid "Missing LAN ip of printer!" -msgstr "IP LAN de l'imprimante manquante !" +msgstr "Chargement de la liste des fichiers..." #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "Vous allez supprimer %u fichiers. Êtes-vous sûr de continuer ?" +msgid "No files [%d]" +msgstr "Aucun fichier [%d]" + +#, c-format, boost-format +msgid "Load failed [%d]" +msgstr "Échec du chargement [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" -msgstr "Supprimer des fichiers" +msgstr "Supprimer les fichiers" + +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Voulez-vous supprimer le fichier '%s' de l'imprimante ?" + +msgid "Delete file" +msgstr "Supprimer le fichier" + +msgid "Fetching model infomations ..." +msgstr "Récupération des informations sur le modèle..." + +msgid "Failed to fetching model infomations from printer." +msgstr "" +"Impossible de récupérer les informations du modèle depuis l'imprimante." + +msgid "Failed to parse model infomations." +msgstr "Impossible d'analyser les informations du modèle" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." -msgstr "Le fichier ‘%s' a été perdu ! Veuillez le télécharger à nouveau." +msgstr "Le fichier « %s » a été perdu ! Veuillez le télécharger à nouveau." msgid "Download waiting..." -msgstr "Téléchargement en attente…" +msgstr "Téléchargement en attente..." msgid "Play" msgstr "Lecture" msgid "Open Folder" -msgstr "Ouvrir un dossier" +msgstr "Ouvrir le Dossier" msgid "Download finished" msgstr "Téléchargement terminé" #, c-format, boost-format msgid "Downloading %d%%..." -msgstr "Téléchargement %d%%…" +msgstr "Téléchargement %d%%..." + +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" msgid "Speed:" msgstr "Vitesse:" msgid "Deadzone:" -msgstr "Zone morte:" +msgstr "Zone morte :" msgid "Options:" -msgstr "Options:" +msgstr "Options :" msgid "Zoom" msgstr "Zoom" @@ -3770,11 +3856,32 @@ msgid "Translation/Zoom" msgstr "Translation/Zoom" msgid "3Dconnexion settings" -msgstr "Paramètres de connexion 3D" +msgstr "Paramètres 3Dconnexion" msgid "Swap Y/Z axes" msgstr "Permuter les axes Y/Z" +msgid "Printing Progress" +msgstr "Progression de l'impression" + +msgid "Resume" +msgstr "Résumer" + +msgid "Stop" +msgstr "Arrêt" + +msgid "0" +msgstr "0" + +msgid "Layer: N/A" +msgstr "Couche : N/A" + +msgid "Immediately score" +msgstr "Noter immédiatement" + +msgid "Clear" +msgstr "Nettoyer" + msgid "Camera" msgstr "Caméra" @@ -3782,28 +3889,10 @@ msgid "SD Card" msgstr "Carte SD" msgid "Camera Setting" -msgstr "Paramètres de la caméra" - -msgid "Printing Progress" -msgstr "Progression de l'impression" - -msgid "Resume" -msgstr "Reprendre" - -msgid "Stop" -msgstr "Arrêter" - -msgid "0" -msgstr "0" - -msgid "Layer: N/A" -msgstr "Couche: N/A" - -msgid "Clear" -msgstr "Effacer" +msgstr "Réglage de la Caméra" msgid "Control" -msgstr "Contrôles" +msgstr "Contrôle" msgid "Print Options" msgstr "Options d'impression" @@ -3812,22 +3901,22 @@ msgid "100%" msgstr "100%" msgid "Lamp" -msgstr "LED" +msgstr "Lampe" msgid "Aux" msgstr "Aux" msgid "Cham" -msgstr "Chambre" +msgstr "Chamb" msgid "Bed" msgstr "Plateau" msgid "Unload" -msgstr "Décharger" +msgstr "retirer" msgid "Debug Info" -msgstr "Informations de déboggage" +msgstr "Les informations de débogage" msgid "No SD Card" msgstr "Pas de carte SD" @@ -3835,74 +3924,61 @@ msgstr "Pas de carte SD" msgid "SD Card Abnormal" msgstr "Carte SD anormale" -msgid "Printing List" -msgstr "Liste d'impression" - msgid "Cancel print" msgstr "Annuler l'impression" msgid "Are you sure you want to cancel this print?" -msgstr "Voulez-vous vraiment annuler cette impression ?" +msgstr "Êtes-vous sûr de vouloir annuler cette impression ?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Déconnexion de l'imprimante [%s] car le mode LAN est désactivé. Veuillez " -"reconnecter l'imprimante en vous connectant avec votre compte d'utilisateur." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Déconnexion de l'imprimante [%s] en raison de l'activation du mode LAN. " -"Veuillez reconnecter l'imprimante en saisissant le code d'accès qui peut " -"être obtenu à partir de l'écran de l'imprimante." +msgid "Done" +msgstr "Terminé" msgid "Downloading..." msgstr "Téléchargement…" msgid "Cloud Slicing..." -msgstr "Découpe via le Cloud…" +msgstr "Tranchage Cloud..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." -msgstr "Dans la file d’attente Cloud Slicing, il reste %s tâches à venir." +msgstr "Dans la file d'attente des tranchage cloud %s tâches vous attendent." #, c-format, boost-format msgid "Layer: %s" -msgstr "Couche: %s" +msgstr "Couche : %s" + +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Veuillez attribuer une note à votre modèle Bambu Market préféré." + +msgid "Score" +msgstr "Note" #, c-format, boost-format msgid "Layer: %d/%d" -msgstr "Couche: %d/%d" +msgstr "Couche : %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" "Veuillez chauffer la buse à plus de 170 degrés avant de charger le filament." msgid "Still unload" -msgstr "Toujours en train de décharger" +msgstr "Décharger encore" msgid "Still load" -msgstr "Toujours en train de charger" +msgstr "Charger encore" msgid "Please select an AMS slot before calibration" -msgstr "" -"Veuillez sélectionner un emplacement dans l’AMS avant de démarrer la " -"calibration" +msgstr "Veuillez sélectionner un emplacement AMS avant la calibration." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." msgstr "" -"Impossible de lire les informations du filament : le filament est chargé " -"dans la tête de l'outil, veuillez décharger le filament et réessayer." +"Impossible de lire les informations sur le filament: le filament est chargé " +"dans l'extrudeur. Veuillez décharger le filament et réessayer." msgid "This only takes effect during printing" -msgstr "Cela ne prend effet que lors de l'impression" +msgstr "Cela ne prend effet que pendant l'impression" msgid "Silent" msgstr "Silencieux" @@ -3914,19 +3990,13 @@ msgid "Sport" msgstr "Sport" msgid "Ludicrous" -msgstr "Extrême" +msgstr "Insensé" msgid "Can't start this without SD card." msgstr "Impossible de démarrer sans carte SD." -msgid "Failed to connect to the server" -msgstr "Impossible de se connecter au serveur" - msgid "Status" -msgstr "Statut" - -msgid "Media" -msgstr "Médias" +msgstr "État" msgid "Update" msgstr "Mise à jour" @@ -3934,15 +4004,12 @@ msgstr "Mise à jour" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Échec de la connexion" - msgid "Don't show again" msgstr "Ne plus afficher" #, c-format, boost-format msgid "%s error" -msgstr "%s erreur" +msgstr "Erreur %s" #, c-format, boost-format msgid "%s has encountered an error" @@ -3962,10 +4029,10 @@ msgstr "%s infos" #, c-format, boost-format msgid "%s information" -msgstr "%s informations" +msgstr "Information de %s" msgid "Skip" -msgstr "Passer" +msgstr "Sauter" msgid "3D Mouse disconnected." msgstr "Souris 3D déconnectée." @@ -3974,7 +4041,7 @@ msgid "Configuration can update now." msgstr "La configuration peut maintenant être mise à jour." msgid "Detail." -msgstr "Détail." +msgstr "Plus" msgid "Integration was successful." msgstr "L'intégration a réussi." @@ -3983,10 +4050,10 @@ msgid "Integration failed." msgstr "L'intégration a échoué." msgid "Undo integration was successful." -msgstr "Annuler l’intégration réussi." +msgstr "Annuler l'intégration a réussi." msgid "New network plug-in available." -msgstr "Une nouvelle version du plug-in réseau Bambu est disponible." +msgstr "Nouveau plug-in réseau disponible" msgid "Details" msgstr "Détails" @@ -3998,52 +4065,52 @@ msgid "Exporting." msgstr "Exportation." msgid "Software has New version." -msgstr "Une nouvelle version du logiciel est disponible." +msgstr "Le logiciel a une nouvelle version." msgid "Goto download page." -msgstr "Aller à la page de téléchargement." +msgstr "Allez sur la page de téléchargement." msgid "Open Folder." -msgstr "Ouvrir un dossier." +msgstr "Ouvrir un répertoire." msgid "Safely remove hardware." -msgstr "Retirer le matériel sans risque." +msgstr "Retirez le matériel en toute sécurité." #, c-format, boost-format msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." msgstr[0] "L'objet %1$d a des supports personnalisés." -msgstr[1] "Les objets %1$d ont des supports personnalisés." +msgstr[1] " %1$d objets ont des supports personnalisés." #, c-format, boost-format msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." -msgstr[0] "L’objet %1$d est peint en couleur." -msgstr[1] "Les objets %1$d sont peints en couleur." +msgstr[0] "%1$d L'objet est peint en couleur." +msgstr[1] "%1$d L'objets sont peints en couleur." #, 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 objet a été chargé en tant que partie de l’objet coupé." -msgstr[1] "%1$d objets ont été chargés en tant que partie de l’objet coupé." +msgstr[0] "" +msgstr[1] "" msgid "ERROR" msgstr "ERREUR" msgid "CANCELED" -msgstr "ANNULÉ" +msgstr "Annulé" msgid "COMPLETED" -msgstr "TERMINÉ" +msgstr "Terminé" msgid "Cancel upload" -msgstr "Annuler le téléchargement" +msgstr "Annuler le téléversement" msgid "Slice ok." -msgstr "Découpage terminé." +msgstr "Tranchage terminé" msgid "Jump to" -msgstr "Sélectionner" +msgstr "Sauter à" msgid "Error:" msgstr "Erreur:" @@ -4052,40 +4119,41 @@ msgid "Warning:" msgstr "Avertissement:" msgid "Export successfully." -msgstr "Exporté avec succès." +msgstr "Exportation réussie" msgid "Serious warning:" msgstr "" msgid " (Repair)" -msgstr " (Réparer)" +msgstr "(Réparation)" msgid " Click here to install it." msgstr " Cliquez ici pour l'installer." msgid "WARNING:" -msgstr "ATTENTION:" +msgstr "ATTENTION :" msgid "Your model needs support ! Please make support material enable." -msgstr "Votre modèle a besoin de supports ! Veuillez activer les supports." +msgstr "" +"Votre modèle a besoin de supports ! Veuillez activer le matériau de support." msgid "Gcode path overlap" msgstr "Chevauchement de chemin Gcode" msgid "Support painting" -msgstr "Peindre les supports" +msgstr "Soutenir la peinture" msgid "Color painting" -msgstr "Peindre" +msgstr "Peinture couleur" msgid "Cut connectors" -msgstr "Couper les connecteurs" +msgstr "Connecteurs de découpe" msgid "Layers" msgstr "Couches" msgid "Range" -msgstr "Intervalle" +msgstr "Zone" msgid "" "The application cannot run normally because OpenGL version is lower than " @@ -4098,7 +4166,7 @@ msgid "Please upgrade your graphics card driver." msgstr "Veuillez mettre à jour le pilote de votre carte graphique." msgid "Unsupported OpenGL version" -msgstr "Version OpenGL non prise en charge" +msgstr "Version d'OpenGL non supportée" #, c-format, boost-format msgid "" @@ -4111,33 +4179,33 @@ msgstr "Erreur lors du chargement des shaders" msgctxt "Layers" msgid "Top" -msgstr "Haut" +msgstr "Du haut" msgctxt "Layers" msgid "Bottom" -msgstr "Bas" +msgstr "Du bas" msgid "Enable AI monitoring of printing" -msgstr "Activer la surveillance par IA de l'impression" +msgstr "Activer la surveillance de l'impression par l'IA" msgid "Sensitivity of pausing is" -msgstr "Le niveau de sensibilité de la pause est" +msgstr "La sensibilité de pause est " msgid "Enable detection of build plate position" -msgstr "Activer la détection de la position du plateau" +msgstr "Activation de la détection de la position de la plaque" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." msgstr "" -"Détection de l’étiquette de localisation du plateau. L’impression est mise " -"en pause si l'étiquette n'est pas placée au bon endroit." +"La balise de localisation de la plaque est détectée, l'impression est " +"interrompue si la balise n'est pas dans la plage prédéfinie." msgid "First Layer Inspection" -msgstr "Inspection de la première couche" +msgstr "Inspection de la Première Couche" msgid "Auto-recovery from step loss" -msgstr "Récupération automatique en cas de perte de pas" +msgstr "Restauration automatique en cas de perte de pas" msgid "Global" msgstr "Global" @@ -4146,10 +4214,10 @@ msgid "Objects" msgstr "Objets" msgid "Advance" -msgstr "Avancés" +msgstr "Avancé" msgid "Compare presets" -msgstr "Comparer les préréglages" +msgstr "Comparer les Préréglages" msgid "View all object's settings" msgstr "Afficher tous les paramètres de l'objet" @@ -4160,48 +4228,45 @@ msgstr "Réglages du filament" msgid "Printer settings" msgstr "Paramètres de l'imprimante" -msgid "Untitled" -msgstr "Sans_Titre" - #, boost-format -msgid " plate %1%:" -msgstr " du plateau %1% - " +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Nom invalide, les caractères suivants ne sont pas autorisés :" msgid "Sliced Info" -msgstr "Informations de découpe" +msgstr "Informations de découpage" msgid "Used Filament (m)" -msgstr "Filament utilisé (m)" +msgstr "Filament Utilisé (m)" msgid "Used Filament (mm³)" -msgstr "Filament utilisé (mm³)" +msgstr "Filament Utilisé (mm³)" msgid "Used Filament (g)" -msgstr "Filament utilisé (g)" +msgstr "Filament Utilisé (g)" msgid "Used Materials" msgstr "Matériaux utilisés" msgid "Estimated time" -msgstr "Durée estimée" +msgstr "Temps estimé" msgid "Filament changes" msgstr "Changements de filaments" msgid "Click to edit preset" -msgstr "Cliquez pour modifier le préréglage" +msgstr "Cliquez pour éditer le préréglage" msgid "Connection" msgstr "Connexion" msgid "Bed type" -msgstr "Type du plateau" +msgstr "Type de plaque" msgid "Flushing volumes" -msgstr "Volumes de purge" +msgstr "Volumes de rinçage" msgid "Add one filament" msgstr "Ajouter un filament" @@ -4210,7 +4275,7 @@ msgid "Remove last filament" msgstr "Retirer le dernier filament" msgid "Synchronize filament list from AMS" -msgstr "Synchroniser la liste des filaments de l'AMS" +msgstr "Synchroniser la liste des filaments depuis l'AMS" msgid "Set filaments to use" msgstr "Définir les filaments à utiliser" @@ -4218,57 +4283,54 @@ msgstr "Définir les filaments à utiliser" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"Pas de filaments dans l'AMS. Veuillez sélectionner une imprimante sur la " -"page ‘Imprimante’ pour charger les informations de l'AMS." +"Pas de filaments AMS. Veuillez sélectionner une imprimante dans la page " +"\"Appareil\" pour charger les informations AMS." msgid "Sync filaments with AMS" -msgstr "Synchroniser les filaments avec l'AMS" +msgstr "Synchroniser les filaments avec AMS" msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"La synchronisation des filaments avec l'AMS supprimera tous les préréglages " -"et couleurs de filaments actuellement sélectionnés. Voulez-vous continuer ?" +"La synchronisation des filaments avec AMS supprimera tous les préréglages et " +"couleurs de filament actuellement sélectionnés. Voulez-vous continuer ?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " "all?" msgstr "" -"Vous avez déjà effectué une synchronisation, souhaitez-vous synchroniser " +"Vous avez déjà effectué une synchronisation. Voulez-vous synchroniser " "uniquement les modifications ou tout resynchroniser ?" msgid "Sync" -msgstr "Synchroniser" +msgstr "Sync." msgid "Resync" -msgstr "Resynchroniser" +msgstr "Resync" msgid "There are no compatible filaments, and sync is not performed." msgstr "" -"Il n'y a pas de filaments compatibles et la synchronisation n'a pas " +"Il n'y a pas de filaments compatibles et la synchronisation n'est pas " "effectuée." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" -"Il existe des filaments inconnus mappés sur un préréglage générique. " -"Veuillez mettre à jour ou redémarrer Orca Slicer pour vérifier s'il existe " -"une mise à jour des préréglages système." #, boost-format msgid "Do you want to save changes to \"%1%\"?" -msgstr "Voulez-vous enregistrer les modifications à \"%1%\" ?" +msgstr "Voulez-vous enregistrer les modifications apportées à \"%1%\" ?" #, c-format, boost-format msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -"Ejection réalisée avec succès. Le périphérique %s(%s) peut maintenant être " -"retiré en toute sécurité de l'ordinateur." +"Démonté avec succès. Le périphérique %s(%s) peut maintenant être retiré en " +"toute sécurité de l'ordinateur." #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -4285,17 +4347,17 @@ msgid "" "open the front door of printer before printing to avoid nozzle clog." msgstr "" "La température du plateau dépasse la température de vitrification du " -"filament. Veuillez ouvrir la porte avant de l'imprimante avant d'imprimer " -"pour éviter que la buse ne se bouche." +"filament. Veuillez ouvrir la porte avant de l'imprimante avant l'impression " +"pour éviter le bouchage de la buse." 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 "" -"La dureté de la buse requise par le filament est supérieure à la dureté de " -"la buse par défaut de l'imprimante. Veuillez remplacer la buse ou le " -"filament, sinon la buse sera usée ou endommagée." +"La dureté de la buse requise par le filament est supérieure à la dureté par " +"défaut de la buse de l'imprimante. Veuillez remplacer la buse ou le " +"filament, sinon la buse s'usera ou s'endommagera." #, c-format, boost-format msgid "Loading file: %s" @@ -4303,8 +4365,8 @@ msgstr "Chargement du fichier : %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "" -"Le fichier 3mf ne provient pas de Bambu Lab, chargement des données de " -"géométrie uniquement." +"Le 3mf ne provient pas de Bambu Lab, chargement des données géométriques " +"uniquement." msgid "Load 3mf" msgstr "Charger 3mf" @@ -4312,21 +4374,21 @@ msgstr "Charger 3mf" msgid "The Config can not be loaded." msgstr "La configuration ne peut pas être chargée." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"Le fichier 3mf a été généré par une ancienne version de Orca Slicer, " -"chargement des données de géométrie uniquement." +"Le 3mf a été généré par une ancienne version de Bambu Studio, chargement des " +"données géométriques uniquement." #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" msgstr "" -"La version %s de 3mf est plus récente que la version %s de %s, clés " -"suivantes non reconnues :" +"La version %s du 3mf est plus récente que la version %s de %s. Les clés " +"suivantes ne sont pas reconnues:" msgid "You'd better upgrade your software.\n" -msgstr "Il est préférable de mettre à jour votre logiciel.\n" +msgstr "Vous feriez mieux de mettre à jour votre logiciel.\n" msgid "Newer 3mf version" msgstr "Nouvelle version 3mf" @@ -4336,26 +4398,26 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"La version %s de 3mf est plus récente que la version %s de %s, nous vous " +"La version %s du 3mf est plus récente que la version %s de %s. Nous vous " "suggérons de mettre à jour votre logiciel." msgid "Invalid values found in the 3mf:" -msgstr "Valeurs non valides trouvées dans le 3mf :" +msgstr "Valeurs invalides trouvées dans le 3mf :" msgid "Please correct them in the param tabs" -msgstr "Veuillez les corriger dans l’onglet paramètres" +msgstr "Veuillez les corriger dans les onglets de paramètres" msgid "The 3mf is not compatible, load geometry data only!" msgstr "" -"Le 3mf n'est pas compatible, chargez uniquement les données de géométrie !" +"Le 3mf n'est pas compatible, chargement des données géométriques uniquement!" msgid "Incompatible 3mf" msgstr "Fichier 3mf incompatible" msgid "Name of components inside step file is not UTF8 format!" msgstr "" -"Le nom des composants à l'intérieur du fichier step n'est pas au format " -"UTF-8 !" +"Le nom des composants à l'intérieur du fichier d'étape n'est pas au format " +"UTF8 !" msgid "The name may show garbage characters!" msgstr "Le nom peut afficher des caractères inutiles !" @@ -4377,7 +4439,7 @@ msgid "" "The object from file %s is too small, and maybe in meters or inches.\n" " Do you want to scale to millimeters?" msgstr "" -"L'objet du fichier %s est trop petit, et peut-être en mètres ou en pouces.\n" +"L'objet du fichier %s est trop petit, et peut-être en mètres ou en pouces. " "Voulez-vous mettre à l'échelle en millimètres ?" msgid "Object too small" @@ -4388,13 +4450,12 @@ msgid "" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -"Ce fichier contient plusieurs objets positionnés à plusieurs hauteurs.\n" -"Au lieu de les considérer comme des objets multiples, faut-il\n" -"que le fichier soit chargé en tant qu'objet unique comportant plusieurs " -"parties ?" +"Ce fichier contient plusieurs objets positionnés à différentes hauteurs.\n" +"Au lieu de les considérer comme des objets multiples, le fichier \n" +"doit-il être chargé en tant qu'objet unique avec plusieurs parties ?" msgid "Multi-part object detected" -msgstr "Objet en plusieurs parties détecté" +msgstr "Objet en plusieurs pièces détecté" msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -4410,29 +4471,29 @@ msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Votre objet semble être trop grand, voulez-vous le mettre à l’échelle pour " -"qu'il s'adapte automatiquement au volume d'impression ?" +"Votre objet semble trop grand. Voulez-vous le réduire pour l'adapter " +"automatiquement au plateau d'impression ?" msgid "Object too large" -msgstr "Objet trop large" +msgstr "Objet trop grand" msgid "Export STL file:" -msgstr "Fichier STL exporté :" +msgstr "Exporter le fichier STL :" msgid "Save file as:" msgstr "Enregistrer le fichier sous :" msgid "Delete object which is a part of cut object" -msgstr "Supprimer l’objet qui fait partie de l’objet coupé" +msgstr "Supprimer l'objet qui fait partie de l'objet découpé" msgid "" "You try to delete an object which is a part of a cut object.\n" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed." msgstr "" -"Vous essayez de supprimer un objet qui fait partie d’un objet coupé.\n" -"Cette action rompra une correspondance coupée.\n" -"Après cela, la cohérence du modèle ne pourra plus être garantie." +"Vous essayez de supprimer un objet qui fait partie d'un objet coupé.\n" +"Cette action va rompre la correspondance entre les objets coupés.\n" +"Après cela, la cohérence du modèle ne peut plus être garantie." msgid "The selected object couldn't be split." msgstr "L'objet sélectionné n'a pas pu être divisé." @@ -4441,10 +4502,10 @@ msgid "Another export job is running." msgstr "Une autre tâche d'exportation est en cours d'exécution." msgid "Select a new file" -msgstr "Sélectionner un nouveau fichier" +msgstr "Sélectionnez un nouveau fichier" msgid "File for the replace wasn't selected" -msgstr "Le fichier à remplacer n'a pas été sélectionné" +msgstr "Le fichier de remplacement n'a pas été sélectionné" msgid "Error during replace" msgstr "Erreur lors du remplacement" @@ -4453,7 +4514,7 @@ msgid "Please select a file" msgstr "Veuillez sélectionner un fichier" msgid "Slicing" -msgstr "Découpage" +msgstr "Découpe" msgid "There are warnings after slicing models:" msgstr "Il y a des avertissements après le découpage des modèles :" @@ -4462,14 +4523,14 @@ msgid "warnings" msgstr "avertissements" msgid "Invalid data" -msgstr "données invalides" +msgstr "Donnée non valide" msgid "Slicing Canceled" -msgstr "Découpe annulée" +msgstr "Tranchage Annulé" #, c-format, boost-format msgid "Slicing Plate %d" -msgstr "Découpe du plateau %d" +msgstr "Tranchage plateau %d" msgid "Please resolve the slicing errors and publish again." msgstr "Veuillez résoudre les erreurs de découpage et republier." @@ -4484,9 +4545,9 @@ msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -"Mode aperçu uniquement :\n" -"Le fichier chargé contient uniquement du gcode, impossible d'accéder à la " -"page Préparer" +"Mode de prévisualisation:\n" +"Le fichier chargé contient uniquement du G-code, impossible d'accéder à la " +"page de Préparation" msgid "You can keep the modified presets to the new project or discard them" msgstr "" @@ -4504,9 +4565,9 @@ msgid "" "Please check whether the folder exists online or if other programs open the " "project file." msgstr "" -"Échec de l'enregistrement du projet.\n" -"Veuillez vérifier si le dossier existe en ligne ou si d'autres programmes " -"utilisent actuellement ce fichier de projet." +"Impossible d'enregistrer le projet.\n" +"Vérifiez si le dossier existe en ligne ou si le fichier de projet est ouvert " +"dans d'autres programmes." msgid "Save project" msgstr "Sauvegarder le projet" @@ -4515,14 +4576,14 @@ msgid "Importing Model" msgstr "Importation du modèle" msgid "prepare 3mf file..." -msgstr "préparation du fichier 3mf…" +msgstr "préparation du fichier 3mf..." msgid "downloading project ..." -msgstr "téléchargement du projet…" +msgstr "téléchargement du projet..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Projet téléchargé %d%%" +msgstr "Projet téléchargé à %d%%" msgid "The selected file" msgstr "Le fichier sélectionné" @@ -4543,19 +4604,20 @@ msgid "Open as project" msgstr "Ouvrir en tant que projet" msgid "Import geometry only" -msgstr "Importer uniquement la géométrie" +msgstr "Importer la géométrie uniquement" msgid "Only one G-code file can be opened at the same time." msgstr "Un seul fichier G-code peut être ouvert à la fois." msgid "G-code loading" -msgstr "Chargement du G-code" +msgstr "Chargement du code G" msgid "G-code files can not be loaded with models together!" -msgstr "Les fichiers G-code ne peuvent pas être chargés avec des modèles !" +msgstr "" +"Les fichiers G-code ne peuvent pas être chargés avec des modèles ensemble !" msgid "Can not add models when in preview mode!" -msgstr "Impossible d'ajouter des modèles en mode aperçu !" +msgstr "Impossible d'ajouter des modèles en mode aperçu" msgid "Add Models" msgstr "Ajouter des modèles" @@ -4565,20 +4627,20 @@ msgstr "Tous les objets seront supprimés, continuer ?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"Le projet en cours comporte des modifications non enregistrées, voulez-vous " -"les enregistrer avant de continuer ?" +"Le projet en cours comporte des modifications non enregistrées, enregistrez-" +"les avant de continuer ?" msgid "Remember my choice." -msgstr "Se souvenir de mon choix" +msgstr "Mémoriser mon choix" msgid "Number of copies:" -msgstr "Nombre de copies :" +msgstr "Nombre de copies:" msgid "Copies of the selected object" msgstr "Copies de l'objet sélectionné" msgid "Save G-code file as:" -msgstr "Enregistrer le fichier G-code sous :" +msgstr "Sauvegarder le fichier G-code en tant que :" msgid "Save Sliced file as:" msgstr "Enregistrer le fichier découpé sous :" @@ -4588,7 +4650,7 @@ msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"Le fichier %s a été envoyé sur l'espace de stockage de l'imprimante et peut " +"Le fichier %s a été envoyé vers l'espace de stockage de l'imprimante et peut " "être visualisé sur l'imprimante." msgid "" @@ -4602,9 +4664,8 @@ msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." msgstr "" -"Impression par objet : \n" -"Nous vous suggérons d'utiliser la disposition automatique pour éviter les " -"collisions lors de l'impression." +"Imprimer par objet : nous vous suggérons d'utiliser la disposition " +"automatique pour éviter les collisions lors de l'impressio" msgid "Send G-code" msgstr "Envoyer le G-code" @@ -4614,14 +4675,14 @@ msgstr "Envoyer à l'imprimante" msgid "Custom supports and color painting were removed before repairing." msgstr "" -"Les supports personnalisés et la peinture ont été retirés avant la " -"réparation." +"Les supports personnalisés et la peinture de couleur ont été retirés avant " +"la réparation." msgid "Invalid number" msgstr "Numéro invalide" msgid "Plate Settings" -msgstr "Paramètres du plateau" +msgstr "Paramètres de la plaque" #, boost-format msgid "Number of currently selected parts: %1%\n" @@ -4641,7 +4702,7 @@ msgstr "Nom de l'objet : %1%\n" #, boost-format msgid "Size: %1% x %2% x %3% in\n" -msgstr "Taille : %1% x %2% x %3% in\n" +msgstr "Taille : %1% x %2% x %3% dans\n" #, boost-format msgid "Size: %1% x %2% x %3% mm\n" @@ -4649,7 +4710,7 @@ msgstr "Taille : %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" -msgstr "Volume : %1% in³\n" +msgstr "Volume : %1% en³\n" #, boost-format msgid "Volume: %1% mm³\n" @@ -4660,15 +4721,15 @@ msgid "Triangles: %1%\n" msgstr "Triangles : %1%\n" msgid "Tips:" -msgstr "Astuces :" +msgstr "Astuces:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" -"La fonctionnalité \"Réparer le modèle\" n'est actuellement disponible que " -"sur Windows. Veuillez réparer le modèle sur Orca Slicer (Windows) ou avec " -"des logiciels de CAO." +"La fonctionnalité « Fix Model » n'est actuellement disponible que sous " +"Windows. Réparez le modèle dans Bambu Studio (Windows) ou dans un logiciel " +"de CAO." #, c-format, boost-format msgid "" @@ -4676,9 +4737,10 @@ msgid "" "still want to do this printing, please set this filament's bed temperature " "to non zero." msgstr "" -"Le plateau %d : %s n’est pas suggéré pour être utilisé avec le filament " -"%s(%s). Si vous souhaitez toujours effectuer cette impression, veuillez " -"définir la température du plateau de ce filament sur une valeur non nulle." +"La plaque% d : %s n'est pas suggéré pour l'utilisation du filament " +"d'impression %s(%s). Si vous souhaitez toujours effectuer ce travail " +"d'impression, veuillez régler la température du plateau de ce filament sur " +"un nombre différent de zéro." msgid "Switching the language requires application restart.\n" msgstr "Le changement de langue nécessite le redémarrage de l'application.\n" @@ -4701,16 +4763,16 @@ msgid "Changing the region will log out your account.\n" msgstr "Si vous changez de région, vous serez déconnecté de votre compte.\n" msgid "Region selection" -msgstr "Sélection de la région" +msgstr "Choix de la région" msgid "Second" -msgstr "secondes" +msgstr "Seconde" msgid "Browse" msgstr "Parcourir" msgid "Choose Download Directory" -msgstr "Sélectionnez le dossier de téléchargement" +msgstr "Choisissez le répertoire de téléchargement" msgid "General Settings" msgstr "Paramètres généraux" @@ -4728,13 +4790,10 @@ msgid "North America" msgstr "Amérique du Nord" msgid "Others" -msgstr "Autres" +msgstr "Autre" msgid "Login Region" -msgstr "Région" - -msgid "Stealth Mode" -msgstr "" +msgstr "Région d'origine" msgid "Metric" msgstr "Métrique" @@ -4746,73 +4805,75 @@ msgid "Units" msgstr "Unités" msgid "Zoom to mouse position" -msgstr "Zoom à la position de la souris" +msgstr "Zoom sur la position de la souris" msgid "" "Zoom in towards the mouse pointer's position in the 3D view, rather than the " "2D window center." msgstr "" -"Effectuer un zoom avant vers la position du pointeur de la souris dans la " -"vue 3D, plutôt que vers le centre de la fenêtre 2D." +"Zoomez sur la position du pointeur de la souris dans la vue 3D, plutôt que " +"sur le centre de la fenêtre 2D." msgid "Show \"Tip of the day\" notification after start" -msgstr "Afficher la notification \"Astuce du jour\" au démarrage" +msgstr "Afficher la notification \"Astuce du jour\" après le démarrage" msgid "If enabled, useful hints are displayed at startup." -msgstr "Si activé, des conseils utiles sont affichés au démarrage." - -msgid "Show g-code window" -msgstr "Afficher la fenêtre G-code" - -msgid "If enabled, g-code window will be displayed." -msgstr "Si activé, la fenêtre avec les commandes G-code sera affichée." +msgstr "" +"Si cette option est activée, des conseils utiles s'affichent au démarrage." msgid "Presets" msgstr "Préréglages" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" -"Synchronisation automatique des préréglages utilisateur (Imprimante/Filament/" -"Processus)" +"Synchronisation automatique des pré-réglages utilisateur (Imprimante/" +"Filament/Processus)" msgid "User Sync" msgstr "Synchronisation utilisateur" msgid "Update built-in Presets automatically." -msgstr "Mettre automatiquement à jour les préréglages intégrés." +msgstr "Mettez à jour automatiquement les préréglages intégrés." msgid "System Sync" msgstr "Synchronisation du système" msgid "Clear my choice on the unsaved presets." -msgstr "Effacer mon choix sur les préréglages non enregistrés." +msgstr "Efface mon choix sur les préréglages non enregistrés." -msgid "Associate files to OrcaSlicer" -msgstr "Associer des fichiers à Orca Slicer" +msgid "Associate files to BambuStudio" +msgstr "Associer des fichiers à BambuStudio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Associer les fichiers .3mf à Orca Slicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Associer des fichiers .3mf à BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"Si activé, définit Orca Slicer comme application par défaut pour ouvrir les " +"Si activé, définit BambuStudio comme application par défaut pour ouvrir les " "fichiers .3mf" -msgid "Associate .stl files to OrcaSlicer" -msgstr "Associer les fichiers .stl à Orca Slicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Associer des fichiers .stl à BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"Si activé, définit Orca Slicer comme application par défaut pour ouvrir les " +"Si activé, définit BambuStudio comme application par défaut pour ouvrir les " "fichiers .stl" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Associer les fichiers .step/.stp à Orca Slicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Lier les fichiers .step/.stp à Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"Si activé, définit Orca Slicer comme application par défaut pour ouvrir les " -"fichiers .step/.stp" +"Si activé, définit BambuStudio comme application par défaut pour ouvrir les " +"fichiers .step" + +msgid "Online Models" +msgstr "Modèles en ligne" + +msgid "Show online staff-picked models on the home page" +msgstr "" +"Afficher les modèles en ligne sélectionnés par le staff sur la page d'accueil" msgid "Maximum recent projects" msgstr "Projets récents maximum" @@ -4821,7 +4882,7 @@ msgid "Maximum count of recent projects" msgstr "Nombre maximal de projets récents" msgid "Clear my choice on the unsaved projects." -msgstr "Effacer mon choix sur les projets non enregistrés." +msgstr "Efface mon choix sur les projets non enregistrés." msgid "Auto-Backup" msgstr "Sauvegarde automatique" @@ -4829,23 +4890,29 @@ msgstr "Sauvegarde automatique" msgid "" "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Sauvegardez votre projet périodiquement pour restaurer en cas de plantage " -"occasionnel." +"Sauvegardez votre projet périodiquement pour faciliter la restauration après " +"un plantage occasionnel." msgid "every" -msgstr "toutes les" +msgstr "chaque" msgid "The peroid of backup in seconds." -msgstr "La période de sauvegarde en secondes." +msgstr "Période de sauvegarde en secondes." msgid "Downloads" msgstr "Téléchargements" msgid "Dark Mode" -msgstr "Mode Nuit" +msgstr "Mode Sombre" msgid "Enable Dark mode" -msgstr "Activer le Mode Nuit" +msgstr "Activer le mode Sombre" + +msgid "Develop mode" +msgstr "Mode Développeur" + +msgid "Skip AMS blacklist check" +msgstr "Ignorer la vérification de la liste noire AMS" msgid "Home page and daily tips" msgstr "Page d'accueil et conseils quotidiens" @@ -4860,7 +4927,7 @@ msgid "User sync" msgstr "Synchronisation utilisateur" msgid "Preset sync" -msgstr "Synchronisation des préréglages" +msgstr "Synchronisation préréglée" msgid "Preferences sync" msgstr "Synchronisation des préférences" @@ -4872,10 +4939,10 @@ msgid "Rotate of view" msgstr "Rotation de la vue" msgid "Move of view" -msgstr "Déplacement de la vue" +msgstr "Déplacement de vue" msgid "Zoom of view" -msgstr "Zoom de la vue" +msgstr "Vue agrandie" msgid "Other" msgstr "Autre" @@ -4883,32 +4950,35 @@ msgstr "Autre" msgid "Mouse wheel reverses when zooming" msgstr "La molette de la souris s'inverse lors du zoom" -msgid "Develop mode" -msgstr "Mode Développeur" +msgid "Enable SSL(MQTT)" +msgstr "Activer SSL (MQTT)" -msgid "Dump video" -msgstr "Vider la vidéo" +msgid "Enable SSL(FTP)" +msgstr "Activer SSL (FTP)" + +msgid "Internal developer mode" +msgstr "Mode développeur interne" msgid "Log Level" msgstr "Niveau de journalisation" msgid "fatal" -msgstr "fatale" +msgstr "mortel" msgid "error" -msgstr "erreur" +msgstr "Erreur" msgid "warning" -msgstr "attention" +msgstr "Attention" msgid "info" -msgstr "info" +msgstr "Info" msgid "debug" msgstr "déboguer" msgid "trace" -msgstr "tracer" +msgstr "Tracé" msgid "Host Setting" msgstr "Paramètres de l'hôte" @@ -4920,22 +4990,22 @@ msgid "QA host: api-qa.bambu-lab.com/v1" msgstr "Hôte AQ : api-qa.bambu-lab.com/v1" msgid "PRE host: api-pre.bambu-lab.com/v1" -msgstr "Hôte PRE : api-pre.bambu-lab.com/v1" +msgstr "Hébergeur PRE : api-pre.bambu-lab.com/v1" msgid "Product host" msgstr "Hôte du produit" msgid "debug save button" -msgstr "bouton d'enregistrement du débogage" +msgstr "bouton d'enregistrement de débogage" msgid "save debug settings" -msgstr "enregistrer les paramètres de déboggage" +msgstr "enregistrer les paramètres de débogage" msgid "DEBUG settings have saved successfully!" -msgstr "Les paramètres DEBUG ont été enregistrés avec succès !" +msgstr "Les paramètres DEBUG ont été enregistrés avec succès !" msgid "Switch cloud environment, Please login again!" -msgstr "Changement d'environnement cloud, veuillez vous reconnecter !" +msgstr "L'environnement Cloud a changé, veuillez vous reconnecter !" msgid "System presets" msgstr "Préréglages système" @@ -4965,7 +5035,7 @@ msgid "Project-inside presets" msgstr "Préréglages intégrés au projet" msgid "Add/Remove filaments" -msgstr "Ajouter/Supprimer des filaments" +msgstr "Ajouter/Supprimer filament" msgid "Add/Remove materials" msgstr "Ajouter/Supprimer des matériaux" @@ -4973,61 +5043,58 @@ msgstr "Ajouter/Supprimer des matériaux" msgid "Add/Remove printers" msgstr "Ajouter/Supprimer des imprimantes" +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" -msgstr "Identique à la séquence d’impression globale" +msgstr "Identique à la séquence d'impression globale" msgid "Print sequence" msgstr "Séquence d'impression" -msgid "Plate name" -msgstr "Nom du plateau" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Identique au type de plaque général" + msgid "Same as Global Bed Type" -msgstr "Identique au type de plateau par défaut" - -msgid "Cool Plate" -msgstr "Bambu Cool Plate" - -msgid "Engineering Plate" -msgstr "Bambu Engineering Plate" - -msgid "High Temp Plate" -msgstr "Bambu High Temperature Plate" - -msgid "Textured PEI Plate" -msgstr "Bambu Dual-Sided Textured PEI Plate" +msgstr "Identique au type de plateau général" msgid "By Layer" -msgstr "Par couche" +msgstr "Par Couche" msgid "By Object" -msgstr "Par objet" +msgstr "Par Objet" + +msgid "Plate name" +msgstr "Nom de la plaque" msgid "Accept" msgstr "Accepter" msgid "Log Out" -msgstr "Se déconnecter" +msgstr "Déconnexion" msgid "Slice all plate to obtain time and filament estimation" msgstr "" -"Découper tous les plateaux pour obtenir une estimation de la durée et du " +"Tranchez toutes les couches pour obtenir une estimation du temps et du " "filament" msgid "Packing project data into 3mf file" msgstr "Compression des données du projet dans un fichier 3mf" msgid "Uploading 3mf" -msgstr "Téléchargement 3mf" +msgstr "Téléversement 3mf" msgid "Jump to model publish web page" -msgstr "Accéder à la page Web de publication de modèles" +msgstr "Accéder à la page internet de publication des modèles" msgid "Note: The preparation may takes several minutes. Please be patiant." msgstr "" @@ -5040,13 +5107,13 @@ msgid "Publish was cancelled" msgstr "La publication a été annulée" msgid "Slicing Plate 1" -msgstr "Plateau découpé 1" +msgstr "trancher couche 1" msgid "Packing data to 3mf" -msgstr "Compression des données vers le fichier 3mf" +msgstr "Collecte des données 3mf" msgid "Jump to webpage" -msgstr "Aller à la page Web" +msgstr "ouvrir la page internet" #, c-format, boost-format msgid "Save %s as" @@ -5056,10 +5123,10 @@ msgid "User Preset" msgstr "Préréglage utilisateur" msgid "Project Inside Preset" -msgstr "Préréglages intégrés au projet" +msgstr "Projeter à l'intérieur du préréglage" msgid "Name is invalid;" -msgstr "Le nom n'est pas valide;" +msgstr "Le nom n'est pas valide ;" msgid "illegal characters:" msgstr "caractères illégaux :" @@ -5096,7 +5163,7 @@ msgid "The name is not allowed to end with space character." msgstr "Le nom ne doit pas se terminer par un espace." msgid "The name cannot be the same as a preset alias name." -msgstr "Le nom ne peut pas être identique à un nom d'alias prédéfini." +msgstr "Le nom ne peut pas être le même qu'un nom d'alias prédéfini." msgid "Save preset" msgstr "Enregistrer le préréglage" @@ -5117,156 +5184,176 @@ msgstr "" #, boost-format msgid "For \"%1%\", change \"%2%\" to \"%3%\" " -msgstr "Pour \"%1%\", remplacer \"%2%\" par \"%3%\" " +msgstr "Pour \"%1%\", remplacez \"%2%\" par \"%3%\"" #, boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" -msgstr "Pour \"%1%\", ajouter \"%2%\" comme nouveau préréglage" +msgstr "Pour \"%1%\", ajoutez \"%2%\" comme nouveau préréglage" #, boost-format msgid "Simply switch to \"%1%\"" -msgstr "Basculer simplement vers \"%1%\"" +msgstr "Passez simplement à \"%1%\"" -msgid "Online" -msgstr "En ligne" - -msgid "Offline" -msgstr "Hors ligne" +msgid "Task canceled" +msgstr "Tâche annulée" msgid "(LAN)" msgstr "(LAN)" msgid "My Device" -msgstr "Mon Imprimante" +msgstr "Mon appareil" msgid "Other Device" -msgstr "Autre Imprimante" +msgstr "Autre appareil" + +msgid "Online" +msgstr "En ligne" msgid "Input access code" msgstr "Saisir le code d'accès" msgid "Can't find my devices?" -msgstr "Aucune imprimante trouvée ?" +msgstr "Vous ne trouvez pas d'appareils ?" msgid "Log out successful." msgstr "Déconnexion réussie." +msgid "Offline" +msgstr "Hors ligne" + msgid "Busy" -msgstr "Occupée" +msgstr "Occupé" msgid "Bambu Cool Plate" -msgstr "Bambu Cool Plate" +msgstr "Plaque Bambu Cool Plate" + +msgid "PLA Plate" +msgstr "Plaque PLA" msgid "Bamabu Engineering Plate" -msgstr "Bambu Engineering Plate" +msgstr "Plaque Engineering Bambu" msgid "Bamabu High Temperature Plate" -msgstr "Bambu High Temperature Plate" +msgstr "Plaque Haute Température Bambu" msgid "Send print job to" -msgstr "Envoi de la tâche d'impression" +msgstr "Envoyer le travail d'impression à" msgid "Refresh" msgstr "Actualiser" msgid "Bed Leveling" -msgstr "Nivellement" +msgstr "Mise à niveau du lit" -msgid "Flow Calibration" -msgstr "Calibration du débit" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Impossible de se connecter à l'imprimante" msgid "send completed" msgstr "envoi terminé" +msgid "Error code" +msgstr "Code erreur" + +msgid "Check the status of current system services" +msgstr "Vérifiez l'état des services système actuels" + +msgid "Printer local connection failed, please try again." +msgstr "La connexion locale de l'imprimante a échoué, veuillez réessayer." + msgid "No login account, only printers in LAN mode are displayed" msgstr "" -"Aucun compte de connexion, seules les imprimantes en mode LAN sont affichées" +"Pas de connexion au cloud, seules les imprimantes en mode LAN sont affichées" msgid "Connecting to server" msgstr "Connexion au serveur" msgid "Synchronizing device information" -msgstr "Synchronisation des informations de l’imprimante" +msgstr "Synchronisation des informations sur l'appareil" msgid "Synchronizing device information time out" -msgstr "" -"Expiration du délai de synchronisation des informations de l’imprimante" +msgstr "Expiration du délai de synchronisation des informations sur l'appareil" msgid "Cannot send the print job when the printer is updating firmware" msgstr "" -"Impossible d'envoyer la tâche d'impression lorsque l'imprimante met à jour " -"le firmware" +"Impossible d'envoyer une tâche d'impression pendant la mise à jour du " +"firmware de l'imprimante" msgid "" "The printer is executing instructions. Please restart printing after it ends" msgstr "" "L'imprimante exécute des instructions. Veuillez recommencer l'impression " -"après la fin de l'exécution" +"après la fin de l'exécution." msgid "The printer is busy on other print job" -msgstr "L'imprimante est occupée par une autre tâche d'impression" +msgstr "L'imprimante est occupée par un autre travail d'impression." #, c-format, boost-format msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Le filament %s dépasse le nombre d'emplacements de l'AMS. Veuillez mettre à " -"jour le firmware de l'imprimante pour prendre en charge l'affectation des " -"emplacements dans l'AMS." +"Le filament %s dépasse le nombre d'emplacements AMS. Mettez à jour le " +"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Le filament dépasse le nombre d'emplacements de l'AMS. Veuillez mettre à " -"jour le firmware de l'imprimante pour prendre en charge l'affectation des " -"emplacements dans l'AMS." +"Le nombre de filaments dépasse le nombre d'emplacements AMS. Mettez à jour " +"le firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" "L'affectation des filaments aux emplacements de l'AMS a été réalisée. Vous " -"pouvez cliquer sur un filament ci-dessus pour modifier son emplacement " -"correspondant à celui dans l'AMS" +"pouvez cliquer sur un filament ci-dessus pour modifier sa correspondance " +"avec l'emplacement AMS." msgid "" "Please click each filament above to specify its mapping AMS slot before " "sending the print job" msgstr "" "Veuillez cliquer sur chaque filament ci-dessus pour indiquer son emplacement " -"dans l'AMS avant d'envoyer la tâche d'impression" +"AMS avant d'envoyer la tâche d'impression." #, c-format, 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 "" -"Le filament %s ne correspond pas au filament dans l'emplacement %s de " -"l'AMS . Veuillez mettre à jour le firmware de l'imprimante pour prendre en " -"charge l'affectation des emplacements dans l'AMS." +"Le filament %s ne correspond pas au filament de l'emplacement AMS %s. " +"Veuillez mettre à jour le firmware de l'imprimante pour qu'il prenne en " +"charge l'attribution des emplacements AMS." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Le filament ne correspond pas au filament dans l'emplacement de l'AMS . " -"Veuillez mettre à jour le firmware de l'imprimante pour prendre en charge " -"l'affectation des emplacements dans l'AMS." +"Le filament ne correspond pas au filament du slot AMS. Mettez à jour le " +"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"Le firmware de l'imprimante ne prend en charge que l’affectation " -"séquentielle du filament => emplacement AMS." +"Le firmware de l’imprimante ne prend en charge que le mappage séquentiel du " +"filament => emplacement AMS." msgid "An SD card needs to be inserted before printing." msgstr "Une carte SD doit être insérée avant l'impression." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." -msgstr "Une carte SD doit être insérée pour enregistrer le Timelapse." +msgstr "Une carte SD doit être insérée pour enregistrer un timelapse." msgid "" "Cannot send the print job to a printer whose firmware is required to get " @@ -5276,76 +5363,195 @@ msgstr "" "doit être mis à jour." msgid "Cannot send the print job for empty plate" -msgstr "Impossible d'envoyer la tâche d'impression d'un plateau vide" +msgstr "Impossible d'envoyer une tâche d'impression d'un plateau vide." msgid "This printer does not support printing all plates" msgstr "" -"Cette imprimante ne prend pas en charge l’impression de toutes les plateaux" +"Cette imprimante ne prend pas en charge l'impression de toutes les plaques" msgid "Errors" msgstr "Erreurs" msgid "Please check the following:" -msgstr "Veuillez vérifier les points suivants :" +msgstr "Veuillez vérifier les points suivants :" 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 "" -"Le type d'imprimante utilisé pour générer le G-code n'est pas le même que " -"l'imprimante physique actuellement sélectionnée. Il est recommandé " -"d’utiliser le même type d’imprimante pour le découpage." +"Le type d'imprimante sélectionné lors de la génération du G-Code n'est pas " +"cohérent avec l'imprimante actuellement sélectionnée. Il est recommandé " +"d'utiliser le même type d'imprimante pour le tranchage." #, c-format, boost-format msgid "%s is not supported by AMS." -msgstr "%s n’est pas pris en charge par l’AMS." +msgstr "%s n'est pas pris en charge par l'AMS." 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 "" -"Il y a des filaments inconnus dans les affectations de l'AMS. Veuillez " -"vérifier s'il s'agit des filaments requis. S'ils sont corrects, appuyez sur " -"\"Confirmer\" pour lancer l'impression." +"Il y a quelques filaments inconnus dans les association avec l'AMS. Veuillez " +"vérifier s'il s'agit des filaments nécessaires. S'ils sont corrects, cliquez " +"sur \"Confirmer\" pour lancer l'impression." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" -"Veuillez cliquer sur le bouton de confirmation si vous souhaitez continuer " -"l’impression." +"Cliquez sur le bouton de confirmation si vous souhaitez continuer à imprimer." + +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" msgid "Preparing print job" -msgstr "Préparation de la tâche d'impression" +msgstr "Préparation du travail d'impression" + +msgid "Abnormal print file data. Please slice again" +msgstr "" +"Données de fichier d'impression anormales. Veuillez retrancher le fichier." + +msgid "The name length exceeds the limit." +msgstr "La longueur du nom dépasse la limite." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" msgid "Modifying the device name" -msgstr "Modification du nom de l’imprimante" +msgstr "Modification du nom de l'appareil" msgid "Send to Printer SD card" -msgstr "Envoi sur la carte SD de l'imprimante" +msgstr "Envoyer à la carte SD de l'imprimante" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" -"Impossible d'envoyer la tâche d'impression lorsque la mise à jour est en " -"cours" +"Impossible d'envoyer la tâche d'impression lorsque la mise à niveau est en " +"cours." msgid "An SD card needs to be inserted before send to printer SD card." -msgstr "Une carte SD doit être insérée avant l'envoi à l'imprimante." +msgstr "" +"Il est nécessaire d'insérer une carte MicroSD avant d'envoyer les données " +"vers l'imprimante." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "L'imprimante doit être sur le même réseau local que Orca Slicer." +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "" +"L'imprimante doit se trouver sur le même réseau local que Bambu Studio." msgid "The printer does not support sending to printer SD card." -msgstr "" -"L'imprimante ne prend pas en charge l'envoi vers la carte SD de l'imprimante." +msgstr "L'imprimante ne prend pas en charge l'envoi vers la carte SD." + +msgid "Failed to create socket" +msgstr "Échec de la création du socket" + +msgid "Failed to connect socket" +msgstr "Impossible de connecter le socket" + +msgid "Failed to publish login request" +msgstr "Échec de la publication de la demande de connexion" + +msgid "Get ticket from device timeout" +msgstr "Dépassement du délai d'obtention d'un ticket depuis l'appareil" + +msgid "Get ticket from server timeout" +msgstr "Dépassement du délai d'obtention d'un ticket depuis le serveur" + +msgid "Failed to post ticket to server" +msgstr "Échec de l'envoi du ticket au serveur" + +msgid "Failed to parse login report reason" +msgstr "Échec de l'analyse du rapport de connexion" + +msgid "Receive login report timeout" +msgstr "Délai d'expiration du rapport de connexion" + +msgid "Unknown Failure" +msgstr "Erreur inconnue" msgid "Log in printer" -msgstr "Connecter l'imprimante" +msgstr "Connectez-vous à l'imprimante" msgid "Would you like to log in this printer with current account?" msgstr "" -"Souhaitez-vous vous connecter à cette imprimante avec le compte actuel ?" +"Souhaitez-vous vous connecter à cette imprimante avec un compte courant ?" + +msgid "Check the reason" +msgstr "Vérifier le motif" + +msgid "Read and accept" +msgstr "Lire et accepter" + +msgid "Terms and Conditions" +msgstr "Termes et conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"Nous vous remercions d'avoir acheté un produit Bambu Lab. Avant d'utiliser " +"votre appareil Bambu Lab, veuillez lire les conditions générales. En " +"cliquant pour confirmer que vous acceptez d'utiliser votre appareil Bambu " +"Lab, vous vous engagez à respecter la politique de confidentialité et les " +"conditions d'utilisation (collectivement, les \"conditions\"). Si vous ne " +"respectez pas ou n'acceptez pas la politique de confidentialité de Bambu " +"Lab, veuillez ne pas utiliser les produits et services de Bambu Lab." + +msgid "and" +msgstr "et" + +msgid "Privacy Policy" +msgstr "Politique de Confidentialité" + +msgid "We ask for your help to improve everyone's printer" +msgstr "" +"Nous vous demandons de nous aider à améliorer l'imprimante de toute la " +"communauté" + +msgid "Statement about User Experience Improvement Program" +msgstr "" +"Déclaration sur le programme d'amélioration de l'expérience utilisateur" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"Au sein de la communauté de l'impression 3D, nous apprenons des succès et " +"des échecs de chacun pour ajuster nos propres paramètres et réglages de " +"découpage. %s suit le même principe et utilise l'apprentissage automatique " +"pour améliorer ses performances en fonction des succès et des échecs du " +"grand nombre d'impressions effectuées par nos utilisateurs. Nous entraînons " +"%s à devenir plus intelligent en leur fournissant les données du monde réel. " +"Si vous le souhaitez, ce service accèdera aux informations de vos journaux " +"d'erreurs et de vos journaux d'utilisation, qui peuvent inclure des " +"informations décrites dans la Politique de confidentialité. Nous ne " +"collecterons aucune donnée personnelle permettant d'identifier une personne " +"directement ou indirectement, y compris, mais sans s'y limiter, les noms, " +"les adresses, les informations de paiement ou les numéros de téléphone. En " +"activant ce service, vous acceptez ces conditions et la déclaration " +"concernant la politique de confidentialité." + +msgid "Statement on User Experience Improvement Plan" +msgstr "" +"Déclaration concernant le plan d'amélioration de l'expérience utilisateur" msgid "Log in successful." msgstr "Connexion réussie." @@ -5357,7 +5563,7 @@ msgid "Would you like to log out the printer?" msgstr "Souhaitez-vous déconnecter l'imprimante ?" msgid "Please log in first." -msgstr "Veuillez vous connecter d’abord." +msgstr "S'il vous plait Connectez-vous d'abord." msgid "There was a problem connecting to the printer. Please try again." msgstr "" @@ -5370,70 +5576,62 @@ msgstr "Échec de la déconnexion." #. TRN "Save current Settings" #, c-format, boost-format msgid "Save current %s" -msgstr "Enregistrer le %s actuel" +msgstr "Enregistrer l'état actuel %s" msgid "Delete this preset" msgstr "Supprimer ce préréglage" msgid "Search in preset" -msgstr "Rechercher dans les préréglages" +msgstr "Rechercher dans le préréglage" msgid "Click to reset all settings to the last saved preset." msgstr "" -"Cliquez pour réinitialiser tous les paramètres au dernier préréglage " -"enregistré." +"Cliquez pour rétablir tous les paramètres au dernier préréglage enregistré." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"La tour de purge est requise pour un Timelapse fluide. Sans celle-ci, il " -"peut y avoir des défauts sur le modèle. Voulez-vous vraiment désactiver la " -"tour de purge ?" +"Une tour de nettoyage est requise pour le mode Timeplase fluide. Il peut y " +"avoir des défauts sur le modèle sans tour de nettoyage. Êtes-vous sûr de " +"vouloir la désactiver ?" 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 "" -"La tour de purge est requise pour un Timelapse fluide. Sans celle-ci, il " -"peut y avoir des défauts sur le modèle. Voulez-vous activer la tour de " -"purge ?" +"Une tour de nettoyage est requise pour un mode timelapse fluide. Il peut y " +"avoir des défauts sur le modèle sans tour de nettoyage. Voulez-vous activer " +"la désactiver?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"Nous avons ajouté un style expérimental \"Arborescents Fins\" qui présente " -"un volume de supports\n" -"plus petit mais une résistance plus faible.\n" -"\n" -"Nous recommandons de l’utiliser avec :\n" -"\n" -"Couches des interfaces supérieures : 0\n" -"Distance Z supérieure : 0\n" -"Nombre de parois des branches : 2" +"Nous avons ajouté un style expérimental « Arborescent Fin » qui offre un " +"volume de support plus petit mais également une résistance plus faible.\n" +"Nous recommandons de l'utiliser avec : 0 couches d'interface, 0 distance " +"supérieure, 2 murs." msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Modifier ces paramètres automatiquement ?\n" -"Oui - Modifier ces paramètres automatiquement\n" -"Non - Ne pas modifier ces paramètres" +"Vous souhaitez modifier ces paramètres automatiquement ? \n" +"Oui - Modifiez ces paramètres automatiquement.\n" +"Non - Ne modifiez pas ces paramètres pour moi." 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." msgstr "" -"Pour les styles \"Arborescents Solides\" et \"Arborescents Hybrides\", nous " -"recommandons les paramètres suivants :\n" -"\n" -"Couches des interfaces supérieures : 2\n" -"Distance Z supérieure d'au moins 0.1 mm ou l'utilisation de filament pour " -"supports pour l'interface" +"Pour les styles \"Arborescent fort\" et \"Arborescent Hybride\", nous " +"recommandons les réglages suivants : au moins 2 couches d'interface, au " +"moins 0,1 mm de distance entre le haut et le z ou l'utilisation de matériaux " +"de support sur l'interface." msgid "" "When using support material for the support interface, We recommend the " @@ -5441,11 +5639,10 @@ msgid "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" msgstr "" -"Lorsque vous utilisez du filament pour supports, nous vous recommandons les " -"paramètres suivants :\n" -"Distance Z supérieure à 0, un espacement de l’interface supérieure à 0, un " -"motif d’interface Concentrique et la désactivation de la hauteur de couche " -"indépendante des supports" +"Lorsque vous utilisez du matériel de support pour l'interface de support, " +"nous vous recommandons d'utiliser les paramètres suivants :\n" +"Distance Z supérieure nulle, espacement d'interface nul, motif concentrique " +"et désactivation de la hauteur indépendante de la couche de support" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5453,10 +5650,10 @@ msgid "" "by right-click the empty position of build plate and choose \"Add Primitive" "\"->\"Timelapse Wipe Tower\"." msgstr "" -"Lors de l'enregistrement d'un Timelapse sans tête d'outil, il est recommandé " -"d'ajouter une \"Tour d’essuyage Timelapse\"\n" -"en cliquant avec le bouton droit sur une zone vide du plateau et en " -"choisissant \"Ajouter une primitive\" -> \"Tour d’essuyage Timelapse\"." +"Lorsque vous enregistrez un timelapse sans tête d’outil, il est recommandé " +"d’ajouter une \"Tour de nettoyage timelapse\".\n" +"en faisant un clic droit sur un emplacement vide sur le plateau et en " +"choisissant \"Ajouter Primitive\"-> \"Tour de nettoyage Timelapse\"." msgid "Line width" msgstr "Largeur de ligne" @@ -5468,13 +5665,16 @@ msgid "Precision" msgstr "Précision" msgid "Wall generator" -msgstr "Générateur de paroi" +msgstr "Générateur de mur" msgid "Walls" msgstr "Parois" msgid "Top/bottom shells" -msgstr "Coques supérieures/inférieures" +msgstr "Coquilles supérieures/inférieures" + +msgid "Sparse infill" +msgstr "Remplissage" msgid "Initial layer speed" msgstr "Vitesse de couche initiale" @@ -5483,49 +5683,43 @@ msgid "Other layers speed" msgstr "Autres couches" msgid "Overhang speed" -msgstr "Surplombs" +msgstr "Vitesse de surplomb" 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" msgstr "" -"Il s'agit de la vitesse pour différents degrés de surplombs. Les degrés de " -"surplombs sont exprimés en pourcentage de la largeur de la ligne. Une " -"vitesse à 0 signifie qu'il n'y a pas de ralentissement pour la plage de " -"degrés des surplombs et que la vitesse des parois est utilisée" - -msgid "Bridge" -msgstr "Ponts" - -msgid "Set speed for external and internal bridges" -msgstr "" +"Il s'agit de la vitesse pour différents degrés de surplomb. Les degrés de " +"surplomb sont exprimés en pourcentage de la largeur de la ligne. 0 vitesse " +"signifie qu'il n'y a pas de ralentissement pour la plage de degrés du " +"surplomb et que la vitesse par défaut des périmètres est utilisée" msgid "Travel speed" -msgstr "Vitesse de déplacements" +msgstr "Vitesse de déplacement" msgid "Acceleration" -msgstr "Accélérations" +msgstr "Accélération" msgid "Jerk(XY)" -msgstr "Jerk (X-Y)" +msgstr "" msgid "Raft" msgstr "Radeau" msgid "Support filament" -msgstr "Filament pour supports" +msgstr "Filament de support" msgid "Prime tower" -msgstr "Tour de purge" +msgstr "Tour de nettoyage" msgid "Special mode" -msgstr "Modes spéciaux" +msgstr "Mode spécial" msgid "G-code output" -msgstr "G-code" +msgstr "Sortie G-code" -msgid "Post-processing Scripts" +msgid "Post-processing scripts" msgstr "Scripts de post-traitement" msgid "Frequent" @@ -5541,33 +5735,33 @@ msgid_plural "" "Please remove them, or will beat G-code visualization and printing time " "estimation." msgstr[0] "" -"La ligne suivante %s contient des mots clés réservés.\n" -"Veuillez les supprimer, ou cela gênera la visualisation du G-code et " -"l'estimation de la durée d'impression." +"La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " +"ou il battra la visualisation du code G et l'estimation du temps " +"d'impression." msgstr[1] "" -"Les lignes suivantes %s contiennent des mots clés réservés.\n" -"Veuillez les supprimer, ou cela gênera la visualisation du G-code et " -"l'estimation de la durée d'impression." +"La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " +"ou il battra la visualisation du code G et l'estimation du temps " +"d'impression." msgid "Reserved keywords found" msgstr "Mots clés réservés trouvés" msgid "Setting Overrides" -msgstr "Réglages forcés" +msgstr "Forçage des réglages" msgid "Retraction" msgstr "Rétraction" msgid "Basic information" -msgstr "Informations générales" +msgstr "Informations de base" msgid "Recommended nozzle temperature" msgstr "Température de buse recommandée" msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "" -"Plage de température de buse recommandée pour ce filament. Une valeur à 0 " -"signifie non définie" +"Plage de température de buse recommandée pour ce filament. 0 signifie pas " +"d'ensemble" msgid "Recommended temperature range" msgstr "Plage de température recommandée" @@ -5581,43 +5775,48 @@ msgstr "Buse" msgid "Nozzle temperature when printing" msgstr "Température de la buse lors de l'impression" -msgid "Cool plate" -msgstr "Bambu Cool Plate" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Température du plateau lorsque le plateau Bambu Cool Plate est installé. Une " -"valeur à 0 signifie que le filament ne prend pas en charge l'impression sur " -"le plateau Bambu Cool Plate" +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" +"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur le plateau froid." -msgid "Engineering plate" -msgstr "Bambu Engineering Plate" +msgid "Engineering Plate" +msgstr "Plaque Engineering" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"Température du plateau lorsque le plateau Bambu Engineering Plate est " -"installé. Une valeur à 0 signifie que le filament ne prend pas en charge " -"l'impression sur le plateau Bambu Engineering Plate" +"Il s'agit de la température du plateau lorsque le plaque Engineering est " +"installée. Une valeur à 0 signifie que ce filament ne peut pas être imprimé " +"sur le plateau Engineering." + +msgid "High Temp Plate" +msgstr "Plaque haute température" 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 "" -"Température du plateau lorsque le plateau Bambu High Temperature Plate est " -"installé. Une valeur à 0 signifie que le filament ne prend pas en charge " -"l'impression sur le plateau Bambu High Temperature Plate" +"Il s'agit de la température du plateau lorsque le plateau haute température " +"(\"Cool plate\") est installé. Une valeur à 0 signifie que ce filament ne " +"peut pas être imprimé sur le plateau haute température." + +msgid "Textured PEI Plate" +msgstr "Plaque PEI texturée" msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Température du plateau lorsque le plateau Bambu Dual-Sided Textured PEI " -"Plate est installé. Une valeur à 0 signifie que le filament ne prend pas en " -"charge l'impression sur le plateau Bambu Dual-Sided Textured PEI Plate" +"Température du lit lorsque la plaque PEI texturée est installée. La valeur 0 " +"signifie que le filament n'est pas supporté par la plaque PEI texturée" msgid "Volumetric speed limitation" msgstr "Limitation de vitesse volumétrique" @@ -5626,13 +5825,13 @@ msgid "Cooling" msgstr "Refroidissement" msgid "Cooling for specific layer" -msgstr "Refroidissement des premières couches" +msgstr "Refroidissement pour une couche spécifique" msgid "Part cooling fan" -msgstr "Ventilateur de refroidissement des pièces" +msgstr "Ventilateur de refroidissement partiel" msgid "Min fan speed threshold" -msgstr "Seuil de vitesse minimale" +msgstr "Seuil de vitesse mini du ventilateur" msgid "" "Part cooling fan speed will start to run at min speed when the estimated " @@ -5640,69 +5839,64 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"Le ventilateur de refroidissement commencera à fonctionner à la vitesse " -"minimale lorsque la durée de couche estimée n'est pas supérieure à la valeur " -"définie. Lorsque la durée de couche est inférieure au seuil, la vitesse du " -"ventilateur est interpolée entre la vitesse minimale et maximale du " -"ventilateur en fonction de la durée d'impression de la couche" +"La vitesse du ventilateur de refroidissement partiel commencera à " +"fonctionner à la vitesse minimale lorsque le temps de couche estimé n'est " +"pas supérieur au temps de couche dans le réglage. Lorsque le temps de couche " +"est inférieur au seuil, la vitesse du ventilateur est interpolée entre la " +"vitesse minimale et maximale du ventilateur en fonction du temps " +"d'impression de la couche" msgid "Max fan speed threshold" -msgstr "Seuil de vitesse maximale" +msgstr "Seuil de vitesse maximale du ventilateur" msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" msgstr "" -"La vitesse du ventilateur de refroidissement sera maximale lorsque la durée " -"de couche estimée est plus courte que la valeur définie" +"La vitesse du ventilateur de refroidissement partiel sera maximale lorsque " +"le temps de couche estimé est plus court que la valeur de réglage" msgid "Auxiliary part cooling fan" -msgstr "Ventilateur de refroidissement auxiliaire" +msgstr "Ventilateur de refroidissement de la partie auxiliaire" msgid "Filament start G-code" -msgstr "G-code de démarrage du filament" +msgstr "Code G de démarrage du filament" msgid "Filament end G-code" -msgstr "G-code de fin du filament" +msgstr "Code G de fin de filament" msgid "Printable space" msgstr "Espace imprimable" -msgid "Cooling Fan" -msgstr "Ventilateur de refroidissement" - -msgid "Fan speed-up time" -msgstr "Durée d’accélération du ventilateur" - msgid "Extruder Clearance" -msgstr "Tête d’impression" +msgstr "Dégagement de l'extrudeur" msgid "Accessory" msgstr "Accessoire" msgid "Machine gcode" -msgstr "G-code de l’imprimante" +msgstr "gcode de la machine" msgid "Machine start G-code" -msgstr "G-code de démarrage de l’imprimante" +msgstr "Code G de démarrage de la machine" msgid "Machine end G-code" -msgstr "G-code de fin de l’imprimante" +msgstr "Code G de fin de machine" msgid "Before layer change G-code" -msgstr "G-code avant le changement de couche" +msgstr "G-Code avant changement de couche" msgid "Layer change G-code" -msgstr "G-code de changement de couche" +msgstr "Code G de changement de couche" msgid "Change filament G-code" -msgstr "G-code de changement de filament" +msgstr "Changer le code G du filament" msgid "Pause G-code" -msgstr "G-code de mise en pause" +msgstr "Mettre le code G en pause" msgid "Template Custom G-code" -msgstr "G-code personnalisé" +msgstr "Modèle G-code personnalisé" msgid "Motion ability" msgstr "Capacité de mouvement" @@ -5717,29 +5911,13 @@ msgid "Acceleration limitation" msgstr "Limitation d'accélération" msgid "Jerk limitation" -msgstr "Limitation du jerk" +msgstr "Limitation des secousses" msgid "Layer height limits" msgstr "Limites de hauteur de couche" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" -msgstr "Rétractions lors du changement de matériau" - -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" -"L’option Essuyage n’est pas disponible lors de l’utilisation du mode " -"Rétraction Firmware.\n" -"\n" -"Voulez-vous désactiver cette option pour activer la Rétraction Firmware ?" - -msgid "Firmware Retraction" -msgstr "Rétraction Firmware" +msgstr "Rétraction lors du changement de matériau" msgid "Detached" msgstr "Détaché" @@ -5756,13 +5934,13 @@ msgstr "Êtes-vous sûr de %1% le préréglage sélectionné ?" #. TRN Remove/Delete #, boost-format msgid "%1% Preset" -msgstr "%1% préréglage" +msgstr "%1% Préréglage" msgid "All" -msgstr "Tout" +msgstr "Tous" msgid "Set" -msgstr "Définir" +msgstr "Appliquer" msgid "Click to reset current value and attach to the global value." msgstr "" @@ -5778,7 +5956,7 @@ msgid "Process Settings" msgstr "Paramètres de processus" msgid "Undef" -msgstr "Indéfini" +msgstr "Undef" msgid "Unsaved Changes" msgstr "Modifications non enregistrées" @@ -5790,7 +5968,7 @@ msgid "Old Value" msgstr "Ancienne valeur" msgid "New Value" -msgstr "Nouvelle valeur" +msgstr "Nouvelle Valeur" msgid "Transfer" msgstr "Transférer" @@ -5809,7 +5987,7 @@ msgid "All changes will not be saved" msgstr "Toutes les modifications ne seront pas enregistrées" msgid "All changes will be discarded." -msgstr "Toutes les modifications seront ignorées." +msgstr "Toutes les modifications seront rejetées." msgid "Save the selected options." msgstr "Enregistrer les options sélectionnées." @@ -5819,25 +5997,22 @@ msgstr "Conserver les options sélectionnées." msgid "Transfer the selected options to the newly selected preset." msgstr "" -"Transférer les options sélectionnées vers le préréglage nouvellement " +"Transférez les options sélectionnées vers le préréglage nouvellement " "sélectionné." #, boost-format msgid "" "Save the selected options to preset \n" "\"%1%\"." -msgstr "" -"Enregistrer les options sélectionnées vers le préréglage\n" -"\"%1%\"." +msgstr "Enregistrez les options sélectionnées dans le préréglage \"%1%\"." #, boost-format msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"Transférer les options sélectionnées vers le préréglage nouvellement " -"sélectionné\n" -"\"%1%\"." +"Transférez les options sélectionnées vers le préréglage nouvellement " +"sélectionné \"%1%\"." #, boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" @@ -5866,27 +6041,27 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Vous avez modifié certains paramètres du préréglage \"%1%\".\n" -"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur)\n" -"en basculant sur un autre préréglage ?" +"Vous avez modifié certains paramètres du préréglage \"%1%\". \n" +"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur) après " +"avoir changé de préréglage ?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Vous avez modifié certains paramètres prédéfinis.\n" -"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur)\n" -"en basculant sur un autre préréglage ?" +"Vous avez modifié certains paramètres prédéfinis. \n" +"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur) après " +"avoir changé de préréglage ?" msgid "Extruders count" -msgstr "Nombre d’extrudeurs" +msgstr "Nombre d'extrudeurs" msgid "General" msgstr "Général" msgid "Capabilities" -msgstr "Capacités" +msgstr "Fonctionnalités" msgid "Select presets to compare" msgstr "Sélectionnez les préréglages à comparer" @@ -5895,7 +6070,7 @@ msgid "Show all presets (including incompatible)" msgstr "Afficher tous les préréglages (y compris incompatibles)" msgid "Add File" -msgstr "Ajouter un fichier" +msgstr "Ajouter un Fichier" msgid "Set as cover" msgstr "Définir comme couverture" @@ -5908,10 +6083,10 @@ msgid "The name \"%1%\" already exists." msgstr "Le nom \"%1%\" existe déjà." msgid "Basic Info" -msgstr "Informations" +msgstr "Informations de base" msgid "Pictures" -msgstr "Photos" +msgstr "Des photos" msgid "Bill of Materials" msgstr "Nomenclature" @@ -5937,10 +6112,10 @@ msgstr "Mise à jour de la configuration" msgid "A new configuration package available, Do you want to install it?" msgstr "" -"Un nouveau package de configuration est disponible, Voulez-vous l'installer ?" +"Un nouveau package de configuration disponible, Voulez-vous l'installer ?" msgid "Description:" -msgstr "Description :" +msgstr "La description:" msgid "Configuration incompatible" msgstr "Configuration incompatible" @@ -5954,19 +6129,19 @@ 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 "" -"Le package de configuration est incompatible avec l'application actuelle.\n" -"%s mettra à jour le package de configuration, sinon il ne pourra pas démarrer" +"Le package de configuration est incompatible avec l'application actuelle. %s " +"mettra à jour le package de configuration, sinon il ne pourra pas démarrer" #, c-format, boost-format msgid "Exit %s" -msgstr "Quitter %s" +msgstr "Sortir de %s" msgid "the Configuration package is incompatible with current APP." msgstr "" "le package de configuration est incompatible avec l'application actuelle." msgid "Configuration updates" -msgstr "Mises à jour de configuration" +msgstr "Mises à jour de la configuration" msgid "No updates available." msgstr "Aucune mise à jour disponible." @@ -5975,24 +6150,24 @@ msgid "The configuration is up to date." msgstr "La configuration est à jour." msgid "Auto-Calc" -msgstr "Calcul Auto" +msgstr "Auto-Calc" msgid "Flushing volumes for filament change" -msgstr "Volumes de purge - Changement de filament" +msgstr "Volumes de rinçage pour le changement de filament" msgid "Multiplier" msgstr "Multiplicateur" msgid "Flushing volume (mm³) for each filament pair." -msgstr "Volume de purge (mm³) pour chaque paire de filaments." +msgstr "Volume de rinçage (mm³) pour chaque paire de filaments." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Suggestion : Volume réel dans la plage [%d, %d]" +msgstr "Suggestion : Volume de rinçage dans la plage [%d, %d]." #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." -msgstr "Le multiplicateur doit être dans la plage [%.2f, %.2f]." +msgstr "Le multiplicateur doit être compris dans la plage [%.2f, %.2f]." msgid "unloaded" msgstr "déchargé" @@ -6028,24 +6203,24 @@ msgstr "Liste des objets" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" -"Importer des données de géométrie à partir de fichiers STL/STEP/3MF/OBJ/AMF." +"Importez des données de géométrie à partir de fichiers STL/STEP/3MF/OBJ/AMF." msgid "⌘+Shift+G" -msgstr "⌘ + Shift + G" +msgstr "⌘+Maj+G" msgid "Ctrl+Shift+G" -msgstr "Ctrl + Shift + G" +msgstr "Ctrl+Maj+G" msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" msgid "Paste from clipboard" -msgstr "Coller depuis le presse-papiers" +msgstr "Coller depuis le presse-papier" msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "" -"Afficher/Masquer la boîte de dialogue des paramètres des périphériques de " -"connexion 3D" +"Afficher/Masquer la boîte de dialogue des paramètres des périphériques " +"3Dconnexion" msgid "Show keyboard shortcuts list" msgstr "Afficher la liste des raccourcis clavier" @@ -6057,19 +6232,19 @@ msgid "Rotate View" msgstr "Rotation de la vue" msgid "Pan View" -msgstr "Vue panoramique" +msgstr "Déplacement de vue" msgid "Mouse wheel" -msgstr "Molette de la souris" +msgstr "Molette de souris" msgid "Zoom View" -msgstr "Vue zoomée" +msgstr "Vue agrandie" msgid "Shift+A" -msgstr "Shift + A" +msgstr "Maj+A" msgid "Shift+R" -msgstr "Shift + R" +msgstr "Maj+R" msgid "" "Auto orientates selected objects or all objects.If there are selected " @@ -6081,160 +6256,157 @@ msgstr "" "Sinon, il oriente tous les objets du disque actuel." msgid "Shift+Tab" -msgstr "Shift + Tab" +msgstr "Maj+Tab" msgid "Collapse/Expand the sidebar" -msgstr "Réduire/Agrandir la barre latérale" +msgstr "Réduire/développer la barre latérale" msgid "⌘+Any arrow" -msgstr "⌘ + N'importe quelle flèche" +msgstr "⌘+n'importe quelle flèche" msgid "Movement in camera space" msgstr "Mouvement dans l'espace de la caméra" msgid "⌥+Left mouse button" -msgstr "⌥ + Bouton gauche de la souris" +msgstr "⌥+Bouton gauche de la souris" msgid "Select a part" msgstr "Sélectionner une pièce" msgid "⌘+Left mouse button" -msgstr "⌘ + Bouton gauche de la souris" +msgstr "⌘+Bouton gauche de la souris" msgid "Select multiple objects" -msgstr "Sélectionner plusieurs objets" +msgstr "sélectionnez tous les objets sur la plaque actuelle" msgid "Ctrl+Any arrow" msgstr "Ctrl+n'importe quelle flèche" msgid "Alt+Left mouse button" -msgstr "Alt + Bouton gauche de la souris" +msgstr "Alt+Bouton gauche de la souris" msgid "Ctrl+Left mouse button" -msgstr "Ctrl + Bouton gauche de la souris" +msgstr "Ctrl+Bouton gauche de la souris" msgid "Shift+Left mouse button" -msgstr "Maj + Bouton gauche de la souris" +msgstr "Maj+Bouton gauche de la souris" msgid "Select objects by rectangle" msgstr "Sélectionner les objets par rectangle" msgid "Arrow Up" -msgstr "Flèche vers le haut" +msgstr "Flèche Haut" msgid "Move selection 10 mm in positive Y direction" -msgstr "Déplacer la sélection de 10 mm dans la direction Y positif" +msgstr "Déplacer la sélection de 10 mm dans la direction positive Y" msgid "Arrow Down" -msgstr "Flèche vers le bas" +msgstr "Flèche Bas" msgid "Move selection 10 mm in negative Y direction" -msgstr "Déplacer la sélection de 10 mm dans la direction Y négatif" +msgstr "Déplacer la sélection de 10 mm dans la direction négative Y" msgid "Arrow Left" -msgstr "Flèche vers la gauche" +msgstr "Flèche Gauche" msgid "Move selection 10 mm in negative X direction" -msgstr "Déplacer la sélection de 10 mm dans la direction X négative" +msgstr "Déplacer la sélection de 10 mm dans la direction négative X" msgid "Arrow Right" -msgstr "Flèche vers la droite" +msgstr "Flèche Droite" msgid "Move selection 10 mm in positive X direction" -msgstr "Déplacer la sélection de 10 mm dans la direction X positive" +msgstr "Déplacer la sélection de 10 mm dans la direction positive X" msgid "Shift+Any arrow" -msgstr "Maj + N'importe quelle flèche" +msgstr "Maj+n'importe quelle flèche" msgid "Movement step set to 1 mm" -msgstr "Pas de mouvement réglé sur 1 mm" +msgstr "Pas du mouvement réglé sur 1 mm" msgid "Esc" -msgstr "Esc" +msgstr "Échap" msgid "keyboard 1-9: set filament for object/part" -msgstr "clavier 1-9 : définir le filament pour objet/pièce" +msgstr "clavier 1-9 : définir le filament pour l'objet/la pièce" msgid "Camera view - Default" -msgstr "Vue de la caméra - Par défaut" +msgstr "Vue caméra - Par défaut" msgid "Camera view - Top" -msgstr "Vue de la caméra - Haut" +msgstr "Vue caméra - Haut" msgid "Camera view - Bottom" -msgstr "Vue de la caméra - Bas" +msgstr "Vue caméra - Bas" msgid "Camera view - Front" msgstr "Vue de la caméra - Avant" msgid "Camera view - Behind" -msgstr "Vue de la caméra - Derrière" +msgstr "Vue caméra - Derrière" msgid "Camera Angle - Left side" -msgstr "Angle de la caméra - Côté gauche" +msgstr "Angle de caméra - Côté gauche" msgid "Camera Angle - Right side" -msgstr "Angle de la caméra - Côté droit" +msgstr "Angle de caméra - Côté droit" msgid "Select all objects" msgstr "Sélectionner tous les objets" msgid "Gizmo move" -msgstr "Gizmo Déplacements" +msgstr "Mouvement Gizmo" msgid "Gizmo scale" -msgstr "Gizmo Échelle" +msgstr "Échelle Gizmo" msgid "Gizmo rotate" -msgstr "Gizmo Rotation" +msgstr "Rotation Gizmo" msgid "Gizmo cut" -msgstr "Gizmo Couper" +msgstr "Découpe Gizmo" msgid "Gizmo Place face on bed" -msgstr "Gizmo Placer la face sur le plateau" +msgstr "Placer Gizmo sur le plateau" msgid "Gizmo SLA support points" -msgstr "Gizmo Point de support SLA" +msgstr "Points de supports Gizmo SLA" msgid "Gizmo FDM paint-on seam" -msgstr "Gizmo Peinture de la couture FDM" - -msgid "Swtich between Prepare/Prewview" -msgstr "Basculer entre Préparer/Aperçu" +msgstr "Couture peinte Gizmo FDM" msgid "Plater" -msgstr "Plaquer" +msgstr "Plateau" msgid "Move: press to snap by 1mm" -msgstr "Déplacement : appuyez pour aligner de 1 mm" +msgstr "Déplacer : appuyez pour aligner de 1 mm" msgid "⌘+Mouse wheel" -msgstr "⌘ + Molette de la souris" +msgstr "⌘+molette de la souris" msgid "Support/Color Painting: adjust pen radius" -msgstr "Support/Peinture : ajuster le rayon du stylet" +msgstr "Support/Peinture couleur : ajustez le rayon du stylet" msgid "⌥+Mouse wheel" -msgstr "⌥ + Molette de la souris" +msgstr "⌥+Molette de la souris" msgid "Support/Color Painting: adjust section position" -msgstr "Support/Peinture : ajuster la position de la section" +msgstr "Support/Peinture couleur : ajuster la position de la section" msgid "Ctrl+Mouse wheel" -msgstr "Ctrl + Molette de la souris" +msgstr "Ctrl+molette de la souris" msgid "Alt+Mouse wheel" -msgstr "Alt + Molette de la souris" +msgstr "Alt+molette de la souris" msgid "Gizmo" -msgstr "Gizmo" +msgstr "Bidule" msgid "Set extruder number for the objects and parts" -msgstr "Définir le numéro de l’extrudeur pour les objets et les pièces" +msgstr "Définir le numéro d'extrudeuse pour les objets et les pièces" msgid "Delete objects, parts, modifiers " -msgstr "Supprimer des objets, des pièces, des modificateurs " +msgstr "Supprimer des objets, des pièces, des modificateurs" msgid "Space" msgstr "Espace" @@ -6251,31 +6423,30 @@ msgstr "" "Sélectionnez l'objet/la pièce et cliquez avec la souris pour changer le nom" msgid "Objects List" -msgstr "Liste des objets" +msgstr "Liste d'objets" msgid "Vertical slider - Move active thumb Up" -msgstr "Curseur vertical - Déplacer le pouce actif vers le haut" +msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Haut" msgid "Vertical slider - Move active thumb Down" -msgstr "Curseur vertical - Déplacer le pouce actif vers le bas" +msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Bas" msgid "Horizontal slider - Move active thumb Left" -msgstr "Curseur horizontal - Déplacer le pouce actif vers la gauche" +msgstr "" +"Barre de défilement horizontale - Déplacer le curseur actif vers la Gauche" msgid "Horizontal slider - Move active thumb Right" -msgstr "Curseur horizontal - Déplacer le pouce actif vers la droite" +msgstr "" +"Barre de défilement horizontale - Déplacer le curseur actif vers la Droite" msgid "On/Off one layer mode of the vertical slider" -msgstr "Activer/désactiver le mode une couche du curseur vertical" - -msgid "On/Off g-code window" -msgstr "On/Off Fenêtre G-code" +msgstr "On/Off mode couche unique de la barre de défilement verticale" msgid "Move slider 5x faster" -msgstr "Déplacer le curseur 5 fois plus vite" +msgstr "Déplacez le curseur 5 fois plus vite" msgid "Shift+Mouse wheel" -msgstr "Maj + Molette de la souris" +msgstr "Maj+Molette de la souris" msgid "Release Note" msgstr "Note de version" @@ -6288,70 +6459,67 @@ msgid "Network plug-in update" msgstr "Mise à jour du plug-in réseau" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" "Cliquez sur OK pour mettre à jour le plug-in réseau lors du prochain " -"démarrage de Orca Slicer." +"lancement de Bambu Studio." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "" -"Un nouveau plug-in réseau (%s) est disponible, voulez-vous l'installer ?" +"Un nouveau plug-in réseau (%s) est disponible. Voulez-vous l'installer ?" -msgid "New version of Orca Slicer" -msgstr "Nouvelle version de Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Nouvelle version de Bambu Studio" msgid "Don't remind me of this version again" -msgstr "Ne plus me rappeler cette version" - -msgid "Done" -msgstr "Terminé" +msgstr "Ne me rappelez plus cette version." msgid "LAN Connection Failed (Sending print file)" -msgstr "Échec de la connexion LAN (envoi du fichier d’impression)" +msgstr "Échec de la connexion au réseau local (envoi du fichier d'impression)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Étape 1, veuillez confirmer que Orca Slicer et votre imprimante sont sur le " +"Étape 1, confirmez que Bambu Studio et votre imprimante se trouvent sur le " "même réseau local." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Étape 2, si l’adresse IP et le code d’accès ci-dessous sont différents des " -"valeurs réelles de votre imprimante, veuillez les corriger." +"Étape 2, si l'adresse IP et le code d'accès ci-dessous sont différents des " +"valeurs actuelles de votre imprimante, corrigez-les." msgid "IP" msgstr "IP" msgid "Access Code" -msgstr "Code d'accès" +msgstr "Code d'Accès" msgid "Where to find your printer's IP and Access Code?" -msgstr "Où trouver l’adresse IP et le code d’accès de votre imprimante ?" +msgstr "Où trouver l'adresse IP et le code d'accès de votre imprimante ?" msgid "Error: IP or Access Code are not correct" -msgstr "Erreur : l’IP ou le code d’accès n’est pas correct" +msgstr "Erreur : l'adresse IP ou le code d'accès ne sont pas corrects" msgid "Model:" -msgstr "Modèle:" +msgstr "Modèle :" msgid "Serial:" -msgstr "Serial:" +msgstr "N° de série:" msgid "Version:" -msgstr "Version:" +msgstr "Version :" msgid "Update firmware" -msgstr "Mettre à jour le firmware" +msgstr "Mise à jour du firmware" msgid "Printing" msgstr "Impression" msgid "Idle" -msgstr "Inactive" +msgstr "Inactif" msgid "Latest version" msgstr "Dernière version" @@ -6360,7 +6528,7 @@ msgid "Updating" msgstr "Mise à jour" msgid "Updating failed" -msgstr "Échec de la mise à jour" +msgstr "La mise à jour a échoué" msgid "Updating successful" msgstr "Mise à jour réussie" @@ -6369,34 +6537,34 @@ 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 "" -"Êtes-vous sûr de vouloir mettre à jour ? Cela prendra environ 10 minutes. Ne " -"coupez pas l'alimentation pendant la mise à jour de l'imprimante." +"Êtes-vous sûr de vouloir effectuer la mise à jour ? Cela prendra environ 10 " +"minutes. Ne mettez pas l'imprimante hors tension durant la mise à jour." 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 "" -"Une mise à jour importante a été détectée et doit être exécutée avant que " -"l'impression puisse continuer. Voulez-vous mettre à jour maintenant ? Vous " -"pouvez également mettre à jour plus tard via le bouton ‘Mettre à jour le " -"firmware'." +"Une mise à jour importante a été détectée et doit être exécutée avant de " +"pouvoir poursuivre l'impression. Voulez-vous effectuer la mise à jour " +"maintenant ? Vous pouvez également effectuer une mise à jour ultérieurement " +"à partir de \"Mettre à jour le firmware\"." 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 the studio." msgstr "" -"La version du firmware est anormale. Une réparation et une mise à jour sont " -"nécessaires avant l'impression. Voulez-vous mettre à jour maintenant ? Vous " -"pouvez également mettre à jour plus tard via l'imprimante ou au prochain " -"démarrage de Orca Slicer." +"La version du firmware est erronée. La réparation et la mise à jour sont " +"nécessaires avant l'impression. Voulez-vous effectuer la mise à jour " +"maintenant ? Vous pouvez également effectuer une mise à jour ultérieurement " +"depuis l'imprimante ou lors du prochain démarrage de Bambu Studio." msgid "Extension Board" -msgstr "Carte d'extension" +msgstr "Carte d'Extension" msgid "Saving objects into the 3mf failed." -msgstr "La sauvegarde des objets dans le 3mf a échoué." +msgstr "L'enregistrement d'objets dans le 3mf a échoué." msgid "Only Windows 10 is supported." msgstr "Seul Windows 10 est pris en charge." @@ -6445,30 +6613,35 @@ msgstr "Réparation annulée" #, boost-format msgid "Copying of file %1% to %2% failed: %3%" -msgstr "Échec de la copie du fichier %1% vers %2% : %3%" +msgstr "Échec de la copie du fichier %1% vers %2% : %3%" + +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Échec de la copie du répertoire %1% vers %2% : %3%" msgid "Need to check the unsaved changes before configuration updates." msgstr "" -"Il est nécessaire de vérifier les modifications non enregistrées avant les " -"mises à jour de configuration." +"Besoin de vérifier les modifications non enregistrées avant les mises à jour " +"de configuration." msgid "Configuration package updated to " -msgstr "Package de configuration mis à jour pour " +msgstr "Package de configuration mis à jour pour" msgid "Open G-code file:" -msgstr "Ouvrir un fichier G-code :" +msgstr "Ouvrir un fichier G-code :" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Un objet a une couche initiale vide et ne peut pas être imprimé. Veuillez " -"couper le bas ou activer les supports." +"Le ou les objets suivants ont une couche initiale vide et ne peuvent pas " +"être imprimés. Veuillez couper la base ou activer les supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." msgstr "" -"L'objet ne peut pas être imprimé pour une couche vide entre %1% et %2%." +"L'objet comporte des couches vides comprises entre %1% et %2% et ne peut pas " +"être imprimé." #, boost-format msgid "Object: %1%" @@ -6478,23 +6651,21 @@ msgid "" "Maybe parts of the object at these height are too thin, or the object has " "faulty mesh" msgstr "" -"Il est possible que certaines parties de l'objet à cette hauteur sont trop " -"fines ou que l'objet a un maillage défectueux" +"Peut-être que certaines parties de l'objet à ces hauteurs sont trop fines ou " +"que l'objet a un maillage défectueux" msgid "No object can be printed. Maybe too small" -msgstr "" -"Aucun objet ne peut être imprimé. Il est possible qu’il soit trop petit" +msgstr "Aucun objet ne peut être imprimé. Peut-être trop petit" msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" msgstr "" "Échec de la génération du gcode pour un G-code personnalisé non valide.\n" -"\n" msgid "Please check the custom G-code or use the default custom G-code." msgstr "" -"Veuillez vérifier le G-code personnalisé ou utiliser le G-code personnalisé " +"Veuillez vérifier le code G personnalisé ou utiliser le code G personnalisé " "par défaut." #, boost-format @@ -6502,16 +6673,13 @@ msgid "Generating G-code: layer %1%" msgstr "Génération du G-code : couche %1%" msgid "Inner wall" -msgstr "Paroi intérieure" +msgstr "Mur intérieur" msgid "Outer wall" -msgstr "Paroi extérieure" +msgstr "Mur extérieur" msgid "Overhang wall" -msgstr "Paroi en surplomb" - -msgid "Sparse infill" -msgstr "Remplissage" +msgstr "Mur en surplomb" msgid "Internal solid infill" msgstr "Remplissage solide interne" @@ -6522,53 +6690,50 @@ msgstr "Surface supérieure" msgid "Bottom surface" msgstr "Surface inférieure" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Pont" msgid "Gap infill" -msgstr "Remplissage des espaces" - -msgid "Skirt" -msgstr "" +msgstr "Remplissage d'espace" msgid "Support interface" -msgstr "Interfaces de support" +msgstr "Interface de support" msgid "Support transition" -msgstr "Transition de support" +msgstr "Soutenir la transition" msgid "Multiple" -msgstr "Multiple" +msgstr "Plusieurs" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "" "Échec du calcul de la largeur de ligne de %1%. Impossible d'obtenir la " -"valeur de \"%2%\" " +"valeur de \"%2%\"" msgid "undefined error" -msgstr "erreur indéfinie" +msgstr "erreur non définie" msgid "too many files" msgstr "trop de fichiers" msgid "file too large" -msgstr "fichier trop large" +msgstr "fichier trop volumineux" msgid "unsupported method" -msgstr "méthode non prise en charge" +msgstr "méthode non supportée" msgid "unsupported encryption" -msgstr "cryptage non pris en charge" +msgstr "cryptage non supporté" msgid "unsupported feature" -msgstr "fonctionnalité non prise en charge" +msgstr "fonction non supportée" msgid "failed finding central directory" -msgstr "échec de la recherche du dossier central" +msgstr "impossible de trouver le répertoire central" msgid "not a ZIP archive" -msgstr "n’est pas une archive ZIP" +msgstr "n'est pas une archive ZIP" msgid "invalid header or corrupted" msgstr "en-tête invalide ou corrompu" @@ -6580,77 +6745,76 @@ msgid "decompression failed" msgstr "la décompression a échoué" msgid "compression failed" -msgstr "la compression a échoué" +msgstr "échec de la compression" msgid "unexpected decompressed size" -msgstr "taille décompressée inattendue" +msgstr "volume de décompression inattendu" msgid "CRC check failed" -msgstr "la vérification CRC a échoué" +msgstr "La vérification CRC a échoué" msgid "unsupported central directory size" -msgstr "taille du dossier central non prise en charge" +msgstr "volume du répertoire central non supporté" msgid "allocation failed" -msgstr "l'attribution a échoué" +msgstr "échec de l'allocation" msgid "file open failed" -msgstr "l'ouverture du fichier a échoué" +msgstr "échec de l'ouverture du fichier" msgid "file create failed" -msgstr "la création du fichier a échoué" +msgstr "échec de création du fichier" msgid "file write failed" -msgstr "l'écriture du fichier a échoué" +msgstr "échec d'écriture du fichier" msgid "file read failed" -msgstr "la lecture du fichier a échoué" +msgstr "échec de lecture du fichier" msgid "file close failed" -msgstr "la fermeture du fichier a échoué" +msgstr "échec de la fermeture du fichier" msgid "file seek failed" -msgstr "la recherche de fichier a échoué" +msgstr "impossible de trouver le fichier" msgid "file stat failed" -msgstr "les statistiques du fichier ont échoué" +msgstr "impossible d'établir des statistiques pour ce fichier" msgid "invalid parameter" -msgstr "paramètre invalide" +msgstr "paramètre non valide" msgid "invalid filename" msgstr "nom de fichier non valide" msgid "buffer too small" -msgstr "tampon trop petit" +msgstr "buffer trop petit" msgid "internal error" msgstr "erreur interne" msgid "file not found" -msgstr "fichier introuvable" +msgstr "fichier non trouvé" msgid "archive too large" msgstr "archive trop volumineuse" msgid "validation failed" -msgstr "validation échouée" +msgstr "échec de la validation" msgid "write callback failed" -msgstr "échec du rappel d'écriture" +msgstr "Échec du rappel d'écriture" #, boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% est trop proche de la zone d'exclusion, cela pourrait provoquer des " -"collisions lors de l'impression." +"%1% est trop proche de la zone d'exclusion. Il peut y avoir des collisions " +"lors de l'impression." #, boost-format msgid "%1% is too close to others, and collisions may be caused." msgstr "" -"%1% est trop proche des autres objets, cela pourrait provoquer des " -"collisions." +"%1% est trop proche des autres, cela pourrait provoquer des collisions." #, boost-format msgid "%1% is too tall, and collisions will be caused." @@ -6658,24 +6822,24 @@ msgstr "%1% est trop grand, cela pourrait provoquer des collisions." msgid " is too close to others, there may be collisions when printing." msgstr "" -" est trop proche des autres objets, cela pourrait provoquer des collisions " -"lors de l’impression." +" est trop proche des autres; il peut y avoir des collisions lors de " +"l'impression." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" est trop proche de la zone d'exclusion, cela pourrait provoquer des " -"collisions lors de l'impression." +" est trop proche d'une zone d'exclusion, il peut y avoir des collisions lors " +"de l'impression." msgid "Prime Tower" -msgstr "Tour de purge" +msgstr "Tour de nettoyage" msgid " is too close to others, and collisions may be caused.\n" msgstr "" -" est trop proche des autres objets. Cela pourrait provoquer des collisions.\n" +" est trop proche des autres. Des collisions risquent d'être provoquées.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" msgstr "" -" est trop proche de la zone d'exclusion. Cela va entraîner des collisions.\n" +" est trop proche d'une zone d'exclusion. Cela va entraîner des collisions.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " @@ -6683,8 +6847,8 @@ msgid "" "during printing" msgstr "" "Impossible d'imprimer plusieurs filaments qui ont une grande différence de " -"température ensemble. Cela pourrait entraîner un blocage de l'extrudeur ou " -"de la buse pendant l'impression voir même être endommagés" +"température ensemble. Sinon, l'extrudeuse et la buse peuvent être bloquées " +"ou endommagées pendant l'impression" msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." @@ -6693,65 +6857,66 @@ msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." msgstr "" -"Le mode lisse du Timelapse n'est pas pris en charge lorsque la séquence " -"d’impression \"Par objet\" est activée." +"Le mode fluide du timelapse n'est pas pris en charge lorsque le mode " +"d'impression « par objet » est activé." msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." msgstr "" "Veuillez sélectionner la séquence d'impression \"Par objet\" pour imprimer " -"plusieurs objets en mode vase." +"plusieurs objets en mode vase en spirale." msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." msgstr "" -"Le mode vase ne fonctionne pas lorsqu'un objet contient plusieurs matériaux." +"Le mode vase en spirale ne fonctionne pas lorsqu'un objet contient plusieurs " +"matériaux." msgid "The prime tower is not supported in \"By object\" print." msgstr "" -"La tour de purge n'est pas prise en charge avec la séquence d’impression " -"\"Par objet\"." +"La tour de nettoyage n'est pas prise en charge dans l'impression \"Par objet" +"\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"La tour de purge n'est pas prise en charge lorsque la hauteur de couche " +"La tour de nettoyage n'est pas prise en charge lorsque la hauteur de couche " "adaptative est activée. Cela nécessite que tous les objets aient la même " "hauteur de couche." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"La tour de purge nécessite que \"l’espace de support\" soit un multiple de " -"la hauteur de la couche" +"La tour de nettoyage nécessite que \"l'écart de support\" soit un multiple " +"de la hauteur de la couche" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"La tour de purge nécessite que tous les objets aient les mêmes hauteurs de " -"couche" +"La tour de nettoyage nécessite que tous les objets aient la même hauteur de " +"couche." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"La tour de purge nécessite que tous les objets soient imprimés avec le même " -"nombre de couches de radeau" +"La tour de nettoyage nécessite que tous les objets soient imprimés sur le " +"même nombre de couche de radeau." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"La tour de purge nécessite que tous les objets soient découpés avec les " -"mêmes hauteurs de couche." +"La tour de nettoyage nécessite que tous les objets soient découpés avec la " +"même hauteur de couche." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"La tour de purge n'est prise en charge que si tous les objets ont la même " -"hauteur de couche variable" +"La tour de nettoyage n'est prise en charge que si tous les objets ont la " +"même hauteur de couche variable" msgid "Too small line width" msgstr "Largeur de ligne trop petite" @@ -6762,40 +6927,24 @@ msgstr "Largeur de ligne trop grande" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"La tour de purge nécessite que le support ait la même hauteur de couche que " -"l'objet." +"La tour de nettoyage nécessite que le support ait la même hauteur de couche " +"avec l'objet." msgid "" "Support enforcers are used but support is not enabled. Please enable support." msgstr "" -"Les supports forcés sont utilisés mais les supports ne sont pas activés. " -"Veuillez les activer." +"Les forceurs de support sont utilisés mais le support n'est pas activé. " +"Veuillez activer les supports." msgid "Layer height cannot exceed nozzle diameter" msgstr "La hauteur de la couche ne peut pas dépasser le diamètre de la buse" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Le plateau %d : %s ne prend pas en charge le filament %s" +msgstr "Plaque %d : %s ne prend pas en charge le filament %s" msgid "Generating skirt & brim" -msgstr "Génération jupe & bordure" +msgstr "Génération jupe et bord" msgid "Exporting G-code" msgstr "Exportation du G-code" @@ -6810,40 +6959,40 @@ msgid "Printable area" msgstr "Zone imprimable" msgid "Bed exclude area" -msgstr "Zone d'exclusion du plateau" +msgstr "Zone d'exclusion de lit" 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 "" -"Zone non imprimable dans le plan X-Y. Par exemple, les imprimantes de la " +"Zone non imprimable dans le plan XY. Par exemple, les imprimantes de la " "série X1 utilisent le coin avant gauche pour couper le filament lors du " -"changement de filament. La surface est exprimée sous forme de polygone par " -"points au format suivant : \"XxY, XxY, …\"" +"changement de filament. La zone est exprimée sous forme de polygone par des " +"points au format suivant : \"XxY, XxY,... \"" msgid "Bed custom texture" -msgstr "Texture personnalisée du plateau" +msgstr "Texture personnalisée du lit" msgid "Bed custom model" msgstr "Modèle de plateau personnalisé" msgid "Elephant foot compensation" -msgstr "Compensation du pied d'éléphant" +msgstr "Compensation de l'effet patte d'éléphant" msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"Rétrécis la couche initiale sur le plateau pour compenser l'effet de pied " +"Rétrécissez la couche initiale sur le plateau pour compenser l'effet de pied " "d'éléphant" msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"Hauteur de chaque couche. Une hauteur de couche plus petite signifie plus de " -"précision et une plus longue durée d'impression" +"Hauteur de tranchage pour chaque couche. Une hauteur de couche plus petite " +"signifie plus de précision et plus de temps d'impression" msgid "Printable height" msgstr "Hauteur imprimable" @@ -6852,10 +7001,10 @@ msgid "Maximum printable height which is limited by mechanism of printer" msgstr "Hauteur imprimable maximale limitée par le mécanisme de l'imprimante" msgid "Printer preset names" -msgstr "Noms prédéfinis de l'imprimante" +msgstr "Noms des préréglages de l'imprimante" msgid "Hostname, IP or URL" -msgstr "Nom d'hôte, IP ou URL" +msgstr "Nom d'hôte, adresse IP ou URL" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6864,21 +7013,19 @@ msgid "" "name and password into the URL in the following format: https://username:" "password@your-octopi-address/" msgstr "" -"Slic3r peut télécharger des fichiers G-code sur une imprimante hôte. Ce " -"champ doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance de " -"l'imprimante hôte. L'hôte d'impression derrière HAProxy avec " -"l'authentification de base activée est accessible en saisissant le nom " -"d'utilisateur et le mot de passe dans l'URL au format suivant : https://" -"nomutilisateur:motdepasse@votre-adresse-octopi/" +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " +"doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte de " +"l'imprimante. L'hôte d'impression derrière HAProxy avec l'authentification " +"de base activée est accessible en saisissant le nom d'utilisateur et le mot " +"de passe dans l'URL au format suivant : https://username:password@your-" +"octopi-address/" msgid "Device UI" -msgstr "Interface utilisateur de l’appareil" +msgstr "" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Spécifiez l’URL de l’interface utilisateur de votre appareil si elle n’est " -"pas identique à print_host" msgid "API Key / Password" msgstr "Clé API / Mot de passe" @@ -6887,14 +7034,14 @@ msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -"Slic3r peut télécharger des fichiers G-code sur l'imprimante hôte. Ce champ " +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " "doit contenir la clé API ou le mot de passe requis pour l'authentification." msgid "Name of the printer" msgstr "Nom de l'imprimante" msgid "HTTPS CA File" -msgstr "Fichier CA HTTPS" +msgstr "Fichier HTTPS CA" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " @@ -6902,8 +7049,8 @@ msgid "" "is used." msgstr "" "Un fichier de certificat CA personnalisé peut être spécifié pour les " -"connexions HTTPS OctoPrint, au format crt/pem. S'il n'est pas renseigné, le " -"référentiel de certificats OS CA par défaut est utilisé." +"connexions HTTPS OctoPrint, au format crt/pem. Si ce champ est laissé vide, " +"le référentiel de certificats OS CA par défaut est utilisé." msgid "User" msgstr "Utilisateur" @@ -6912,22 +7059,22 @@ msgid "Password" msgstr "Mot de passe" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Ignorer les vérifications de révocation de certificat HTTPS" +msgstr "Ignorer les contrôles de révocation des certificats HTTPS" 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 "" -"Ignore les vérifications de révocation de certificat HTTPS en cas de points " -"de distribution manquants ou hors ligne. On peut vouloir activer cette " -"option pour les certificats auto-signés si la connexion échoue." +"Ignorez les contrôles de révocation des certificats HTTPS en cas de points " +"de distribution manquants ou hors ligne. Il peut être utile d'activer cette " +"option pour les certificats auto-signés en cas d'échec de la connexion." msgid "Names of presets related to the physical printer" -msgstr "Noms des préréglages liés à l'imprimante physique" +msgstr "Noms des préréglages associés à l'imprimante physique" msgid "Authorization Type" -msgstr "Type d'autorisation" +msgstr "Type d'Autorisation" msgid "API key" msgstr "Clé API" @@ -6936,15 +7083,15 @@ msgid "HTTP digest" msgstr "Résumé HTTP" msgid "Avoid crossing wall" -msgstr "Éviter de traverser les parois" +msgstr "Évitez de traverser les murs" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"Faire un détour et éviter de traverser les parois ce qui pourrait causer des " +"Faites un détour et évitez de traverser le mur, ce qui pourrait causer des " "taches sur la surface" msgid "Avoid crossing wall - Max detour length" -msgstr "Éviter de traverser les parois - Longueur maximale du détour" +msgstr "Évitez de traverser les murs - Longueur maximale du détour" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6952,13 +7099,14 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Distance de détour maximale pour éviter de traverser les parois. Ne pas " -"faire de détour si la distance de détour est supérieure à la valeur définie. " -"La longueur du détour peut être spécifiée soit en valeur absolue, soit en " -"pourcentage (par exemple 50 %) d'un trajet direct. Valeur à 0 pour désactiver" +"Distance de détour maximale pour éviter de traverser un mur: l'imprimante ne " +"fera pas de détour si la distance de détour est supérieure à cette valeur. " +"La longueur du détour peut être spécifiée sous forme de valeur absolue ou de " +"pourcentage (par exemple 50 %) d'un trajet direct. Une valeur de 0 " +"désactivera cette option." msgid "mm or %" -msgstr "mm ou %" +msgstr "mm ou %" msgid "Other layers" msgstr "Autres couches" @@ -6967,9 +7115,9 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Cool Plate" msgstr "" -"Température du plateau de toutes les couches à l'exception de la première. " -"La valeur 0 signifie que le filament ne prend pas en charge l'impression sur " -"le plateau Bambu Cool Plate" +"Il s'agit de la température du plateau pour toutes les couches à l'exception " +"de la première. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur le plateau froid (\"Cool plate\")." msgid "°C" msgstr "°C" @@ -6978,88 +7126,86 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"Température du plateau de toutes les couches à l'exception de la première. " -"La valeur 0 signifie que le filament ne prend pas en charge l'impression sur " -"le plateau Bambu Engineering Plate" +"Il s'agit de la température du plateau pour toutes les couches à l'exception " +"de la première. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur la plaque Engineering." 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 "" -"Température du plateau de toutes les couches à l'exception de la première. " -"La valeur 0 signifie que le filament ne prend pas en charge l'impression sur " -"le plateau Bambu High Temperature Plate" +"Il s'agit de la température du plateau pour toutes les couches à l'exception " +"de la première. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur le plateau haute température (\"High Temp plate\")." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Température du plateau de toutes les couches à l’exception de la première. " -"La valeur 0 signifie que le filament ne prend pas en charge l'impression sur " -"le plateau Bambu Dual-Sided Textured PEI Plate" +"Température du lit après la première couche. 0 signifie que le filament " +"n'est pas supporté par la plaque PEI texturée." msgid "Initial layer" msgstr "Couche initiale" msgid "Initial layer bed temperature" -msgstr "Température du plateau lors de la couche initiale" +msgstr "Température initiale du lit de couche" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" msgstr "" -"Température du plateau lors de la couche initiale. La valeur 0 signifie que " -"le filament ne prend pas en charge l'impression sur le plateau Bambu Cool " -"Plate" +"Il s'agit de la température du plateau pour la première couche. Une valeur à " +"0 signifie que ce filament ne peut pas être imprimé sur le plateau froid " +"(\"Cool plate\")." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" -"Température du plateau lors de la couche initiale. La valeur 0 signifie que " -"le filament ne prend pas en charge l'impression sur le plateau Bambu " -"Engineering Plate" +"Il s'agit de la température du plateau pour la première couche. Une valeur à " +"0 signifie que ce filament ne peut pas être imprimé sur le plateau " +"Engineering." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" -"Température du plateau lors de la couche initiale. La valeur 0 signifie que " -"le filament ne prend pas en charge l'impression sur le plateau Bambu High " -"Temperature Plate" +"Il s'agit de la température du plateau pour la première couche. Une valeur à " +"0 signifie que ce filament ne peut pas être imprimé sur le plateau haute " +"température (\"High Temp plate\")." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"Température du plateau lors de la couche initiale. La valeur 0 signifie que " -"le filament ne prend pas en charge l'impression sur le plateau Bambu Dual-" -"Sided Textured PEI Plate" +"La température du lit à la première couche. La valeur 0 signifie que le " +"filament n'est pas supporté sur la plaque PEI texturée." msgid "Bed types supported by the printer" -msgstr "Types de plateaux pris en charge par l'imprimante" +msgstr "Types de lit pris en charge par l'imprimante" msgid "First layer print sequence" msgstr "" msgid "This G-code is inserted at every layer change before lifting z" -msgstr "Ce G-code est inséré à chaque changement de couche avant la levée en Z" +msgstr "Ce G-code est inséré à chaque changement de couche avant de soulever z" msgid "Bottom shell layers" -msgstr "Nombre de couches des coques inférieures" +msgstr "Couches inférieures de la coque" msgid "" "This is the number of solid layers of bottom shell, including the bottom " "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"Il s'agit du nombre de couches solides des coques inférieures, y compris la " +"Il s'agit du nombre de couches solides de coque inférieure, y compris la " "couche de surface inférieure. Lorsque l'épaisseur calculée par cette valeur " "est plus fine que l'épaisseur de la coque inférieure, les couches de la " -"coque inférieure sont augmentées" +"coque inférieure seront augmentées" msgid "Bottom shell thickness" -msgstr "Épaisseur des coques inférieures" +msgstr "Épaisseur de la coque inférieure" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " @@ -7070,35 +7216,37 @@ msgid "" msgstr "" "Le nombre de couches solides inférieures est augmenté lors du découpage si " "l'épaisseur calculée par les couches de coque inférieures est inférieure à " -"la valeur définie. Cela peut éviter d'avoir une coque trop fine lorsque la " -"hauteur de couche est faible. Une valeur à 0 signifie que ce paramètre est " -"désactivé et que l'épaisseur de la coque inférieure est uniquement " -"déterminée par les couches de la coque inférieure" +"cette valeur. Cela peut éviter d'avoir une coque trop fine lorsque la " +"hauteur de couche est faible. 0 signifie que ce paramètre est désactivé et " +"que l'épaisseur de la coque inférieure est absolument déterminée par les " +"couches de la coque inférieure" msgid "Force cooling for overhang and bridge" -msgstr "Forcer la ventilation des surplombs et ponts" +msgstr "Forcer la ventilation pour les surplombs et ponts" msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" msgstr "" -"Cette option permet d’optimiser la vitesse du ventilateur de refroidissement " -"pour les surplombs et les ponts afin d'obtenir un meilleur refroidissement" +"Activez cette option pour optimiser la vitesse du ventilateur de " +"refroidissement des pièces pour le surplomb et le pont afin d'obtenir un " +"meilleur refroidissement" msgid "Fan speed for overhang" -msgstr "Vitesse du ventilateur pour les surplombs et ponts" +msgstr "Vitesse du ventilateur pour les surplombs" 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 "" -"Forcer le ventilateur de refroidissement à être à cette vitesse lors de " -"l'impression d'un pont ou d'une paroi qui a un degré de surplomb important. " -"Cela permet d’obtenir une meilleure qualité" +"Forcez le ventilateur de refroidissement de la pièce à être à cette vitesse " +"lors de l'impression d'un pont ou d'un mur en surplomb qui a un degré de " +"surplomb important. Forcer le refroidissement pour les surplombs et le pont " +"pour obtenir une meilleure qualité pour ces pièces." msgid "Cooling overhang threshold" -msgstr "Seuil de surplomb" +msgstr "Seuil de dépassement de refroidissement" #, c-format msgid "" @@ -7113,25 +7261,17 @@ msgstr "" "provenant de la couche inférieure. 0 %% signifie un refroidissement forcé de " "toutes les parois extérieures, quel que soit le degré de surplomb." -msgid "Bridge infill direction" -msgstr "Direction du remplissage des ponts" +msgid "Bridge direction" +msgstr "Direction du pont" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"Outrepasser l'angle de pontage. S'il est laissé à 0°, l'angle de pontage " -"sera calculé automatiquement. Sinon, l'angle fourni sera utilisé pour les " -"ponts externes. Utilisez 180° pour un angle nul." - -msgid "Bridge density" -msgstr "Densité des ponts" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" -"Densité des ponts externes, Une valeur à 100%% signifie un pont solide. La " -"valeur par défaut est 100%." +"Forçage de l’angle des ponts. S’il est laissé à zéro, l’angle des ponts sera " +"calculé automatiquement. Sinon, l’angle fourni sera utilisé pour les ponts " +"externes. Utilisez 180° pour un angle nul." msgid "Bridge flow" msgstr "Débit des ponts" @@ -7140,110 +7280,66 @@ msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Diminuez légèrement cette valeur (par exemple 0.9) pour réduire la quantité " +"Diminuez légèrement cette valeur (par exemple 0,9) pour réduire la quantité " "de matériaux pour le pont, pour améliorer l'affaissement" msgid "Top surface flow ratio" -msgstr "Débit des surfaces supérieures" +msgstr "" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" -"Ce facteur affecte la quantité de matériau pour le remplissage solide " -"supérieur. Vous pouvez le diminuer légèrement pour avoir une finition de " -"surface lisse" -msgid "Bottom surface flow ratio" -msgstr "Débit des surfaces inférieures" - -msgid "This factor affects the amount of material for bottom solid infill" +msgid "Initial layer flow ratio" msgstr "" -"Ce facteur affecte la quantité de matériau pour le remplissage solide " -"inférieur" -msgid "Precise wall(experimental)" -msgstr "Parois précises (expérimental)" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" -"Améliorer la précision de la coque en ajustant l’espacement des murs " -"extérieurs. Cela améliore également la consistance des couches." msgid "Only one wall on top surfaces" -msgstr "Une seule paroi sur les surfaces supérieures" +msgstr "Un seul mur sur les surfaces supérieures" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Utiliser qu'une seule paroi sur une surface plane pour donner plus d'espace " -"au motif de remplissage supérieur" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "Surfaces supérieures" + +msgid "Topmost surface" +msgstr "Surface la plus élevée" + msgid "Only one wall on first layer" msgstr "Une seule paroi sur la première couche" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" -"Utiliser qu’une seule paroi sur la première couche, pour donner plus " -"d’espace au motif de remplissage inférieur" - -msgid "Classic mode" -msgstr "Classique" - -msgid "Enable this option to use classic mode" -msgstr "Activer cette option pour utiliser le mode classique" +msgid "Use only one wall on the first layer of model" +msgstr "N'utilisez qu'un seul mur sur la première couche des modèles" msgid "Slow down for overhang" -msgstr "Ralentir lors des surplombs" +msgstr "Ralentir pour le surplomb" msgid "Enable this option to slow printing down for different overhang degree" -msgstr "Permet de ralentir l'impression pour différents degrés de surplomb" - -msgid "mm/s or %" -msgstr "mm/s ou %" - -msgid "External" msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Vitesse des ponts et parois complètement en surplombs" +"Activez cette option pour ralentir l'impression pour différents degrés de " +"surplomb" msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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%." +msgid "Speed of bridge and completely overhang wall" msgstr "" +"Il s'agit de la vitesse pour les ponts et les murs en surplomb à 100 %." msgid "Brim width" msgstr "Largeur de la bordure" msgid "Distance from model to the outermost brim line" -msgstr "Distance entre le modèle et la ligne la plus externe de la bordure" +msgstr "Distance du modèle à la ligne de bord la plus externe" msgid "Brim type" msgstr "Type de bordure" @@ -7252,70 +7348,34 @@ msgid "" "This controls the generation of the brim at outer and/or inner side of " "models. Auto means the brim width is analysed and calculated automatically." msgstr "" -"Cela contrôle la génération de la bordure extérieure et/ou intérieure des " -"modèles. Automatique signifie que la largeur de la bordure est analysée et " +"Cela permet de contrôler la génération de bordure extérieur et/ou intérieur " +"des modèles. Auto signifie que la largeur de bordure est analysée et " "calculée automatiquement." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "Bordure extérieure uniquement" - -msgid "Inner brim only" -msgstr "Bordure intérieure uniquement" - -msgid "Outer and inner brim" -msgstr "Bordure extérieure et intérieure" - msgid "Brim-object gap" -msgstr "Distance entre la bordure et l'objet" +msgstr "Écart bord-objet" msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"Espace entre la ligne la plus interne de la bordure et l'objet. Cela peut " -"faciliter le retrait de la bordure" - -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" +"Un espace entre la ligne de bord la plus interne et l'objet peut faciliter " +"le retrait du bord" msgid "Compatible machine" -msgstr "Imprimantes compatibles" +msgstr "Appareils compatibles" msgid "upward compatible machine" -msgstr "imprimante compatible en haut" +msgstr "machine à compatibilité ascendante" msgid "Compatible machine condition" -msgstr "Condition de l’imprimante compatible" +msgstr "État de la machine compatible" msgid "Compatible process profiles" msgstr "Profils de processus compatibles" msgid "Compatible process profiles condition" -msgstr "Condition des profils de processus compatibles" +msgstr "Condition de profils de processus compatibles" msgid "Print sequence, layer by layer or object by object" msgstr "Séquence d'impression, couche par couche ou objet par objet" @@ -7327,7 +7387,7 @@ msgid "By object" msgstr "Par objet" msgid "Slow printing down for better layer cooling" -msgstr "Ralentir l’impression pour un meilleur refroidissement" +msgstr "Impression lente pour un meilleur refroidissement des couches" msgid "" "Enable this option to slow printing speed down to make the final layer time " @@ -7335,11 +7395,11 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Cette option permet de ralentir la vitesse d'impression afin que la durée de " -"couche finale ne soit pas plus courte que le seuil de la durée de couche " -"dans \"Seuil de vitesse maximale\", afin que cette couche puisse être " -"refroidie plus longtemps. Cela peut améliorer la qualité de refroidissement " -"pour les petits détails" +"Activez cette option pour ralentir la vitesse d'impression afin que le temps " +"de couche final ne soit pas plus court que le seuil de temps de couche dans " +"\"Seuil de vitesse maximale du ventilateur\", afin que cette couche puisse " +"être refroidie plus longtemps. Cela peut améliorer la qualité de " +"refroidissement pour l'aiguille et les petits détails" msgid "Normal printing" msgstr "Impression normale" @@ -7358,25 +7418,23 @@ msgid "Default filament profile" msgstr "Profil de filament par défaut" msgid "Default filament profile when switch to this machine profile" -msgstr "Profil de filament par défaut lors du passage à ce profil d’imprimante" +msgstr "Profil de filament par défaut lors du passage à ce profil de machine" msgid "Default process profile" msgstr "Profil de processus par défaut" msgid "Default process profile when switch to this machine profile" -msgstr "" -"Profil de processus par défaut lors du passage à ce profil d’imprimante" +msgstr "Profil de processus par défaut lors du passage à ce profil de machine" msgid "No cooling for the first" -msgstr "Pas de ventilation pour la/les première(s)" +msgstr "Pas de refroidissement pour" 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 "" -"Arrêter tous les ventilateurs de refroidissement pour certaines premières " -"couches. Un arrêt des ventilateurs permet d’obtenir une meilleure adhérence " -"de la première couche sur le plateau" +"Éteignez tous les ventilateurs de refroidissement pour les premières " +"couches. Cela peut être utilisé pour améliorer l'adhérence à la plaque." msgid "layers" msgstr "couches" @@ -7388,9 +7446,9 @@ 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 "" -"Ne pas supporter toute la zone du pont, ce qui rend le support plus large. " -"Les ponts peuvent généralement s'imprimer directement sans support s'ils ne " -"sont pas très longs" +"Cela désactive le support des ponts, ce qui diminue le nombre de supports " +"requis. Les ponts peuvent généralement être imprimés directement sans " +"support s'ils ne sont pas très longs." msgid "Thick bridges" msgstr "Ponts épais" @@ -7400,13 +7458,13 @@ msgid "" "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"S'ils sont activés, les ponts sont plus fiables, peuvent couvrir de plus " -"longues distances, mais peuvent sembler moins bons. S'ils sont désactivés, " -"les ponts ont une meilleure apparence mais ne sont fiables que pour des " -"distances plus courtes." +"S'ils sont activés, les ponts sont plus fiables et peuvent couvrir de plus " +"longues distances, mais ils peuvent sembler moins jolis. S'ils sont " +"désactivés, les ponts ont une meilleure apparence mais ne sont fiables que " +"sur de courtes distances." msgid "Max bridge length" -msgstr "Longueur maximale des ponts" +msgstr "Longueur max des ponts" msgid "" "Max length of bridges that don't need support. Set it to 0 if you want all " @@ -7414,41 +7472,43 @@ msgid "" "any bridges to be supported." msgstr "" "Il s'agit de la longueur maximale des ponts qui n'ont pas besoin de support. " -"Une valeur à 0 permet que tous les ponts soient pris en charge, une valeur " -"très élevée permet qu'aucun pont ne soit pris en charge." +"Mettez 0 si vous souhaitez que tous les ponts soient pris en charge, ou " +"mettez une valeur très élevée si vous souhaitez qu'aucun pont ne soit pris " +"en charge." msgid "End G-code" msgstr "G-code de fin" msgid "End G-code when finish the whole printing" -msgstr "G-code lorsque l'ensemble de l'impression est terminée" +msgstr "Terminer le code G lorsque vous avez terminé toute l'impression" msgid "End G-code when finish the printing of this filament" -msgstr "G-code lorsque l'impression de ce filament est terminée" +msgstr "Fin du code G lorsque l'impression de ce filament est terminée" msgid "Ensure vertical shell thickness" -msgstr "Veiller à l'épaisseur verticale de la coque" +msgstr "Assurer l'épaisseur verticale de la coque" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Ajouter un remplissage solide près des surfaces en pente pour garantir " -"l'épaisseur verticale de la coque (couches solides supérieures + inférieures)" +"Ajoutez du remplissage solide à proximité des surfaces inclinées pour " +"garantir l'épaisseur verticale de la coque (couches solides supérieure" +"+inférieure)." msgid "Internal bridge support thickness" -msgstr "Épaisseur des supports de ponts internes" +msgstr "Épaisseur du support interne du pont" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" -msgstr "Motif des surfaces supérieures" +msgstr "Motif de surface supérieure" msgid "Line pattern of top surface infill" msgstr "Motif de ligne du remplissage de la surface supérieure" @@ -7466,24 +7526,24 @@ msgid "Monotonic line" msgstr "Ligne monotone" msgid "Aligned Rectilinear" -msgstr "Rectiligne aligné" +msgstr "Rectiligne Aligné" msgid "Hilbert Curve" msgstr "Courbe de Hilbert" msgid "Archimedean Chords" -msgstr "Accords d'Archimède" +msgstr "Spirale d'Archimède" msgid "Octagram Spiral" -msgstr "Spirale octagramme" +msgstr "Spirale Octagramme" msgid "Bottom surface pattern" -msgstr "Motif des surfaces inférieures" +msgstr "Motif de surface inférieure" msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "" -"Motif de ligne du remplissage de la surface inférieure, et non pas du " -"remplissage du pont" +"Motif de ligne du remplissage de la surface inférieure, pas du remplissage " +"du pont" msgid "Internal solid infill pattern" msgstr "" @@ -7493,63 +7553,38 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "Largeur de ligne du mur extérieur" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"Vitesse de la paroi qui est la plus à l'extérieur et visible. Elle est " -"utilisée pour être plus lente que la vitesse de la paroi interne pour " -"obtenir une meilleure qualité." - -msgid "Small perimeters" -msgstr "Petits périmètres" - -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 "" -"Ce paramètre séparé affectera la vitesse des périmètres ayant un rayon <= " -"petite longueur de périmètre (généralement des trous). S’il est exprimé en " -"pourcentage (par exemple : 80%), il sera calculé sur la vitesse du mur " -"extérieur ci-dessus. Mettre à zéro pour automatique." - -msgid "Small perimeters threshold" -msgstr "Seuil des petits périmètres" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" -"Cela définit le seuil pour une petite longueur de périmètre. Le seuil par " -"défaut est de 0 mm" +"Vitesse du mur extérieur qui est le plus à l'extérieur et visible. Il est " +"utilisé pour être plus lent que la vitesse de la paroi interne pour obtenir " +"une meilleure qualité." msgid "Order of inner wall/outer wall/infil" -msgstr "Ordre des parois" +msgstr "Ordre de mur intérieur/extérieur/remplissage" msgid "Print sequence of inner wall, outer wall and infill. " msgstr "" -"Séquence d'impression de la paroi intérieure, extérieure et du remplissage. " +"Séquence d'impression du mur intérieur, du mur extérieur et du remplissage." msgid "inner/outer/infill" -msgstr "Intérieure / Extérieure / Remplissage" +msgstr "intérieur/extérieur/remplissage" msgid "outer/inner/infill" -msgstr "Extérieure / Intérieure / Remplissage" +msgstr "extérieur/intérieur/remplissage" msgid "infill/inner/outer" -msgstr "Remplissage / Intérieure / Extérieure" +msgstr "remplissage/intérieur/extérieur" msgid "infill/outer/inner" -msgstr "Remplissage / Extérieure / Intérieure" +msgstr "remplissage/extérieur/intérieur" msgid "inner-outer-inner/infill" -msgstr "Intérieure / Extérieure / Intérieure / Remplissage" +msgstr "intérieur-extérieur-intérieur/remplissage" msgid "Height to rod" msgstr "Hauteur à la tige" @@ -7558,8 +7593,8 @@ msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Distance de la pointe de la buse à la tige inférieure. Utilisée pour éviter " -"les collisions dans l'impression par objet." +"Distance entre la pointe de la buse et la tige de carbone inférieure. " +"Utilisé pour éviter les collisions lors de l'impression \"par objets\"." msgid "Height to lid" msgstr "Hauteur au couvercle" @@ -7568,27 +7603,37 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Distance de la pointe de la buse au couvercle. Utilisée pour éviter les " -"collisions dans l'impression par objet." +"Distance entre la pointe de la buse et le capot. Utilisé pour éviter les " +"collisions lors de l'impression \"par objets\"." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Rayon autour de la tête d’impression. Utilisé pour éviter les collisions " -"dans l'impression par objet." +"Rayon de dégagement autour de l'extrudeuse : utilisé pour éviter les " +"collisions lors de l'impression par objets." + +msgid "Max Radius" +msgstr "Rayon maximum" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Rayon de dégagement maximal autour de l'extrudeuse. Utilisé pour éviter les " +"collisions lors de l'impression \"par objets\"." msgid "Extruder Color" msgstr "Couleur de l'extrudeur" msgid "Only used as a visual help on UI" -msgstr "Utilisée uniquement comme aide visuelle sur l'interface utilisateur" +msgstr "Utilisé uniquement comme aide visuelle sur l'interface utilisateur" msgid "Extruder offset" -msgstr "Décalage de la hotend" +msgstr "Décalage de l'extrudeur" msgid "Flow ratio" -msgstr "Ratio du débit" +msgstr "Rapport de débit" msgid "" "The material may have volumetric change after switching between molten state " @@ -7597,54 +7642,61 @@ msgid "" "and 1.05. Maybe you can tune this value to get nice flat surface when there " "has slight overflow or underflow" msgstr "" -"Le matériau peut avoir un changement volumétrique après avoir basculé de " -"l'état fondu à l'état cristallin. Ce paramètre modifie proportionnellement " +"Le matériau peut avoir un changement volumétrique après avoir basculé entre " +"l'état fondu et l'état cristallin. Ce paramètre modifie proportionnellement " "tout le flux d'extrusion de ce filament dans le gcode. La plage de valeurs " -"recommandée est comprise entre 0.95 et 1.05. Vous devrez peut-être ajuster " -"cette valeur pour obtenir une belle surface plane en cas de légère sur-" -"extrusion ou sous-extrusion" +"recommandée est comprise entre 0,95 et 1,05. Vous pouvez peut-être ajuster " +"cette valeur pour obtenir une belle surface plane en cas de léger " +"débordement ou sous-dépassement" + +msgid "Object flow ratio" +msgstr "Ratio de flux d'objets" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "" +"Le taux de débit défini par objet, la signification est la même que le " +"rapport de débit." msgid "Enable pressure advance" -msgstr "Activer le Pressure Advance" +msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." +"enabled. Useless for Bambu Printer" msgstr "" -"Activer le Pressure Advance, le résultat de l’auto calibration sera écrasé " -"une fois activé." - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "Pressure Advance (Klipper) AKA Linear Advance (Marlin)" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "" +"Largeur de ligne par défaut si une largeur de ligne est définie sur zéro" + msgid "Keep fan always on" -msgstr "Ventilateur toujours actif" +msgstr "Garder le ventilateur toujours actif" msgid "" "If enable this setting, part cooling fan will never be stoped and will run " "at least at minimum speed to reduce the frequency of starting and stoping" msgstr "" -"Si ce paramètre est activé, le ventilateur de refroidissement ne sera jamais " -"arrêté et fonctionnera au minimum à la vitesse minimale pour réduire la " -"fréquence de démarrage et d'arrêt" +"Si ce paramètre est activé, le ventilateur de refroidissement partiel ne " +"sera jamais arrêté et fonctionnera au moins à la vitesse minimale pour " +"réduire la fréquence de démarrage et d'arrêt" msgid "Layer time" -msgstr "Durée de couche" +msgstr "Temps de couche" 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 "" -"Le ventilateur de refroidissement sera activé pour les couches dont la durée " -"estimée est inférieure à la valeur définie. La vitesse du ventilateur est " -"interpolée entre les vitesses minimales et maximales du ventilateur en " -"fonction de la durée d'impression de la couche" +"Le ventilateur de refroidissement partiel sera activé pour les couches dont " +"le temps estimé est inférieur à cette valeur. La vitesse du ventilateur est " +"interpolée entre les vitesses minimale et maximale du ventilateur en " +"fonction du temps d'impression de la couche" msgid "s" msgstr "s" @@ -7659,97 +7711,65 @@ msgid "Color" msgstr "Couleur" msgid "Required nozzle HRC" -msgstr "HRC de la buse nécessaire" +msgstr "Buse HRC requise" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." msgstr "" -"HRC minimum de la buse nécessaire pour imprimer le filament. Une valeur à 0 " -"signifie aucune vérification du HRC de la buse." +"Dureté HRC minimum de la buse requis pour imprimer le filament. Une valeur " +"de 0 signifie qu'il n'y a pas de vérification de la dureté HRC de la buse." 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 "" -"Ce paramètre représente le volume de filament pouvant être fondu et extrudé " -"par seconde. La vitesse d'impression est limitée par la vitesse volumétrique " -"maximale, en cas de réglage d’une vitesse trop élevée et déraisonnable. " -"Cette valeur ne peut pas être à 0" +"Ce paramètre correspond au volume de filament qui peut être fondu et extrudé " +"par seconde. La vitesse d'impression sera limitée par la vitesse " +"volumétrique maximale en cas de réglage de vitesse déraisonnablement trop " +"élevé. Cette valeur ne peut pas être nulle." msgid "mm³/s" msgstr "mm³/s" msgid "Minimal purge on wipe tower" -msgstr "Purge minimale sur la tour d’essuyage" - -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" -"Après un changement d’outil, la position exacte du filament nouvellement " -"chargé à l’intérieur de la buse peut ne pas être connue et la pression du " -"filament n’est probablement pas encore stable. Avant de purger la tête " -"d’impression dans un remplissage ou un objet, Slic3r amorcera toujours cette " -"quantité de matériau dans la tour d’essuyage pour purger dans les " -"remplissages ou objets de manière fiable." +msgstr "Purge minimale sur la tour de nettoyage" msgid "Filament load time" -msgstr "Durée de chargement du filament" +msgstr "Temps de chargement du filament" msgid "Time to load new filament when switch filament. For statistics only" msgstr "" -"Durée pour charger un nouveau filament lors du changement de filament. Pour " -"les statistiques uniquement" +"Il est temps de charger un nouveau filament lors du changement de filament. " +"Pour les statistiques uniquement" msgid "Filament unload time" -msgstr "Durée de déchargement du filament" +msgstr "Temps de déchargement du filament" msgid "Time to unload old filament when switch filament. For statistics only" msgstr "" -"Durée pour décharger l'ancien filament lors du changement de filament. Pour " -"les statistiques uniquement" +"Il est temps de décharger l'ancien filament lorsque vous changez de " +"filament. Pour les statistiques uniquement" msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" msgstr "" "Le diamètre du filament est utilisé pour calculer les variables d'extrusion " -"dans le G-code, il est donc important qu'il soit exact et précis" - -msgid "Shrinkage" -msgstr "Rétrécissement" - -#, fuzzy, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" -"Entrez le pourcentage de retrait que le filament obtiendra après " -"refroidissement (94% si vous mesurez 94mm au lieu de 100mm). La pièce sera " -"mise à l’échelle en X-Y pour compenser. Seul le filament utilisé pour le " -"périmètre est pris en compte.\n" -"Assurez-vous de laisser suffisamment d’espace entre les objets, car cette " -"compensation est effectuée après les vérifications." +"dans le G-code, il est donc important qu'il soit exact et précis." msgid "Density" msgstr "Densité" msgid "Filament density. For statistics only" -msgstr "Densité du filament. Pour les statistiques uniquement" +msgstr "Densité des filaments. Pour les statistiques uniquement" msgid "g/cm³" msgstr "g/cm³" msgid "The material type of filament" -msgstr "Type de matériau du filament" +msgstr "Le type de matériau du filament" msgid "Soluble material" msgstr "Matériau soluble" @@ -7757,17 +7777,17 @@ msgstr "Matériau soluble" msgid "" "Soluble material is commonly used to print support and support interface" msgstr "" -"Le matériau soluble est couramment utilisé pour imprimer les supports et les " -"interfaces de support" +"Le matériau soluble est couramment utilisé pour imprimer le support et " +"l'interface de support" msgid "Support material" -msgstr "Matériau de supports" +msgstr "Supports" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Le matériau de supports est généralement utilisé pour imprimer les supports " -"et les interfaces de support" +"Le matériau de support est généralement utilisé pour imprimer le support et " +"les interfaces de support." msgid "Temperature of vitrificaiton" msgstr "Température de vitrification" @@ -7776,17 +7796,17 @@ msgid "" "Material becomes soft at this temperature. Thus the heatbed cannot be hotter " "than this tempature" msgstr "" -"Température lorsque le matériau devient mou. Ainsi, le plateau ne peut pas " -"être plus chaud que cette température" +"Le matériau devient mou à cette température. Ainsi, le lit chauffant ne peut " +"pas être plus chaud que cette température" msgid "Price" -msgstr "Coût" +msgstr "Tarif" msgid "Filament price. For statistics only" -msgstr "Coût ​​des filaments. Pour les statistiques uniquement" +msgstr "Coût ​​des filaments, pour les statistiques uniquement." msgid "money/kg" -msgstr "€/kg" +msgstr "argent/kg" msgid "Vendor" msgstr "" @@ -7795,16 +7815,16 @@ msgid "Vendor of filament. For show only" msgstr "" msgid "(Undefined)" -msgstr "(Non défini)" +msgstr "(Indéfini)" msgid "Infill direction" -msgstr "Direction du remplissage" +msgstr "Sens de remplissage" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"Angle pour le motif de remplissage, qui contrôle le début ou la direction " +"Angle pour le motif de remplissage qui contrôle le début ou la direction " "principale de la ligne" msgid "Sparse infill density" @@ -7812,14 +7832,13 @@ msgstr "Densité de remplissage" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" -msgstr "" -"Densité du remplissage interne, Une valeur à 100%% signifie solide partout" +msgstr "Densité du remplissage interne, 100%% signifie plein." msgid "Sparse infill pattern" msgstr "Motif de remplissage" msgid "Line pattern for internal sparse infill" -msgstr "Motif de ligne pour le remplissage" +msgstr "Motif de ligne du remplissage interne" msgid "Grid" msgstr "Grille" @@ -7846,117 +7865,34 @@ msgid "3D Honeycomb" msgstr "Nid d'abeille 3D" msgid "Support Cubic" -msgstr "Support cubique" +msgstr "Support Cubique" msgid "Lightning" -msgstr "Éclair" - -msgid "Sparse infill anchor length" -msgstr "Longueur de l’ancrage de remplissage interne" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" -"Connecter une ligne de remplissage à un périmètre interne avec un court " -"segment de périmètre supplémentaire. S’il est exprimé en pourcentage " -"(exemple : 15%), il est calculé sur la largeur de l’extrusion de " -"remplissage. Si aucun segment de périmètre plus court que infill_anchor_max " -"n’est trouvé, la ligne de remplissage est connectée à un segment de " -"périmètre d’un seul côté et la longueur du segment de périmètre pris est " -"limitée à ce paramètre, mais pas plus long que anchor_length_max.\n" -"Une valeur à 0 désactive les périmètres d’ancrage connectés à une seule " -"ligne de remplissage." - -msgid "0 (no open anchors)" -msgstr "0 (pas d’ancres ouvertes)" - -msgid "1000 (unlimited)" -msgstr "1000 (illimité)" - -msgid "Maximum length of the infill anchor" -msgstr "Longueur maximale de l’ancrage de remplissage" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" -"Connecter une ligne de remplissage à un périmètre interne avec un court " -"segment de périmètre supplémentaire. S’il est exprimé en pourcentage " -"(exemple : 15 %), il est calculé sur la largeur de l’extrusion de " -"remplissage. Slic3r essaie de connecter deux lignes de remplissage proches à " -"un court segment de périmètre. Si aucun segment de périmètre plus court que " -"ce paramètre n’est trouvé, la ligne de remplissage est connectée à un " -"segment de périmètre sur un seul côté et la longueur du segment de périmètre " -"pris est limitée à infill_anchor, mais pas plus longue que ce paramètre.\n" -"S’il est défini sur 0, l’ancien algorithme de connexion de remplissage sera " -"utilisé, il devrait créer le même résultat qu’avec 1000 et 0." - -msgid "0 (Simple connect)" -msgstr "0 (connexions simples)" - -msgid "Acceleration of outer walls" -msgstr "Accélération des parois extérieures" - -msgid "Acceleration of inner walls" -msgstr "Accélération des parois intérieures" - -msgid "Acceleration of travel moves" -msgstr "Accélération des déplacements" +msgstr "Lightning" msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Accélération du remplissage de la surface supérieure. L’utilisation d’une " -"valeur plus basse peut améliorer la qualité de la surface supérieure" +"Il s'agit de l'accélération de la surface supérieure du remplissage. " +"Utiliser une valeur plus petite pourrait améliorer la qualité de la surface " +"supérieure." msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" -"Accélération de la paroi extérieure. L'utilisation d'une valeur inférieure " -"peut améliorer la qualité" +"Accélération du mur extérieur : l'utilisation d'une valeur inférieure peut " +"améliorer la qualité." -msgid "" -"Acceleration of bridges. If the value is expressed as a percentage (e.g. " -"50%), it will be calculated based on the outer wall acceleration." +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" -"Accélération des ponts. Si la valeur est exprimée en pourcentage (par " -"exemple 50%), elle sera calculée en fonction de l’accélération de la paroi " -"extérieure." - -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." 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 " -"l’accélération par défaut." -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." +msgid "mm/s² or %" msgstr "" -"Accélération du remplissage solide interne. Si la valeur est exprimée en " -"pourcentage (par exemple 100%), elle sera calculée en fonction de " -"l’accélération par défaut." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -7966,43 +7902,45 @@ msgstr "" "peut améliorer l'adhérence sur le plateau" msgid "Enable accel_to_decel" -msgstr "Activer l’accélération à la décélération" +msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "Le paramètre max_accel_to_decel de Klipper sera ajusté automatiquement" +msgstr "" msgid "accel_to_decel" -msgstr "Ajuster l’accélération à la décélération" +msgstr "" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" -"Le paramètre max_accel_to_decel de Klipper sera ajusté à ce pourcentage " -"d’accélération" + +msgid "Default jerk" +msgstr "" msgid "Jerk of outer walls" -msgstr "Jerk des parois extérieures" +msgstr "" msgid "Jerk of inner walls" -msgstr "Jerk des parois intérieures" - -msgid "Jerk for top surface" -msgstr "Jerk des surfaces supérieures" - -msgid "Jerk for infill" -msgstr "Jerk du remplissage" - -msgid "Jerk for initial layer" -msgstr "Jerk de la couche initiale" - -msgid "Jerk for travel" -msgstr "Jerk des déplacements" - -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." msgstr "" +msgid "Jerk of infill" +msgstr "" + +msgid "Jerk of top surface" +msgstr "" + +msgid "First layer" +msgstr "" + +msgid "Jerk of first layer" +msgstr "" + +msgid "Jerk of travel" +msgstr "" + +msgid "Line width of initial layer" +msgstr "Largeur de ligne de la couche initiale" + msgid "Initial layer height" msgstr "Hauteur de couche initiale" @@ -8010,38 +7948,22 @@ msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhension" msgstr "" -"Hauteur de la couche initiale. Une couche initiale légèrement épaisse peut " -"améliorer l'adhérence sur le plateau" +"Il s'agit de la hauteur de la première couche. L'augmentation de la hauteur " +"de la première couche peut améliorer l'adhérence sur le plateau." msgid "Speed of initial layer except the solid infill part" msgstr "" -"Vitesse de la couche initiale à l'exception des parties de remplissage solide" +"Vitesse de la couche initiale à l'exception de la partie de remplissage " +"solide" msgid "Initial layer infill" -msgstr "Remplissage solide" +msgstr "Remplissage de la couche initiale" msgid "Speed of solid infill part of initial layer" -msgstr "Vitesse des parties de remplissage solide de la couche initiale" - -msgid "Initial layer travel speed" -msgstr "Déplacements" - -msgid "Travel speed of initial layer" -msgstr "Vitesse de déplacement de la couche initiale" - -msgid "Number of slow layers" -msgstr "Nombre de couches lentes" - -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 "" -"Les premières couches sont imprimées plus lentement que la normale. La " -"vitesse augmente progressivement de manière linéaire sur le nombre de " -"couches spécifié." +msgstr "Vitesse de la partie de remplissage solide de la couche initiale" msgid "Initial layer nozzle temperature" -msgstr "Température de la buse de la couche initiale" +msgstr "Température de la buse de couche initiale" msgid "Nozzle temperature to print initial layer when using this filament" msgstr "" @@ -8049,43 +7971,14 @@ msgstr "" "l'utilisation de ce filament" msgid "Full fan speed at layer" -msgstr "Vitesse maximale du ventilateur à la couche" - -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." -msgstr "" -"La vitesse du ventilateur augmentera de manière linéaire à partir de zéro à " -"la couche \"close_fan_the_first_x_layers\" jusqu’au maximum à la couche " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" sera ignoré s’il est " -"inférieur à \"close_fan_the_first_x_layers\", auquel cas le ventilateur " -"fonctionnera à la vitesse maximale autorisée à la couche " -"\"close_fan_the_first_x_layers\" + 1." - -msgid "Support interface fan speed" -msgstr "Vitesse du ventilateur" - -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 overriden by disable_fan_first_layers." -msgstr "" -"Cette vitesse de ventilateur est appliquée pendant toutes les interfaces de " -"support, pour pouvoir affaiblir leur liaison avec une vitesse de ventilateur " -"élevée.\n" -"Réglez sur -1 pour désactiver ce remplacement.\n" -"Ne peut être remplacé que par disable_fan_first_layers." +msgstr "Ventilateur à pleine vitesse pour la couche" msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"Gigue aléatoire lors de l'impression de la paroi, de sorte que la surface " -"ait un aspect rugueux. Ce réglage contrôle la position floue" +"Gigue aléatoire lors de l'impression du mur, de sorte que la surface ait un " +"aspect rugueux. Ce réglage contrôle la position floue" msgid "None" msgstr "Aucun" @@ -8100,72 +7993,67 @@ msgid "All walls" msgstr "Toutes les parois" msgid "Fuzzy skin thickness" -msgstr "Épaisseur de surface floue" +msgstr "Épaisseur de la surface Irrégulière" msgid "" "The width within which to jitter. It's adversed to be below outer wall line " "width" msgstr "" -"Largeur à l'intérieur de la gigue. Il est conseillé d'être en dessous de la " -"largeur de ligne de la paroi extérieure." +"La largeur à l'intérieur de laquelle jitter. Il est déconseillé d'être en " +"dessous de la largeur de la ligne du mur extérieur" msgid "Fuzzy skin point distance" -msgstr "Distance du point de fuite" +msgstr "Distance de point de la surface irrégulière" msgid "" "The average diatance between the random points introducded on each line " "segment" msgstr "" -"Distance moyenne entre les points aléatoires introduits sur chaque segment " -"de ligne" +"La distance moyenne entre les points aléatoires introduits sur chaque " +"segment de ligne" msgid "Filter out tiny gaps" -msgstr "Filtrer les petits espaces" - -msgid "Layers and Perimeters" -msgstr "Couches et Périmètres" +msgstr "" msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" -"Filtrer les petits espaces au seuil spécifié. Ce paramètre n’affectera pas " -"les couches supérieures/inférieures" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"Vitesse de remplissage des espaces. Ils ont généralement une largeur de " -"ligne irrégulière et doivent être imprimés plus lentement" +"Vitesse de remplissage des interstices. L'écart a généralement une largeur " +"de ligne irrégulière et doit être imprimé plus lentement" msgid "Arc fitting" -msgstr "Fonction Arc" +msgstr "Raccord en arc" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " "tolerance is same with resolution" msgstr "" -"Cette option permet d’obtenir un fichier G-code contenant des mouvements G2 " -"et G3. Et la tolérance d'ajustement est la même avec la résolution" +"Activez cette option pour obtenir un fichier G-code contenant des mouvements " +"G2 et G3. Et la tolérance d'ajustement est la même avec la résolution" msgid "Add line number" msgstr "Ajouter un numéro de ligne" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" msgstr "" -"Activer cette option pour ajouter un numéro de ligne (Nx) au début de chaque " +"Activez cette option pour ajouter un numéro de ligne (Nx) au début de chaque " "ligne G-Code" msgid "Scan first layer" -msgstr "Analyser la première couche" +msgstr "Numériser la première couche" msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" msgstr "" -"Cette option pour permettre à caméra de l'imprimante de vérifier la qualité " -"de la première couche" +"Activez cette option pour permettre à l'appareil photo de l'imprimante de " +"vérifier la qualité de la première couche" msgid "Nozzle type" msgstr "Type de buse" @@ -8174,8 +8062,8 @@ msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"Matériau métallique de la buse. Cela détermine la résistance à l'abrasion de " -"la buse et le type de filament pouvant être imprimé" +"Le matériau métallique de la buse. Cela détermine la résistance à l'abrasion " +"de la buse et le type de filament pouvant être imprimé" msgid "Undefine" msgstr "Non défini" @@ -8189,112 +8077,24 @@ msgstr "Acier inoxydable" msgid "Brass" msgstr "Laiton" -msgid "Nozzle HRC" -msgstr "HRC Buse" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"Dureté de la buse. Une valeur à 0 signifie qu'il n'y a pas de vérification " -"de la dureté de la buse pendant le découpage." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "" -"Activer cette option si l’imprimante est équipée d'un ventilateur de " -"refroidissement auxiliaire" - -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 comands 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 "" -"Démarrer le ventilateur plus tôt de ce nombre de secondes par rapport au " -"démarrage cible (vous pouvez utiliser des fractions de secondes). Cela " -"suppose une accélération infinie pour cette estimation de durée et ne prend " -"en compte que les mouvements G1 et G0 (l’ajustement arc n’est pas pris en " -"charge).\n" -"Cela ne déplacera pas les commandes de ventilateur des G-codes personnalisés " -"(ils agissent comme une sorte de \"barrière\").\n" -"Cela ne déplacera pas les commandes de ventilateur dans le G-code de " -"démarrage si seul le ‘G-code de démarrage personnalisé’ est activé.\n" -"Utiliser 0 pour désactiver." - -msgid "Only overhangs" -msgstr "Sur les surplombs uniquement" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "Ne prend en compte que le délai de refroidissement des surplombs." - -msgid "Fan kick-start time" -msgstr "Durée de démarrage du ventilateur" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" -"Émettre une commande de vitesse maximale du ventilateur pendant ce nombre de " -"secondes avant de réduire à la vitesse cible pour démarrer le ventilateur de " -"refroidissement.\n" -"Ceci est utile pour les ventilateurs où un faible PWM/puissance peut être " -"insuffisant pour redémarrer le ventilateur après un arrêt, ou pour faire " -"démarrer le ventilateur plus rapidement.\n" -"Mettre à 0 pour désactiver." +"Activez cette option si la machine est équipée d'un ventilateur de " +"refroidissement de pièce auxiliaire" msgid "G-code flavor" -msgstr "Version de G-code" +msgstr "Version du G-code" msgid "What kind of gcode the printer is compatible with" -msgstr "Type de gcode avec lequel l'imprimante est compatible" - -msgid "Klipper" -msgstr "Klipper" - -msgid "Label objects" -msgstr "Label Objects" - -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." -msgstr "" -"Permet d’ajouter des commentaires dans le G-code sur les mouvements " -"d’impression de l’objet auquel ils appartiennent, ce qui est utile pour le " -"plug-in Octoprint CancelObject. Ce paramètre n’est PAS compatible avec la " -"configuration multi-matériaux avec un seul extrudeur et Purger dans " -"l’objet / Purger dans le remplissage." +msgstr "Avec quel type de gcode l'imprimante est-elle compatible" msgid "Exclude objects" -msgstr "Exclure des objets" - -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" -"Activer cette option pour ajouter la commande EXCLUDE OBJECT dans le G-code" - -msgid "Verbose G-code" -msgstr "G-code commenté" 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" -"Activez cette option pour obtenir un fichier G-code commenté, chaque ligne " -"étant expliquée par un texte descriptif. Si vous imprimez à partir d’une " -"carte SD, le poids supplémentaire du fichier pourrait ralentir le firmware." msgid "Infill combination" msgstr "Combinaison de remplissage" @@ -8303,20 +8103,75 @@ msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Combiner automatiquement plusieurs couches de remplissage à imprimer " -"ensemble afin de réduire la durée. La paroi est toujours imprimée avec la " +"Combinez automatiquement le remplissage de plusieurs couches pour imprimer " +"ensemble afin de réduire le temps. Le mur est toujours imprimé avec la " "hauteur de couche d'origine." -msgid "Filament to print internal sparse infill." -msgstr "Filament pour imprimer le remplissage interne." +msgid "Length of sparse infill anchor" +msgstr "Longueur de l'ancre de remplissage" msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." msgstr "" +"Cela relie une ligne de remplissage à un périmètre interne avec un court " +"segment d'un périmètre supplémentaire. S'il est exprimé en pourcentage " +"(exemple : 15 %), il est calculé sur une faible largeur de ligne de " +"remplissage. Bambu essaie de relier deux lignes de remplissage étroites à un " +"court segment périmétrique. Si aucun segment de périmètre plus court que " +"infill_anchor_max n'est trouvé, la ligne de remplissage est connectée à un " +"segment de périmètre d'un seul côté et la longueur du segment de périmètre " +"pris est limitée à ce paramètre, mais pas plus que anchor_length_max. " +"Définissez ce paramètre sur zéro pour désactiver les périmètres d'ancrage " +"connectés à une seule ligne de remplissage." + +msgid "0 (no open anchors)" +msgstr "0 (aucune ancre ouverte)" + +msgid "1000 (unlimited)" +msgstr "1000 (illimité)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Longueur maximale de l'ancre de remplissage" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"Cela relie une ligne de remplissage à un périmètre interne avec un court " +"segment d'un périmètre supplémentaire. S'il est exprimé en pourcentage " +"(exemple : 15 %), il est calculé sur une faible largeur de ligne de " +"remplissage. Bambu essaie de relier deux lignes de remplissage étroites à un " +"court segment périmétrique. Si aucun segment de périmètre plus court que ce " +"paramètre n'est trouvé, la ligne de remplissage est connectée à un segment " +"de périmètre d'un seul côté et la longueur du segment de périmètre pris est " +"limitée à infill_anchor, mais pas plus que ce paramètre. Définissez ce " +"paramètre sur zéro pour désactiver l'ancrage." + +msgid "0 (not anchored)" +msgstr "0 (non ancré)" + +msgid "Filament to print internal sparse infill." +msgstr "Filament pour imprimer un remplissage interne." + +msgid "Line width of internal sparse infill" +msgstr "Largeur de ligne du remplissage interne" msgid "Infill/Wall overlap" -msgstr "Chevauchement du remplissage et de la paroi" +msgstr "Chevauchement de remplissage/mur" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " @@ -8324,23 +8179,11 @@ msgid "" msgstr "" "La zone de remplissage est légèrement agrandie pour chevaucher le mur pour " "une meilleure adhérence. La valeur en pourcentage est relative à la largeur " -"de ligne du remplissage" +"de ligne du remplissage." msgid "Speed of internal sparse infill" msgstr "Vitesse de remplissage interne" -msgid "Interface shells" -msgstr "Coque des interfaces" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" -"Forcer la génération de coques solides entre matériaux/volumes adjacents. " -"Utile pour les impressions multi-extrudeuses avec des matériaux translucides " -"ou un matériau de support soluble" - msgid "Ironing Type" msgstr "Type de lissage" @@ -8348,18 +8191,12 @@ msgid "" "Ironing is using small flow to print on same height of surface again to make " "flat surface more smooth. This setting controls which layer being ironed" msgstr "" -"Le lissage utilise un petit débit pour imprimer à nouveau sur la même " +"Le repassage utilise un petit débit pour imprimer à nouveau sur la même " "hauteur de surface pour rendre la surface plane plus lisse. Ce paramètre " -"contrôle quelle couche doit être lissée" +"contrôle quelle couche est repassée" msgid "No ironing" -msgstr "Pas de lissage" - -msgid "Top surfaces" -msgstr "Surfaces supérieures" - -msgid "Topmost surface" -msgstr "Surface la plus élevée" +msgstr "Pas de repassage" msgid "All solid layer" msgstr "Toutes les couches solides" @@ -8368,49 +8205,49 @@ msgid "Ironing Pattern" msgstr "Modèle de repassage" msgid "Ironing flow" -msgstr "Débit de lissage" +msgstr "Flux de repassage" 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 "" -"Quantité de matière à extruder lors du lissage. Relatif au débit de la " -"hauteur de couche normale. Une valeur trop élevée entraîne une sur-extrusion " +"La quantité de matière à extruder lors du repassage. Relatif au débit de la " +"hauteur de couche normale. Une valeur trop élevée entraîne une surextrusion " "en surface" msgid "Ironing line spacing" -msgstr "Espacement des lignes de lissage" +msgstr "Espacement des lignes de repassage" msgid "The distance between the lines of ironing" -msgstr "Distance entre les lignes de lissage" +msgstr "La distance entre les lignes de repassage" msgid "Ironing speed" -msgstr "Vitesse de lissage" +msgstr "Vitesse de repassage" msgid "Print speed of ironing lines" -msgstr "Vitesse d'impression des lignes de lissage" +msgstr "Vitesse d'impression des lignes de repassage" msgid "This gcode part is inserted at every layer change after lift z" msgstr "" -"Cette partie gcode est insérée à chaque changement de couche après une levée " -"en Z" +"Cette partie gcode est insérée à chaque changement de couche après lift z" msgid "Supports silent mode" -msgstr "Prise en charge du mode silencieux" +msgstr "Prend en charge le mode silencieux" msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" msgstr "" -"Prise en charge du mode silencieux dans lequel l’imprimante utilise une " -"accélération plus faible pour imprimer" +"Si la machine prend en charge le mode silencieux dans lequel la machine " +"utilise une accélération plus faible pour imprimer" msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"Ce G-code sera utilisé comme code pour la pause d'impression. L'utilisateur " -"peut insérer un G-code de pause dans la visionneuse G-code" +"Ce G-code sera utilisé comme code pour la pause d'impression. Les " +"utilisateurs peuvent insérer un G-code de pause dans la visionneuse de G-" +"code." msgid "This G-code will be used as a custom code" msgstr "Ce G-code sera utilisé comme code personnalisé" @@ -8428,67 +8265,67 @@ msgid "Maximum speed E" msgstr "Vitesse maximale E" msgid "Machine limits" -msgstr "Limites de l’imprimante" +msgstr "Limites de la machine" msgid "Maximum X speed" -msgstr "Vitesse maximale de l’axe X" +msgstr "Vitesse maximale X" msgid "Maximum Y speed" -msgstr "Vitesse maximale de l’axe Y" +msgstr "Vitesse Y maximale" msgid "Maximum Z speed" -msgstr "Vitesse maximale de l’axe Z" +msgstr "Vitesse Z maximale" msgid "Maximum E speed" -msgstr "Vitesse maximale de l’extrudeur" +msgstr "Vitesse E maximale" msgid "Maximum acceleration X" -msgstr "Accélération maximale X" +msgstr "Accélérations maximum X" msgid "Maximum acceleration Y" -msgstr "Accélération maximale Y" +msgstr "Accélérations maximum Y" msgid "Maximum acceleration Z" -msgstr "Accélération maximale Z" +msgstr "Accélérations maximum Z" msgid "Maximum acceleration E" -msgstr "Accélération maximale E" +msgstr "Accélérations maximum E" msgid "Maximum acceleration of the X axis" -msgstr "Accélération maximale de l'axe X" +msgstr "Accélération maximum de l'axe X" msgid "Maximum acceleration of the Y axis" -msgstr "Accélération maximale de l'axe Y" +msgstr "Accélération maximum de l'axe Y" msgid "Maximum acceleration of the Z axis" -msgstr "Accélération maximale de l'axe Z" +msgstr "Accélération maximum de l'axe Z" msgid "Maximum acceleration of the E axis" -msgstr "Accélération maximale de l’extrudeur" +msgstr "Accélération maximum de l'axe E" msgid "Maximum jerk X" -msgstr "Jerk maximum X" +msgstr "Mouvement brusque maximum X" msgid "Maximum jerk Y" -msgstr "Jerk maximum Y" +msgstr "Mouvement brusque maximum Y" msgid "Maximum jerk Z" -msgstr "Jerk maximum Z" +msgstr "Mouvement brusque maximum Z" msgid "Maximum jerk E" -msgstr "Jerk maximum E" +msgstr "Mouvement brusque maximum E" msgid "Maximum jerk of the X axis" -msgstr "Jerk maximum de l'axe X" +msgstr "Mouvement brusque maximum de l'axe X" msgid "Maximum jerk of the Y axis" -msgstr "Jerk maximum de l'axe Y" +msgstr "Mouvement brusque maximum de l'axe Y" msgid "Maximum jerk of the Z axis" -msgstr "Jerk maximum de l'axe Z" +msgstr "Mouvement brusque maximum de l'axe Z" msgid "Maximum jerk of the E axis" -msgstr "Jerk maximum de l’extrudeur" +msgstr "Mouvement brusque maximum de l'axe E" msgid "Minimum speed for extruding" msgstr "Vitesse minimale d'extrusion" @@ -8503,22 +8340,22 @@ msgid "Minimum travel speed (M205 T)" msgstr "Vitesse de déplacement minimale (M205 T)" msgid "Maximum acceleration for extruding" -msgstr "Accélération maximale de l'extrusion" +msgstr "Accélération maximale pour l'extrusion" msgid "Maximum acceleration for extruding (M204 P)" -msgstr "Accélération maximale de l'extrusion (M204 P)" +msgstr "Accélération maximale pour l'extrusion (M204 P)" msgid "Maximum acceleration for retracting" -msgstr "Accélération maximale de la rétraction" +msgstr "Accélération maximale pour la rétraction" msgid "Maximum acceleration for retracting (M204 R)" -msgstr "Accélération maximale de la rétraction (M204 R)" +msgstr "Accélération maximale pour la rétraction (M204 R)" msgid "Maximum acceleration for travel" -msgstr "Accélération maximale de déplacement" +msgstr "Accélération maximale pour le déplacement" msgid "Maximum acceleration for travel (M204 T)" -msgstr "Accélération maximale de déplacement (M204 T)" +msgstr "Accélération maximale pour le déplacement (M204 T)" msgid "Fan speed" msgstr "Vitesse du ventilateur" @@ -8527,9 +8364,9 @@ msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed limitation of part cooling fan" msgstr "" -"La vitesse du ventilateur de refroidissement peut être augmentée lorsque le " -"refroidissement automatique est activé. Il s'agit de la limitation de " -"vitesse maximale du ventilateur de refroidissement" +"La vitesse du ventilateur de refroidissement partiel peut être augmentée " +"lorsque le refroidissement automatique est activé. Il s'agit de la " +"limitation de vitesse maximale du ventilateur de refroidissement partiel" msgid "Max" msgstr "Maximum" @@ -8538,21 +8375,22 @@ msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" -"La plus grande hauteur de couche imprimable pour l'extrudeur. Utilisé pour " -"limiter la hauteur de couche maximale lorsque la hauteur de couche " -"adaptative est activée" +"La plus grande hauteur de couche imprimable pour l'extrudeuse. Utilisé tp " +"limite la hauteur de couche maximale lorsque la hauteur de couche adaptative " +"est activée" msgid "Minimum speed for part cooling fan" -msgstr "Vitesse minimale du ventilateur de refroidissement" +msgstr "Vitesse minimale du ventilateur de refroidissement partiel" 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 "" -"Vitesse du ventilateur de refroidissement auxiliaire. Le ventilateur " -"auxiliaire fonctionnera à cette vitesse pendant l'impression, à l'exception " -"des premières couches définies sans refroidissement" +"Vitesse du ventilateur de refroidissement de la partie auxiliaire. Le " +"ventilateur auxiliaire fonctionnera à cette vitesse pendant l'impression, à " +"l'exception des premières couches qui sont définies par aucune couche de " +"refroidissement" msgid "Min" msgstr "Minimum" @@ -8561,21 +8399,23 @@ msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" msgstr "" -"La plus petite hauteur de couche imprimable pour l'extrudeur. Utilisé pour " -"limiter la hauteur de couche minimale lorsque la hauteur de couche " -"adaptative est activée" +"La hauteur de couche imprimable la plus basse pour l'extrudeuse. Utilisé tp " +"limite la hauteur de couche minimale lorsque la hauteur de couche adaptative " +"est activée" msgid "Min print speed" msgstr "Vitesse d'impression minimale" msgid "The minimum printing speed when slow down for cooling" -msgstr "Vitesse d'impression minimale lors du ralentissement de l’impression" +msgstr "" +"La vitesse d'impression minimale lors du ralentissement pour le " +"refroidissement" msgid "Nozzle diameter" msgstr "Diamètre de la buse" msgid "Diameter of nozzle" -msgstr "Diamètre de la buse" +msgstr "Diamètre de buse" msgid "Host Type" msgstr "Type d'hôte" @@ -8584,8 +8424,8 @@ msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -"Slic3r peut télécharger des fichiers G-code sur une imprimante hôte. Ce " -"champ doit contenir le genre de l'hôte." +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " +"doit contenir le type d'hôte." msgid "Nozzle volume" msgstr "Volume de la buse" @@ -8595,24 +8435,25 @@ msgstr "" "Volume de la buse entre le coupeur de filament et l'extrémité de la buse" msgid "Start end points" -msgstr "Points de départ et d’arrivée" +msgstr "Points de départ et d'arrivée" msgid "The start and end points which is from cutter area to garbage can." msgstr "" -"Points de départ et d’arrivée qui vont de la zone de coupe à la poubelle." +"Les points de départ et d'arrivée qui se situent entre la zone de coupe et " +"la goulotte d'évacuation." msgid "Reduce infill retraction" -msgstr "Réduire les rétractions lors du remplissage" +msgstr "Réduire la rétraction du remplissage" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"Ne pas rétracter lorsque le déplacement se trouve dans la zone de " -"remplissage. Cela peut réduire les temps de rétraction pour les modèles " -"complexes et réduire la durée d'impression, mais rend le découpage et la " -"génération du G-code plus lent" +"Ne pas effectuer de rétractation lors de déplacement en zone de remplissage " +"car même si l’extrudeur suinte, les coulures ne seraient pas visibles. Cela " +"peut réduire les rétractations pour les modèles complexes et économiser du " +"temps d’impression, mais ralentit le tranchage et la génération du G-code." msgid "Enable" msgstr "Activer" @@ -8625,95 +8466,63 @@ msgstr "" "L'utilisateur peut définir lui-même le nom du fichier de projet lors de " "l'exportation" -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" -msgstr "Détecter une paroi en surplomb" +msgstr "Détecter un mur en surplomb" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Détecter le pourcentage de surplomb par rapport à la largeur de la ligne et " -"utilisez une vitesse différente pour imprimer. Pour un surplomb de 100%%, la " -"vitesse du pont est utilisée." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "Largeur de ligne du mur intérieur" msgid "Speed of inner wall" msgstr "Vitesse de la paroi intérieure" msgid "Number of walls of every layer" -msgstr "Nombre de parois de chaque couche" +msgstr "Nombre de murs de chaque couche" + +msgid "Post-processing Scripts" +msgstr "Scripts de post-traitement" msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" -"Si vous souhaitez traiter le code G de sortie via des scripts personnalisés, " -"indiquez simplement leurs chemins absolus ici. Séparez plusieurs scripts par " -"un point-virgule. Les scripts recevront le chemin absolu vers le fichier G-" -"code comme premier argument, et ils peuvent accéder aux paramètres de " -"configuration Slic3r en lisant les variables d’environnement." +"Si vous souhaitez traiter le G-code de sortie via des scripts personnalisés, " +"listez simplement leurs chemins absolus ici. Séparez les différents scripts " +"par un point-virgule. Les scripts seront transmis via le chemin absolu vers " +"le fichier G-code comme premier argument, et les variables des paramètres " +"peuvent également être lues." msgid "Raft contact Z distance" -msgstr "Distance Z de contact du radeau" +msgstr "Distance Z de contact du raft" msgid "Z gap between object and raft. Ignored for soluble interface" -msgstr "" -"Espace Z entre l'objet et le radeau. Ignoré pour les interfaces de support " -"solubles" +msgstr "Écart en Z entre l'objet et le radeau. Ignoré pour l'interface soluble" msgid "Raft expansion" -msgstr "Expansion du radeau" +msgstr "Agrandissement du raft" msgid "Expand all raft layers in XY plane" -msgstr "Etendre toutes les couches de radeau dans le plan X-Y" +msgstr "Développer toutes les couches de radeau dans le plan XY" msgid "Initial layer density" -msgstr "Densité de la couche initiale" +msgstr "Densité de couche initiale" msgid "Density of the first raft or support layer" -msgstr "Densité du premier radeau ou couche de support" +msgstr "Densité du premier radier ou couche de support" msgid "Initial layer expansion" -msgstr "Expension de la couche initiale" +msgstr "Extension de la couche initiale" msgid "Expand the first raft or support layer to improve bed plate adhesion" msgstr "" -"Expension de la première couche du radeau pour améliorer l'adhérence sur le " -"plateau" +"Développez le premier radeau ou couche de support pour améliorer l'adhérence " +"de la plaque d'assise" msgid "Raft layers" msgstr "Couches du radeau" @@ -8722,21 +8531,21 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Nombre de couches du radeau. Utilisez cette fonction pour éviter la " -"déformation lors de l'impression ABS" +"L'objet sera élevé par ce nombre de couches de support. Utilisez cette " +"fonction pour éviter l'emballage lors de l'impression ABS" msgid "" "G-code path is genereated after simplifing 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 "" -"Le chemin du G-code est généré après avoir simplifié le contour du modèle " -"pour éviter trop de points et de lignes dans le fichier gcode. Une valeur " -"plus petite signifie une résolution plus élevée et plus de temps pour " -"découper" +"Le chemin du code G est généré après avoir simplifié le contour du modèle " +"pour éviter trop de points et de lignes gcode dans le fichier gcode. Une " +"valeur plus petite signifie une résolution plus élevée et plus de temps pour " +"trancher" msgid "Travel distance threshold" -msgstr "Distance minimale" +msgstr "Seuil de distance parcourue" msgid "" "Only trigger retraction when the travel distance is longer than this " @@ -8746,115 +8555,67 @@ msgstr "" "à ce seuil" msgid "Retract amount before wipe" -msgstr "Quantité de rétraction avant essuyage" +msgstr "Quantité de rétractation avant essuyage" msgid "" "The length of fast retraction before wipe, relative to retraction length" msgstr "" -"Longueur de la rétraction rapide avant l’essuyage, par rapport à la longueur " -"de la rétraction" +"La longueur de la rétraction rapide avant le balayage, par rapport à la " +"longueur de la rétraction" msgid "Retract when change layer" -msgstr "Rétracter au changement de couche" +msgstr "Rétracter lors de changement de couche" msgid "Force a retraction when changes layer" -msgstr "Forcer une rétraction lors d'un changement de couche" +msgstr "Cela force une rétractation sur les changements de couche." msgid "Length" msgstr "Longueur" msgid "Retraction Length" -msgstr "Longueur de rétraction" +msgstr "Longueur de Rétractation" msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"Une certaine quantité de filament dans l'extrudeur est retirée pour éviter " -"le suintement pendant les longs trajets. Définir à 0 pour désactiver la " +"Une certaine quantité de matériau dans l'extrudeuse est retirée pour éviter " +"le suintement pendant les longs trajets. Définir zéro pour désactiver la " "rétraction" msgid "Z hop when retract" -msgstr "Décalage en Z lors des rétractions" +msgstr "Z saut lors de la rétraction" 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 "" -"A chaque fois qu’une rétraction est effectuée, la buse est légèrement " -"soulevée pour créer un espace entre la buse et l'impression. Cela empêche la " -"buse de toucher l'impression lors du déplacement. L'utilisation d'une ligne " -"en spirale pour soulever l’axe Z peut empêcher le stringing" +"Chaque fois que la rétraction est effectuée, la buse est légèrement soulevée " +"pour créer un espace entre la buse et l'impression. Il empêche la buse de " +"toucher l'impression lors du déplacement. L'utilisation d'une ligne en " +"spirale pour soulever z peut empêcher l'enfilage" -msgid "Z hop type" -msgstr "Type de décalage en Z" +msgid "Z Hop Type" +msgstr "Type de Z Hop" msgid "Slope" -msgstr "Classique" +msgstr "Pente" msgid "Spiral" msgstr "Spirale" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." +msgid "Bowden" msgstr "" -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -msgstr "Longueur supplémentaire" - -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 "" -"Lorsque la rétraction est compensée après le mouvement de déplacement, " -"l’extrudeuse poussera cette quantité supplémentaire de filament. Ce " -"paramètre est rarement nécessaire." - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." -msgstr "" -"Lorsque la rétraction est compensée après le changement d’outil, l’extrudeur " -"poussera cette quantité supplémentaire de filament." - msgid "Retraction Speed" -msgstr "Vitesse de rétraction" +msgstr "Vitesse de Rétractation" msgid "Speed of retractions" -msgstr "Vitesse des rétractions" +msgstr "Vitesse de rétractation" msgid "Deretraction Speed" msgstr "Vitesse de réinsertion" @@ -8863,31 +8624,17 @@ msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"Vitesse de réinsertion du filament dans l'extrudeur. Une valeur à 0 signifie " -"la même vitesse que celle de rétraction" - -msgid "Use firmware retraction" -msgstr "Utiliser la rétraction firmware" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" -"Ce paramètre expérimental utilise les commandes G10 et G11 pour que le " -"firmware gère la rétraction. Ceci n’est pris en charge que dans une version " -"de Marlin récente." - -msgid "Show auto-calibration marks" -msgstr "Afficher les marques de calibration" +"Vitesse de rechargement du filament dans l'extrudeuse. Zéro signifie même " +"vitesse avec rétraction" msgid "Seam position" msgstr "Position de la couture" msgid "The start position to print each part of outer wall" -msgstr "Position de départ pour imprimer chaque partie de la paroi extérieure" +msgstr "La position de départ pour imprimer chaque partie du mur extérieur" msgid "Nearest" -msgstr "Rapprochée" +msgstr "La plus proche" msgid "Aligned" msgstr "Alignée" @@ -8898,54 +8645,18 @@ msgstr "Arrière" msgid "Random" msgstr "Aléatoire" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" -msgstr "Distance de la couture" +msgstr "" 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%." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" -"Afin de réduire la visibilité de la couture dans une extrusion en boucle " -"fermée, la boucle est interrompue et raccourcie d’une valeur spécifiée.\n" -"Cette quantité peut être spécifiée en millimètres ou en pourcentage du " -"diamètre actuel de la buse. La valeur par défaut de ce paramètre est 10 %." - -msgid "Role base wipe speed" -msgstr "Vitesse d’essuyage basée sur la vitesse d’extrusion" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" -"La vitesse d’essuyage est identique à la vitesse d’extrusion actuelle. Par " -"exemple, si l’action d’essuyage est suivie d’une extrusion de paroi " -"extérieure, la vitesse de la paroi extérieure sera utilisée pour cette " -"action d’essuyage." - -msgid "Wipe on loops" -msgstr "Essuyer sur les boucles" - -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 "" -"Pour minimiser la visibilité de la couture dans une extrusion en boucle " -"fermée, un petit mouvement vers l’intérieur est exécuté avant que la buse ne " -"quitte la boucle." msgid "Wipe speed" -msgstr "Vitesse d’essuyage" +msgstr "" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -8953,41 +8664,31 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"La vitesse d’essuyage est déterminée par le paramètre de vitesse spécifié " -"dans cette configuration. Si la valeur est exprimée en pourcentage (par " -"exemple 80%), elle sera calculée en fonction du paramètre de vitesse de " -"déplacement ci-dessus. La valeur par défaut de ce paramètre est 80%" msgid "Skirt distance" -msgstr "Distance de la jupe" +msgstr "Distance jupe" msgid "Distance from skirt to brim or object" -msgstr "Distance entre la jupe et la bordure ou l'objet" +msgstr "Distance de la jupe au bord ou à l'objet" msgid "Skirt height" msgstr "Hauteur de la jupe" msgid "How many layers of skirt. Usually only one layer" -msgstr "Nombre de couches de la jupe. Généralement une seule couche suffit." +msgstr "Nombre de couches de jupe, généralement une seule." msgid "Skirt loops" -msgstr "Nombre de lignes de la jupe" +msgstr "Boucles de jupe" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "Nombre de ligne de la jupe. Une valeur à 0 signifie aucune jupe" - -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" +msgstr "Nombre de boucles pour la jupe. Zéro signifie désactiver la jupe" msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " "layer time is shorter than this value, to get better cooling for these layers" msgstr "" "La vitesse d'impression dans le gcode exporté sera ralentie, lorsque le " -"temps de couche estimé est plus court que la valeur définie, pour obtenir un " +"temps de couche estimé est plus court que cette valeur, pour obtenir un " "meilleur refroidissement pour ces couches" msgid "Minimum sparse infill threshold" @@ -8997,29 +8698,31 @@ msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"La zone de remplissage qui est inférieure à la valeur seuil est remplacée " -"par un remplissage solide" +"La zone de remplissage inférieure à la valeur seuil est remplacée par un " +"remplissage solide interne" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Largeur de ligne du remplissage solide interne" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" -"Vitesse du remplissage solide, et non de la surface supérieure et inférieure" +"Vitesse du remplissage solide interne, pas de la surface supérieure et " +"inférieure" msgid "Spiral vase" -msgstr "Mode vase" +msgstr "Vase spirale" 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 "" -"Lisse les mouvements en Z du contour extérieur et transforme un modèle " -"solide en une impression à paroi unique avec des couches inférieures " -"solides. Le modèle généré final n'a pas de couture" +"Spiralize lisse les mouvements z du contour extérieur. Et transforme un " +"modèle solide en une impression à paroi unique avec des couches inférieures " +"solides. Le modèle généré final n'a pas de couture." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -9031,15 +8734,14 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"Si le mode Lissé ou Traditionnel est sélectionné, une vidéo Timelapse sera " -"générée pour chaque impression. Une fois chaque couche imprimée, un " -"instantané est pris avec la caméra de la chambre. Tous ces instantanés sont " -"composés dans une vidéo Timelapse lorsque l'impression est terminée. Si le " -"mode Lissé est sélectionné, la tête d'outil se déplacera vers la goulotte " -"excédentaire après l'impression de chaque couche, puis prendra un " -"instantané. Étant donné que le filament fondu peut couler de la buse pendant " -"le processus de prise d'instantané, la tour de purge est nécessaire pour " -"essuyer la buse pour le mode Lissé." +"Si le mode fluide ou traditionnel est sélectionné, une vidéo en timelapse " +"sera générée pour chaque impression. À chaque couche imprimée, un instantané " +"est pris avec la caméra intégrée. Tous ces instantanés seront assemblés dans " +"une vidéo timelapse une fois l'impression terminée. Si le mode lisse est " +"sélectionné, l'extrudeur se déplace vers la goulotte d'évacuation à chaque " +"couche imprimée, puis prend un cliché. Étant donné que le filament fondu " +"peut s'échapper de la buse pendant la prise de vue, une tour de nettoyage " +"est requise en mode lisse pour essuyer la buse." msgid "Traditional" msgstr "Traditionnel" @@ -9048,46 +8750,45 @@ msgid "Temperature variation" msgstr "Variation de température" msgid "Start G-code" -msgstr "G-code de démarrage" +msgstr "G-code de début" msgid "Start G-code when start the whole printing" -msgstr "G-code lors du démarrage de l'ensemble de l'impression" +msgstr "Démarrer le code G lors du démarrage de l'ensemble de l'impression" msgid "Start G-code when start the printing of this filament" -msgstr "G-code au démarrage de l'impression de ce filament" +msgstr "Démarrer le code G au démarrage de l'impression de ce filament" msgid "Slice gap closing radius" -msgstr "Rayon de fermeture de l'espacement" +msgstr "Rayon de fermeture du trou" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Les fentes d'une taille inférieure à 2x le rayon de fermeture de " -"l'espacement sont comblées lors du découpage du maillage triangulaire. " -"L'opération de fermeture de l'espace peut réduire la résolution de " -"l'impression finale, il est donc conseillé de conserver une valeur " -"raisonnablement basse." +"Les fissures inférieures à 2 fois le rayon de fermeture de trou sont " +"comblées lors du découpage à mailles triangulaires. L'opération de fermeture " +"des espaces peut réduire la résolution finale d'impression. Il est donc " +"conseillé de maintenir la valeur à un niveau raisonnablement bas." msgid "Slicing Mode" -msgstr "Mode de découpage" +msgstr "Mode de tranchage" msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Utiliser \"Even-odd\" pour les modèles d'avion 3DLabPrint. Utiliser " -"\"Combler les trous\" pour fermer tous les trous du modèle." +"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez " +"« Fermer les trous » pour fermer tous les trous du modèle." msgid "Regular" -msgstr "Normal" +msgstr "Standard" msgid "Even-odd" -msgstr "Even-odd" +msgstr "Pair-impair" msgid "Close holes" -msgstr "Combler les trous" +msgstr "Fermez les trous" msgid "Enable support" msgstr "Activer les supports" @@ -9101,8 +8802,8 @@ msgid "" "generated" msgstr "" "Normaux (auto) et Arborescents (auto) sont utilisés pour générer " -"automatiquement les supports. Si Normaux ou Arborescents est sélectionné, " -"seuls les supports forcés sont générés" +"automatiquement un support. Si vous sélectionnez Normaux (manuel) ou " +"Arborescents (manuel), seuls les générateurs de support manuels sont générés" msgid "normal(auto)" msgstr "Normaux (auto)" @@ -9111,41 +8812,41 @@ msgid "tree(auto)" msgstr "Arborescents (auto)" msgid "normal(manual)" -msgstr "Normaux (manuels)" +msgstr "Normaux (manuel)" msgid "tree(manual)" -msgstr "Arborescents (manuels)" +msgstr "Arborescents (manuel)" msgid "Support/object xy distance" -msgstr "Distance X-Y Support/Objet" +msgstr "Distance support/objet xy" msgid "XY separation between an object and its support" -msgstr "Distance de séparation X-Y entre un objet et son support" +msgstr "Séparation XY entre un objet et ses supports" msgid "Pattern angle" msgstr "Angle du motif" msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "" -"Utiliser ce paramètre pour faire pivoter le motif de support sur le plan " +"Utilisez ce paramètre pour faire pivoter le motif de support sur le plan " "horizontal." msgid "On build plate only" -msgstr "Sur le plateau uniquement" +msgstr "Sur plateau uniquement" msgid "Don't create support on model surface, only on build plate" msgstr "" -"Ne pas créer de support sur la surface du modèle, uniquement sur le plateau" +"Ce paramètre génère uniquement les supports qui commencent sur le plateau." msgid "Support critical regions only" -msgstr "Zones critiques uniquement" +msgstr "Ne supporter que les régions critiques" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Créer uniquement des supports pour les zones critiques, y compris les " -"pointes, les surplombs, etc." +"Créez un support uniquement pour les zones critiques notamment les pointes, " +"les surplombs, etc." msgid "Remove small overhangs" msgstr "" @@ -9157,80 +8858,76 @@ msgid "Top Z distance" msgstr "Distance Z supérieure" msgid "The z gap between the top support interface and object" -msgstr "Distance Z entre l'interface de support supérieure et l'objet" +msgstr "L'écart z entre l'interface de support supérieure et l'objet" msgid "Bottom Z distance" msgstr "Distance Z inférieure" msgid "The z gap between the bottom support interface and object" -msgstr "Distance Z entre l'interface de support inférieure et l'objet" +msgstr "L'écart Z entre l'interface du support inférieur et l'objet" msgid "Support/raft base" -msgstr "Base Supports/Radeau" +msgstr "Support/base du radeau" msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filament pour imprimer la base des supports et les radeaux. \"Par défaut\" " -"signifie qu'aucun filament spécifique n'est utilisé pour les supports et que " -"le filament actuel est utilisé" +"Filament pour imprimer les supports et radeaux. « Par défaut » signifie " +"qu'aucun filament spécifique n'est utilisé comme support et que le filament " +"actuel est utilisé" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "Largeur de ligne du support" msgid "Interface use loop pattern" -msgstr "Boucles des interfaces" +msgstr "Modèle de boucle d'utilisation d'interface" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"Couvrir la couche de contact supérieure des supports avec des boucles. " +"Recouvrir la couche de contact supérieure des supports avec des boucles. " "Désactivé par défaut." msgid "Support/raft interface" -msgstr "Interfaces Supports/Radeau" +msgstr "Support/base d'interface" msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filament pour imprimer les interfaces de support. \"Par défaut\" signifie " -"qu'aucun filament spécifique n'est utilisé pour les interfaces de support et " -"le filament actuel est utilisé" +"Filament pour l'impression des interfaces de support. \"Défaut\" signifie " +"qu'il n'y a pas de filament spécifique pour l'interface de support et que le " +"filament actuel est utilisé." msgid "Top interface layers" -msgstr "Couches des interfaces supérieures" +msgstr "Couches d'interface supérieures" msgid "Number of top interface layers" -msgstr "Nombre de couches des interfaces supérieures" +msgstr "Nombre de couches d'interface supérieures" msgid "Bottom interface layers" -msgstr "Couches des interfaces inférieures" +msgstr "Couches d'interface inférieures" msgid "Top interface spacing" -msgstr "Espacement du motif des interfaces supérieures" +msgstr "Espacement de l'interface supérieure" msgid "Spacing of interface lines. Zero means solid interface" -msgstr "" -"Espacement des lignes du motif des interfaces de support supérieures. Une " -"valeur à 0 signifie une interface solide" +msgstr "Espacement des lignes d'interface. Zéro signifie une interface solide" msgid "Bottom interface spacing" -msgstr "Espacement du motif des interfaces inférieures" +msgstr "Espacement de l'interface inférieure" msgid "Spacing of bottom interface lines. Zero means solid interface" msgstr "" -"Espacement des lignes du motif des interfaces de support inférieures. Une " -"valeur à 0 signifie une interface solide" +"Espacement des lignes d'interface inférieures. Zéro signifie une interface " +"solide" msgid "Speed of support interface" -msgstr "Vitesse des interfaces de support" +msgstr "Vitesse pour l'interface des supports" msgid "Base pattern" -msgstr "Motif de la base" +msgstr "Motif de base" msgid "Line pattern of support" msgstr "Motif de ligne de support" @@ -9242,34 +8939,34 @@ msgid "Hollow" msgstr "Creux" msgid "Interface pattern" -msgstr "Motif des interfaces" +msgstr "Motif d'interface" msgid "" "Line pattern of support interface. Default pattern for non-soluble support " "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"Modèle de ligne de l'interface de support. Le motif par défaut pour les " -"interfaces de support non solubles est Rectiligne, tandis que le modèle par " -"défaut pour les interfaces de support solubles est Concentrique" +"Modèle de ligne de l'interface de support. Le modèle par défaut pour " +"l'interface de support non soluble est rectiligne, tandis que le modèle par " +"défaut pour l'interface de support soluble est concentrique" msgid "Rectilinear Interlaced" -msgstr "Rectiligne entrelacé" +msgstr "Rectiligne Entrelacé" msgid "Base pattern spacing" -msgstr "Espacement du motif de la base" +msgstr "Espacement du motif de base" msgid "Spacing between support lines" msgstr "Espacement entre les lignes de support" msgid "Normal Support expansion" -msgstr "Expansion des supports normaux" +msgstr "Expansion normale du support" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "Agrandir (+) ou réduire (-) la portée horizontale des supports normaux" +msgstr "Augmenter (+) ou réduire (-) la portée horizontale du support normal." msgid "Speed of support" -msgstr "Vitesse des supports" +msgstr "Vitesse pour les supports" msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -9279,45 +8976,42 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Style et forme des supports.\n" -"Supports Normaux : Grille régulière avec des supports plus stables (par " -"défaut).\n" -"Support Ajustés : Economisent de la matière et réduisent les traces sur le " -"modèle.\n" -"Supports Arborescents Fins : Fusionnent les branches de manière plus " -"agressive et économisent beaucoup de filament (par défaut).\n" -"Supports Arborescents Solides : Fusionnent les branches de manière moins " -"agressive et économisent moins de filament.\n" -"Supports Arborescents Hybrides : Structure similaire aux supports normaux " -"avec de grands surplombs plats." +"Style et forme du support. Pour un support normal, la projection des " +"supports sur une grille régulière créera des supports plus stables (par " +"défaut), tandis que des tours de support bien ajustées permettront " +"d'économiser du matériau et de réduire les cicatrices sur les objets.\n" +"Pour les supports Arborescent, le style mince fusionnera les branches de " +"manière plus agressive et économisera beaucoup de matière (par défaut), " +"tandis que le style hybride créera une structure similaire à celle d'un " +"support normal placé sous de grands surplombs plats." msgid "Snug" -msgstr "Ajustés" +msgstr "Ajusté" msgid "Tree Slim" -msgstr "Arborescents Fins" +msgstr "Arborescent Fin" msgid "Tree Strong" -msgstr "Arborescents Solides" +msgstr "Arborescent Fort" msgid "Tree Hybrid" -msgstr "Arborescents Hybrides" +msgstr "Arborescent Hybride" msgid "Independent support layer height" -msgstr "Hauteur de la couche indépendante des supports" +msgstr "Hauteur de la couche de support indépendante" 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 "" -"La couche de support utilise une hauteur de couche indépendante de la couche " -"d'objet. Cela permet de prendre en charge la personnalisation de l’espace Z " -"et de gagner sur la durée d'impression. Cette option sera invalide lorsque " -"la tour de purge est activée." +"La couche de support utilise la hauteur de la couche indépendamment de la " +"couche objet. Cela permet de personnaliser l'espace Z et de gagner du temps " +"d'impression. Cette option ne sera pas valide lorsque la tour de purge sera " +"activée." msgid "Threshold angle" -msgstr "Angle de surplomb" +msgstr "Angle de seuil" msgid "" "Support will be generated for overhangs whose slope angle is below the " @@ -9327,85 +9021,57 @@ msgstr "" "inférieur au seuil." msgid "Tree support branch angle" -msgstr "Angle des branches" +msgstr "Angle de branche support arborescent" 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 "" -"Ce paramètre détermine l’angle de surplomb maximal que les branches sont " -"autorisées à faire. Si l’angle est augmenté, les branches peuvent être " -"imprimées plus horizontalement, ce qui leur permet de s’étendre plus loin." +"Ce paramètre détermine l'angle des surplombs maximum que les branches du " +"support arborescent peuvent faire. Si l'angle est augmenté, les branches " +"peuvent être imprimées plus horizontalement, ce qui leur permet d'aller plus " +"loin." msgid "Tree support branch distance" -msgstr "Distance des branches" +msgstr "Distance de branche de support arborescent" msgid "" "This setting determines the distance between neighboring tree support nodes." -msgstr "Ce paramètre détermine la distance entre les branches de support." - -msgid "Adaptive layer height" -msgstr "Hauteur de couche variable" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " msgstr "" -"L’activation de cette option signifie que la hauteur de couche des supports " -"arborescents, à l’exception de la première, sera automatiquement calculée " - -msgid "Auto brim width" -msgstr "Largeur de la bordure automatique" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" -"L’activation de cette option signifie que la largeur de la bordure des " -"supports arborescents sera automatiquement calculée" - -msgid "Tree support brim width" -msgstr "Supports arborescents avec bordure" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" -"Distance entre la branche du support arborescent et la ligne la plus externe " -"de la bordure" +"Ce paramètre détermine la distance entre les nœuds de support arborescents " +"voisins." msgid "Tree support branch diameter" -msgstr "Diamètre des branches" +msgstr "Diamètre de branche de support arborescent" msgid "This setting determines the initial diameter of support nodes." -msgstr "Ce paramètre détermine le diamètre initial des branches de support." +msgstr "Ce paramètre détermine le diamètre initial des nœuds de support." msgid "Tree support wall loops" -msgstr "Nombre de parois des branches" +msgstr "Nombre de parois support arborescent" msgid "This setting specify the count of walls around tree support" -msgstr "Ce paramètre spécifie le nombre de parois des branches de support" +msgstr "Ce paramètre spécifie le nombre de murs autour du support arborescent" -msgid "Tree support with infill" -msgstr "Supports arborescents avec remplissage" +msgid "Tree support brim width" +msgstr "Largeur de bordure du support de l'arbre" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" +msgid "The brim width around tree support. 0 means auto." msgstr "" -"Ce paramètre spécifie s’il faut ajouter un remplissage à l’intérieur des " -"supports arborescents" +"La largeur de la bordure autour du support de l'arbre. 0 signifie auto." msgid "Chamber temperature" -msgstr "Température de la chambre" +msgstr "" msgid "Target chamber temperature" -msgstr "Température cible de la chambre" +msgstr "" msgid "Nozzle temperature for layers after the initial one" msgstr "Température de la buse pour les couches après la première" msgid "Bed temperature difference" -msgstr "Différence de température du plateau" +msgstr "Différence de température du lit" msgid "" "Do not recommend bed temperature of other layer to be lower than initial " @@ -9413,19 +9079,20 @@ msgid "" "may cause the model broken free from build plate" msgstr "" "Il n'est pas recommandé que la température du plateau des autres couches " -"soit inférieure à celle de la couche initiale pendant plus de ce seuil. Une " -"température de plateau trop basse peut entraîner le décollement du modèle" +"soit inférieure à celle de la première couche d'un niveau supérieur à ce " +"seuil. Une température de base trop basse de l'autre couche peut provoquer " +"le détachement du modèle." msgid "Detect thin wall" -msgstr "Détecter les parois fines" +msgstr "Détecter les parois minces" msgid "" "Detect thin wall which can't contain two line width. And use single line to " "print. Maybe printed not very well, because it's not closed loop" msgstr "" -"Détecter les parois minces qui ne peuvent pas contenir deux largeurs de " -"ligne et utiliser une seule ligne pour les imprimer. Peut ne pas être très " -"bien imprimé car ce n'est pas en boucle fermée" +"Détecte les parois minces qui ne peuvent pas contenir deux largeurs de " +"ligne. Et utilisez une seule ligne pour imprimer. Peut-être pas très bien " +"imprimé, car ce n'est pas en boucle fermée" msgid "" "This gcode is inserted when change filament, including T command to trigger " @@ -9434,16 +9101,14 @@ msgstr "" "Ce gcode est inséré lors du changement de filament, y compris la commande T " "pour déclencher le changement d'outil" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Largeur de ligne pour les surfaces supérieures" msgid "Speed of top surface infill which is solid" msgstr "Vitesse de remplissage de la surface supérieure qui est solide" msgid "Top shell layers" -msgstr "Nombre de couches des coques supérieures" +msgstr "Couches de coque supérieures" msgid "" "This is the number of solid layers of top shell, including the top surface " @@ -9456,10 +9121,10 @@ msgstr "" "coque supérieure seront augmentées" msgid "Top solid layers" -msgstr "Couches solides supérieures" +msgstr "Couches supérieures solides" msgid "Top shell thickness" -msgstr "Épaisseur des coques supérieures" +msgstr "Épaisseur de la coque supérieure" msgid "" "The number of top solid layers is increased when slicing if the thickness " @@ -9471,41 +9136,49 @@ msgstr "" "Le nombre de couches solides supérieures est augmenté lors du découpage si " "l'épaisseur calculée par les couches de coque supérieures est inférieure à " "cette valeur. Cela peut éviter d'avoir une coque trop fine lorsque la " -"hauteur de couche est faible. Une valeur à 0 signifie que ce paramètre est " -"désactivé et que l'épaisseur de la coque supérieure est absolument " -"déterminée par les couches de coque supérieures" +"hauteur de couche est faible. 0 signifie que ce paramètre est désactivé et " +"que l'épaisseur de la coque supérieure est absolument déterminée par les " +"couches de coque supérieures" msgid "Speed of travel which is faster and without extrusion" msgstr "Vitesse de déplacement plus rapide et sans extrusion" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" -msgstr "Essuyer lors des rétractions" +msgstr "Nettoyer lors des rétractions" 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 "" -"Déplacer la buse le long du dernier chemin d'extrusion lors de la rétraction " +"Déplacez la buse le long du dernier chemin d'extrusion lors de la rétraction " "pour nettoyer la fuite de matériau sur la buse. Cela peut minimiser les " "taches lors de l'impression d'une nouvelle pièce après le trajet" msgid "Wipe Distance" -msgstr "Distance d’essuyage" +msgstr "Distance de balayage" msgid "" "Discribe how long the nozzle will move along the last path when retracting" msgstr "" -"Distance sur laquelle la buse se déplacera le long du dernier chemin lors de " -"la rétraction" +"Décrire combien de temps la buse se déplacera le long du dernier chemin lors " +"de la rétraction" 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 "" -"La tour de purge peut être utilisée pour nettoyer les résidus sur la buse et " -"stabiliser la pression de la chambre à l’intérieur de la buse, afin d’éviter " -"les défauts d’aspect lors de l’impression d’objets." +"La tour d'essuyage peut être utilisée pour nettoyer les résidus sur la buse " +"et stabiliser la pression de la chambre à l'intérieur de la buse afin " +"d'éviter les défauts d'apparence lors de l'impression d'objets." msgid "Purging volumes" msgstr "Volumes de purge" @@ -9517,20 +9190,20 @@ msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"Les volumes de purge réels sont égaux au multiplicateur de purge multiplié " -"par les volumes de purge dans le tableau." +"Les volumes de rinçage actuels sont égaux à la valeur du multiplicateur de " +"rinçage multiplié par les volumes de rinçage dans le tableau." msgid "Prime volume" -msgstr "Volume de purge" +msgstr "Premier volume" msgid "The volume of material to prime extruder on tower." -msgstr "Volume de matériau pour amorcer l'extrudeur sur la tour." +msgstr "Le volume de matériau à amorcer l'extrudeuse sur la tour." msgid "Width" msgstr "Largeur" msgid "Width of prime tower" -msgstr "Largeur de la tour de purge" +msgstr "Largeur de la tour de nettoyage." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -9539,46 +9212,45 @@ msgid "" "outside. It will not take effect, unless the prime tower is enabled." msgstr "" "La purge après le changement de filament sera effectuée à l'intérieur des " -"remplissages des objets. Cela peut réduire la quantité de déchets et " -"diminuer la durée d'impression. Si les murs sont imprimés avec un filament " -"transparent, le remplissage de couleurs mélangées sera visible à " -"l'extérieur. Cela ne prendra effet que si la tour de purge est activée." +"matériaux de remplissage des objets. Cela peut réduire la quantité de " +"déchets et le temps d'impression. Si les murs sont imprimés avec un filament " +"transparent, le remplissage de couleurs mélangées sera visible. Cela ne " +"prendra effet que si la tour de nettoyage est activée." 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 "" -"La purge après changement de filament sera effectuée à l'intérieur des " -"supports des objets. Cela peut réduire la quantité de déchets et diminuer la " -"durée d'impression. Cela ne prendra effet que si la tour de purge est " -"activée." +"La purge après le changement de filament se fera à l'intérieur du support " +"des objets. Cela peut réduire la quantité de déchets et le temps " +"d'impression. Cela ne prendra effet que si une tour de nettoyage est activée." 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 "" -"Cet objet servira à purger la buse après un changement de filament pour " -"économiser du filament et diminuer la durée d'impression. Les couleurs des " -"objets seront mélangées en conséquence. Cela ne prendra effet que si la tour " -"de purge est activée." +"Cet objet sera utilisé pour purger la buse après un changement de filament " +"afin d'économiser du filament et de réduire le temps d'impression. Les " +"couleurs des objets seront mélangées en conséquence. Cela ne prendra effet " +"que si la tour de nettoyage est activée." msgid "X-Y hole compensation" -msgstr "Compensation X-Y des trous" +msgstr "Compensation de trou X-Y" msgid "" "Holes of object will be grown or shrunk in XY plane by the configured value. " "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 "" -"Les trous de l'objet seront agrandis ou rétrécis dans le plan X-Y par la " -"valeur définie. Une valeur positive agrandit les trous. Une valeur négative " -"rend les trous plus petits. Cette fonction est utilisée pour ajuster " -"légèrement la taille lorsque l'objet a un problème d'assemblage" +"Les trous de l'objet seront agrandis ou rétrécis dans le plan XY par la " +"valeur configurée. Une valeur positive agrandit les trous. Une valeur " +"négative rend les trous plus petits. Cette fonction est utilisée pour " +"ajuster légèrement la taille lorsque l'objet a un problème d'assemblage" msgid "X-Y contour compensation" -msgstr "Compensation X-Y des contours" +msgstr "Compensation de contour X-Y" msgid "" "Contour of object will be grown or shrunk in XY plane by the configured " @@ -9586,67 +9258,41 @@ msgid "" "smaller. This function is used to adjust size slightly when the object has " "assembling issue" msgstr "" -"Les contours de l'objet seront agrandis ou rétrécis dans le plan X-Y par la " -"valeur définie. Une valeur positive agrandit les contours. Une valeur " -"négative rend les contours plus petits. Cette fonction est utilisée pour " -"ajuster légèrement la taille lorsque l'objet a un problème d'assemblage" - -msgid "G-code thumbnails" -msgstr "Vignette G-code" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" -"Tailles des images à stocker dans les fichiers .gcode et .sl1/.sl1s, au " -"format suivant : \"XxY, XxY, …\"" - -msgid "Use relative E distances" -msgstr "Utiliser l’extrusion relative" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" -"L’extrusion relative est recommandée lors de l’utilisation de l’option " -"\"label_objects\". Certains extrudeurs fonctionnent mieux avec cette option " -"décochée (mode d’extrusion absolu). La tour de purge n’est compatible " -"qu’avec le mode relatif. Il est toujours activé sur les imprimantes " -"BambuLab. La valeur par défaut est cochée" +"Le contour de l'objet sera agrandi ou rétréci dans le plan XY par la valeur " +"configurée. Une valeur positive agrandit le contour. Une valeur négative " +"rend le contour plus petit. Cette fonction est utilisée pour ajuster " +"légèrement la taille lorsque l'objet a un problème d'assemblage" msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"Le générateur de parois classiques produit des parois avec une largeur " -"d'extrusion constante, et pour les zones très minces il est utilisé pour " -"combler les espaces. Le moteur Arachne produit des parois avec une largeur " -"d'extrusion variable." +"Le générateur de murs classique produit des murs avec une largeur " +"d'extrusion constante, les zones très fines seront remplies. Le générateur " +"Arachne produit des murs avec une largeur d'extrusion variable." msgid "Classic" msgstr "Classique" msgid "Arachne" -msgstr "Arachne" +msgstr "Arachné" msgid "Wall transition length" -msgstr "Longueur de transition de paroi" +msgstr "Longueur de la transition murale" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"Lors de la transition entre différents nombres de parois à mesure que la " -"pièce devient plus mince, un certain espace est alloué pour diviser ou " -"joindre les segments de paroi. Elle est exprimée en pourcentage sur le " -"diamètre de la buse" +"Lorsque vous passez d'un nombre différent de murs à un autre lorsque la " +"pièce s'amincit, un certain espace est alloué pour séparer ou joindre les " +"segments du mur. Il est exprimé en pourcentage par rapport au diamètre de la " +"buse." msgid "Wall transitioning filter margin" -msgstr "Marge du filtre de transition de paroi" +msgstr "Marge du filtre de transition de mur" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -9657,17 +9303,17 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Empêche les transitions entre une paroi supplémentaire et une paroi de " -"moins. Cette marge étend la plage des largeurs d'extrusion suivante [Largeur " -"minimale de la paroi - marge, 2 * Largeur minimale da paroi + marge]. " +"Empêchez les allers-retours entre un mur supplémentaire et un mur de moins. " +"Cette marge étend la plage de largeurs d'extrusion qui suit jusqu'à [Largeur " +"de paroi minimale - marge, 2* Largeur de paroi minimale + marge]. " "L'augmentation de cette marge réduit le nombre de transitions, ce qui réduit " -"le nombre de démarrages/arrêts d'extrusion et le temps de parcours. " -"Cependant, une grande variation de largeur d'extrusion peut entraîner des " -"problèmes de sous-extrusion ou de sur-extrusion. Elle est exprimée en " -"pourcentage sur le diamètre de la buse" +"le nombre de démarrages/arrêts d'extrusion et le temps de trajet. Cependant, " +"une variation importante de la largeur d'extrusion peut entraîner des " +"problèmes de sous-extrusion ou de surextrusion. Il est exprimé en " +"pourcentage par rapport au diamètre de la buse" msgid "Wall transitioning threshold angle" -msgstr "Angle de seuil de transition de paroi" +msgstr "Angle du seuil de transition du mur" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -9676,26 +9322,26 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Permet d'indiquer quand créer des transitions entre des nombres pairs et " -"impairs des parois. Une forme de coin avec un angle supérieur à ce paramètre " -"n'aura pas de transitions et aucune paroi ne sera imprimée au centre pour " -"remplir l'espace restant. La réduction de ce paramètre réduit le nombre et " -"la longueur de ces parois centrales, mais peut laisser des espaces ou une " -"sur-extrusion" +"Quand créer des transitions entre les nombres pairs et impairs de murs. Une " +"forme cunéiforme dont l'angle est supérieur à ce paramètre n'aura pas de " +"transitions et aucun mur ne sera imprimé au centre pour remplir l'espace " +"restant. En réduisant ce paramètre, vous réduisez le nombre et la longueur " +"de ces murs centraux, mais vous risquez de laisser des vides ou de " +"surextruder les murs." msgid "Wall distribution count" -msgstr "Nombre de distributions de paroi" +msgstr "Nombre de distributions murales" msgid "" "The number of walls, counted from the center, over which the variation needs " "to be spread. Lower values mean that the outer walls don't change in width" msgstr "" -"Nombre de parois, comptées à partir du centre, sur lesquelles la variation " -"doit être répartie. Des valeurs inférieures signifient que les parois " -"extérieures ne changent pas de largeur." +"Nombre de murs, comptés à partir du centre, sur lesquels la variation doit " +"être répartie. Des valeurs plus faibles signifient que la largeur des parois " +"extérieures ne change pas" msgid "Minimum feature size" -msgstr "Épaisseur minimale des parois fines" +msgstr "Taille minimale de l'élément" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -9703,14 +9349,14 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Épaisseur minimale des parois fines. Les parois du modèle qui sont plus " -"minces que cette valeur ne seront pas imprimées, tandis que les parois plus " -"épaisses que la taille minimale de la paroi seront élargies à la largeur de " -"la paroi minimale. Elle est exprimée en pourcentage sur le diamètre de la " -"buse" +"Épaisseur minimale des éléments fins. Les caractéristiques du modèle qui " +"sont plus fines que cette valeur ne seront pas imprimées, tandis que les " +"entités plus épaisses que la taille minimale seront élargies jusqu'à la " +"largeur de paroi minimale. Il est exprimé en pourcentage par rapport au " +"diamètre de la buse" msgid "Minimum wall width" -msgstr "Largeur minimale de la paroi" +msgstr "Largeur minimale du mur" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -9718,57 +9364,57 @@ msgid "" "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"Largeur de la paroi qui remplacera les parois fines (en fonction de la " -"taille minimale de la paroi) du modèle. Si la largeur minimale de la paroi " -"est plus fine que l'épaisseur de la paroi du modèle, la paroi deviendra " -"aussi épaisse que celle du modèle. Elle est exprimée en pourcentage sur le " -"diamètre de la buse" +"Largeur du mur qui remplacera les éléments fins (selon la taille minimale " +"des éléments) du modèle. Si la largeur minimale du mur est inférieure à " +"l'épaisseur de l'élément, le mur deviendra aussi épais que l'élément lui-" +"même. Il est exprimé en pourcentage par rapport au diamètre de la buse" msgid "Detect narrow internal solid infill" -msgstr "Détecter un remplissage solide étroit" +msgstr "Détecter un remplissage solide interne étroit" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used defaultly." msgstr "" -"Cette option détectera automatiquement les zones de remplissage solides " -"étroits. Si activé, un motif concentrique sera utilisé pour les zones afin " -"d'accélérer l'impression. Sinon, le motif rectiligne est utilisé par défaut." +"Cette option détectera automatiquement la zone de remplissage solide interne " +"étroite. S'il est activé, un motif concentrique sera utilisé pour la zone " +"afin d'accélérer l'impression. Sinon, le motif rectiligne est utilisé par " +"défaut." msgid "invalid value " -msgstr "valeur invalide " +msgstr "Valeur invalide " #, c-format, boost-format msgid " doesn't work at 100%% density " msgstr " ne fonctionne pas à une densité de 100%% " msgid "Invalid value when spiral vase mode is enabled: " -msgstr "Valeur invalide lorsque le mode vase est activé : " +msgstr "Valeur non valide lorsque le mode vase en spirale est activé: " msgid "too large line width " -msgstr "Largeur de ligne trop grande " +msgstr "largeur de ligne trop importante " msgid " not in range " -msgstr " pas dans la plage " +msgstr " hors plage " msgid "Export 3MF" -msgstr "Exporter 3mf" +msgstr "Exporter 3MF" msgid "Export project as 3MF." -msgstr "Exporter le projet au format 3mf." +msgstr "Exporter le projet au format 3MF." msgid "Export slicing data" -msgstr "Exporter les données de découpage" +msgstr "Exporter les données de tranchage" msgid "Export slicing data to a folder." -msgstr "Exporter les données de découpage vers un dossier." +msgstr "Exporter les données de tranchage vers un dossier" msgid "Load slicing data" -msgstr "Charger les données de découpage" +msgstr "Charger les données de tranchage" msgid "Load cached slicing data from directory" -msgstr "Charger les données de découpage en cache à partir d'un dossier" +msgstr "Charger les données de tranchage mises en cache à partir du répertoire" msgid "Export STL" msgstr "" @@ -9780,17 +9426,17 @@ msgid "Slice" msgstr "Découper" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" -msgstr "" -"Découper les plateaux : 0-tous les plateaux, i-plateau i, autres-invalides" +msgstr "Trancher toutes les plaques : 0-toutes, i-plaque i, autres-invalides" msgid "Show command help." -msgstr "Afficher l'aide des commandes." +msgstr "Afficher l'aide de la commande." msgid "UpToDate" msgstr "À jour" msgid "Update the configs values of 3mf to latest." -msgstr "Mettre à jour les dernières valeurs de configuration de 3mf." +msgstr "" +"Mettez à jour les valeurs de configuration 3mf à la version la plus récente." msgid "Load default filaments" msgstr "" @@ -9802,33 +9448,33 @@ msgid "mtcpp" msgstr "mtcpp" msgid "max triangle count per plate for slicing." -msgstr "Nombre maximum de triangles par plateau pour le découpage." +msgstr "nombre maximal de triangles par plaque pour le tranchage" msgid "mstpp" msgstr "mstpp" msgid "max slicing time per plate in seconds." -msgstr "Durée de découpage maximum par plateau en secondes." +msgstr "temps de tranchage maximal par plaque en secondes" msgid "No check" msgstr "Pas de vérification" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" -"N’exécuter aucune vérification de validité, telle que la vérification des " -"conflits de chemin G-code." +"Ne pas effectuer de contrôle de validité, tel que le contrôle des conflits " +"de parcours de G-code." msgid "Normative check" -msgstr "Vérification normative" +msgstr "Contrôle normatif" msgid "Check the normative items." -msgstr "Vérifier les éléments normatifs." +msgstr "Vérifiez les éléments normatifs." msgid "Output Model Info" -msgstr "Informations sur le modèle de sortie" +msgstr "Information du Modèle de Sortie" msgid "Output the model's information." -msgstr "Informations sur le modèle de sortie" +msgstr "Sortie des informations du modèle." msgid "Export Settings" msgstr "Paramètres d'exportation" @@ -9837,10 +9483,10 @@ msgid "Export settings to a file." msgstr "Exporter les paramètres vers un fichier." msgid "Send progress to pipe" -msgstr "Envoyer la progression au canal" +msgstr "Envoyer la progression à la queue" msgid "Send progress to pipe." -msgstr "Envoyer la progression au canal." +msgstr "Envoyer la progression à la queue." msgid "Arrange Options" msgstr "Options d'organisation" @@ -9871,7 +9517,7 @@ msgstr "Charger les paramètres généraux" msgid "Load process/machine settings from the specified file" msgstr "" -"Charger les paramètres de processus/imprimante à partir du fichier spécifié" +"Charger les paramètres de processus/machine à partir du fichier spécifié" msgid "Load Filament Settings" msgstr "Charger les paramètres de filament" @@ -9881,7 +9527,7 @@ msgstr "" "Charger les paramètres de filament à partir de la liste de fichiers spécifiée" msgid "Skip Objects" -msgstr "Ignorer les objets" +msgstr "Ignorer les Objets" msgid "Skip some objects in this print" msgstr "Ignorer certains objets de cette impression" @@ -9894,23 +9540,11 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "Répertoire de données" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" -"Charger et stocker les paramètres dans le répertoire donné. Ceci est utile " -"pour maintenir différents profils ou inclure des configurations à partir " -"d’un stockage réseau." - msgid "Output directory" -msgstr "Dossier de sortie" +msgstr "Répertoire de sortie" msgid "Output directory for the exported files." -msgstr "Dossier de sortie des fichiers exportés." +msgstr "Répertoire de sortie des fichiers exportés." msgid "Debug level" msgstr "Niveau de débogage" @@ -9919,107 +9553,108 @@ msgid "" "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éboggage. 0:fatal, 1:erreur, 2:" -"avertissement, 3:info, 4:déboggage, 5:tracer\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 "Error in zip archive" msgstr "Erreur dans l'archive zip" msgid "Generating walls" -msgstr "Génération des parois" +msgstr "Génération de murs" msgid "Generating infill regions" -msgstr "Génération des zones de remplissage" +msgstr "Génération de régions de remplissage" msgid "Generating infill toolpath" -msgstr "Génération du parcours de remplissage" +msgstr "Génération d'un parcours d'outil de remplissage" msgid "Detect overhangs for auto-lift" -msgstr "Détecter les surplombs pour le décalage automatique" +msgstr "Détectez les surplombs pour un levage automatique" msgid "Generating support" msgstr "Génération des supports" msgid "Checking support necessity" -msgstr "Vérification de la nécessité de supports" +msgstr "Vérification de la nécessité du support" msgid "floating regions" -msgstr "des régions flottantes" +msgstr "régions flottantes" msgid "floating cantilever" -msgstr "un cantilever flottant" +msgstr "surplomb flottant" msgid "large overhangs" -msgstr "des surplombs importants" +msgstr "grands surplombs" #, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." msgstr "" -"Il semblerait que l'objet %s ait %s. Veuillez réorienter l'objet ou activer " -"la génération de supports." +"Il semble que l'objet %s possède %s. Veuillez réorienter l'objet ou activer " +"la génération de support." msgid "Optimizing toolpath" -msgstr "Optimisation du parcours" +msgstr "Optimisation du parcours d'outil" msgid "Empty layers around bottom are replaced by nearest normal layers." msgstr "" -"Les couches vides inférieures sont remplacées par des couches normales." +"Les couches vides situées en bas sont remplacées par les couches normales " +"les plus proches." msgid "The model has too many empty layers." -msgstr "Le modèle comporte trop de couches vides." +msgstr "Le modèle a trop de couches vides." msgid "Slicing mesh" -msgstr "Découpage du maillage" +msgstr "Maillage de tranchage" msgid "" "No layers were detected. You might want to repair your STL file(s) or check " "their size or thickness and retry.\n" msgstr "" -"Aucune couche n’a été détectée. Il est peut-être nécessaire de réparer vos " -"fichiers STL ou vérifier leur taille ou leur épaisseur et réessayer.\n" +"Aucune couche n'a été détectée. Vous pouvez réparer vos STL, vérifier leur " +"taille ou leur épaisseur et réessayer.\n" msgid "" "An object's XY size compensation will not be used because it is also color-" "painted.\n" "XY Size compensation can not be combined with color-painting." msgstr "" -"La compensation de taille X-Y d’un objet ne sera pas utilisée car il est " -"également peint en couleur.\n" -"La compensation de taille X-Y ne peut pas être combinée avec la peinture en " +"La compensation de la taille XY d'un objet ne sera pas utilisée parce qu'il " +"est également peint en couleur.\n" +"La compensation de la taille XY ne peut pas être combinée avec la peinture " "couleur." #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support : Génération du parcours d'impression de la couche %d" +msgstr "Support : génération du parcours d'impression à la couche %d" msgid "Support: detect overhangs" -msgstr "Support : Détection des surplombs" +msgstr "Support : détection des surplombs" msgid "Support: generate contact points" -msgstr "Support : Génération des points de contact" +msgstr "Support : génération des points de contact" msgid "Support: propagate branches" -msgstr "Support : Propagation des branches" +msgstr "Support : propagation des branches" msgid "Support: draw polygons" -msgstr "Support : Traçage de polygones" +msgstr "Support : traçage de polygones" msgid "Support: generate toolpath" -msgstr "Support : Génération du parcours d'impression" +msgstr "Support : génération du parcours d'impression" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support : Génération des polygones de la couche %d" +msgstr "Support : génération des polygones à la couche %d" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support : Correction des trous de la couche %d" +msgstr "Support : Correction des trous dans la couche %d" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support : Propagation des branches de la couche %d" +msgstr "Support : propagation des branches à la couche %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." @@ -10056,6 +9691,512 @@ msgstr "Le fichier contient un index de sommets non valide." msgid "This OBJ file couldn't be read because it's empty." msgstr "Ce fichier OBJ n'a pas pu être lu car il est vide." +msgid "Flow Rate Calibration" +msgstr "" + +msgid "Max Volumetric Speed Calibration" +msgstr "" + +msgid "Manage Result" +msgstr "" + +msgid "Manual Calibration" +msgstr "" + +msgid "Result can be read by human eyes." +msgstr "" + +msgid "Auto-Calibration" +msgstr "" + +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" +msgstr "Terminer" + +msgid "Wiki" +msgstr "" + +msgid "How to use calibration result?" +msgstr "" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" + +msgid "Calibration not supported" +msgstr "" + +msgid "Flow Dynamics" +msgstr "" + +msgid "Flow Rate" +msgstr "" + +msgid "Max Volumetric Speed" +msgstr "" + +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + +msgid "The name cannot be empty." +msgstr "" + +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Échoué" + +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 "" + +msgid "Please find the best line on your plate" +msgstr "" + +msgid "Input Value" +msgstr "" + +msgid "Save to Filament Preset" +msgstr "" + +msgid "Preset" +msgstr "" + +msgid "Record Factor" +msgstr "" + +msgid "We found the best flow ratio for you" +msgstr "" + +msgid "Flow Ratio" +msgstr "" + +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "" + +msgid "Please enter the name of the preset you want to save." +msgstr "" + +msgid "Calibration1" +msgstr "" + +msgid "Calibration2" +msgstr "" + +msgid "Please find the best object on your plate" +msgstr "" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "" + +msgid "Skip Calibration2" +msgstr "" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Type de plaque" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" +msgstr "" + +msgid "PA Calibration" +msgstr "" + +msgid "PA Tower" +msgstr "" + +msgid "PA Line" +msgstr "" + +msgid "PA Pattern" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Start PA: " +msgstr "" + +msgid "End PA: " +msgstr "" + +msgid "PA step: " +msgstr "" + +msgid "Print numbers" +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" +msgstr "" + +msgid "Temperature calibration" +msgstr "" + +msgid "PLA" +msgstr "" + +msgid "ABS/ASA" +msgstr "" + +msgid "PETG" +msgstr "" + +msgid "TPU" +msgstr "" + +msgid "PA-CF" +msgstr "" + +msgid "PET-CF" +msgstr "" + +msgid "Filament type" +msgstr "" + +msgid "Start temp: " +msgstr "" + +msgid "End temp: " +msgstr "" + +msgid "Temp step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start temp: <= 350\n" +"End temp: >= 180\n" +"Start temp > End temp + 5)" +msgstr "" + +msgid "Max volumetric speed test" +msgstr "" + +msgid "Start volumetric speed: " +msgstr "" + +msgid "End volumetric speed: " +msgstr "" + +msgid "step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 0 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "VFA test" +msgstr "" + +msgid "Start speed: " +msgstr "" + +msgid "End speed: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 10 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "Start retraction length: " +msgstr "" + +msgid "End retraction length: " +msgstr "" + +msgid "mm/mm" +msgstr "" + msgid "Network lookup" msgstr "" @@ -10077,45 +10218,6 @@ msgstr "" msgid "Finished" msgstr "Terminé" -msgid "Unable to perform boolean operation on selected parts" -msgstr "" - -msgid "Mesh Boolean" -msgstr "" - -msgid "Union" -msgstr "" - -msgid "Difference" -msgstr "" - -msgid "Intersection" -msgstr "" - -msgid "Source Volume" -msgstr "" - -msgid "Tool Volume" -msgstr "" - -msgid "Subtract from" -msgstr "" - -msgid "Subtract with" -msgstr "" - -msgid "selected" -msgstr "" - -msgid "Part 1" -msgstr "" - -msgid "Part 2" -msgstr "" - -msgid "Delete input" -msgstr "" - msgid "Send to print" msgstr "" @@ -10129,12 +10231,6 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "Upload" -msgstr "" - -msgid "Upload and Print" -msgstr "" - msgid "Simulate" msgstr "" @@ -10178,195 +10274,44 @@ msgstr "" msgid "Error uploading to print host:" msgstr "" -msgid "PA Calibration" -msgstr "Calibration Pressure Advance" - -msgid "DDE" -msgstr "Direct Drive" - -msgid "Bowden" -msgstr "Bowden" - -msgid "Extruder type" -msgstr "Type d'extrudeur" - -msgid "PA Tower" -msgstr "Tour PA" - -msgid "PA Line" -msgstr "Ligne PA" - -msgid "PA Pattern" +msgid "Unable to perform boolean operation on selected parts" msgstr "" -msgid "Method" -msgstr "Méthode" - -msgid "Start PA: " -msgstr "Début: " - -msgid "End PA: " -msgstr "Fin: " - -msgid "PA step: " -msgstr "Intervalle: " - -msgid "Print numbers" -msgstr "Imprimer les numéros" - -msgid "" -"Please input valid values:\n" -"Start PA: >= 0.0\n" -"End PA: > Start PA\n" -"PA step: >= 0.001)" +msgid "Mesh Boolean" msgstr "" -"Veuillez saisir des valeurs valides :\n" -"Début: >= 0.0\n" -"Fin: > Début\n" -"Intervalle: >= 0.001)" -msgid "Temperature calibration" -msgstr "Température de calibration" - -msgid "PLA" -msgstr "PLA" - -msgid "ABS/ASA" -msgstr "ABS/ASA" - -msgid "PETG" -msgstr "PETG" - -msgid "TPU" -msgstr "TPU" - -msgid "PA-CF" -msgstr "PA-CF" - -msgid "PET-CF" -msgstr "PET-CF" - -msgid "Filament type" -msgstr "Filament" - -msgid "Start temp: " -msgstr "Début: " - -msgid "End end: " -msgstr "Fin: " - -msgid "Temp step: " -msgstr "Intervalle: " - -msgid "" -"Please input valid values:\n" -"Start temp: <= 350\n" -"End temp: >= 180\n" -"Start temp > End temp + 5)" +msgid "Union" msgstr "" -"Veuillez saisir des valeurs valides :\n" -"Début <= 350\n" -"Fin >= 180\n" -"Début > Fin + 5)" -msgid "Max volumetric speed test" -msgstr "Test de vitesse volumétrique max" - -msgid "Start volumetric speed: " -msgstr "Vitesse volumétrique de début: " - -msgid "End volumetric speed: " -msgstr "Vitesse volumétrique de fin: " - -msgid "step: " -msgstr "Intervalle: " - -msgid "" -"Please input valid values:\n" -"start > 0 step >= 0\n" -"end > start + step)" +msgid "Difference" msgstr "" -"Veuillez saisir des valeurs valides :\n" -"Début > 0 intervalle >= 0\n" -"Fin > Début + Intervalle)" -msgid "VFA test" -msgstr "Test VFA" - -msgid "Start speed: " -msgstr "Vitesse de début: " - -msgid "End speed: " -msgstr "Vitesse de fin: " - -msgid "" -"Please input valid values:\n" -"start > 10 step >= 0\n" -"end > start + step)" +msgid "Intersection" msgstr "" -"Veuillez saisir des valeurs valides :\n" -"Début > 10 intervalles >= 0\n" -"Fin > Début + Intervalle)" -msgid "Start retraction length: " -msgstr "Longueur de rétraction de début: " - -msgid "End retraction length: " -msgstr "Longueur de rétraction de fin: " - -msgid "mm/mm" -msgstr "mm/mm" - -msgid "Physical Printer" -msgstr "Imprimante Physique" - -msgid "Print Host upload" -msgstr "Envoi vers l’imprimante hôte" - -msgid "Test" -msgstr "Tester" - -msgid "Could not get a valid Printer Host reference" -msgstr "Impossible d’obtenir une référence d’imprimante hôte valide" - -msgid "Success!" -msgstr "Succès !" - -msgid "Refresh Printers" -msgstr "Actualiser les imprimantes" - -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Source Volume" msgstr "" -"Le fichier CA HTTPS est facultatif. Il n'est nécessaire que si vous utilisez " -"HTTPS avec un certificat auto-signé." -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Tool Volume" msgstr "" -"Fichiers de certificat (*.crt, *.pem)|*.crt;*.pem|Tous les fichiers|*.*" -msgid "Open CA certificate file" -msgstr "Ouvrir le fichier de certificat CA" - -#, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "selected" msgstr "" -"Sur ce système, %s utilise les certificats HTTPS du magasin de certificats " -"du système ou du trousseau." -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Part 1" msgstr "" -"Pour utiliser un certificat personnalisé, veuillez importer votre fichier " -"dans magasin de certificats / trousseau." -msgid "Connection to printers connected via the print host failed." +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" -"La connexion aux imprimantes connectées via l’hôte d’impression a échoué." #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -10374,9 +10319,9 @@ msgid "" "Did you know how to control view and object/part selection with mouse and " "touchpanel in the 3D scene?" msgstr "" -"Opérations de scène 3D\n" -"Savez-vous comment contrôler la vue et la sélection d'objets/pièces avec la " -"souris et l'écran tactile dans la scène 3D ?" +"Opérations dans une scène 3D\n" +"Savez-vous comment contrôler la vue et la sélection des objets/pièces avec " +"la souris et l'écran tactile dans la scène 3D ?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -10384,9 +10329,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Outil de coupe\n" -"Saviez-vous que vous pouvez couper un modèle à n'importe quel angle et " -"position avec l'outil de coupe ?" +"Outil de découpe\n" +"Saviez-vous que vous pouvez découper un modèle à n'importe quel angle et " +"dans n'importe quelle position avec l'outil de découpe ?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -10394,9 +10339,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems?" msgstr "" -"Réparer le modèle\n" +"Réparer le Modèle\n" "Saviez-vous que vous pouvez réparer un modèle 3D corrompu pour éviter de " -"nombreux problèmes de découpage ?" +"nombreux problèmes de découpage ?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -10404,16 +10349,16 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "Timelapse\n" -"Saviez-vous que vous pouvez générer une vidéo Timelapse lors de chaque " -"impression ?" +"Saviez-vous que vous pouvez générer une vidéo en timelapse à chaque " +"impression ?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" -"Organisation automatique\n" -"Saviez-vous que vous pouvez organiser automatiquement tous les objets de " +"Agencement Automatique\n" +"Saviez-vous que vous pouvez agencement automatiquement tous les objets de " "votre projet ?" #: resources/data/hints.ini: [hint:Auto-Orient] @@ -10422,7 +10367,7 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" -"Orientation automatique\n" +"Orientation Automatique\n" "Saviez-vous que vous pouvez faire pivoter des objets dans une orientation " "optimale pour l'impression d'un simple clic ?" @@ -10433,10 +10378,10 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" -"Poser sur la face\n" -"Saviez-vous que vous pouvez orienter rapidement un modèle de manière à ce " -"que l'une de ses faces repose sur le plateau d'impression ? Sélectionnez la " -"fonction \"Poser sur la face\" ou appuyez sur la touche F." +"Positionner sur une face\n" +"Saviez-vous qu'il est possible d'orienter rapidement un modèle de manière à " +"ce que l'une de ses faces repose sur le plateau d'impression ? Sélectionnez " +"la fonction « Positionner sur une face » ou appuyez sur la touche F." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -10457,9 +10402,9 @@ msgid "" msgstr "" "Simplifier le modèle\n" "Saviez-vous que vous pouvez réduire le nombre de triangles dans un maillage " -"à l'aide de la fonction Simplifier le maillage ? Cliquez avec le bouton " -"droit sur le modèle et sélectionnez Simplifier le modèle. Plus " -"d'informations dans la documentation." +"à l'aide de la fonction Simplifier le maillage ? Cliquez avec le bouton " +"droit sur le modèle et sélectionnez Simplifier le modèle. Pour en savoir " +"plus, consultez la documentation." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -10467,9 +10412,9 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" -"Tableau des paramètres de découpage\n" -"Saviez-vous que vous pouvez afficher tous les objets/pièces d'un tableau et " -"modifier les paramètres de chaque objet/pièce ?" +"Tableau des paramètres de tranchage\n" +"Saviez-vous que vous pouvez afficher tous les objets/pièces sur un tableau " +"et modifier les paramètres de chaque objet/pièce ?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -10477,36 +10422,37 @@ msgid "" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" -"Fractionner en objets/pièces\n" -"Saviez-vous que vous pouvez diviser un gros objet en petits objets pour " -"faciliter la coloration ou l'impression ?" +"Séparer en objets/parties\n" +"Saviez-vous que vous pouvez séparer un gros objet en petits objets pour les " +"colorier ou les imprimer facilement ?" #: 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. Read more in the documentation." +"directly in Bambu Studio. Read more in the documentation." msgstr "" -"Soustraire une partie\n" +"Soustraire une pièce\n" "Saviez-vous que vous pouvez soustraire un maillage d'un autre à l'aide du " -"modificateur de partie négative ? De cette façon, vous pouvez, par exemple, " -"créer des trous facilement redimensionnables directement dans Orca Slicer. " -"Plus d'informations dans la documentation." +"modificateur de partie négative ? Ainsi, vous pouvez par exemple créer des " +"trous facilement redimensionnables directement dans Bambu Studio. Pour en " +"savoir plus, consultez la documentation." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" -"STEP\n" -"Saviez-vous que vous pouvez améliorer votre qualité d'impression en " -"découpant un fichier .step au lieu d'un .stl ?\n" -"Orca Slicer prend en charge le découpage des fichiers .step, offrant des " -"résultats plus fluides qu'un .stl de résolution inférieure. Essayez !" +"ÉTAPE\n" +"Saviez-vous que vous pouvez améliorer la qualité d'impression en tranchant " +"un fichier STEP au lieu d'un fichier STL ?\n" +"Bambu Studio prend en charge le tranchage des fichiers STEP, ce qui permet " +"d'obtenir des résultats plus fluides qu'un fichier STL à résolution " +"inférieure. Essayez-le !" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10515,10 +10461,11 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" -"Emplacement de la couture en Z\n" +"Emplacement de la couture Z\n" "Saviez-vous que vous pouvez personnaliser l'emplacement de la couture Z, et " -"même la peindre sur votre impression, pour l'avoir dans un endroit moins " -"visible ? Cela améliore l'aspect général de votre impression. Essayez !" +"même la peindre manuelle sur votre impression pour le placer dans un endroit " +"moins visible ? Cela améliore l'aspect général de votre modèle. Jetez-y un " +"coup d'œil !" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -10527,10 +10474,11 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Réglage précis du débit\n" -"Saviez-vous que le débit peut être ajusté pour des impressions encore plus " -"belles ? Selon le matériau, vous pouvez améliorer la finition globale du " -"modèle imprimé en effectuant quelques ajustements." +"Réglage fin du débit\n" +"Saviez-vous que le débit peut être réglé avec précision pour obtenir des " +"impressions encore plus belles ? En fonction du matériau, vous pouvez " +"améliorer la finition générale du modèle imprimé en procédant à un réglage " +"fin." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -10541,7 +10489,7 @@ msgid "" msgstr "" "Divisez vos impressions en plateaux\n" "Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses " -"pièces en plateaux individuels prêts à imprimer ? Cela simplifiera le " +"pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le " "processus de suivi de toutes les pièces." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer @@ -10551,9 +10499,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Accélérez votre impression avec la hauteur de couche adaptative\n" +"Accélérez votre impression grâce à la Hauteur de Couche Adaptative\n" "Saviez-vous que vous pouvez imprimer un modèle encore plus rapidement en " -"utilisant l'option Hauteur de couche adaptative ? Essayez !" +"utilisant l'option Adaptive Layer Height ? Jetez-y un coup d'œil !" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -10562,10 +10510,10 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" -"Peindre les supports\n" -"Saviez-vous que vous pouvez peindre l'emplacement de vos supports ? Cette " -"fonctionnalité permet de placer facilement les supports uniquement sur les " -"sections du modèle qui en ont réellement besoin." +"Peinture de support\n" +"Saviez-vous que vous pouvez peindre l'emplacement de vos supports ? Cette " +"caractéristique permet de placer facilement le matériau de support " +"uniquement sur les sections du modèle qui en ont réellement besoin." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -10575,10 +10523,10 @@ msgid "" "print speed. Check them out!" msgstr "" "Différents types de supports\n" -"Saviez-vous que vous pouvez choisir parmi plusieurs types de supports ? Les " -"supports arborescents fonctionnent parfaitement pour les modèles organiques, " -"tout en économisant du filament et en améliorant la vitesse d'impression. . " -"Essayez-les !" +"Saviez-vous que vous pouvez choisir parmi plusieurs types de supports ? Les " +"supports arborescents fonctionnent parfaitement pour les modèles organiques " +"tout en économisant du filament et en améliorant la vitesse d'impression. " +"Découvrez-les !" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -10587,9 +10535,9 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Impression de filament Silk\n" -"Saviez-vous que le filament Silk nécessite une attention particulière pour " -"être imprimé avec succès ? Une température plus élevée et une vitesse plus " +"Impression de filament Soie\n" +"Saviez-vous que le filament soie nécessite une attention particulière pour " +"une impression réussie ? Une température plus élevée et une vitesse plus " "faible sont toujours recommandées pour obtenir les meilleurs résultats." #: resources/data/hints.ini: [hint:Brim for better adhesion] @@ -10598,9 +10546,10 @@ 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 "" -"Bordure pour une meilleure adhérence\n" -"Saviez-vous que lorsque les modèles d'impression ont une petite surface de " -"contact sur le plateau, il est recommandé d'utiliser une bordure ?" +"Bordure pour une meilleure adhésion\n" +"Saviez-vous que lorsque les modèles imprimés ont une faible interface de " +"contact avec la surface d'impression, il est recommandé d'utiliser une " +"bordure ?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -10609,16 +10558,16 @@ msgid "" "one time?" msgstr "" "Définir les paramètres de plusieurs objets\n" -"Saviez-vous que vous pouvez définir des paramètres de découpage pour tous " -"les objets sélectionnés en même temps ?" +"Saviez-vous que vous pouvez définir des paramètres de tranchage pour tous " +"les objets sélectionnés en une seule fois ?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Empiler des objets\n" -"Saviez-vous que vous pouvez assembler des objets en un seul ?" +"Empilez des objets\n" +"Saviez-vous que vous pouvez empiler des objets pour n'en former qu'un?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -10626,9 +10575,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Purge dans les supports / les objets / le remplissage\n" -"Saviez-vous que vous pouvez économiser du filament en le purgeant dans les " -"supports / les objets / le remplissage lors du changement de filament ?" +"Rincer dans support/objets/remplissage\n" +"Saviez-vous que vous pouvez réduire le filament gaspillé en le rinçant dans " +"le support/les objets/le remplissage lors des changements de filament ?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -10637,654 +10586,37 @@ msgid "" "density to improve the strength of the model?" msgstr "" "Améliorer la résistance\n" -"Saviez-vous que vous pouvez utiliser plus de parois et une densité de " -"remplissage plus élevée pour améliorer la résistance du modèle ?" +"Saviez-vous que vous pouvez définir un plus grand nombre de périmètre et une " +"densité de remplissage plus élevée pour améliorer la résistance du modèle ?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "La configuration peut être générée par une version plus récente de " -#~ "BambuStudio." +#~ "N'utilisez qu'un seul mur sur les surfaces supérieures planes, afin de " +#~ "donner plus d'espace au motif de remplissage supérieur." -#~ msgid "Internal Version" -#~ msgstr "Version Interne" +#~ msgid "Nozzle HRC" +#~ msgstr "Dureté HRC buse" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "BambuStudio va se terminer à cause d'un manque de mémoire. Il peut s'agir " -#~ "d'un bogue. Nous vous serions reconnaissants de signaler le problème à " -#~ "notre équipe." +#~ "La dureté de la buse. Zéro signifie qu'il n'est pas nécessaire de " +#~ "vérifier la dureté de la buse pendant le tranchage." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "BambuStudio va s'arrêter à cause d'une erreur de localisation. Il sera " -#~ "apprécié si vous signalez le scénario spécifique dans lequel ce problème " -#~ "s'est produit." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "BambuStudio a reçu une exception non gérée : %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Le fichier de configuration de BambuStudio est peut-être corrompu et ne " -#~ "peut pas être analysé. Veuillez supprimer le fichier et réessayer." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Le Bambu Studio a besoin d'une mise à niveau" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Choisissez un fichier (gcode/.gco/.g/.ngc/ngc) :" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "La version de Bambu Studio est trop ancienne et doit être mise à jour " -#~ "vers la dernière version avant de pouvoir être utilisée normalement." - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "L'initialisation de l'interface de Bambu Studio a échoué" - -#~ msgid "Check cloud service status" -#~ msgstr "Vérifiez l'état du service cloud" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Impossible de se connecter au service cloud" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "Cliquez sur l'hyperlien ci-dessus pour voir l'état du service cloud" - -#~ msgid "Connection to printer failed" -#~ msgstr "La connexion à l'imprimante a échoué" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Vérifiez la connexion réseau entre l'imprimante et Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Poussez le nouveau filament dans l'extrudeur" - -#~ msgid "Grab new filament" -#~ msgstr "Saisir un nouveau filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "" -#~ "Données de fichier d'impression anormales, veuillez retrancher le fichier." - -#~ msgid "Task canceled." -#~ msgstr "Tâche annulée." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Le délai de téléversement de la tâche a expiré. Vérifiez l'état du réseau " -#~ "et réessayez." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Fichier d'impression introuvable, veuillez le retrancher." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "Le fichier d'impression dépasse la taille maximale autorisée (1 Go). " -#~ "Veuillez simplifier le modèle puis le retrancher." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Échec du téléversement du fichier vers le ftp. Veuillez réessayer." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Vérifiez l'état actuel du serveur Bambu Lab en cliquant sur le lien ci-" -#~ "dessus." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "La taille du fichier d'impression est trop importante. Ajustez la taille " -#~ "du fichier et réessayez." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Fichier d'impression introuvable, retranchez le et renvoyez le pour " -#~ "impression." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Impossible de charger le fichier d'impression via FTP. Vérifiez l'état du " -#~ "réseau et réessayez." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio est sous licence " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio a été développé sur la base de PrusaSlicer de Prusa " -#~ "Research, qui est lui même développé sur la base de Slic3r par Alessandro " -#~ "Ranelucci et la communauté RepRap" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio est basé sur PrusaSlicer de PrusaResearch et SuperSlicer de " -#~ "Merill (supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "" -#~ "Bambu Studio a également fait référence à certaines idées de Cura par " -#~ "Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "De nombreuses parties du logiciel proviennent de contributions de la " -#~ "communauté. Nous ne sommes donc pas en mesure de les répertorier une par " -#~ "une. Elles seront attribuées dans les commentaires de code correspondants." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "Hauteur de couche trop grande. Réinitialiser à 0,2" - -#~ msgid "Layer Time (s)" -#~ msgstr "Durée de couche (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Des conflits de trajet dans le G-code sur la couche %d ont été détectés. " -#~ "Veuillez séparer davantage les objets en conflit (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Signaler un problème" - -#~ msgid "Show &Overhang" -#~ msgstr "Montrer Surplombs" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Afficher la surbrillance des surplombs d'un objet dans la scène 3D" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "" -#~ "L'initialisation a échoué (la connexion de l'appareil n'est pas prête) !" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Une autre caméra virtuelle est en cours d'exécution.\n" -#~ "Bambu Studio ne prend en charge qu'une seule caméra virtuelle.\n" -#~ "Voulez-vous arrêter cette caméra virtuelle ?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Passez aux fichiers de modèle 3mf." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "Aucun fichier [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Échec du chargement [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Voulez-vous supprimer le fichier '%s' de l'imprimante ?" - -#~ msgid "Delete file" -#~ msgstr "Supprimer le fichier" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Récupération des informations sur le modèle..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "" -#~ "Impossible de récupérer les informations du modèle depuis l'imprimante." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Impossible d'analyser les informations du modèle" - -#~ msgid "Immediately score" -#~ msgstr "Noter immédiatement" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Veuillez attribuer une note à votre modèle Bambu Market préféré." - -#~ msgid "Score" -#~ msgstr "Note" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "Le 3mf a été généré par une ancienne version de Bambu Studio, chargement " -#~ "des données géométriques uniquement." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "La fonctionnalité « Fix Model » n'est actuellement disponible que sous " -#~ "Windows. Réparez le modèle dans Bambu Studio (Windows) ou dans un " -#~ "logiciel de CAO." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Associer des fichiers à BambuStudio" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Associer des fichiers .3mf à BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Si activé, définit BambuStudio comme application par défaut pour ouvrir " -#~ "les fichiers .3mf" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Associer des fichiers .stl à BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Si activé, définit BambuStudio comme application par défaut pour ouvrir " -#~ "les fichiers .stl" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Lier les fichiers .step/.stp à Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Si activé, définit BambuStudio comme application par défaut pour ouvrir " -#~ "les fichiers .step" - -#~ msgid "Online Models" -#~ msgstr "Modèles en ligne" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "" -#~ "Afficher les modèles en ligne sélectionnés par le staff sur la page " -#~ "d'accueil" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Ignorer la vérification de la liste noire AMS" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Activer SSL (MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Activer SSL (FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Mode développeur interne" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Identique au type de plaque général" - -#~ msgid "PLA Plate" -#~ msgstr "Plaque PLA" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Impossible de se connecter à l'imprimante" - -#~ msgid "Error code" -#~ msgstr "Code erreur" - -#~ msgid "Check the status of current system services" -#~ msgstr "Vérifiez l'état des services système actuels" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "La connexion locale de l'imprimante a échoué, veuillez réessayer." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "La longueur du nom dépasse la limite." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "" -#~ "L'imprimante doit se trouver sur le même réseau local que Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Échec de la création du socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Impossible de connecter le socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Échec de la publication de la demande de connexion" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Dépassement du délai d'obtention d'un ticket depuis l'appareil" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Dépassement du délai d'obtention d'un ticket depuis le serveur" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Échec de l'envoi du ticket au serveur" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Échec de l'analyse du rapport de connexion" - -#~ msgid "Receive login report timeout" -#~ msgstr "Délai d'expiration du rapport de connexion" - -#~ msgid "Check the reason" -#~ msgstr "Vérifier le motif" - -#~ msgid "Read and accept" -#~ msgstr "Lire et accepter" - -#~ msgid "Terms and Conditions" -#~ msgstr "Termes et conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "Nous vous remercions d'avoir acheté un produit Bambu Lab. Avant " -#~ "d'utiliser votre appareil Bambu Lab, veuillez lire les conditions " -#~ "générales. En cliquant pour confirmer que vous acceptez d'utiliser votre " -#~ "appareil Bambu Lab, vous vous engagez à respecter la politique de " -#~ "confidentialité et les conditions d'utilisation (collectivement, les " -#~ "\"conditions\"). Si vous ne respectez pas ou n'acceptez pas la politique " -#~ "de confidentialité de Bambu Lab, veuillez ne pas utiliser les produits et " -#~ "services de Bambu Lab." - -#~ msgid "and" -#~ msgstr "et" - -#~ msgid "Privacy Policy" -#~ msgstr "Politique de Confidentialité" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "" -#~ "Nous vous demandons de nous aider à améliorer l'imprimante de toute la " -#~ "communauté" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "" -#~ "Déclaration sur le programme d'amélioration de l'expérience utilisateur" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "Au sein de la communauté de l'impression 3D, nous apprenons des succès et " -#~ "des échecs de chacun pour ajuster nos propres paramètres et réglages de " -#~ "découpage. %s suit le même principe et utilise l'apprentissage " -#~ "automatique pour améliorer ses performances en fonction des succès et des " -#~ "échecs du grand nombre d'impressions effectuées par nos utilisateurs. " -#~ "Nous entraînons %s à devenir plus intelligent en leur fournissant les " -#~ "données du monde réel. Si vous le souhaitez, ce service accèdera aux " -#~ "informations de vos journaux d'erreurs et de vos journaux d'utilisation, " -#~ "qui peuvent inclure des informations décrites dans la Politique de " -#~ "confidentialité. Nous ne collecterons aucune donnée personnelle " -#~ "permettant d'identifier une personne directement ou indirectement, y " -#~ "compris, mais sans s'y limiter, les noms, les adresses, les informations " -#~ "de paiement ou les numéros de téléphone. En activant ce service, vous " -#~ "acceptez ces conditions et la déclaration concernant la politique de " -#~ "confidentialité." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "" -#~ "Déclaration concernant le plan d'amélioration de l'expérience utilisateur" - -#~ msgid "Post-processing scripts" -#~ msgstr "Scripts de post-traitement" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Cliquez sur OK pour mettre à jour le plug-in réseau lors du prochain " -#~ "lancement de Bambu Studio." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Nouvelle version de Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Étape 1, confirmez que Bambu Studio et votre imprimante se trouvent sur " -#~ "le même réseau local." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "Échec de la copie du répertoire %1% vers %2% : %3%" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "Le ou les objets suivants ont une couche initiale vide et ne peuvent pas " -#~ "être imprimés. Veuillez couper la base ou activer les supports." - -#~ msgid "Bridge direction" -#~ msgstr "Direction du pont" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "N'utilisez qu'un seul mur sur la première couche des modèles" - -#~ msgid "Max Radius" -#~ msgstr "Rayon maximum" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Rayon de dégagement maximal autour de l'extrudeuse. Utilisé pour éviter " -#~ "les collisions lors de l'impression \"par objets\"." - -#~ msgid "Object flow ratio" -#~ msgstr "Ratio de flux d'objets" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "Le taux de débit défini par objet, la signification est la même que le " -#~ "rapport de débit." - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Longueur de l'ancre de remplissage" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "Cela relie une ligne de remplissage à un périmètre interne avec un court " -#~ "segment d'un périmètre supplémentaire. S'il est exprimé en pourcentage " -#~ "(exemple : 15 %), il est calculé sur une faible largeur de ligne de " -#~ "remplissage. Bambu essaie de relier deux lignes de remplissage étroites à " -#~ "un court segment périmétrique. Si aucun segment de périmètre plus court " -#~ "que infill_anchor_max n'est trouvé, la ligne de remplissage est connectée " -#~ "à un segment de périmètre d'un seul côté et la longueur du segment de " -#~ "périmètre pris est limitée à ce paramètre, mais pas plus que " -#~ "anchor_length_max. Définissez ce paramètre sur zéro pour désactiver les " -#~ "périmètres d'ancrage connectés à une seule ligne de remplissage." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Longueur maximale de l'ancre de remplissage" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "Cela relie une ligne de remplissage à un périmètre interne avec un court " -#~ "segment d'un périmètre supplémentaire. S'il est exprimé en pourcentage " -#~ "(exemple : 15 %), il est calculé sur une faible largeur de ligne de " -#~ "remplissage. Bambu essaie de relier deux lignes de remplissage étroites à " -#~ "un court segment périmétrique. Si aucun segment de périmètre plus court " -#~ "que ce paramètre n'est trouvé, la ligne de remplissage est connectée à un " -#~ "segment de périmètre d'un seul côté et la longueur du segment de " -#~ "périmètre pris est limitée à infill_anchor, mais pas plus que ce " -#~ "paramètre. Définissez ce paramètre sur zéro pour désactiver l'ancrage." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (non ancré)" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "Si vous souhaitez traiter le G-code de sortie via des scripts " -#~ "personnalisés, listez simplement leurs chemins absolus ici. Séparez les " -#~ "différents scripts par un point-virgule. Les scripts seront transmis via " -#~ "le chemin absolu vers le fichier G-code comme premier argument, et les " -#~ "variables des paramètres peuvent également être lues." - -#~ msgid "Z Hop Type" -#~ msgstr "Type de Z Hop" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "" -#~ "La largeur de la bordure autour du support de l'arbre. 0 signifie auto." - -#~ msgid "Finish" -#~ msgstr "Terminer" - -#~ msgid "Failed" -#~ msgstr "Échoué" - -#~ msgid "Plate Type" -#~ msgstr "Type de plaque" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Soustraire une pièce\n" -#~ "Saviez-vous que vous pouvez soustraire un maillage d'un autre à l'aide du " -#~ "modificateur de partie négative ? Ainsi, vous pouvez par exemple créer " -#~ "des trous facilement redimensionnables directement dans Bambu Studio. " -#~ "Pour en savoir plus, consultez la documentation." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "ÉTAPE\n" -#~ "Saviez-vous que vous pouvez améliorer la qualité d'impression en " -#~ "tranchant un fichier STEP au lieu d'un fichier STL ?\n" -#~ "Bambu Studio prend en charge le tranchage des fichiers STEP, ce qui " -#~ "permet d'obtenir des résultats plus fluides qu'un fichier STL à " -#~ "résolution inférieure. Essayez-le !" - -#~ msgid "ERROR:" -#~ msgstr "ERREUR:" - -#~ msgid "Line width of outer wall" -#~ msgstr "Largeur de ligne de la paroi extérieure" - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "" -#~ "Largeur de ligne par défaut si une largeur de ligne est définie sur 0" - -#~ msgid "Line width of initial layer" -#~ msgstr "Largeur de ligne de la couche initiale" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Largeur de ligne du remplissage" - -#~ msgid "Line width of inner wall" -#~ msgstr "Largeur de ligne de la paroi intérieure" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Largeur de ligne du remplissage solide" - -#~ msgid "Line width of support" -#~ msgstr "Largeur de ligne des supports" - -#~ msgid "Line width for top surfaces" -#~ msgstr "Largeur de ligne des surfaces supérieures" - -#~ msgid "Other color" -#~ msgstr "Autres couleurs" - -#~ 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 "" -#~ "Si cette option est activée, Orca Slicer génère des boucles de support " -#~ "sous les contours des ponts internes. Ces boucles de support peuvent " -#~ "empêcher les ponts internes de s'extruder dans le vide et améliorer la " -#~ "qualité de la surface supérieure, en particulier lorsque la densité de " -#~ "remplissage est faible. Cette valeur détermine l'épaisseur de boucles de " -#~ "soutien. Une valeur à 0 signifie que cette fonctionnalité est désactivée" - -#~ msgid "Maximum speed of X axis" -#~ msgstr "Vitesse maximale de l'axe X" - -#~ msgid "Maximum speed of Y axis" -#~ msgstr "Vitesse maximale de l'axe Y" - -#~ msgid "Maximum speed of Z axis" -#~ msgstr "Vitesse maximale de l'axe Z" - -#~ msgid "Maximum speed of E axis" -#~ msgstr "Vitesse maximale de l'extrudeur" +#~ "Détectez le pourcentage de surplomb par rapport à la largeur de la ligne " +#~ "et utilisez une vitesse différente pour imprimer. Pour un surplomb de " +#~ "100%% la vitesse du pont est utilisée." #~ msgid "Pause Print" #~ msgstr "Pause d'impression" @@ -11295,12 +10627,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Supprimer la Pause" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Calibration des facteurs de flux dynamique" + #~ msgid "\\u2103" #~ msgstr "\\u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Calibration du débit" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -11323,6 +10661,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "Modèles 3D" + #~ msgid "AMSMaterialsSetting" #~ msgstr "Réglage des matériaux AMS" @@ -11343,9 +10684,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Volume Réel = Volume de Rinçage * Multiplicateur" +#~ msgid "Adaptive layer height" +#~ msgstr "Hauteur de couche adaptative" + #~ msgid "Add Custom Printer" #~ msgstr "Ajouter une Imprimante Personnalisée" +#~ msgid "Ams filament backup" +#~ msgstr "Filament de secours AMS" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -11374,6 +10721,9 @@ msgstr "" #~ "Cela peut entraîner une baisse de la qualité de la surface du surplomb " #~ "lorsque l’impression est rapide.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Assembler les pièces sélectionnées en une seule pièce" + #~ msgid "Auto arrange" #~ msgstr "Organisation automatique" @@ -11422,6 +10772,12 @@ msgstr "" #~ "ce filament. Cela peut entraîner le blocage de la buse et l'échec de " #~ "l'impression" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Épaisseur minimale de la coque inférieure" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Couches solides inférieures" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11468,6 +10824,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Consommation" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Vérifiez si le filament a été extrudé" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate/Plaque PLA" + +#~ msgid "Cool plate" +#~ msgstr "Plaque Cool plate" + #~ msgid "Creating" #~ msgstr "Création" @@ -11503,6 +10868,23 @@ msgstr "" #~ "Oui - Active Arachne et désactive le ralentissement du surplomb\n" #~ "Non - Ne pas utiliser Arachne pour cette impression" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Déconnecté de l'imprimante [%s] en raison de la désactivation du mode " +#~ "réseau. Reconnectez l'imprimante en vous connectant à l'aide de votre " +#~ "compte utilisateur." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Déconnecté de l'imprimante [%s] car le mode réseau est activé. " +#~ "Reconnectez l'imprimante en saisissant le code d'accès qui peut être " +#~ "obtenu à partir de l'écran de l'imprimante." + #~ msgid "Display printable box" #~ msgstr "Afficher la boîte imprimable" @@ -11560,6 +10942,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Téléchargement du plug-in Bambu Network" +#~ msgid "Dump video" +#~ msgstr "Vider la vidéo" + #~ msgid "Edit plate setitngs" #~ msgstr "Modifier les réglages de la plaque" @@ -11576,6 +10961,9 @@ msgstr "" #~ "Veuillez noter que cette option ne prend effet que s'il n'y a pas de tour " #~ "de nettoyage générée sur le plateau actuel." +#~ msgid "Engineering plate" +#~ msgstr "Plaque Engineering" + #~ msgid "Enter a search term" #~ msgstr "Entrer un terme de recherche" @@ -11623,14 +11011,29 @@ msgstr "" #~ "Impossible de se connecter à l'imprimante via le réseau local. Entrez " #~ "l'adresse IP et le code d'accès corrects de l'imprimante." +#~ msgid "Failed to get ticket" +#~ msgstr "Impossible d'obtenir un ticket" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Échec de l'analyse du rapport de connexion (motif)" +#~ msgid "Failed uploading print file" +#~ msgstr "Échec de téléversement du fichier d'impression" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "" #~ "Impossible de téléverser le fichier d'impression. Entrez à nouveau " #~ "l'adresse IP." +#~ msgid "Failure of bind" +#~ msgstr "Échec de liaison" + +#~ msgid "Failure of printer login" +#~ msgstr "Échec de la connexion à l'imprimante" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Charger un nouveau filament à partir d'une bobine externe" + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -11698,6 +11101,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Sélection de filaments" +#~ msgid "Filaments replace" +#~ msgstr "Remplacement du filament" + #~ msgid "Fix model locally" #~ msgstr "Corriger le modèle localement" @@ -11789,6 +11195,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Échec de l'initialisation [%d] !" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "L'initialisation a échoué (non supporté par l'imprimante) !" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Echec de l'initialisation (Non supporté en mode LAN uniquement) !" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "L'initialisation a échoué (non supporté sans tunnel vidéo à distance) !" @@ -11825,6 +11237,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Temps de couche (journal):" +#~ msgid "Layer Time (log)" +#~ msgstr "Temps de couche (journal)" + #~ msgid "Layers: %d/%d" #~ msgstr "Couches: %d/%d" @@ -11834,6 +11249,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Couches: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Couches et Périmètres" + #~ msgid "Leaving Seam painting" #~ msgstr "Quitter Peinture de Couture" @@ -11846,6 +11264,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Gestion" +#~ msgid "Manual" +#~ msgstr "Manuel" + #~ msgid "Max travel detour distance" #~ msgstr "Distance de détour maximale" @@ -11856,6 +11277,12 @@ msgstr "" #~ "Distance de détour maximale pour éviter de traverser le mur. Ne faites " #~ "pas de détour si la distance de détour est supérieure à cette valeur" +#~ msgid "Media" +#~ msgstr "Médias" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Adresse IP locale manquante de l'imprimante !" + #~ msgid "Modify" #~ msgstr "Modifier" @@ -11871,15 +11298,31 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "PAS D'AMS" +#~ msgid "No files" +#~ msgstr "Aucun fichier" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Non accessible en mode réseau local uniquement !" + #~ msgid "Not supported." #~ msgstr "Non pris en charge" +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Non pris en charge par ce modèle d'imprimante !" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Remarque : L'emplacement de l'IP et du code d'accès sur la machine est le " #~ "suivant :" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Un objet a une couche initiale vide et ne peut pas être imprimé. Veuillez " +#~ "couper le bas ou activer les supports." + #~ msgid "Open &PrusaSlicer" #~ msgstr "Ouvrir &PrusaSlicer" @@ -11950,6 +11393,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Veuillez d'abord remplir le rapport." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Veuillez vous déconnecter et vous reconnecter à l'imprimante." + #~ msgid "Please upgrade your printer first" #~ msgstr "Veuillez d'abord mettre à niveau votre imprimante" @@ -11986,6 +11432,9 @@ msgstr "" #~ "Imprimez une tour pour amorcer le matériau dans la buse après être passé " #~ "à un nouveau matériau." +#~ msgid "Print file not found, please slice again" +#~ msgstr "Fichier d'impression introuvable, veuillez le trancher à nouveau" + #~ msgid "Printer Selection" #~ msgstr "Sélection de l'imprimante" @@ -11994,6 +11443,9 @@ msgstr "" #~ "Le firmware de l'imprimante ne prend pas en charge le matériel => " #~ "Attribution des emplacements AMS" +#~ msgid "Printing List" +#~ msgstr "Liste d'impression" + #~ 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 " @@ -12058,9 +11510,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Sélectionnez le type de plateau" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "L'envoi vers l'imprimante a échoué. Veuillez réessayer." + #~ msgid "Sending" #~ msgstr "Envoi en cours" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Envoi du fichier G-code via le service cloud" + +#~ msgid "Set Printable" +#~ msgstr "Définir Imprimable" + +#~ msgid "Set Unprintable" +#~ msgstr "Définir non-Imprimable" + #~ msgid "Set pen size" #~ msgstr "Définir la taille du stylo" @@ -12237,6 +11701,13 @@ msgstr "" #~ "La vitesse d'impression minimale lors du ralentissement pour le " #~ "refroidissement" +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "Le fichier d'impression dépasse la taille maximale autorisée (1 Go). " +#~ "Veuillez simplifier le modèle et le trancher à nouveau" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -12255,6 +11726,9 @@ msgstr "" #~ "l'imprimante physique actuellement sélectionnée. Il est recommandé de re-" #~ "trancher en sélectionnant le même type d'imprimante.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "Le paramètre de la région est incorrect." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -12282,6 +11756,13 @@ msgstr "" #~ "filament afin d'économiser du filament et de diminuer le temps " #~ "d'impression. Les couleurs des objets seront mélangées en conséquence." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Ce paramètre spécifie s'il faut ajouter un remplissage à l'intérieur des " +#~ "grands creux du support arborescent" + #~ 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, " @@ -12298,15 +11779,33 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse sans tête d'outil" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Épaisseur minimale de la coque" + +#~ msgid "Top Solid Layers" +#~ msgstr "Couches supérieures solides" + #~ msgid "Translation" #~ msgstr "Traduction" +#~ msgid "Tree support with infill" +#~ msgstr "Support arborescent avec remplissage" + #~ msgid "Unable to connect printer" #~ msgstr "Impossible de connecter l'imprimante" #~ msgid "Unable to create zip file" #~ msgstr "Création du fichier zip impossible" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "La tâche de téléversement a expirée. Veuillez vérifier le réseau et " +#~ "réessayer" + +#~ msgid "User authorization timeout" +#~ msgstr "Expiration de l’autorisation utilisateur" + #~ msgid "User pause" #~ msgstr "Pause utilisateur" @@ -12358,6 +11857,9 @@ msgstr "" #~ "0 distance supérieure à Z, 0 espacement entre les interfaces, motif " #~ "concentrique." +#~ msgid "Wrong Access code" +#~ msgstr "Code d'accès erroné" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -12408,6 +11910,9 @@ msgstr "" #~ "est trop proche des autres, il y aura des collisions lors de " #~ "l'impression.\n" +#~ msgid " plate %1%:" +#~ msgstr "plaque %1% :" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr " sera fermé avant de créer un nouveau modèle. Tu veux continuer ?" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 7bb37a184..30d3522de 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -1,14 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" +"X-Generator: Poedit 3.3.1\n" msgid "Supports Painting" msgstr "Támaszok festése" @@ -535,8 +538,10 @@ msgstr "Definiálatlan" msgid "%1% was replaced with %2%" msgstr "%1% lecserélve a következővel: %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" +"Előfordulhat, hogy a konfigurációt a BambuStudio egy újabb verziójával " +"generálták." msgid "Some values have been replaced. Please check them:" msgstr "Néhány érték lecserélődött. Kérjük, ellenőrizd őket:" @@ -565,29 +570,45 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Belső verzió" + +msgid "Version" +msgstr "Verzió" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"A BambuStudio leáll, mert elfogy a memória. Lehet, hogy ez egy hiba. " +"Örülnénk, ha jelentenéd a problémát a csapatunknak." msgid "Fatal error" msgstr "Súlyos hiba" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" +"A BambuStudio lokalizációs hiba miatt leáll. Nagyra értékelnénk, ha " +"jelentenéd a konkrét esetet, amikor ez a probléma előfordult." msgid "Critical error" msgstr "Kritikus hiba" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "A BambuStudio kezeletlen kivételbe ütközött: %1%" + +msgid "Untitled" +msgstr "Névtelen" msgid "Downloading Bambu Network Plug-in" msgstr "Bambu Network bővítmény letöltése" +msgid "Login information expired. Please login again." +msgstr "A bejelentkezési adatok érvénytelenek. Kérjük, jelentkezz be újra." + msgid "Incorrect password" msgstr "Helytelen jelszó" @@ -596,9 +617,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "A következőhöz való csatlakozás sikertelen: %s! [SN:%s, code=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"A BambuStudio konfigurációs fájl valószínűleg megsérült, ezért nem " +"használható. Kérjük, töröld a fájlt, és próbáld meg újra." #, c-format, boost-format msgid "" @@ -618,8 +641,8 @@ msgstr "Konfiguráció betöltése" msgid "Click to download new version in default browser: %s" msgstr "Kattints az új verzió letöltéséhez az alapértelmezett böngészőben: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "A Orca Slicert frissíteni kell" +msgid "The Bambu Studio needs an upgrade" +msgstr "A Bambu Studiot frissíteni kell" msgid "This is the newest version." msgstr "Ez a legújabb verzió." @@ -642,8 +665,8 @@ msgstr "Válassz ki egy fájlt (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Válassz ki egy vagy több fájlt (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Válassz ki egy fájlt (gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "Néhány beállítás megváltozott." @@ -666,15 +689,12 @@ msgid "Open Project" msgstr "Projekt megnyitása" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"A Orca Slicer ezen verziója túl régi és a legfrissebb verzióra kell " +"A Bambu Studio ezen verziója túl régi és a legfrissebb verzióra kell " "frissíteni, mielőtt rendesen használható lenne" -msgid "Login information expired. Please login again." -msgstr "A bejelentkezési adatok érvénytelenek. Kérjük, jelentkezz be újra." - msgid "Privacy Policy Update" msgstr "Privacy Policy Update" @@ -721,13 +741,13 @@ msgid "New Folder" msgstr "New Folder" msgid "Open" -msgstr "Open" +msgstr "Megnyitás" msgid "Rename" msgstr "Átnevezés" -msgid "Orca Slicer GUI initialization failed" -msgstr "Nem sikerült a Orca Slicer GUI inicializálása" +msgid "Bambu Studio GUI initialization failed" +msgstr "Nem sikerült a Bambu Studio GUI inicializálása" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -754,18 +774,6 @@ msgstr "Sebesség" msgid "Strength" msgstr "Szilárdság" -msgid "Top Solid Layers" -msgstr "Felső tömör rétegek" - -msgid "Top Minimum Shell Thickness" -msgstr "Minimális fedőréteg vastagság" - -msgid "Bottom Solid Layers" -msgstr "Alsó tömör rétegek" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Alsó minimális héjvastagság" - msgid "Ironing" msgstr "Vasalás" @@ -823,18 +831,6 @@ msgstr "Edit Text" msgid "Load..." msgstr "Betöltés..." -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "Kocka" @@ -844,6 +840,18 @@ msgstr "Henger" msgid "Cone" msgstr "Kúp" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Height Range Modifier" @@ -859,12 +867,6 @@ msgstr "Beállítás különálló objektumként" msgid "Set as individual objects" msgstr "Beállítás különálló objektumokként" -msgid "Fill bed with copies" -msgstr "Fill bed with copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Fill the remaining area of bed with copies of the selected object" - msgid "Printable" msgstr "Nyomtatható" @@ -945,8 +947,11 @@ msgid "Assemble the selected objects to an object with single part" msgstr "" "Összeállítja a kijelölt objektumokat egy egyetlen részből álló objektummá" -msgid "Assemble the selected parts to a single part" -msgstr "Összeállítja a kijelölt tárgyakat egyetlen tárggyá" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "X-tengely mentén" @@ -1066,18 +1071,21 @@ msgstr "Filament beállítása a kiválasztott tárgyakhoz" msgid "current" msgstr "jelenlegi" -msgid "Set Unprintable" -msgstr "Beállítás nyomtathatatlannak" - -msgid "Set Printable" -msgstr "Beállítás nyomtathatónak" - msgid "Unlock" msgstr "Feloldás" msgid "Lock" msgstr "Lezárás" +msgid "Fill bed with copies" +msgstr "Fill bed with copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Fill the remaining area of bed with copies of the selected object" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Név" @@ -1138,6 +1146,9 @@ msgstr "Fájl betöltése" msgid "Error!" msgstr "Hiba!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Általános" @@ -1255,7 +1266,7 @@ msgstr "" "lennie." msgid "The type of the last solid object part is not to be changed." -msgstr "Az utolsó tömör objektumrész típusa nem módosítható." +msgstr "Az utolsó tömör objektum típusa nem módosítható." msgid "Negative Part" msgstr "Negatív tárgy" @@ -1326,15 +1337,6 @@ msgstr "a több cellás másolás nem támogatott" msgid "Outside" msgstr "Kívül" -msgid "Auto" -msgstr "Auto" - -msgid "Manual" -msgstr "Manuális" - -msgid "No-brim" -msgstr "Nincs perem" - msgid " " msgstr "" @@ -1350,6 +1352,21 @@ msgstr "Kitöltési sűrűség (%)" msgid "Auto Brim" msgstr "Automatikus perem" +msgid "Auto" +msgstr "Auto" + +msgid "Outer brim only" +msgstr "Outer brim only" + +msgid "Inner brim only" +msgstr "Inner brim only" + +msgid "Outer and inner brim" +msgstr "Outer and inner brim" + +msgid "No-brim" +msgstr "Nincs perem" + msgid "Outer wall speed" msgstr "Külső fal sebessége" @@ -1455,6 +1472,33 @@ msgstr "Nincs nyomtató" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "Nem sikerült csatlakozni a szerverhez" + +msgid "Check cloud service status" +msgstr "Check cloud service status" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Failed to connect to cloud service" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Please click on the hyperlink above to view the cloud service status" + +msgid "Failed to connect to the printer" +msgstr "Nem sikerült csatlakozni a nyomtatóhoz" + +msgid "Connection to printer failed" +msgstr "Connection to printer failed" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Please check the network connection of the printer and Studio." + +msgid "Connecting..." +msgstr "Csatlakozás..." + msgid "?" msgstr "?" @@ -1464,8 +1508,8 @@ msgstr "Üres" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS filament backup" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "Az AMS nincs csatlakoztatva" @@ -1523,11 +1567,11 @@ msgstr "Új filament betöltése az extruderbe" msgid "Purge old filament" msgstr "Régi filament kiöblítése" -msgid "Feed new filament from external spool" -msgstr "Feed new filament from external spool" +msgid "Push new filament into the extruder" +msgstr "Push new filament into the extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirm whether the filament has been extruded" +msgid "Grab new filament" +msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1631,57 +1675,60 @@ msgstr "Bejelentkezés" msgid "Login failed" msgstr "Sikertelen bejelentkezés" -msgid "The region parameter is incorrrect" -msgstr "A régió paramétere helytelen" - -msgid "Failure of printer login" -msgstr "Sikertelen bejelentkezés a nyomtatóra" - -msgid "Failed to get ticket" -msgstr "Nem sikerült jegyet szerezni" - -msgid "User authorization timeout" -msgstr "Felhasználó hitelesítési időtúllépés" - -msgid "Failure of bind" -msgstr "Sikertelen párosítás" - -msgid "Unknown Failure" -msgstr "Ismeretlen hiba" - msgid "Please check the printer network connection." msgstr "Kérjük, ellenőrizd a nyomtató hálózati kapcsolatát." -msgid "Abnormal print file data. Please slice again" -msgstr "Rendellenes nyomtatási fájladatok. Kérjük, szeleteld újra" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormal print file data: please slice again." -msgid "Task canceled" -msgstr "Feladat törölve" +msgid "Task canceled." +msgstr "Task canceled." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "" -"A feltöltési folyamat időtúllépés miatt megszakadt. Kérjük, ellenőrizd a " -"hálózati beállításokat és próbáld újra" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Upload task timed out. Please check the network status and try again." msgid "Cloud service connection failed. Please try again." msgstr "" "A felhőszolgáltatáshoz való csatlakozás sikertelen. Kérjük, próbáld újra." -msgid "Print file not found, please slice again" -msgstr "A nyomtatási fájl nem található, kérjük, szeleteld újra" +msgid "Print file not found. please slice again." +msgstr "Print file not found; please slice again." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -"A nyomtatási fájl mérete meghaladja a megengedett maximális méretet (1 GB). " -"Kérjük, egyszerűsítsd a modellt és szeleteld újra" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." -msgid "Failed uploading print file" -msgstr "Sikertelen nyomtatási fájl feltöltés" +msgid "Failed to send the print job. Please try again." +msgstr "Nem sikerült elküldeni a nyomtatási feladatot. Kérlek próbáld újra." -msgid "Wrong Access code" -msgstr "Hibás hozzáférési kód" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Failed to upload file to ftp. Please try again." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Check the current status of the Bambu Lab server by clicking on the link " +"above." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"The size of the print file is too large. Please adjust the file size and try " +"again." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Print file not found; please slice it again and send it for printing." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Failed to upload print file via FTP. Please check the network status and try " +"again." msgid "Sending print job over LAN" msgstr "Nyomtatási munka küldése LAN-on keresztül" @@ -1703,24 +1750,16 @@ msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" "Sikeresen elküldve. Az eszköz oldala automatikusan megjelenik %s mp-en belül" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "A LAN-on keresztüli nyomtatáshoz helyezz be egy SD kártyát." -msgid "Failed to send the print job. Please try again." -msgstr "Nem sikerült elküldeni a nyomtatási feladatot. Kérlek próbáld újra." - -msgid "Send to Printer failed. Please try again." -msgstr "Nem sikerült elküldeni a nyomtatóra. Kérjük, próbáld újra." - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "G-kód fájl küldése LAN-on keresztül" -msgid "Sending gcode file through cloud service" -msgstr "G-kód fájl küldése felhőszolgáltatáson keresztül" - msgid "Sending gcode file to sdcard" msgstr "G-kód fájl küldése MicroSD-kártyára" @@ -1731,9 +1770,6 @@ msgstr "Sikeresen elküldve. Az oldal bezárul %s mp-en belül" msgid "An SD card needs to be inserted before sending to printer." msgstr "A nyomtatóra való küldés előtt be kell helyezned egy MicroSD-kártyát." -msgid "Please log out and login to the printer again." -msgstr "Kérjük, jelentkezz ki, majd jelentkezz be újra a nyomtatóba." - msgid "Choose SLA archive:" msgstr "Choose SLA archive:" @@ -1817,17 +1853,19 @@ msgstr "Copyright" msgid "License" msgstr "Licenc" -msgid "Orca Slicer is licensed under " -msgstr "A Orca Slicer a következő licencet használja " +msgid "Bambu Studio is licensed under " +msgstr "A Bambu Studio a következő licencet használja " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"A Bambu Studio a Prusa Research által készített PrusaSliceren alapul, amely " +"az Alessandro Ranellucci és a RepRap közösség által készített Slic3r-ből " +"származik" msgid "Libraries" msgstr "Könyvtárak" @@ -1843,14 +1881,12 @@ msgstr "" msgid "About %s" msgstr "%s névjegye" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"A Bambu Studio a PrusaResearch által készített PrusaSlicer és Merill " +"(supermerill) által készített SuperSlicer alapján készült." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -1863,8 +1899,17 @@ msgid "" msgstr "" "A Slic3r-t Alessandro Ranellucci készítette sok más közreműködő segítségével." -msgid "Version" -msgstr "Verzió" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "A Bambu Studio az Ultimaker Cura néhány ötletére is támaszkodott." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"A szoftver számos része származik közösségi közreműködésből, így nem tudjuk " +"őket egyenként felsorolni, ezért a megfelelő helyeken a kód kommentekben " +"vannak feltüntetve." msgid "AMS Materials Setting" msgstr "AMS anyagok beállítása" @@ -1902,8 +1947,11 @@ msgstr "SN" msgid "Setting AMS slot information while printing is not supported" msgstr "Nyomtatás közben nem változtathatóak meg a AMS férőhelyek adatai" -msgid "Factors of dynamic flow cali" -msgstr "Dinamikus anyagáramlás kali." +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "K-tényező" @@ -1917,15 +1965,15 @@ msgstr "Setting Virtual slot information while printing is not supported" msgid "Are you sure you want to clear the filament information?" msgstr "Are you sure you want to clear the filament information?" +msgid "You need to select the material type and color first." +msgstr "You need to select the material type and color first." + msgid "Please input a valid value (K in 0~0.5)" msgstr "Adj meg egy érvényes értéket (K 0-0,5 között)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Adj meg egy érvényes értéket (K 0-0,5, N 0,6-2,0 között)" -msgid "You need to select the material type and color first." -msgstr "You need to select the material type and color first." - msgid "Other Color" msgstr "Other Color" @@ -2090,12 +2138,21 @@ msgstr "Nyomtatás az AMS-ben lévő filamentekkel" msgid "Print with filaments mounted on the back of the chassis" msgstr "Nyomtatás külső tartón lévő filamenttel" -msgid "Filaments replace" -msgstr "Backup Filament" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Group" +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 "" + msgid "AMS Settings" msgstr "AMS beállítások" @@ -2392,6 +2449,13 @@ msgstr "" "Túl alacsony rétegmagasság.\n" "Visszaállítva 0,2-re" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Túl nagy rétegmagasság.\n" +"Visszaállítva 0,2-re" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2611,6 +2675,28 @@ msgstr "A frissítés sikertelen." msgid "Failed to start printing job" msgstr "Nem sikerült elindítani a nyomtatási feladatot" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "alapértelmezett" @@ -2669,9 +2755,6 @@ msgstr "Szerszám" msgid "Layer Time" msgstr "Rétegidő" -msgid "Layer Time (log)" -msgstr "Rétegidő (log)" - msgid "Height: " msgstr "Magasság:" @@ -2706,7 +2789,7 @@ msgid "Statistics of All Plates" msgstr "Statistics of All Plates" msgid "Display" -msgstr "Megjelenítés" +msgstr "Mutat" msgid "Flushed" msgstr "Öblített" @@ -2736,7 +2819,7 @@ msgid "Time" msgstr "Idő" msgid "Percent" -msgstr "Százalék" +msgstr "%" msgid "Layer Height (mm)" msgstr "Rétegmagasság (mm)" @@ -2756,6 +2839,9 @@ msgstr "Hőmérséklet (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Térfogatáramlás (mm³/s)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "Használt filament" @@ -2977,9 +3063,11 @@ msgstr "Méret:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicting objects further (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Egy objektum a tálca határvonalán túlra került." @@ -3109,6 +3197,9 @@ msgstr "Nem" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "will be closed before creating a new model. Do you want to continue?" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "Tálca szeletelése" @@ -3151,6 +3242,9 @@ msgstr "Konfigurációs mappa megjelenítése" msgid "Show Tip of the Day" msgstr "A nap tippjének megjelenítése" +msgid "Report issue" +msgstr "Report issue" + msgid "Check for Update" msgstr "Frissítés keresése" @@ -3245,22 +3339,22 @@ msgid "Load a model" msgstr "Modell betöltése" msgid "Import Configs" -msgstr "Import Configs" +msgstr "Konfiguráció importálása" msgid "Load configs" -msgstr "Load configs" +msgstr "Konfiguráció betöltése" msgid "Import" -msgstr "Import" +msgstr "Importálás" msgid "Export all objects as STL" msgstr "Összes objektum exportálása STL-ként" msgid "Export Generic 3MF" -msgstr "Export Generic 3MF" +msgstr "Szabványos 3MF exportálása" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Export 3mf file without using some 3mf-extensions" +msgstr "3MF fájl exportálása 3MF bővítmények nélkül" msgid "Export current sliced file" msgstr "Aktuális szeletelt fájl exportálása" @@ -3275,7 +3369,7 @@ msgid "Export current plate as G-code" msgstr "Jelenlegi tálca exportálása G-kódként" msgid "Export &Configs" -msgstr "Export &Configs" +msgstr "Exportálás & Konfigurációk" msgid "Export current configuration to files" msgstr "Aktuális konfiguráció exportálása fájlokba" @@ -3349,6 +3443,12 @@ msgstr "Címkék megjelenítése" msgid "Show object labels in 3D scene" msgstr "Objektumcímkék megjelenítése a 3D-térben" +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Show object overhang highlight in 3D scene" + msgid "Preferences" msgstr "Beállítások" @@ -3382,9 +3482,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3403,9 +3500,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "3D modellek" - msgid "&Open G-code" msgstr "&G-kód megnyitása" @@ -3455,13 +3549,13 @@ msgid "A config exists with the same name: %s, do you want to override it." msgstr "A config exists with the same name: %s. Do you want to override it?" msgid "Overwrite file" -msgstr "Overwrite file" +msgstr "Fájl felülírása" msgid "Yes to All" -msgstr "Yes to All" +msgstr "Igen mindegyikre" msgid "No to All" -msgstr "No to All" +msgstr "Nem mindegyikre" msgid "Choose a directory" msgstr "Válassz egy mappát" @@ -3473,7 +3567,7 @@ msgstr[0] "" msgstr[1] "" msgid "Export result" -msgstr "Export Result" +msgstr "Exportálás eredménye" msgid "Select profile to load:" msgstr "Válaszd ki a betölteni kívánt profilt:" @@ -3486,7 +3580,7 @@ msgstr[0] "" msgstr[1] "" msgid "Import result" -msgstr "Import result" +msgstr "Importálás eredménye" msgid "File is missing" msgstr "Hiányzik a fájl" @@ -3516,31 +3610,31 @@ msgstr "Szinkronizálás" msgid "Initialize failed (No Device)!" msgstr "Sikertelen inicializálás (Nincs eszköz)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + msgid "Initialize failed (No Camera Device)!" msgstr "Sikertelen inicializálás (nem található kamera)!" -msgid "Initializing..." -msgstr "Inicializálás…" - -msgid "Loading..." -msgstr "Betöltés…" - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Sikertelen inicializálás (nem támogatott LAN-módban)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" "A nyomtató a letöltéssel van elfoglalva; kérjük, várd meg, amíg a letöltés " "befejeződik." +msgid "Loading..." +msgstr "Betöltés…" + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Az inicializálás sikertelen (hiányzó nyomtató LAN IP-cím)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Az inicializálás sikertelen (a nyomtató nem támogatja)!" +msgid "Initializing..." +msgstr "Inicializálás…" #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3571,9 +3665,12 @@ msgstr "Virtuális kameraeszközök letöltése" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"Már fut egy másik virtuális kamera.\n" +"A Bambu Studio csak egy virtuális kamerát támogat.\n" +"Leállítod ezt a virtuális kamerát?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3590,10 +3687,10 @@ msgid "Load failed [%d]!" msgstr "A betöltés sikertelen [%d]!" msgid "Year" -msgstr "Year" +msgstr "Év" msgid "Month" -msgstr "Month" +msgstr "Hónap" msgid "All Files" msgstr "Minden fájl" @@ -3614,11 +3711,14 @@ msgid "Switch to timelapse files." msgstr "Váltás timelapse fájlokra." msgid "Video" -msgstr "Video" +msgstr "Videó" msgid "Switch to video files." msgstr "Váltás a videófájlokra." +msgid "Switch to 3mf model files." +msgstr "Switch to 3mf model files." + msgid "Delete selected files from printer." msgstr "Kijelölt fájlok törlése a nyomtatóról." @@ -3635,37 +3735,54 @@ msgid "Batch manage files." msgstr "Fájlok kötegelt kezelése." msgid "No printers." -msgstr "No printers." - -msgid "Not supported by this model of printer!" -msgstr "Ez a nyomtatómodell nem támogatja!" - -msgid "Connecting..." -msgstr "Csatlakozás..." +msgstr "Nincs nyomtató." #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "Connection failed [%d]!" +msgstr "Csatlakozás sikertelen [%d]!" msgid "Loading file list..." -msgstr "Loading file list..." - -msgid "No files" -msgstr "No files" - -msgid "Not accessible in LAN-only mode!" -msgstr "Nem érhető el LAN módban!" - -msgid "Missing LAN ip of printer!" -msgstr "Hiányzik a nyomtató LAN IP-címe!" +msgstr "Fájllista betöltése..." #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "No files [%d]" +msgstr "No files [%d]" + +#, c-format, boost-format +msgid "Load failed [%d]" +msgstr "Load failed [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Delete files" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Do you want to delete the file '%s' from printer?" + +msgid "Delete file" +msgstr "Delete file" + +msgid "Fetching model infomations ..." +msgstr "Fetching model information..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Failed to fetch model infomation from printer." + +msgid "Failed to parse model infomations." +msgstr "Failed to parse model infomation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "A (z) '%s' fájl elveszett! Kérjük, töltsd le újra." @@ -3686,6 +3803,12 @@ msgstr "A letöltés kész" msgid "Downloading %d%%..." msgstr "Letöltés %d%%..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Sebesség:" @@ -3707,15 +3830,6 @@ msgstr "3Dconnexion beállítások" msgid "Swap Y/Z axes" msgstr "Y/Z tengelyek felcserélése" -msgid "Camera" -msgstr "Kamera" - -msgid "SD Card" -msgstr "MicroSD kártya" - -msgid "Camera Setting" -msgstr "Kamera beállítása" - msgid "Printing Progress" msgstr "Nyomtatás folyamata" @@ -3731,9 +3845,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Layer: N/A" +msgid "Immediately score" +msgstr "Immediately score" + msgid "Clear" msgstr "Törlés" +msgid "Camera" +msgstr "Kamera" + +msgid "SD Card" +msgstr "MicroSD kártya" + +msgid "Camera Setting" +msgstr "Kamera beállítása" + msgid "Control" msgstr "Vezérlés" @@ -3767,31 +3893,14 @@ msgstr "Nincs MicroSD kártya" msgid "SD Card Abnormal" msgstr "Hibás MicroSD kártya" -msgid "Printing List" -msgstr "Nyomtatási lista" - msgid "Cancel print" msgstr "Nyomtatás megszakítása" msgid "Are you sure you want to cancel this print?" msgstr "Biztosan megszakítod ezt a nyomtatást?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van tiltva. " -"Kérjük, csatlakoztasd újra a nyomtatót a fiókodba történő bejelentkezéssel." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van tiltva. " -"Kérjük, csatlakoztasd újra a nyomtatót a hozzáférési kód megadásával, " -"amelyet a nyomtató kijelzőjén találsz." +msgid "Done" +msgstr "Done" msgid "Downloading..." msgstr "Letöltés..." @@ -3807,6 +3916,12 @@ msgstr "In Cloud Slicing Queue, there are %s tasks ahead of you." msgid "Layer: %s" msgstr "Layer: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Please give a score for your favorite Bambu Market model." + +msgid "Score" +msgstr "Score" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Layer: %d/%d" @@ -3848,24 +3963,15 @@ msgstr "Őrült" msgid "Can't start this without SD card." msgstr "MicroSD kártya nélkül nem indítható." -msgid "Failed to connect to the server" -msgstr "Nem sikerült csatlakozni a szerverhez" - msgid "Status" msgstr "Állapot" -msgid "Media" -msgstr "Média" - msgid "Update" msgstr "Frissítés" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Nem sikerült csatlakozni a nyomtatóhoz" - msgid "Don't show again" msgstr "Ne mutasd újra" @@ -4092,12 +4198,9 @@ msgstr "Filament beállítások" msgid "Printer settings" msgstr "Nyomtató beállítások" -msgid "Untitled" -msgstr "Névtelen" - #, boost-format -msgid " plate %1%:" -msgstr " %1% tálca:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Érvénytelen név, a következő karakterek nem megengedettek:" @@ -4180,9 +4283,9 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "Nincs kompatibilis filament és nem történt szinkronizálás." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, boost-format @@ -4239,8 +4342,10 @@ msgstr "3mf betöltése" msgid "The Config can not be loaded." msgstr "A konfiguráció nem tölthető be." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" +"A 3mf a Bambu Studio egy régebbi verziójával lett létrehozva, csak a " +"geometriai adatok kerülnek betöltésre." #, c-format, boost-format msgid "" @@ -4579,8 +4684,10 @@ msgstr "Tippek:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" +"A „Modelljavítás” funkció jelenleg csak Windows rendszeren érhető el. " +"Javítsd meg a modellt a Bambu Studióban (Windows) vagy más CAD szoftverben." #, c-format, boost-format msgid "" @@ -4643,9 +4750,6 @@ msgstr "Egyéb" msgid "Login Region" msgstr "Régió" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Metrikus" @@ -4671,12 +4775,6 @@ msgstr "A nap tippje értesítés megjelenítése indítás után" msgid "If enabled, useful hints are displayed at startup." msgstr "Ha engedélyezve van, hasznos tippek jelennek meg indításkor." -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Presets" @@ -4697,33 +4795,39 @@ msgstr "System Sync" msgid "Clear my choice on the unsaved presets." msgstr "Clear my choice on the unsaved presets." -msgid "Associate files to OrcaSlicer" -msgstr "Fájlok társítása a OrcaSlicerhoz" +msgid "Associate files to BambuStudio" +msgstr "Fájlok társítása a BambuStudiohoz" -msgid "Associate .3mf files to OrcaSlicer" -msgstr ".3mf fájlok társítása a OrcaSlicerhoz" +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mf fájlok társítása a BambuStudiohoz" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"Ha engedélyezve van, a OrcaSlicer-t állítja be alapértelmezett " +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " "alkalmazásként a .3mf fájlok megnyitásához" -msgid "Associate .stl files to OrcaSlicer" -msgstr ".stl fájlok társítása a OrcaSlicerhoz" +msgid "Associate .stl files to BambuStudio" +msgstr ".stl fájlok társítása a BambuStudiohoz" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"Ha engedélyezve van, a OrcaSlicer-t állítja be alapértelmezett " +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " "alkalmazásként az .stl fájlok megnyitásához" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr ".step/.stp fájlok társítása a OrcaSlicerhoz" +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stp fájlok társítása a BambuStudiohoz" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"Ha engedélyezve van, a OrcaSlicer-t állítja be alapértelmezett " +"Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " "alkalmazásként a .step fájlok megnyitásához" +msgid "Online Models" +msgstr "Online Models" + +msgid "Show online staff-picked models on the home page" +msgstr "Show online staff-picked models on the home page" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -4757,6 +4861,12 @@ msgstr "Sötét mód" msgid "Enable Dark mode" msgstr "Sötét mód engedélyezése" +msgid "Develop mode" +msgstr "Fejlesztői mód" + +msgid "Skip AMS blacklist check" +msgstr "Skip AMS blacklist check" + msgid "Home page and daily tips" msgstr "Kezdőoldal és napi tippek" @@ -4793,11 +4903,14 @@ msgstr "Egyéb" msgid "Mouse wheel reverses when zooming" msgstr "Görgetési irány megfordítása nagyítás közben" -msgid "Develop mode" -msgstr "Fejlesztői mód" +msgid "Enable SSL(MQTT)" +msgstr "Enable SSL(MQTT)" -msgid "Dump video" -msgstr "Dump video" +msgid "Enable SSL(FTP)" +msgstr "Enable SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internal developer mode" msgid "Log Level" msgstr "Naplózási szint" @@ -4883,42 +4996,39 @@ msgstr "Anyagok hozzáadása/eltávolítása" msgid "Add/Remove printers" msgstr "Nyomtatók hozzáadása/eltávolítása" +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Nyomtatás sorrendje" -msgid "Plate name" -msgstr "Plate name" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Same as Global Plate Type" + msgid "Same as Global Bed Type" msgstr "Ugyanaz, mint a globális tálca típusa" -msgid "Cool Plate" -msgstr "Cool Plate" - -msgid "Engineering Plate" -msgstr "Engineering Plate" - -msgid "High Temp Plate" -msgstr "High Temp Plate" - -msgid "Textured PEI Plate" -msgstr "Textured PEI Plate" - msgid "By Layer" msgstr "By Layer" msgid "By Object" msgstr "By Object" +msgid "Plate name" +msgstr "Plate name" + msgid "Accept" msgstr "Accept" @@ -5030,11 +5140,8 @@ msgstr "Ehhez: \"%1%\", add hozzá \"%2%\"-t új beállításként" msgid "Simply switch to \"%1%\"" msgstr "Csak válts a(z) \"%1%\"-ra" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Feladat törölve" msgid "(LAN)" msgstr "(LAN)" @@ -5045,6 +5152,9 @@ msgstr "Saját eszköz" msgid "Other Device" msgstr "Egyéb eszköz" +msgid "Online" +msgstr "Online" + msgid "Input access code" msgstr "Add meg a hozzáférési kódot" @@ -5054,12 +5164,18 @@ msgstr "Nem találod az eszközöket?" msgid "Log out successful." msgstr "Sikeres kijelentkezés." +msgid "Offline" +msgstr "Offline" + msgid "Busy" msgstr "Elfoglalt" msgid "Bambu Cool Plate" msgstr "Bambu Cool Plate" +msgid "PLA Plate" +msgstr "PLA Plate" + msgid "Bamabu Engineering Plate" msgstr "Bambu Engineering Plate" @@ -5075,12 +5191,24 @@ msgstr "Frissítés" msgid "Bed Leveling" msgstr "Asztalszintezés" -msgid "Flow Calibration" -msgstr "Anyagáramlás kalibráció" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Nem lehet csatlakozni a nyomtatóhoz" msgid "send completed" msgstr "küldés befejezve" +msgid "Error code" +msgstr "Error code" + +msgid "Check the status of current system services" +msgstr "Check the status of current system services" + +msgid "Printer local connection failed, please try again." +msgstr "Printer local connection failed; please try again." + msgid "No login account, only printers in LAN mode are displayed" msgstr "" "Nincs bejelentkezési fiók, csak a LAN módban lévő nyomtatók jelennek meg" @@ -5162,6 +5290,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Nyomtatás előtt be kell helyezned egy microSD kártyát." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "A timelapse rögzítéséhez egy microSD kártyára van szükség." @@ -5211,9 +5342,27 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "Nyomtatási feladat előkészítése" +msgid "Abnormal print file data. Please slice again" +msgstr "Rendellenes nyomtatási fájladatok. Kérjük, szeleteld újra" + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "Eszköz nevének módosítása" @@ -5229,18 +5378,109 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "A MicroSD card needs to be inserted before sending to the printer SD card." -msgid "The printer is required to be in the same LAN as Orca Slicer." +msgid "The printer is required to be in the same LAN as Bambu Studio." msgstr "" +"A nyomtatónak ugyanazon a hálózaton kell lennie, mint a Bambu Studiónak." msgid "The printer does not support sending to printer SD card." msgstr "A nyomtató nem támogatja a MicroSD kártyára küldést." +msgid "Failed to create socket" +msgstr "Failed to create socket" + +msgid "Failed to connect socket" +msgstr "Failed to connect socket" + +msgid "Failed to publish login request" +msgstr "Failed to publish login request" + +msgid "Get ticket from device timeout" +msgstr "Timeout getting ticket from device" + +msgid "Get ticket from server timeout" +msgstr "Timeout getting ticket from server" + +msgid "Failed to post ticket to server" +msgstr "Failed to post ticket to server" + +msgid "Failed to parse login report reason" +msgstr "Failed to parse login report reason" + +msgid "Receive login report timeout" +msgstr "Receive login report timeout" + +msgid "Unknown Failure" +msgstr "Ismeretlen hiba" + msgid "Log in printer" msgstr "Bejelentkezés a nyomtatóra" msgid "Would you like to log in this printer with current account?" msgstr "Szeretnél bejelentkezni a nyomtatóra a jelenlegi fiókkal?" +msgid "Check the reason" +msgstr "Check the reason" + +msgid "Read and accept" +msgstr "Read and accept" + +msgid "Terms and Conditions" +msgstr "Terms and Conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"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 " +"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." + +msgid "and" +msgstr "and" + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "We ask for your help to improve everyone's printer" + +msgid "Statement about User Experience Improvement Program" +msgstr "Statement about User Experience Improvement Program" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"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 " +"same principle and uses machine learning to improve its performance from the " +"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." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Statement on User Experience Improvement Plan" + msgid "Log in successful." msgstr "Sikeres bejelentkezés." @@ -5356,6 +5596,9 @@ msgstr "Falak" msgid "Top/bottom shells" msgstr "Felső/alsó héjak" +msgid "Sparse infill" +msgstr "Kitöltés" + msgid "Initial layer speed" msgstr "Kezdőréteg sebessége" @@ -5374,12 +5617,6 @@ msgstr "" "a vonalszélesség százalékában van kifejezve. A 0 sebesség azt jelenti, hogy " "nem történik lassítás, és a fal nyomtatási sebessége kerül alkalmazásra." -msgid "Bridge" -msgstr "Áthidalás" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "Mozgás sebessége" @@ -5404,8 +5641,8 @@ msgstr "Speciális mód" msgid "G-code output" msgstr "G-kód kimenet" -msgid "Post-processing Scripts" -msgstr "Post-processing Scripts" +msgid "Post-processing scripts" +msgstr "Post-processing scripts" msgid "Frequent" msgstr "Gyakori" @@ -5460,8 +5697,8 @@ 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 / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5470,8 +5707,8 @@ msgstr "" "Asztalhőmérséklet a hideg tálca használatával. A 0 érték azt jelenti, hogy a " "filament nem támogatja a Cool Plate-re történő nyomtatást" -msgid "Engineering plate" -msgstr "Engineering plate" +msgid "Engineering Plate" +msgstr "Engineering Plate" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " @@ -5480,6 +5717,9 @@ msgstr "" "Asztalhőmérséklet a mérnöki tálca használatával. A 0 érték azt jelenti, hogy " "a filament nem támogatja az Engineering Plate-re történő nyomtatást" +msgid "High Temp Plate" +msgstr "High Temp Plate" + msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" @@ -5488,6 +5728,9 @@ msgstr "" "jelenti, hogy a filament nem támogatja a High Temp Plate-re történő " "nyomtatást" +msgid "Textured PEI Plate" +msgstr "Textured PEI Plate" + msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" @@ -5545,12 +5788,6 @@ msgstr "Filament befejező G-kód" msgid "Printable space" msgstr "Nyomtatási terület" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "Extruder távolság" @@ -5599,21 +5836,9 @@ msgstr "Jerk limitek" msgid "Layer height limits" msgstr "Rétegmagasság limitek" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "Visszahúzás anyagváltáskor" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "Különálló" @@ -5828,7 +6053,7 @@ msgstr "Kilépés %s" msgid "the Configuration package is incompatible with current APP." msgstr "" -"A konfigurációs csomag nem kompatibilis a Orca Slicer jelenlegi verziójával." +"A konfigurációs csomag nem kompatibilis a Bambu Studio jelenlegi verziójával." msgid "Configuration updates" msgstr "Konfiguráció frissítések" @@ -5860,7 +6085,7 @@ msgid "The multiplier should be in range [%.2f, %.2f]." msgstr "A szorzónak [%.2f, %.2f] tartományban kell lennie." msgid "unloaded" -msgstr "unloaded" +msgstr "kitöltve" msgid "loaded" msgstr "betöltve" @@ -6060,14 +6285,11 @@ msgstr "Gizmo SLA support points" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM paint-on seam" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "Plater" msgid "Move: press to snap by 1mm" -msgstr "Move: press to snap by 1mm" +msgstr "Mozgatás: nyomd meg, hogy 1 mm-t mozduljon" msgid "⌘+Mouse wheel" msgstr "⌘+Egérgörgő" @@ -6130,9 +6352,6 @@ msgstr "Vízszintes csúszka - Az aktív csúszka jobbra mozgatása" msgid "On/Off one layer mode of the vertical slider" msgstr "Függőleges csúszka egyréteges módjának ki/bekapcsolása" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "Csúszka 5x gyorsabb mozgatása" @@ -6150,28 +6369,29 @@ msgid "Network plug-in update" msgstr "Hálózati bővítmény frissítése" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" +"Kattints az OK gombra a hálózati bővítmény frissítéséhez a Bambu Studio " +"következő indításakor." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "Új hálózati bővítmény (%s) érhető el. Szeretnéd telepíteni?" -msgid "New version of Orca Slicer" -msgstr "A Orca Slicer új verziója" +msgid "New version of Bambu Studio" +msgstr "A Bambu Studio új verziója" msgid "Don't remind me of this version again" msgstr "Ne emlékeztessen újra erre a verzióra." -msgid "Done" -msgstr "Done" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN kapcsolódás sikertelen (nyomtatási fájl küldése)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" +"1. lépés: Ellenőrizd, hogy a Bambu Studio és a nyomtató ugyanazon a helyi " +"hálózaton van." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6290,7 +6510,7 @@ msgid "Repaired 3mf file does not contain any volume" msgstr "A javított 3mf fájl nem tartalmaz térfogatot." msgid "Repaired 3mf file contains more than one volume" -msgstr "The repaired 3mf file contains more than one volume." +msgstr "A megjavított 3mf fájl egynél több kötetet tartalmaz." msgid "Repair finished" msgstr "Javítás befejezve" @@ -6302,6 +6522,10 @@ msgstr "Javítás megszakítva" msgid "Copying of file %1% to %2% failed: %3%" msgstr "%1% fájl másolása sikertelen a következő helyre: %2% Hiba: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "%1% mappa másolása sikertelen a következő helyre: %2% Hiba: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "" "Kérjük, ellenőrizd a nem mentett módosításokat a konfiguráció frissítése " @@ -6314,11 +6538,11 @@ msgid "Open G-code file:" msgstr "G-kód fájl megnyitása:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Az egyik objektum üres kezdőréteggel rendelkezik, ezért nem nyomtatható. " -"Kérjük, vágd le az alját, vagy engedélyezd a támaszokat." +"The following object(s) have an empty initial layer and can't be printed. " +"Please cut the bottom or enable supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6364,9 +6588,6 @@ msgstr "Külső fal" msgid "Overhang wall" msgstr "Túlnyúló fal" -msgid "Sparse infill" -msgstr "Kitöltés" - msgid "Internal solid infill" msgstr "Belső szilárd kitöltés" @@ -6376,15 +6597,12 @@ msgstr "Felső felület" msgid "Bottom surface" msgstr "Alsó felület" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Áthidalás" msgid "Gap infill" msgstr "Réskitöltés" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Támasz érintkező felület" @@ -6564,35 +6782,39 @@ msgstr "" "tartalmaz." msgid "The prime tower is not supported in \"By object\" print." -msgstr "A prime tower is not supported in “By object” print." +msgstr "A törlőtorony nem támogatott a „Tárgyanként“ nyomtatási módban." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A prime tower is not supported when adaptive layer height is on. It requires " -"that all objects have the same layer height." +"A törlőtorony nem támogatott, ha az adaptív rétegmagasság engedélyezve van. " +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"A prime tower requires any “support gap” to be a multiple of layer height." +"A törlőtorony használatához minden „támasz rés”-nek a rétegmagasság " +"többszörösének kell lennie." msgid "The prime tower requires that all objects have the same layer heights" -msgstr "A prime tower requires that all objects have the same layer height." +msgstr "" +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"A prime tower requires that all objects are printed over the same number of " -"raft layers." +"A törlőtorony használatához minden objektumnak azonos számú tutaj réteggel " +"kell rendelkeznie." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A prime tower requires that all objects are sliced with the same layer " -"height." +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "" "The prime tower is only supported if all objects have the same variable " @@ -6610,7 +6832,8 @@ msgstr "Túl nagy vonalszélesség" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"A prime tower requires that support has the same layer height as the object." +"A törlőtorony használatához a támasznak ugyanakkora rétegmagassággal kell " +"rendelkeznie, mint az objektumnak." msgid "" "Support enforcers are used but support is not enabled. Please enable support." @@ -6621,22 +6844,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "A rétegmagasság nem lehet nagyobb a fúvóka átmérőjénél." -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "%d. tálca: %s nem használható %s filamenttel." @@ -6949,8 +7156,8 @@ msgstr "" "rétegek alátámasztása nélkül. A 0%%-os érték bekapcsolja a hűtést a külső " "fal teljes szélességén, függetlenül a túlnyúlás mértékétől." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "Áthidalás iránya" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6962,12 +7169,6 @@ msgstr "" "érték kerül alkalmazásra. Ha az áthidalást a falakkal párhuzamosra szeretnéd " "állítani, használj 180°-os értéket." -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "Áthidalás áramlási sebessége" @@ -6986,18 +7187,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -7005,39 +7198,23 @@ msgstr "Csak egy fal a felső felületeken" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Csak egy falat használ a sík felső felületeken, hogy több hely maradjon a " -"felső kitöltési mintának" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "Felső felületek" + +msgid "Topmost surface" +msgstr "Legfelső felület" + msgid "Only one wall on first layer" msgstr "Only one wall on first layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Use only one wall on the first layer of models" msgid "Slow down for overhang" msgstr "Lassítás túlnyúlásoknál" @@ -7047,25 +7224,11 @@ msgstr "" "Engedélyezd ezt az opciót a nyomtatási sebesség lassításához különböző " "túlnyúlási szögeknél" -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Az áthidalások és a teljesen túlnyúló falak nyomtatási sebessége" - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "Az áthidalások és a teljesen túlnyúló falak nyomtatási sebessége" msgid "Brim width" msgstr "Perem szélessége" @@ -7083,18 +7246,6 @@ msgstr "" "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." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "Outer brim only" - -msgid "Inner brim only" -msgstr "Inner brim only" - -msgid "Outer and inner brim" -msgstr "Outer and inner brim" - msgid "Brim-object gap" msgstr "Perem-tárgy közötti rés" @@ -7105,30 +7256,6 @@ msgstr "" "A legbelső peremvonal és a tárgy közötti rés, ami megkönnyítheti a perem " "eltávolítását" -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "Kompatibilis gép" @@ -7265,11 +7392,11 @@ msgid "Internal bridge support thickness" msgstr "Belső áthidalások támaszának vastagsága" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -7316,10 +7443,8 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "A külső fal vonalszélessége" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7328,23 +7453,6 @@ msgstr "" "A legkülső látható fal sebessége. A jobb minőség érdekében ez lassabb, mint " "a belső fal sebessége." -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "Belső/külső fal és kitöltés sorrendje" @@ -7393,6 +7501,16 @@ msgstr "" "Az extruder körüli szabadon hagyott terület sugara. Objektumonként történő " "nyomtatás során az ütközések elkerülésére szolgál." +msgid "Max Radius" +msgstr "Max. sugár" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Az extruder körüli szabadon hagyott terület sugara. Objektumonként történő " +"nyomtatás során az ütközések elkerülésére szolgál." + msgid "Extruder Color" msgstr "Extruder szín" @@ -7418,22 +7536,30 @@ msgstr "" "értéknek a változtatásával szép sík felületet kaphatsz, ha úgy tapasztalod, " "hogy túl sok vagy kevés az anyagáramlás." +msgid "Object flow ratio" +msgstr "Object flow ratio" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "The flow ratio set by object; the meaning is the same as flow ratio." + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "" +"Alapértelmezett vonalszélesség, ha valamilyen vonalszélesség nullára van " +"állítva" + msgid "Keep fan always on" msgstr "Ventilátor mindig bekapcsolva" @@ -7496,14 +7622,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "Filament betöltési idő" @@ -7527,18 +7645,6 @@ msgstr "" "A filament átmérő a G-kódban az extrudálás kiszámításához szükséges, ezért " "fontos, hogy pontos legyen" -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "Sűrűség" @@ -7652,54 +7758,6 @@ msgstr "Támasz kocka" msgid "Lightning" msgstr "Világítás" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (no open anchors)" - -msgid "1000 (unlimited)" -msgstr "1000 (unlimited)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7712,12 +7770,7 @@ msgstr "" "Gyorsulás a külső falnál: alacsonyabb érték használata javíthatja a " "minőséget." -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7725,10 +7778,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7751,29 +7801,33 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "Az első réteg vonalszélessége" + msgid "Initial layer height" msgstr "Kezdő rétegmagasság" @@ -7793,20 +7847,6 @@ msgstr "Kezdőréteg kitöltése" msgid "Speed of solid infill part of initial layer" msgstr "A kezdőréteg szilárd kitöltési részének sebessége" -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "" - msgid "Initial layer nozzle temperature" msgstr "Az első réteg fúvóka hőmérséklete" @@ -7816,24 +7856,6 @@ msgstr "A fúvóka hőmérséklete az első réteg nyomtatásakor ezzel a filame msgid "Full fan speed at layer" msgstr "Teljes ventilátor fordulatszám ennél a rétegnél" -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." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7875,12 +7897,9 @@ msgstr "" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "Rétegek és peremek" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -7940,85 +7959,23 @@ msgstr "Rozsdamentes acél" msgid "Brass" msgstr "Sárgaréz" -msgid "Nozzle HRC" -msgstr "Fúvóka HRC értéke" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"A fúvóka keménysége. A 0 azt jelenti, hogy szeletelés során nem ellenőrzi a " -"fúvóka HRC értékét." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "" "Engedélyezd ezt az opciót, ha a gép rendelkezik kiegészítő tárgyhűtő " "ventilátorral" -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 comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "G-kód változat" msgid "What kind of gcode the printer is compatible with" msgstr "Milyen G-kóddal kompatibilis a nyomtató." -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -8032,13 +7989,66 @@ msgstr "" "csökkentése érdekében. A fal továbbra is az eredeti rétegmagassággal kerül " "kinyomtatásra." +msgid "Length of sparse infill anchor" +msgstr "Length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring " +"perimeters connected to a single infill line." + +msgid "0 (no open anchors)" +msgstr "0 (no open anchors)" + +msgid "1000 (unlimited)" +msgstr "1000 (unlimited)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximum length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." + +msgid "0 (not anchored)" +msgstr "0 (not anchored)" + msgid "Filament to print internal sparse infill." msgstr "Filament a belső ritkás kitöltésekhez." -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "Line width of internal sparse infill" +msgstr "A belső ritkás kitöltés vonalszélessége" msgid "Infill/Wall overlap" msgstr "Kitöltés/fal átfedés" @@ -8054,15 +8064,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "A belső ritkás kitöltés sebessége" -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "Vasalás típusa" @@ -8076,12 +8077,6 @@ msgstr "" msgid "No ironing" msgstr "Nincs vasalás" -msgid "Top surfaces" -msgstr "Felső felületek" - -msgid "Topmost surface" -msgstr "Legfelső felület" - msgid "All solid layer" msgstr "Összes szilárd réteg" @@ -8341,48 +8336,16 @@ msgstr "Fájlnév formátum" msgid "User can self-define the project file name when export" msgstr "A felhasználó dönthet a projektfájlok nevéről exportáláskor." -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "Túlnyúló fal felismerése" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Felismeri a túlnyúlás százalékos arányát a vonalszélességhez viszonyítva, és " -"más sebességet használ. A 100%%-os túlnyúlás esetén az áthidaláshoz " -"beállított sebességet használja." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "A belső falak vonalszélessége" msgid "Speed of inner wall" msgstr "A belső fal nyomtatási sebessége" @@ -8390,21 +8353,27 @@ msgstr "A belső fal nyomtatási sebessége" msgid "Number of walls of every layer" msgstr "Ez a falak száma rétegenként." +msgid "Post-processing Scripts" +msgstr "Post-processing Scripts" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"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 via the absolute path to the G-code file as the first " +"argument, and variables of settings can also be read" msgid "Raft contact Z distance" msgstr "Tutaj érintkezés Z távolság" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"This is the Z gap between an object and a raft. It is ignored for soluble " -"interfaces." +"A Z távolság a tárgy és a tutaj között. Oldható érintkező felületek esetén " +"ez az érték figyelmen kívül van hagyva." msgid "Raft expansion" msgstr "Tutaj kibővítése" @@ -8419,10 +8388,12 @@ msgid "Density of the first raft or support layer" msgstr "Az első tutaj vagy támasz réteg sűrűsége" msgid "Initial layer expansion" -msgstr "First layer expansion" +msgstr "Első réteg kiterjesztése" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "This expands the first raft or support layer to improve bed adhesion." +msgstr "" +"Kiterjeszti az első tutaj- vagy támaszréteget, hogy javítsa az asztalhoz " +"való tapadást." msgid "Raft layers" msgstr "Tutaj rétegek" @@ -8495,8 +8466,8 @@ msgstr "" "nagyobb mozgás közben a tárgynak ütközzön. A Z tengely emelésekor használt " "körkörös mozgás megelőzheti a szálazást." -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Z-emelés típusa" msgid "Slope" msgstr "Lejtő" @@ -8504,53 +8475,10 @@ msgstr "Lejtő" msgid "Spiral" msgstr "Spirál" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8569,17 +8497,6 @@ msgstr "" "A filament extruderbe történő visszatöltésének sebessége. A nulla azonos " "sebességet jelent a visszahúzással" -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "Varrat pozíció" @@ -8598,39 +8515,14 @@ msgstr "Hátul" msgid "Random" msgstr "Véletlenszerû" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8667,12 +8559,6 @@ msgstr "" "Még a tárgyak előtt kerül nyomtatásra és a feladata a fúvóka " "anyagáramlásának stabilizálása" -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8691,10 +8577,11 @@ msgstr "" "A küszöbérték alatti ritkás kitöltési terület belső szilárd kitöltéssel " "kerül leváltásra" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "A belső tömör kitöltés vonalszélessége" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" @@ -8866,10 +8753,8 @@ msgstr "" "„Alapértelmezett“ beállítás választásakor a jelenleg használt filament kerül " "felhasználásra." -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "A támasz vonalszélessége" msgid "Interface use loop pattern" msgstr "Hurokminta felület" @@ -9028,28 +8913,6 @@ msgstr "" "Ez a beállítás határozza meg a szomszédos fa támasz csomópontok közötti " "távolságot." -msgid "Adaptive layer height" -msgstr "Adaptív rétegmagasság" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "Tree support brim width" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "Fa támasz ágának átmérője" @@ -9062,15 +8925,11 @@ msgstr "Fa támasz falak száma" msgid "This setting specify the count of walls around tree support" msgstr "Ez a beállítás határozza meg a falak számát a fa támasz körül." -msgid "Tree support with infill" -msgstr "Fa támasz kitöltéssel" +msgid "Tree support brim width" +msgstr "Tree support brim width" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"Ez a beállítás határozza meg, hogy a fa támasz nagyobb üregeiben legyen-e " -"kitöltés." +msgid "The brim width around tree support. 0 means auto." +msgstr "The brim width around tree support. 0 means auto." msgid "Chamber temperature" msgstr "" @@ -9111,10 +8970,8 @@ msgstr "" "Ez a G-kód kerül beillesztésre, amikor a filament csere történik, beleértve " "a szerszámváltást indító T parancsokat is." -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Felső felületek vonalszélessége" msgid "Speed of top surface infill which is solid" msgstr "A felső felületi kitöltés sebessége, amely szilárd" @@ -9153,6 +9010,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "Mozgási sebesség, amikor nem történik extrudálás" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Törlés visszahúzás közben" @@ -9266,24 +9131,6 @@ msgstr "" "kisebb. Ez a funkció a méret kismértékű módosítására szolgál, ha a " "kinyomtatott tárggyal összeszerelési problémák akadnak" -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9551,15 +9398,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "Kimeneti mappa" @@ -9706,140 +9544,399 @@ msgstr "The file contains invalid vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "This OBJ file couldn't be read because it's empty." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" msgstr "Kész" -msgid "Unable to perform boolean operation on selected parts" +msgid "Wiki" msgstr "" -msgid "Mesh Boolean" +msgid "How to use calibration result?" msgstr "" -msgid "Union" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Difference" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Intersection" +msgid "Calibration not supported" msgstr "" -msgid "Source Volume" +msgid "Flow Dynamics" msgstr "" -msgid "Tool Volume" +msgid "Flow Rate" msgstr "" -msgid "Subtract from" +msgid "Max Volumetric Speed" msgstr "" -msgid "Subtract with" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "selected" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Part 1" +msgid "The name cannot be empty." msgstr "" -msgid "Part 2" +#, boost-format +msgid "The selected preset: %1% is not found." msgstr "" -msgid "Delete input" +msgid "The name cannot be the same as the system preset name." msgstr "" -msgid "Send to print" +msgid "The name is the same as another existing preset name" msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "create new preset failed." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Sikertelen" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "Feltöltés" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Plate Type" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9898,7 +9995,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9953,47 +10050,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" +msgstr "Kész" + +msgid "Send to print" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Upload to Printer Host with the following filename:" msgstr "" -msgid "Open CA certificate file" +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Feltöltés" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -10112,17 +10282,27 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"Tárgy kivonása\n" +"Tudtad, hogy a negatív módosító segítségével kivonhatsz egy tárgyat a " +"másikból? Így például könnyen átméretezhető furatokat hozhatsz létre " +"közvetlenül a Bambu Studióban. További információ a dokumentációban " +"található." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEP\n" +"Tudtad, hogy javíthatod a nyomtatási minőséget azáltal, hogy STL helyett " +"STEP fájlt használsz?\n" +"A Bambu Studio képes a STEP fájlokat közvetlenül szeletelni, ami simább " +"eredményt biztosít, mint egy alacsonyabb felbontású STL fájl. Próbáld ki!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10255,596 +10435,33 @@ msgstr "" "modell szilárdságát?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "Előfordulhat, hogy a konfigurációt a BambuStudio egy újabb verziójával " -#~ "generálták." +#~ "Csak egy falat használ a sík felső felületeken, hogy több hely maradjon a " +#~ "felső kitöltési mintának" -#~ msgid "Internal Version" -#~ msgstr "Belső verzió" +#~ msgid "Nozzle HRC" +#~ msgstr "Fúvóka HRC értéke" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "A BambuStudio leáll, mert elfogy a memória. Lehet, hogy ez egy hiba. " -#~ "Örülnénk, ha jelentenéd a problémát a csapatunknak." +#~ "A fúvóka keménysége. A 0 azt jelenti, hogy szeletelés során nem ellenőrzi " +#~ "a fúvóka HRC értékét." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "A BambuStudio lokalizációs hiba miatt leáll. Nagyra értékelnénk, ha " -#~ "jelentenéd a konkrét esetet, amikor ez a probléma előfordult." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "A BambuStudio kezeletlen kivételbe ütközött: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "A BambuStudio konfigurációs fájl valószínűleg megsérült, ezért nem " -#~ "használható. Kérjük, töröld a fájlt, és próbáld meg újra." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "A Bambu Studiot frissíteni kell" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Válassz ki egy fájlt (gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "A Bambu Studio ezen verziója túl régi és a legfrissebb verzióra kell " -#~ "frissíteni, mielőtt rendesen használható lenne" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Nem sikerült a Bambu Studio GUI inicializálása" - -#~ msgid "Check cloud service status" -#~ msgstr "Check cloud service status" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Failed to connect to cloud service" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Please click on the hyperlink above to view the cloud service status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connection to printer failed" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Please check the network connection of the printer and Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Push new filament into the extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Grab new filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormal print file data: please slice again." - -#~ msgid "Task canceled." -#~ msgstr "Task canceled." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Upload task timed out. Please check the network status and try again." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Print file not found; please slice again." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Failed to upload file to ftp. Please try again." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Check the current status of the Bambu Lab server by clicking on the link " -#~ "above." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Print file not found; please slice it again and send it for printing." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Failed to upload print file via FTP. Please check the network status and " -#~ "try again." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "A Bambu Studio a következő licencet használja " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "A Bambu Studio a Prusa Research által készített PrusaSliceren alapul, " -#~ "amely az Alessandro Ranellucci és a RepRap közösség által készített " -#~ "Slic3r-ből származik" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "A Bambu Studio a PrusaResearch által készített PrusaSlicer és Merill " -#~ "(supermerill) által készített SuperSlicer alapján készült." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "A Bambu Studio az Ultimaker Cura néhány ötletére is támaszkodott." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "A szoftver számos része származik közösségi közreműködésből, így nem " -#~ "tudjuk őket egyenként felsorolni, ezért a megfelelő helyeken a kód " -#~ "kommentekben vannak feltüntetve." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Túl nagy rétegmagasság.\n" -#~ "Visszaállítva 0,2-re" - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicting objects further (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Report issue" - -#~ msgid "Show &Overhang" -#~ msgstr "Show &Overhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Show object overhang highlight in 3D scene" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initialization failed (Device connection not ready)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Már fut egy másik virtuális kamera.\n" -#~ "A Bambu Studio csak egy virtuális kamerát támogat.\n" -#~ "Leállítod ezt a virtuális kamerát?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Switch to 3mf model files." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Load failed [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Do you want to delete the file '%s' from printer?" - -#~ msgid "Delete file" -#~ msgstr "Delete file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Fetching model information..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Failed to fetch model infomation from printer." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Failed to parse model infomation" - -#~ msgid "Immediately score" -#~ msgstr "Immediately score" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Please give a score for your favorite Bambu Market model." - -#~ msgid "Score" -#~ msgstr "Score" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "A 3mf a Bambu Studio egy régebbi verziójával lett létrehozva, csak a " -#~ "geometriai adatok kerülnek betöltésre." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "A „Modelljavítás” funkció jelenleg csak Windows rendszeren érhető el. " -#~ "Javítsd meg a modellt a Bambu Studióban (Windows) vagy más CAD " -#~ "szoftverben." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Fájlok társítása a BambuStudiohoz" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr ".3mf fájlok társítása a BambuStudiohoz" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " -#~ "alkalmazásként a .3mf fájlok megnyitásához" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr ".stl fájlok társítása a BambuStudiohoz" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " -#~ "alkalmazásként az .stl fájlok megnyitásához" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr ".step/.stp fájlok társítása a BambuStudiohoz" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " -#~ "alkalmazásként a .step fájlok megnyitásához" - -#~ msgid "Online Models" -#~ msgstr "Online Models" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Show online staff-picked models on the home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Skip AMS blacklist check" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Enable SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Enable SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internal developer mode" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Same as Global Plate Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Nem lehet csatlakozni a nyomtatóhoz" - -#~ msgid "Error code" -#~ msgstr "Error code" - -#~ msgid "Check the status of current system services" -#~ msgstr "Check the status of current system services" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Printer local connection failed; please try again." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "The name length exceeds the limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "" -#~ "A nyomtatónak ugyanazon a hálózaton kell lennie, mint a Bambu Studiónak." - -#~ msgid "Failed to create socket" -#~ msgstr "Failed to create socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Failed to connect socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Failed to publish login request" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout getting ticket from device" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout getting ticket from server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Failed to post ticket to server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Failed to parse login report reason" - -#~ msgid "Receive login report timeout" -#~ msgstr "Receive login report timeout" - -#~ msgid "Check the reason" -#~ msgstr "Check the reason" - -#~ msgid "Read and accept" -#~ msgstr "Read and accept" - -#~ msgid "Terms and Conditions" -#~ msgstr "Terms and Conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "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 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." - -#~ msgid "and" -#~ msgstr "and" - -#~ msgid "Privacy Policy" -#~ msgstr "Privacy Policy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "We ask for your help to improve everyone's printer" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Statement about User Experience Improvement Program" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "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 same principle and uses machine learning to improve its performance " -#~ "from the 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." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Statement on User Experience Improvement Plan" - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-processing scripts" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Kattints az OK gombra a hálózati bővítmény frissítéséhez a Bambu Studio " -#~ "következő indításakor." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "A Bambu Studio új verziója" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "1. lépés: Ellenőrizd, hogy a Bambu Studio és a nyomtató ugyanazon a helyi " -#~ "hálózaton van." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "%1% mappa másolása sikertelen a következő helyre: %2% Hiba: %3%" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "The following object(s) have an empty initial layer and can't be printed. " -#~ "Please cut the bottom or enable supports." - -#~ msgid "Bridge direction" -#~ msgstr "Áthidalás iránya" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Use only one wall on the first layer of models" - -#~ msgid "Line width of outer wall" -#~ msgstr "A külső fal vonalszélessége" - -#~ msgid "Max Radius" -#~ msgstr "Max. sugár" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Az extruder körüli szabadon hagyott terület sugara. Objektumonként " -#~ "történő nyomtatás során az ütközések elkerülésére szolgál." - -#~ msgid "Object flow ratio" -#~ msgstr "Object flow ratio" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "The flow ratio set by object; the meaning is the same as flow ratio." - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "" -#~ "Alapértelmezett vonalszélesség, ha valamilyen vonalszélesség nullára van " -#~ "állítva" - -#~ msgid "Line width of initial layer" -#~ msgstr "Az első réteg vonalszélessége" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximum length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (not anchored)" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "A belső ritkás kitöltés vonalszélessége" - -#~ msgid "Line width of inner wall" -#~ msgstr "A belső falak vonalszélessége" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "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 via the absolute path to the G-code " -#~ "file as the first argument, and variables of settings can also be read" - -#~ msgid "Z Hop Type" -#~ msgstr "Z-emelés típusa" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "A belső tömör kitöltés vonalszélessége" - -#~ msgid "Line width of support" -#~ msgstr "A támasz vonalszélessége" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "The brim width around tree support. 0 means auto." - -#~ msgid "Line width for top surfaces" -#~ msgstr "Felső felületek vonalszélessége" - -#~ msgid "Finish" -#~ msgstr "Kész" - -#~ msgid "Failed" -#~ msgstr "Sikertelen" - -#~ msgid "Plate Type" -#~ msgstr "Plate Type" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Tárgy kivonása\n" -#~ "Tudtad, hogy a negatív módosító segítségével kivonhatsz egy tárgyat a " -#~ "másikból? Így például könnyen átméretezhető furatokat hozhatsz létre " -#~ "közvetlenül a Bambu Studióban. További információ a dokumentációban " -#~ "található." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "Tudtad, hogy javíthatod a nyomtatási minőséget azáltal, hogy STL helyett " -#~ "STEP fájlt használsz?\n" -#~ "A Bambu Studio képes a STEP fájlokat közvetlenül szeletelni, ami simább " -#~ "eredményt biztosít, mint egy alacsonyabb felbontású STL fájl. Próbáld ki!" +#~ "Felismeri a túlnyúlás százalékos arányát a vonalszélességhez viszonyítva, " +#~ "és más sebességet használ. A 100%%-os túlnyúlás esetén az áthidaláshoz " +#~ "beállított sebességet használja." #~ msgid "Pause Print" #~ msgstr "Pause Print" @@ -10855,12 +10472,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Delete Pause Print" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Dinamikus anyagáramlás kali." + #~ msgid "\\u2103" #~ msgstr "\\u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Anyagáramlás kalibráció" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -10883,6 +10506,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "3D modellek" + #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS anyagok beállítása" @@ -10902,9 +10528,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Tényleges térfogat = öblítési térfogat * szorzó" +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptív rétegmagasság" + #~ msgid "Add Custom Printer" #~ msgstr "Egyedi nyomtató hozzáadása" +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -10932,6 +10564,9 @@ msgstr "" #~ "Ez a túlnyúló felületek minőségének romlását okozhatja gyors " #~ "nyomtatáskor.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Összeállítja a kijelölt tárgyakat egyetlen tárggyá" + #~ msgid "Auto arrange" #~ msgstr "Automatikus elrendezés" @@ -10979,6 +10614,12 @@ msgstr "" #~ "Az asztalhőmérséklet magasabb, mint a filament üvegesedési hőmérséklete.\n" #~ "Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Alsó minimális héjvastagság" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Alsó tömör rétegek" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11025,6 +10666,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Felhasználás" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Confirm whether the filament has been extruded" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate" + +#~ msgid "Cool plate" +#~ msgstr "Cool plate" + #~ msgid "Creating" #~ msgstr "Létrehozás" @@ -11060,6 +10710,23 @@ msgstr "" #~ "Igen - Engedélyezd az Arachnét és kapcsold ki a lassítást\n" #~ "Nem - Ne használd az Arachnét ennél a nyomtatásnál" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van " +#~ "tiltva. Kérjük, csatlakoztasd újra a nyomtatót a fiókodba történő " +#~ "bejelentkezéssel." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van " +#~ "tiltva. Kérjük, csatlakoztasd újra a nyomtatót a hozzáférési kód " +#~ "megadásával, amelyet a nyomtató kijelzőjén találsz." + #~ msgid "Display printable box" #~ msgstr "Nyomtatható doboz megjelenítése" @@ -11115,6 +10782,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Bambu Network bővítmény letöltése" +#~ msgid "Dump video" +#~ msgstr "Dump video" + #~ msgid "Edit plate setitngs" #~ msgstr "Edit plate settings" @@ -11131,6 +10801,9 @@ msgstr "" #~ "Felhívjuk a figyelmed, hogy ez az opció csak akkor működik, ha az " #~ "aktuális tálcán nincs törlő torony generálva." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + #~ msgid "Enter a search term" #~ msgstr "Add meg a keresési kifejezést" @@ -11178,14 +10851,29 @@ msgstr "" #~ "Nem sikerült csatlakozni a nyomtatóhoz LAN-on keresztül. Kérjük, add meg " #~ "a nyomtató helyes IP-címét és hozzáférési kódját." +#~ msgid "Failed to get ticket" +#~ msgstr "Nem sikerült jegyet szerezni" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Failed to parse login report reason" +#~ msgid "Failed uploading print file" +#~ msgstr "Sikertelen nyomtatási fájl feltöltés" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "" #~ "Nem sikerült feltölteni a nyomtatási fájlt. Kérjük, add meg újra az IP-" #~ "címet." +#~ msgid "Failure of bind" +#~ msgstr "Sikertelen párosítás" + +#~ msgid "Failure of printer login" +#~ msgstr "Sikertelen bejelentkezés a nyomtatóra" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Feed new filament from external spool" + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -11249,6 +10937,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Filamentek kiválasztása" +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + #~ msgid "Fix model locally" #~ msgstr "Modell javítása helyben" @@ -11339,6 +11030,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Az inicializálás sikertelen [%d]!" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "Az inicializálás sikertelen (a nyomtató nem támogatja)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Sikertelen inicializálás (nem támogatott LAN-módban)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "Sikertelen inicializálás (nem támogatott távoli videóelérés nélkül)!" @@ -11375,6 +11072,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Rétegidő (log): " +#~ msgid "Layer Time (log)" +#~ msgstr "Rétegidő (log)" + #~ msgid "Layers: %d/%d" #~ msgstr "Réteg:​•%d​/%d" @@ -11384,6 +11084,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Réteg: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Rétegek és peremek" + #~ msgid "Leaving Seam painting" #~ msgstr "Kilépés varratfestő módból" @@ -11396,6 +11099,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Kezelés" +#~ msgid "Manual" +#~ msgstr "Manuális" + #~ msgid "Max travel detour distance" #~ msgstr "Max. kerülőút távolság" @@ -11406,6 +11112,12 @@ msgstr "" #~ "Maximális kerülőút távolság a falakon való áthaladás elkerülésére. Ha a " #~ "távolság nagyobb ennél az értéknél, akkor nem lesz kitérő." +#~ msgid "Media" +#~ msgstr "Média" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Hiányzik a nyomtató LAN IP-címe!" + #~ msgid "Modify" #~ msgstr "Módosítás" @@ -11421,13 +11133,29 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "NINCS AMS" +#~ msgid "No files" +#~ msgstr "Nincs fájl" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Nem érhető el LAN módban!" + #~ msgid "Not supported." #~ msgstr "Nem támogatott." +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Ez a nyomtatómodell nem támogatja!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "Megjegyzés: Az IP-t és a hozzáférési kódot itt találod:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Az egyik objektum üres kezdőréteggel rendelkezik, ezért nem nyomtatható. " +#~ "Kérjük, vágd le az alját, vagy engedélyezd a támaszokat." + #~ msgid "Open &PrusaSlicer" #~ msgstr "PrusaSlicer megnyitása" @@ -11496,6 +11224,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Kérjük, először töltsd ki a riportot." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Kérjük, jelentkezz ki, majd jelentkezz be újra a nyomtatóba." + #~ msgid "Please upgrade your printer first" #~ msgstr "Kérjük, először frissítsd a nyomtatót" @@ -11532,6 +11263,9 @@ msgstr "" #~ "Egy tornyot nyomtat a fúvókában lévő anyag kiöblítéséhez új anyagra " #~ "váltás után." +#~ msgid "Print file not found, please slice again" +#~ msgstr "A nyomtatási fájl nem található, kérjük, szeleteld újra" + #~ msgid "Printer Selection" #~ msgstr "Nyomtató kiválasztása" @@ -11539,6 +11273,9 @@ msgstr "" #~ msgstr "" #~ "A nyomtató firmware-je nem támogatja az anyagot = > AMS férőhelykiosztás" +#~ msgid "Printing List" +#~ msgstr "Nyomtatási lista" + #~ 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 " @@ -11603,9 +11340,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Válaszd ki a tálca típusát" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Nem sikerült elküldeni a nyomtatóra. Kérjük, próbáld újra." + #~ msgid "Sending" #~ msgstr "Küldés" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "G-kód fájl küldése felhőszolgáltatáson keresztül" + +#~ msgid "Set Printable" +#~ msgstr "Beállítás nyomtathatónak" + +#~ msgid "Set Unprintable" +#~ msgstr "Beállítás nyomtathatatlannak" + #~ msgid "Set pen size" #~ msgstr "Tollméret beállítása" @@ -11777,6 +11526,13 @@ msgstr "" #~ "Megkíséreltük a javítást, azonban javasoljuk az eredmények ellenőrzését " #~ "vagy a bemeneti fájl javítását és az újbóli próbálkozást." +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "A nyomtatási fájl mérete meghaladja a megengedett maximális méretet (1 " +#~ "GB). Kérjük, egyszerűsítsd a modellt és szeleteld újra" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11795,6 +11551,9 @@ msgstr "" #~ "kiválasztott fizikai nyomtatóval. Javasoljuk, hogy szeleteld újra a " #~ "megfelelő nyomtatótípust kiválasztva.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "A régió paramétere helytelen" + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11822,6 +11581,13 @@ msgstr "" #~ "nyomtatási idő csökkentése és némi filament megtakarításának érdekében. " #~ "Az objektum színei ennek eredményeképpen keveredni fognak." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Ez a beállítás határozza meg, hogy a fa támasz nagyobb üregeiben legyen-e " +#~ "kitöltés." + #~ 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, " @@ -11837,15 +11603,33 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Nyomtatófej nélküli timelapse" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Minimális fedőréteg vastagság" + +#~ msgid "Top Solid Layers" +#~ msgstr "Felső tömör rétegek" + #~ msgid "Translation" #~ msgstr "Fordítás" +#~ msgid "Tree support with infill" +#~ msgstr "Fa támasz kitöltéssel" + #~ msgid "Unable to connect printer" #~ msgstr "Nem lehet csatlakozni a nyomtatóhoz" #~ msgid "Unable to create zip file" #~ msgstr "Nem sikerült létrehozni a zip fájlt" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "A feltöltési folyamat időtúllépés miatt megszakadt. Kérjük, ellenőrizd a " +#~ "hálózati beállításokat és próbáld újra" + +#~ msgid "User authorization timeout" +#~ msgstr "Felhasználó hitelesítési időtúllépés" + #~ msgid "User pause" #~ msgstr "Felhasználói szünet" @@ -11894,6 +11678,9 @@ msgstr "" #~ "következő beállításokat javasoljuk:\n" #~ "0 felső Z-távolság, 0 érintkező réteg térköz, koncentrikus mintázat." +#~ msgid "Wrong Access code" +#~ msgstr "Hibás hozzáférési kód" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -11944,6 +11731,9 @@ msgstr "" #~ " túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " #~ "ütközések.\n" +#~ msgid " plate %1%:" +#~ msgstr " %1% tálca:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr " bezáródik az új modell létrehozása előtt. Folytatod?" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index d3201c003..a8529692e 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -11,13 +11,13 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" msgid "Supports Painting" -msgstr "Support Painting" +msgstr "Pittura Supporti" msgid "Alt + Mouse wheel" msgstr "Alt + Rotella del mouse" msgid "Section view" -msgstr "Section view" +msgstr "Vista in sezione" msgid "Reset direction" msgstr "Ripristina direzione" @@ -26,7 +26,7 @@ msgid "Ctrl + Mouse wheel" msgstr "Ctrl + Rotella del mouse" msgid "Pen size" -msgstr "Pen size" +msgstr "Dimensione penna" msgid "Left mouse button" msgstr "Tasto sinistro mouse" @@ -44,13 +44,13 @@ msgid "Shift + Left mouse button" msgstr "Shift + Tasto sinistro mouse" msgid "Erase" -msgstr "Erase" +msgstr "Elimina" msgid "Erase all painting" -msgstr "Erase all painting" +msgstr "Cancellare tutta la pittura" msgid "Highlight overhang areas" -msgstr "Highlight overhangs" +msgstr "Evidenziare le sporgenze" msgid "Gap fill" msgstr "Riempimento gap" @@ -62,7 +62,7 @@ msgid "Gap area" msgstr "Area Gap" msgid "Tool type" -msgstr "Tipo di strumento" +msgstr "Tipo strumento" msgid "Smart fill angle" msgstr "Angolo riempimento intelligente" @@ -71,7 +71,7 @@ msgid "On overhangs only" msgstr "Solo su sporgenze" msgid "Auto support threshold angle: " -msgstr "Auto support threshold angle: " +msgstr "Angolo di soglia per supporto automatico: " msgid "Circle" msgstr "Cerchio" @@ -80,7 +80,7 @@ msgid "Sphere" msgstr "Sfera" msgid "Fill" -msgstr "Fill" +msgstr "Riempi" msgid "Gap Fill" msgstr "Riempimento gap" @@ -90,42 +90,43 @@ msgid "Allows painting only on facets selected by: \"%1%\"" msgstr "Consente di pitturare solo sulle sfaccettature selezionate da: \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Highlight faces according to overhang angle." +msgstr "Evidenziare le facce in base all'angolo di sporgenza." msgid "No auto support" -msgstr "No auto support" +msgstr "Nessun supporto automatico" msgid "Support Generated" -msgstr "Support generated" +msgstr "Supporto generato" msgid "Lay on face" -msgstr "Lay on Face" +msgstr "Posiziona su faccia" #, 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 "" -"Filament count exceeds the maximum number that painting tool supports. Only " -"the first %1% filaments will be available in painting tool." +"Il numero di filamenti supera il numero massimo supportato dallo strumento " +"di pittura. Solo il primo %1% dei filamenti sarà disponibile nello strumento " +"di pittura." msgid "Color Painting" -msgstr "Color painting" +msgstr "Pittura a colori" msgid "Pen shape" -msgstr "Pen shape" +msgstr "Forma penna" msgid "Paint" -msgstr "Paint" +msgstr "Pittura" msgid "Key 1~9" -msgstr "Key 1~9" +msgstr "Tasto 1~9" msgid "Choose filament" -msgstr "Choose filament" +msgstr "Scegli filamento" msgid "Edge detection" -msgstr "Edge detection" +msgstr "Rilevamento dei bordi" msgid "Triangles" msgstr "Triangoli" @@ -143,7 +144,7 @@ msgid "Bucket fill" msgstr "Riempimento Secchio" msgid "Height range" -msgstr "Height range" +msgstr "Intervallo altezza" msgid "Ctrl + Shift + Enter" msgstr "Ctrl + Shift + Invio" @@ -152,20 +153,20 @@ msgid "Toggle Wireframe" msgstr "Attiva Wireframe" msgid "Shortcut Key " -msgstr "Shortcut Key " +msgstr "Tasto scelta rapida " msgid "Triangle" -msgstr "Triangle" +msgstr "Triangolo." msgid "Height Range" -msgstr "Height Range" +msgstr "Interv. altezza" msgid "Remove painted color" msgstr "Rimuovi colore dipinto" #, boost-format msgid "Painted using: Filament %1%" -msgstr "Painted using: Filament %1%" +msgstr "Pitturato utilizzando: Filamento %1%" msgid "Move" msgstr "Sposta" @@ -183,10 +184,10 @@ msgid "Scale" msgstr "Ridimensiona" msgid "Error: Please close all toolbar menus first" -msgstr "Error: Please close all toolbar menus first" +msgstr "Errore: chiudi prima tutti i menu della barra degli strumenti" msgid "Tool-Lay on Face" -msgstr "Tool-Lay on Face" +msgstr "Strumento-Faccia sul piatto" msgid "in" msgstr "in" @@ -201,19 +202,19 @@ msgid "Rotation" msgstr "Rotazione" msgid "Scale ratios" -msgstr "Scale ratios" +msgstr "Rapporti di scala" msgid "Object Operations" -msgstr "Object operations" +msgstr "Operazioni sugli oggetti" msgid "Volume Operations" -msgstr "Volume operations" +msgstr "Operazioni volume" msgid "Translate" msgstr "Traduci" msgid "Group Operations" -msgstr "Group operations" +msgstr "Operazioni Gruppo" msgid "Set Position" msgstr "Imposta posizione" @@ -225,25 +226,25 @@ msgid "Set Scale" msgstr "Imposta scala" msgid "Reset Position" -msgstr "Reset position" +msgstr "Ripristina posizione" msgid "Reset Rotation" msgstr "Reimposta rotazione" msgid "World coordinates" -msgstr "Coordinate reali" +msgstr "Coordinate globali" msgid "°" msgstr "°" msgid "Size" -msgstr "Dimensioni" +msgstr "Dimensione" msgid "%" msgstr "%" msgid "uniform scale" -msgstr "Uniform scale" +msgstr "Scala uniforme" msgid "Left click" msgstr "Click sinistro" @@ -279,7 +280,7 @@ msgid "Connector" msgstr "Connettore" msgid "Movement:" -msgstr "Movement:" +msgstr "Movimento:" msgid "Movement" msgstr "Movimento" @@ -312,10 +313,10 @@ msgid "After cut" msgstr "Dopo il taglio" msgid "Cut to parts" -msgstr "Cut to parts" +msgstr "Taglia le parti" msgid "Auto Segment" -msgstr "Auto Segment" +msgstr "Segmento automatico" msgid "Perform cut" msgstr "Effettua taglio" @@ -327,7 +328,7 @@ msgid "Connectors" msgstr "Connettori" msgid "Type" -msgstr "Type" +msgstr "Tipo" msgid "Style" msgstr "Stile" @@ -403,15 +404,15 @@ msgid "Detail level" msgstr "Livello di dettaglio" msgid "Decimate ratio" -msgstr "Rapporto di decimazione" +msgstr "Rapporto di riduzione" #, boost-format msgid "" "Processing model '%1%' with more than 1M triangles could be slow. It is " "highly recommended to simplify the model." msgstr "" -"Processing model '%1%' with more than 1M triangles could be slow. It is " -"highly recommended to simplify the model." +"Lo slicing del modello \"%1%\" con più di 1 milione di triangoli potrebbe " +"essere lento. Si consiglia di semplificare il modello." msgid "Simplify model" msgstr "Semplifica modello" @@ -421,8 +422,8 @@ msgstr "Semplifica" msgid "Simplification is currently only allowed when a single part is selected" msgstr "" -"La semplificazione è attualmente consentita solo quando è selezionata una " -"singola parte" +"La semplificazione è consentita solo quando viene selezionata una singola " +"parte" msgid "Error" msgstr "Errore" @@ -454,16 +455,16 @@ msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Non si può applicare durante la creazione dell'anteprima." +msgstr "Non applicabile durante l'elaborazione dell'anteprima." msgid "Operation already cancelling. Please wait few seconds." msgstr "Operazione già annullata. Si prega di attendere qualche secondo." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Riconoscimento facciale" msgid "Perform Recognition" -msgstr "Perform Recognition" +msgstr "Esegui riconoscimento" msgid "Brush size" msgstr "Misura del pennello" @@ -532,59 +533,78 @@ msgstr "Indefinito" #, boost-format msgid "%1% was replaced with %2%" -msgstr "%1% was replaced with %2%" +msgstr "%1% è stato sostituito con %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" +"La configurazione potrebbe essere generata da una versione più recente di " +"Bambu Studio." msgid "Some values have been replaced. Please check them:" -msgstr "Some values have been replaced. Please check them:" +msgstr "Alcuni valori sono stati sostituiti. Per favore controllali:" msgid "Process" -msgstr "Process" +msgstr "Processo" msgid "Filament" msgstr "Filamento" msgid "Machine" -msgstr "Machine" +msgstr "Macchina" msgid "Configuration package was loaded, but some values were not recognized." msgstr "" -"The configuration package was loaded, but some values were not recognized." +"Il pacchetto di configurazione è stato caricato, ma alcuni valori non sono " +"stati riconosciuti." #, boost-format msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "" -"The configuration file “%1%” was loaded, but some values were not recognized." +"Il file di configurazione \"%1%\" è stato caricato, ma alcuni valori non " +"sono stati riconosciuti." msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Versione interna" + +msgid "Version" +msgstr "Versione" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"Bambu Studio ha esaurito la memoria e verrà chiuso. Questo potrebbe essere " +"un bug. Segnala questo errore al supporto tecnico." msgid "Fatal error" msgstr "Errore irreversibile" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" +"Si è verificato un errore nella localizzazione e Bambu Studio verrà chiuso. " msgid "Critical error" msgstr "Errore critico" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio ha ricevuto un'eccezione non gestita: %1%" + +msgid "Untitled" +msgstr "Senza titolo" msgid "Downloading Bambu Network Plug-in" msgstr "Scaricando il plug-in Bambu Network" +msgid "Login information expired. Please login again." +msgstr "Le informazioni di login sono scadute. Effettua nuovamente il login." + msgid "Incorrect password" msgstr "Password errata" @@ -593,9 +613,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "Connessione %s non riuscita! [SN: %s, codice=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"Il file di configurazione di Bambu Studio non può essere analizzato e " +"potrebbe essere danneggiato. Elimina il file e riprova." #, c-format, boost-format msgid "" @@ -613,44 +635,44 @@ msgstr "Caricamento configurazione" #, c-format, boost-format msgid "Click to download new version in default browser: %s" -msgstr "Click to download new version in default browser: %s" +msgstr "Fai clic per scaricare la nuova versione nel browser predefinito: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer needs an update" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio necessita di aggiornamento" msgid "This is the newest version." -msgstr "This is the newest version." +msgstr "Hai la versione più recente." msgid "Info" msgstr "Info" msgid "Rebuild" -msgstr "Rebuild" +msgstr "Ricrea" msgid "Loading current presets" -msgstr "Loading current presets" +msgstr "Caricamento dei preset correnti" msgid "Loading a mode view" -msgstr "Loading a mode view" +msgstr "Caricamento di una modalità di visualizzazione" msgid "Choose one file (3mf):" -msgstr "Choose one file (3mf):" +msgstr "Scegli file (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Scegli uno o più file (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Scegli file (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." -msgstr "Some presets are modified." +msgstr "Alcuni preset vengono modificati." msgid "" "You can keep the modifield presets to the new project, discard or save " "changes as new presets." msgstr "" -"You can keep the modified presets for the new project, discard, or save " -"changes as new presets." +"È possibile conservare i preset modificati per il nuovo progetto, eliminarli " +"o salvare le modifiche come nuovi preset." msgid "User logged out" msgstr "Utente disconnesso" @@ -659,17 +681,14 @@ msgid "new or open project file is not allowed during the slicing process!" msgstr "non è consentito aprire un nuovo file progetto durante lo slicing!" msgid "Open Project" -msgstr "Open Project" +msgstr "Apri Progetto" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"The version of Orca Slicer is too low and needs to be updated to the latest " -"version before it can be used normally" - -msgid "Login information expired. Please login again." -msgstr "Login information expired. Please login again." +"La versione Bambu Studio è obsoleta, devi aggiornarla all'ultima versione " +"prima di poterla utilizzare normalmente" msgid "Privacy Policy Update" msgstr "Aggiornamento dell'informativa sulla privacy" @@ -678,10 +697,10 @@ msgid "Loading" msgstr "Caricamento" msgid "Loading user preset" -msgstr "Loading user preset" +msgstr "Caricamento del preset utente" msgid "Switching application language" -msgstr "Switching application language" +msgstr "Cambio lingua applicazione" msgid "Select the language" msgstr "Seleziona la lingua" @@ -702,7 +721,7 @@ msgid "Ongoing uploads" msgstr "Caricamenti in corso" msgid "Select a G-code file:" -msgstr "Select a G-code file:" +msgstr "Seleziona file G-code:" msgid "Import File" msgstr "Importa File…" @@ -711,62 +730,50 @@ msgid "Delete" msgstr "Elimina" msgid "Choose files" -msgstr "Choose files" +msgstr "Scegli file" msgid "New Folder" msgstr "Nuova cartella" msgid "Open" -msgstr "Open" +msgstr "Apri" msgid "Rename" msgstr "Rinomina" -msgid "Orca Slicer GUI initialization failed" -msgstr "Orca Slicer GUI initialization failed" +msgid "Bambu Studio GUI initialization failed" +msgstr "Inizializzazione della GUI di Bambu Studio non riuscita" #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Fatal error, eccezione registrata: %1%" +msgstr "Errore irreversibile, eccezione: %1%" msgid "Quality" msgstr "Qualità" msgid "Shell" -msgstr "Shell" +msgstr "Guscio" msgid "Infill" msgstr "Riempimento" msgid "Support" -msgstr "Support" +msgstr "Supporto" msgid "Flush options" -msgstr "Flush options" +msgstr "Opzioni spurgo" msgid "Speed" msgstr "Velocità" msgid "Strength" -msgstr "Strength" - -msgid "Top Solid Layers" -msgstr "Top solid layers" - -msgid "Top Minimum Shell Thickness" -msgstr "Top minimum shell thickness" - -msgid "Bottom Solid Layers" -msgstr "Bottom solid layers" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Bottom minimum shell thickness" +msgstr "Resistenza" msgid "Ironing" msgstr "Stiratura" msgid "Fuzzy Skin" -msgstr "Superficie Crespa" +msgstr "Fuzzy skin" msgid "Extruders" msgstr "Estrusori" @@ -778,7 +785,7 @@ msgid "Wipe options" msgstr "Opzioni pulitura" msgid "Bed adhension" -msgstr "Bed adhesion" +msgstr "Adesione al piano" msgid "Advanced" msgstr "Avanzate" @@ -787,7 +794,7 @@ msgid "Add part" msgstr "Aggiungi parte" msgid "Add negative part" -msgstr "Add Negative Part" +msgstr "Aggiungi parte negativa" msgid "Add modifier" msgstr "Aggiungi modificatore" @@ -799,7 +806,7 @@ msgid "Add support enforcer" msgstr "Aggiungi rinforzo supporto" msgid "Select settings" -msgstr "Select settings" +msgstr "Seleziona impostazioni" msgid "Hide" msgstr "Nascondi" @@ -811,7 +818,7 @@ msgid "Del" msgstr "Del" msgid "Delete the selected object" -msgstr "Delete the selected object" +msgstr "Elimina l'oggetto selezionato" msgid "Edit Text" msgstr "Modifica testo" @@ -819,26 +826,26 @@ msgstr "Modifica testo" msgid "Load..." msgstr "Caricamento..." -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" -msgstr "Cube" +msgstr "Cubo" msgid "Cylinder" msgstr "Cilindro" msgid "Cone" -msgstr "Cone" +msgstr "Cono" + +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" msgid "Height range Modifier" msgstr "Modifica intervallo di altezza" @@ -850,22 +857,16 @@ msgid "Change type" msgstr "Cambia tipo" msgid "Set as an individual object" -msgstr "Set as An Individual Object" +msgstr "Imposta come singolo oggetto" msgid "Set as individual objects" -msgstr "Set as Individual Objects" - -msgid "Fill bed with copies" -msgstr "Riempi il piano di copie" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Riempi l'area rimanente del piano con copie dell'oggetto selezionato" +msgstr "Imposta come singoli oggetti" msgid "Printable" msgstr "Stampabile" msgid "Fix model" -msgstr "Fix Model" +msgstr "Correggi il modello" msgid "Export as STL" msgstr "Esporta come STL" @@ -883,95 +884,98 @@ msgid "Replace the selected part with new STL" msgstr "Sostituisci la parte selezionata con un nuovo STL" msgid "Change filament" -msgstr "Change filament" +msgstr "Cambia filamento" msgid "Set filament for selected items" -msgstr "Set filament for selected items" +msgstr "Imposta filamento per gli elementi selezionati" msgid "Default" msgstr "Predefinito" #, c-format, boost-format msgid "Filament %d" -msgstr "Filament %d" +msgstr "Filamento %d" msgid "active" msgstr "attivo" msgid "Scale to build volume" -msgstr "Scale to build volume" +msgstr "Scala per creare volume" msgid "Scale an object to fit the build volume" -msgstr "Scale an object to fit the build volume" +msgstr "Ridimensiona un oggetto per adattarlo al volume di costruzione" msgid "Flush Options" msgstr "Opzioni spurgo" msgid "Flush into objects' infill" -msgstr "Flush into objects' infill" +msgstr "Spurga nel riempimento oggetto" msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Spurga in questo oggetto" msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Spurga nei supporti dell'oggetto" msgid "Edit in Parameter Table" msgstr "Modifica nella tabella dei parametri" msgid "Convert from inch" -msgstr "Convert from Inches" +msgstr "Converti da pollici" msgid "Restore to inch" -msgstr "Restore to Inch" +msgstr "Ripristina in pollici" msgid "Convert from meter" -msgstr "Convert from Meters" +msgstr "Converti da metri" msgid "Restore to meter" -msgstr "Restore to Meter" +msgstr "Ripristina in metri" msgid "Assemble" -msgstr "Assemble" +msgstr "Assembla" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Assemble the selected objects into an object with multiple parts" +msgstr "Assembla gli oggetti selezionati in un oggetto con più parti" msgid "Assemble the selected objects to an object with single part" -msgstr "Assemble the selected objects into an object with single part" +msgstr "Assembla gli oggetti selezionati in un oggetto con una singola parte" -msgid "Assemble the selected parts to a single part" -msgstr "Assemble the selected parts into a single part" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" -msgstr "Lungo asse X" +msgstr "Lungo l'asse X" msgid "Mirror along the X axis" -msgstr "Mirror along the X Axis" +msgstr "Specchia lungo l'asse X" msgid "Along Y axis" -msgstr "Lungo asse Y" +msgstr "Lungo l'asse Y" msgid "Mirror along the Y axis" -msgstr "Mirror along the Y Axis" +msgstr "Specchia lungo l'asse Y" msgid "Along Z axis" msgstr "Lungo l'asse Z" msgid "Mirror along the Z axis" -msgstr "Mirror along the Z Axis" +msgstr "Specchia lungo l'asse Z" msgid "Mirror" msgstr "Specchia" msgid "Mirror object" -msgstr "Mirror object" +msgstr "Specchia Oggetto" msgid "Invalidate cut info" msgstr "Annulla informazioni di taglio" msgid "Add Primitive" -msgstr "Add Primitive" +msgstr "Aggiungi primitiva" msgid "Show Labels" msgstr "Mostra Etichette" @@ -980,13 +984,13 @@ msgid "To objects" msgstr "In oggetti" msgid "Split the selected object into multiple objects" -msgstr "Split the selected object into multiple objects" +msgstr "Dividi l'oggetto selezionato in più oggetti" msgid "To parts" msgstr "In parti" msgid "Split the selected object into multiple parts" -msgstr "Split the selected object into multiple parts" +msgstr "Dividi l'oggetto selezionato in più parti" msgid "Split" msgstr "Dividi" @@ -995,49 +999,49 @@ msgid "Split the selected object" msgstr "Dividi l'oggetto selezionato" msgid "Auto orientation" -msgstr "Auto orientation" +msgstr "Orientamento automatico" msgid "Auto orient the object to improve print quality." -msgstr "Auto orient the object to improve print quality." +msgstr "Orienta automaticamente l'oggetto per migliorare la qualità di stampa." msgid "Split the selected object into mutiple objects" -msgstr "Split the selected object into mutiple objects" +msgstr "Dividi l'oggetto selezionato in più oggetti" msgid "Split the selected object into mutiple parts" -msgstr "Split the selected object into mutiple parts" +msgstr "Dividi l'oggetto selezionato in più parti" msgid "Select All" -msgstr "Select All" +msgstr "Seleziona tutto" msgid "select all objects on current plate" -msgstr "Select all objects on the current plate" +msgstr "Seleziona tutti gli oggetti sul piatto corrente" msgid "Delete All" -msgstr "Delete All" +msgstr "Elimina tutto" msgid "delete all objects on current plate" -msgstr "Delete all objects on the current plate" +msgstr "Elimina tutti gli oggetti sul piatto corrente" msgid "Arrange" msgstr "Disponi" msgid "arrange current plate" -msgstr "Arrange current plate" +msgstr "Disponi sul piatto corrente" msgid "Auto Rotate" -msgstr "Auto Rotate" +msgstr "Rotazione automatica" msgid "auto rotate current plate" -msgstr "Auto rotate current plate" +msgstr "Rotazione automatica piatto corrente" msgid "Delete Plate" msgstr "Elimina piatto" msgid "Remove the selected plate" -msgstr "Remove the selected plate" +msgstr "Rimuovi il piatto selezionato" msgid "Clone" -msgstr "Clone" +msgstr "Clona" msgid "Simplify Model" msgstr "Semplifica Modello" @@ -1049,28 +1053,31 @@ msgid "Edit Process Settings" msgstr "Modifica le impostazioni del processo" msgid "Edit print parameters for a single object" -msgstr "Edit print parameters for a single object" +msgstr "Modifica i parametri di stampa per singolo oggetto" msgid "Change Filament" -msgstr "Change Filament" +msgstr "Cambia filamento" msgid "Set Filament for selected items" -msgstr "Set Filament for selected items" +msgstr "Imposta filamento per gli elementi selezionati" msgid "current" -msgstr "current" - -msgid "Set Unprintable" -msgstr "Imposta non stampabile" - -msgid "Set Printable" -msgstr "Imposta stampabile" +msgstr "Attuale" msgid "Unlock" -msgstr "Unlock" +msgstr "Sblocca" msgid "Lock" -msgstr "Lock" +msgstr "Blocca" + +msgid "Fill bed with copies" +msgstr "Riempi il piano di copie" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Riempi l'area rimanente del piano con copie dell'oggetto selezionato" + +msgid "Edit Plate Name" +msgstr "" msgid "Name" msgstr "Nome" @@ -1081,14 +1088,14 @@ msgstr "Fila." #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" -msgstr[0] "%1$d error repaired" -msgstr[1] "%1$d errors repaired" +msgstr[0] "%1$d Errore riparato" +msgstr[1] "%1$d Errori riparati" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "Error: %1$d non-manifold edge." -msgstr[1] "Error: %1$d non-manifold edges." +msgstr[0] "Errore: %1$d bordo non manifold." +msgstr[1] "Errore: %1$d bordi non-manifold." msgid "Remaining errors" msgstr "Errori rimanenti" @@ -1096,29 +1103,37 @@ msgstr "Errori rimanenti" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d non-manifold edge" -msgstr[1] "%1$d non-manifold edges" +msgstr[0] "%1$d bordo non-manifold" +msgstr[1] "%1$d bordi non-manifold" msgid "Right click the icon to fix model object" -msgstr "Right click the icon to fix model object" +msgstr "" +"Fai clic con il pulsante destro del mouse sull'icona per correggere " +"l'oggetto del modello" msgid "Right button click the icon to drop the object settings" -msgstr "Right click the icon to drop the object settings" +msgstr "" +"Fai clic con pulsante destro del mouse sull'icona per eliminare le " +"impostazioni dell'oggetto" msgid "Click the icon to reset all settings of the object" -msgstr "Click the icon to reset all settings of the object" +msgstr "Clicca sull'icona per ripristinare tutte le impostazioni dell'oggetto" msgid "Right button click the icon to drop the object printable property" -msgstr "Right click the icon to drop the object printable property" +msgstr "" +"Fai clic con pulsante destro del mouse sull'icona per eliminare le proprietà " +"stampa dell'oggetto" msgid "Click the icon to toggle printable property of the object" -msgstr "Click the icon to toggle printable properties of the object" +msgstr "" +"Clicca sull'icona per attivare o disattivare le proprietà stampabili " +"dell'oggetto" msgid "Click the icon to edit support painting of the object" -msgstr "Click the icon to edit support painting of the object" +msgstr "Clicca sull'icona per modificare la pittura del supporto dell'oggetto" msgid "Click the icon to edit color painting of the object" -msgstr "Click the icon to edit color painting for the object" +msgstr "Clicca sull'icona per modificare i colori dell'oggetto" msgid "Click the icon to shift this object to the bed" msgstr "Fare clic sull'icona per spostare l'oggetto sul piano" @@ -1129,14 +1144,19 @@ msgstr "Caricamento file" msgid "Error!" msgstr "Errore!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Generico" msgid "Add Modifier" -msgstr "Add Modifier" +msgstr "Aggiungi modificatore" msgid "Switch to per-object setting mode to edit modifier settings." -msgstr "Switch to per-object setting mode to edit modifier settings." +msgstr "" +"Passa alla modalità di impostazione oggetto per modificare le impostazioni " +"del modificatore." msgid "" "Switch to per-object setting mode to edit process settings of selected " @@ -1178,13 +1198,14 @@ msgid "Delete all connectors" msgstr "Elimina tutti i connettori" msgid "Deleting the last solid part is not allowed." -msgstr "Deleting the last solid part is not allowed." +msgstr "Non è consentita l'eliminazione dell'ultima parte solida." msgid "The target object contains only one part and can not be splited." -msgstr "The target object contains only one part and cannot be split." +msgstr "" +"L'oggetto di destinazione contiene solo una parte e non può essere diviso." msgid "Assembly" -msgstr "Assembly" +msgstr "Assemblaggio" msgid "Cut Connectors information" msgstr "Informazioni sui connettori di taglio" @@ -1217,7 +1238,7 @@ msgid "Settings for height range" msgstr "Impostazioni intervallo altezza" msgid "Object" -msgstr "Object" +msgstr "Oggetto" msgid "Part" msgstr "Parte" @@ -1226,26 +1247,27 @@ msgid "Layer" msgstr "Layer" msgid "Selection conflicts" -msgstr "Selection conflicts" +msgstr "Conflitti di selezione" msgid "" "If first selected item is an object, the second one should also be object." msgstr "" -"If the first selected item is an object, the second one should also be an " -"object." +"Se il primo elemento selezionato è un oggetto, anche il secondo deve essere " +"un oggetto." msgid "" "If first selected item is a part, the second one should be part in the same " "object." msgstr "" -"If the first selected item is a part, the second one should be a part in the " -"same object." +"Se il primo elemento selezionato è una parte, il secondo deve far parte " +"dello stesso oggetto." msgid "The type of the last solid object part is not to be changed." -msgstr "The type of the last solid object part cannot be changed." +msgstr "" +"Il tipo dell'ultima parte dell'oggetto solido non può essere modificato." msgid "Negative Part" -msgstr "Negative Part" +msgstr "Parte negativa" msgid "Modifier" msgstr "Modificatore" @@ -1260,7 +1282,7 @@ msgid "Type:" msgstr "Tipo:" msgid "Choose part type" -msgstr "Choose part type" +msgstr "Scegli tipo di parte" msgid "Enter new name" msgstr "Inserisci un nuovo nome" @@ -1269,23 +1291,23 @@ msgid "Renaming" msgstr "Rinomina" msgid "Repairing model object" -msgstr "Repairing model object" +msgstr "Riparazione oggetto" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" -msgstr[0] "The following model object has been repaired" -msgstr[1] "The following model objects have been repaired" +msgstr[0] "Il seguente oggetto del modello è stato riparato" +msgstr[1] "I seguenti oggetti del modello sono stati riparati" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" -msgstr[0] "Failed to repair the following model object" -msgstr[1] "Failed to repair the following model objects" +msgstr[0] "Impossibile riparare il seguente oggetto modello" +msgstr[1] "Impossibile riparare i seguenti oggetti modello" msgid "Repairing was canceled" msgstr "La riparazione è stata annullata" msgid "Additional process preset" -msgstr "Additional process preset" +msgstr "Preset processo aggiuntivo" msgid "Remove parameter" msgstr "Rimuovi parametro" @@ -1300,25 +1322,17 @@ msgid "Add height range" msgstr "Aggiungi intervallo di altezza" msgid "Invalid numeric." -msgstr "Invalid numeric." +msgstr "Numero non valido." msgid "one cell can only be copied to one or multiple cells in the same column" -msgstr "One cell can only be copied to one or more cells in the same column." +msgstr "" +"Una cella può essere copiata solo in una o più celle della stessa colonna." msgid "multiple cells copy is not supported" -msgstr "Copying multiple cells is not supported." +msgstr "Copia di celle multiple non supportata." msgid "Outside" -msgstr "Outside" - -msgid "Auto" -msgstr "Auto" - -msgid "Manual" -msgstr "Manual" - -msgid "No-brim" -msgstr "No-brim" +msgstr "Esterno" msgid " " msgstr "" @@ -1327,34 +1341,49 @@ msgid "Layer height" msgstr "Altezza layer" msgid "Wall loops" -msgstr "Wall loops" +msgstr "Loop pareti" msgid "Infill density(%)" -msgstr "Infill density(%)" +msgstr "Densità riempimento (%)" msgid "Auto Brim" -msgstr "Auto Brim" +msgstr "Brim automatico" + +msgid "Auto" +msgstr "Automatico" + +msgid "Outer brim only" +msgstr "Solo brim esterno" + +msgid "Inner brim only" +msgstr "Solo brim interno" + +msgid "Outer and inner brim" +msgstr "Brim interno e esterno" + +msgid "No-brim" +msgstr "No-brim" msgid "Outer wall speed" msgstr "Velocità parete esterna" msgid "Plate" -msgstr "Plate" +msgstr "Piatto" msgid "Brim" msgstr "Brim" msgid "Object/Part Setting" -msgstr "Object/part setting" +msgstr "Impostazione oggetto/parte" msgid "Reset parameter" -msgstr "Reset parameter" +msgstr "Ripristina parametro" msgid "Multicolor Print" -msgstr "Multicolor Print" +msgstr "Stampa multicolore" msgid "Line Type" -msgstr "Line Type" +msgstr "Tipo linea" msgid "More" msgstr "Altro" @@ -1384,7 +1413,7 @@ msgid "Enter Custom G-code used on current layer:" msgstr "Inserisci G-code personalizzato utilizzato nel layer corrente:" msgid "OK" -msgstr "OK" +msgstr "Ok" msgid "Jump to Layer" msgstr "Vai al layer" @@ -1436,22 +1465,49 @@ msgid "Delete Filament Change" msgstr "Elimina cambio filamento" msgid "No printer" -msgstr "No printer" +msgstr "Nessuna stampante" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "Connessione al server non riuscita" + +msgid "Check cloud service status" +msgstr "Verifica lo stato del servizio cloud" + +msgid "code" +msgstr "Codice" + +msgid "Failed to connect to cloud service" +msgstr "Connessione al servizio cloud non riuscita" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Fai clic sul link in alto per visualizzare lo stato del servizio cloud" + +msgid "Failed to connect to the printer" +msgstr "Impossibile connettersi alla stampante" + +msgid "Connection to printer failed" +msgstr "Connessione stampante fallita" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Controlla la connessione di rete della stampante e di Studio." + +msgid "Connecting..." +msgstr "Connessione in corso…" + msgid "?" -msgstr "?" +msgstr " ?" msgid "Empty" -msgstr "Empty" +msgstr "Vuoto" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "Backup filamento AMS" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS non collegato" @@ -1463,16 +1519,16 @@ msgid "Calibration of extrusion" msgstr "Calibrazione estrusione" msgid "Load Filament" -msgstr "Load" +msgstr "Carica" msgid "Unload Filament" -msgstr "Unload" +msgstr "Scarica" msgid "Ext Spool" msgstr "Bobina esterna" msgid "Tips" -msgstr "Tips" +msgstr "Suggerimenti" msgid "Guide" msgstr "Guida" @@ -1481,44 +1537,46 @@ msgid "Retry" msgstr "Riprova" msgid "Calibrating AMS..." -msgstr "Calibrating AMS..." +msgstr "Calibrazione AMS..." msgid "A problem occured during calibration. Click to view the solution." -msgstr "A problem occured during calibration. Click to view the solution." +msgstr "" +"Si è verificato un problema durante la calibrazione. Clicca per visualizzare " +"la soluzione." msgid "Calibrate again" -msgstr "Calibrate again" +msgstr "Calibra di nuovo" msgid "Cancel calibration" -msgstr "Cancel calibration" +msgstr "Annulla calibrazione" msgid "Heat the nozzle" msgstr "Riscaldo nozzle" msgid "Cut filament" -msgstr "Cut filament" +msgstr "Taglio il filamento" msgid "Pull back current filament" -msgstr "Pull back the current filament" +msgstr "Ritiro il filamento corrente" msgid "Push new filament into extruder" msgstr "Inserisco il nuovo filamento nell'estrusore" msgid "Purge old filament" -msgstr "Purge old filament" +msgstr "Spurgo filamento precedente" -msgid "Feed new filament from external spool" -msgstr "Alimenta il nuovo filamento dalla bobina esterna" +msgid "Push new filament into the extruder" +msgstr "Inserisco il nuovo filamento nell'estrusore" -msgid "Confirm whether the filament has been extruded" -msgstr "Conferma se il filamento è stato estruso" +msgid "Grab new filament" +msgstr "Prendo un nuovo filamento" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choose an AMS slot then press \"Load\" or \"Unload\" to automatically load " -"or unload filament." +"Seleziona uno slot AMS, premi \"Carica\" o \"Scarica\" per caricare o " +"scaricare automaticamente il filamento." msgid "Edit" msgstr "Modifica" @@ -1527,26 +1585,27 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"All the selected objects are on a locked plate.\n" -"Cannot auto-arrange these objects." +"Tutti gli oggetti selezionati si trovano su una piatto bloccato.\n" +"Non è possibile disporre automaticamente questi oggetti." msgid "No arrangable objects are selected." -msgstr "No arrangable objects are selected." +msgstr "Non sono stati selezionati oggetti ordinabili." msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." msgstr "" -"This plate is locked.\n" -"We cannot auto-arrange this plate." +"Il piatto è bloccato.\n" +"Non puoi organizzare automaticamente questo piatto." msgid "Arranging..." -msgstr "Arranging..." +msgstr "Disponendo..." msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Arrange failed. Found some exceptions when processing object geometries." +"Disposizione fallita. Riscontrate eccezioni durante l'elaborazione delle " +"geometrie degli oggetti" msgid "Arranging" msgstr "Disposizione" @@ -1557,8 +1616,8 @@ msgstr "Disposizione annullata." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"Arranging complete, but some items were not able to be arranged. Reduce " -"spacing and try again." +"Disposizione completata, ma non è stato possibile disporre alcuni oggetti. " +"Ridurre lo spazio e riprovare." msgid "Arranging done." msgstr "Disposizione completata." @@ -1570,25 +1629,25 @@ msgid "" "%s" msgstr "" "La disposizione ha ignorato i seguenti oggetti che non possono entrare in un " -"singolo piano:\n" +"singolo piatto:\n" "%s" msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" -"All the selected objects are on a locked plate,\n" -"We cannot auto-orient these objects." +"Tutti gli oggetti selezionati si trovano su un piatto bloccato,\n" +"Non è possibile orientare automaticamente questi oggetti." msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" -"This plate is locked.\n" -"We cannot auto-orient this plate." +"Il piatto è bloccato.\n" +"Non puoi orientare automaticamente questo piatto." msgid "Orienting..." -msgstr "Orienting..." +msgstr "Orientamento..." msgid "Orienting" msgstr "Orientamento" @@ -1603,71 +1662,76 @@ msgid "Bed filling done." msgstr "Riempimento del piano completato." msgid "Error! Unable to create thread!" -msgstr "Error. Unable to create thread." +msgstr "Errore. Impossibile creare il processo." msgid "Exception" -msgstr "Exception" +msgstr "Eccezione" msgid "Logging in" -msgstr "Logging in" +msgstr "Accesso in corso..." msgid "Login failed" -msgstr "Login failed" - -msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." - -msgid "Failure of printer login" -msgstr "Printer login failure" - -msgid "Failed to get ticket" -msgstr "Failed to get ticket" - -msgid "User authorization timeout" -msgstr "User authorization timeout" - -msgid "Failure of bind" -msgstr "Binding failure" - -msgid "Unknown Failure" -msgstr "Unknown Failure" +msgstr "Login non riuscito" msgid "Please check the printer network connection." msgstr "Controlla la connessione rete della stampante." -msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgid "Abnormal print file data. Please slice again." +msgstr "Dati anomali del file di stampa. Eseguire nuovamente l'elaborazione" -msgid "Task canceled" -msgstr "Task canceled" +msgid "Task canceled." +msgstr "Attività annullata." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network and try again" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Attività di Upload scaduto. Controlla lo stato della rete e riprova." msgid "Cloud service connection failed. Please try again." -msgstr "Cloud service connection failed. Please try again." +msgstr "Connessione al servizio cloud non riuscita. Riprovare." -msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgid "Print file not found. please slice again." +msgstr "File di stampa non trovato; si prega di eseguire nuovamente lo slice" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -"The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"Il file di stampa supera la dimensione massima consentita (1 GB). Semplifica " +"il modello ed elaboralo nuovamente" -msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgid "Failed to send the print job. Please try again." +msgstr "Impossibile inviare il lavoro di stampa. Riprova." -msgid "Wrong Access code" -msgstr "Wrong Access code" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Caricamento del file in ftp non riuscito. Riprova." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Controlla lo stato attuale del server Bambu Lab cliccando sul link qui sopra." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"La dimensione del file di stampa è troppo grande. Modifica la dimensione del " +"file e riprova." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "" +"File di stampa non trovato; elabora nuovamente il file e invia per la stampa." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Impossibile caricare il file di stampa tramite FTP. Controlla lo stato della " +"rete e riprova." msgid "Sending print job over LAN" -msgstr "Sending print job over LAN" +msgstr "Invia stampa tramite LAN" msgid "Sending print job through cloud service" -msgstr "Sending print job through cloud service" +msgstr "Invia stampa tramite servizio cloud" msgid "Service Unavailable" msgstr "Servizio non disponibile" @@ -1676,32 +1740,24 @@ msgid "Unkown Error." msgstr "Errore sconosciuto" msgid "Sending print configuration" -msgstr "Sending print configuration" +msgstr "Invia configurazione di stampa" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" "Inviato con successo. Salta automaticamente alla pagina del dispositivo in %s" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "" "È necessario inserire una scheda microSD prima di stampare tramite LAN." -msgid "Failed to send the print job. Please try again." -msgstr "Impossibile inviare il lavoro di stampa. Riprova." - -msgid "Send to Printer failed. Please try again." -msgstr "Invio a stampante fallito. Riprova." - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "Invio file G-code tramite LAN" -msgid "Sending gcode file through cloud service" -msgstr "Invia file G-code tramite servizio cloud" - msgid "Sending gcode file to sdcard" msgstr "Invia file G-code a scheda microSD" @@ -1713,9 +1769,6 @@ msgid "An SD card needs to be inserted before sending to printer." msgstr "" "È necessario inserire una scheda microSD prima di inviarla alla stampante." -msgid "Please log out and login to the printer again." -msgstr "Fai un logout e rieffettua il login alla stampante." - msgid "Choose SLA archive:" msgstr "Seleziona l'archivio SLA:" @@ -1775,7 +1828,7 @@ msgid "Attention!" msgstr "Attenzione!" msgid "Downloading" -msgstr "Downloading" +msgstr "Scaricando" msgid "Download failed" msgstr "Download non riuscito" @@ -1799,42 +1852,41 @@ msgid "Copyright" msgstr "Copyright" msgid "License" -msgstr "License" +msgstr "Licenza" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer is licensed under " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio è concesso in licenza sotto" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, versione 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu Studio è basato su PrusaSlicer di Prusa Research, che si basa su " +"Slic3r di Alessandro Ranellucci e sulla community RepRap" msgid "Libraries" -msgstr "Libraries" +msgstr "Librerie" msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"This software uses open source components whose copyright and other " -"proprietary rights belong to their respective owners" +"Questo software utilizza componenti open source il cui copyright e altri " +"diritti di proprietà appartengono ai rispettivi proprietari" #, c-format, boost-format msgid "About %s" msgstr "Informazioni su %s" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu Studio è basato su PrusaSlicer di PrusaResearch e SuperSlicer di " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "PrusaSlicer originariamente basato su Slic3r di Alessandro Ranellucci." @@ -1846,27 +1898,37 @@ msgstr "" "Slic3r è stato creato da Alessandro Ranellucci con l'aiuto di molti altri " "collaboratori." -msgid "Version" -msgstr "Versione" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio ha anche fatto riferimento ad alcune idee di Cura by Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"Esistono molte parti del software che provengono dai contributi della " +"community, quindi non siamo in grado di elencarle una per una e verranno " +"invece attribuite nei commenti ai codici corrispondenti." msgid "AMS Materials Setting" msgstr "Impostazione materiali AMS" msgid "Confirm" -msgstr "Confirm" +msgstr "Conferma" msgid "Close" msgstr "Chiudi" msgid "Colour" -msgstr "Color" +msgstr "Colore" msgid "" "Nozzle\n" "Temperature" msgstr "" -"Nozzle\n" -"Temperature" +"Temperatura\n" +"Nozzle" msgid "max" msgstr "max" @@ -1876,7 +1938,7 @@ msgstr "min" #, boost-format msgid "The input value should be greater than %1% and less than %2%" -msgstr "The input value should be greater than %1% and less than %2%" +msgstr "Il valore di input deve essere maggiore di %1% e minore di %2%" msgid "SN" msgstr "SN" @@ -1886,8 +1948,11 @@ msgstr "" "L'impostazione informazioni sullo slot AMS in fase di stampa non è " "supportata." -msgid "Factors of dynamic flow cali" -msgstr "Calibra fattori flusso dinamico" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Fattore K" @@ -1903,15 +1968,15 @@ msgstr "" msgid "Are you sure you want to clear the filament information?" msgstr "Sei sicuro di voler cancellare le informazioni del filamento?" +msgid "You need to select the material type and color first." +msgstr "Devi prima selezionare il tipo e il colore del materiale." + msgid "Please input a valid value (K in 0~0.5)" msgstr "Inserisci un valore valido (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Inserisci un valore valido (K in 0~0.5, N in 0.6~2.0)" -msgid "You need to select the material type and color first." -msgstr "Devi prima selezionare il tipo e il colore del materiale." - msgid "Other Color" msgstr "Altro colore" @@ -1938,7 +2003,7 @@ msgid "Bed Type" msgstr "Tipo di piano" msgid "Nozzle temperature" -msgstr "Temperatura ugello" +msgstr "Temperatura Nozzle" msgid "Bed Temperature" msgstr "Temperatura piano" @@ -2077,59 +2142,69 @@ msgstr "Stampa con filamento AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Stampa filamento con bobina esterna" -msgid "Filaments replace" -msgstr "Filamento Backup" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Gruppo" +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 "" + msgid "AMS Settings" -msgstr "AMS Settings" +msgstr "Impostazioni AMS" msgid "Insertion update" -msgstr "Insertion update" +msgstr "Aggiornamento dell'inserimento" msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"The AMS will automatically read the filament information when inserting a " -"new Bambu Lab filament spool. This takes about 20 seconds." +"L'AMS leggerà automaticamente le informazioni sul filamento quando inserisce " +"una nuova bobina di filamento Bambu Lab. Questa operazione richiede circa 20 " +"secondi." msgid "" "Note: if new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Note: if new filament is inserted during printing, the AMS will not " -"automatically read any information until printing has finished." +"Nota: se durante la stampa viene inserito un nuovo filamento, l'AMS non " +"leggerà automaticamente alcuna informazione fino al termine della stampa." msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" -"When inserting a new filament, the AMS will not automatically read its " -"information, leaving it blank for you to enter manually." +"Quando si inserisce un nuovo filamento, l'AMS non legge automaticamente le " +"sue informazioni, lasciandole vuote per l'inserimento manuale." msgid "Power on update" -msgstr "Update on startup" +msgstr "Aggiorna all'avvio" 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 "" -"The AMS will automatically read the information of inserted filament on " -"start-up. It will take about 1 minute.The reading process will rotate the " -"filament spools." +"L'AMS leggerà automaticamente le informazioni sul filamento inserito " +"all'avvio. Ci vorrà circa 1 minuto. Il processo di lettura farà ruotare le " +"bobine del filamento." 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 "" -"The AMS will not automatically read information from inserted filament " -"during startup and will continue to use the information recorded before the " -"last shutdown." +"L'AMS non leggerà automaticamente le informazioni dal filamento inserito " +"durante l'avvio e continuerà a utilizzare le informazioni registrate prima " +"dell'ultimo spegnimento." msgid "Update remaining capacity" msgstr "Aggiorna capacità residua" @@ -2157,7 +2232,7 @@ msgid "File" msgstr "File" msgid "Calibration" -msgstr "Calibration" +msgstr "Calibrazione" msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " @@ -2194,20 +2269,20 @@ msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"An error occurred. The system may have run out of memory, or a bug may have " -"occurred." +"Si è verificato un errore. È possibile che la memoria del sistema sia " +"esaurita o che si sia verificato un bug." msgid "Please save project and restart the program. " -msgstr "Please save your project and restart the application." +msgstr "Salva il progetto e riavvia l'applicazione." msgid "Processing G-Code from Previous file..." -msgstr "Processing G-Code from previous file…" +msgstr "Elaborazione G-Code dal file precedente..." msgid "Slicing complete" msgstr "Slicing completato" msgid "Access violation" -msgstr "Violazione di accesso" +msgstr "Violazione accesso" msgid "Illegal instruction" msgstr "Istruzione illegale" @@ -2216,10 +2291,10 @@ msgid "Divide by zero" msgstr "Dividi per zero" msgid "Overflow" -msgstr "Overflow" +msgstr "sovra-estrusione" msgid "Underflow" -msgstr "Underflow" +msgstr "Sotto-estruso" msgid "Floating reserved operand" msgstr "Floating reserved operand" @@ -2228,7 +2303,7 @@ msgid "Stack overflow" msgstr "Stack overflow" msgid "Unknown error when export G-code." -msgstr "Unknown error with G-code export" +msgstr "Errore sconosciuto nell'esportazione G-code" #, boost-format msgid "" @@ -2236,13 +2311,13 @@ msgid "" "Error message: %1%.\n" "Source file %2%." msgstr "" -"Failed to save G-code file.\n" -"Error message: %1%.\n" -"Source file %2%." +"Impossibile salvare il file del G-code.\n" +"Messaggio di errore: %1%.\n" +"File sorgente %2%." #, boost-format msgid "Succeed to export G-code to %1%" -msgstr "Success! G-code exported to %1%" +msgstr "Successo! G-code esportato in %1%" msgid "Running post-processing scripts" msgstr "Esecuzione script di post-elaborazione" @@ -2269,7 +2344,7 @@ msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -"Distanza della coordinata 0,0 del G-code dall'angolo frontale sinistro del " +"Distanza della coordinata 0,0 del G-code dall'angolo anteriore sinistro del " "rettangolo." msgid "" @@ -2313,7 +2388,7 @@ msgid "Invalid file format." msgstr "Formato file non valido." msgid "Error! Invalid model" -msgstr "Errore! Modello non valido" +msgstr "Errore: Modello non valido" msgid "The selected file contains no geometry." msgstr "Il file selezionato non contiene geometrie." @@ -2338,9 +2413,9 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"The nozzle may become clogged when the temperature is out of the recommended " -"range.\n" -"Please make sure whether to use this temperature to print.\n" +"Il Nozzle potrebbe intasarsi quando la temperatura non rientra " +"nell'intervallo consigliato.\n" +"Assicurarsi di utilizzare questa temperatura per la stampa.\n" "\n" #, c-format, boost-format @@ -2348,8 +2423,8 @@ msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" msgstr "" -"The recommended nozzle temperature for this filament type is [%d, %d] " -"degrees centigrade" +"La temperatura del nozzle consigliata per questo filamento è [%d, %d] gradi " +"centigradi" #, c-format, boost-format msgid "" @@ -2357,9 +2432,9 @@ msgid "" "layer for more than %d degree centigrade.\n" "This may cause model broken free from build plate during printing" msgstr "" -"The bed temperature of other layers is lower than the bed temperature of the " -"first layer by more than %d degrees centigrade.\n" -"This may cause models to break free from the build plate during printing." +"La temperatura del piano degli altri layer è inferiore alla temperatura del " +"piano del primo layer di oltre %d gradi centigradi.\n" +"Ciò può far sì che i modelli si stacchino dal piatto durante la stampa." msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" @@ -2384,24 +2459,31 @@ msgid "" "Too small layer height.\n" "Reset to 0.2" msgstr "" -"Layer height too small\n" -"It has been reset to 0.2" +"Altezza del layer troppo piccola\n" +"È stata ripristinata a 0,2" + +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Altezza layer troppo grande\n" +"È stato ripristinato a 0.2" msgid "" "Too small ironing spacing.\n" "Reset to 0.1" msgstr "" -"Ironing spacing too small\n" -"It has been reset to 0.1" +"Spaziatura stiratura troppo piccola\n" +"È stata ripristinata a 0,1" msgid "" "Zero initial layer height is invalid.\n" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Zero first layer height is invalid.\n" +"L'altezza zero primo layer non è valida.\n" "\n" -"The first layer height will be reset to 0.2." +"L'altezza primo layer verrà ripristinata a 0,2." msgid "" "This setting is only used for model size tunning with small value in some " @@ -2411,11 +2493,13 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"This setting is only used for tuning model size by small amounts.\n" -"For example, when the model size has small errors or when tolerances are " -"incorrect. For large adjustments, please use the model scale function.\n" +"Questa viene utilizzata solo per regolare le dimensioni del modello in " +"piccole quantità.\n" +"Ad esempio, quando le dimensioni del modello presentano piccoli errori o " +"quando le tolleranze non sono corrette. Per regolazioni di grandi " +"dimensioni, si prega di utilizzare la funzione di scala del modello.\n" "\n" -"The value will be reset to 0." +"Il valore verrà reimpostato su 0." msgid "" "Too large elefant foot compensation is unreasonable.\n" @@ -2424,11 +2508,12 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"The elephant foot compensation value is too large.\n" -"If there are significant elephant foot issues, please check other settings.\n" -"The bed temperature may be too high, for example.\n" +"Il valore di compensazione del piede di elefante è troppo grande.\n" +"Se i problemi zampa d'elefante sono significativi, controllare altre " +"impostazioni.\n" +"Ad esempio, la temperatura del piano potrebbe essere troppo alta.\n" "\n" -"The value will be reset to 0." +"Il valore viene riportato a 0." msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " @@ -2443,9 +2528,9 @@ msgid "" "Yes - Change these settings and enable spiral mode automatically\n" "No - Give up using spiral mode this time" msgstr "" -"Change these settings automatically? \n" -"Yes - Change these settings and enable spiral/vase mode automatically\n" -"No - Cancel enabling spiral mode" +"Modificare queste impostazioni automaticamente? \n" +"Si - Modifica queste impostazioni ed abilita la modalità spirale/vaso\n" +"No - Annulla l'attivazione della modalità a spirale" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -2454,11 +2539,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Prime tower does not work when Adaptive Layer Height or Independent Support " -"Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Adaptive Layer Height and Independent Support Layer Height" +"Prime tower non funziona quando layer Adattativo o Altezza supporto Layer " +"indipendente sono attivati.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni layer Adattativo e Altezza supporto Layer indipendente" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -2466,10 +2551,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"Prime tower does not work when Adaptive Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Adaptive Layer Height" +"Prime tower non funziona quando layer adattativo è attivo.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni l'ayer adattativo" msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" @@ -2477,14 +2562,15 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Prime tower does not work when Independent Support Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Independent Support Layer Height" +"Prime tower non funziona quando Altezza Supporto Layer indipendente è " +"attiva.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni Altezza Supporto Layer indipendente" #, boost-format msgid "%1% infill pattern doesn't support 100%% density." -msgstr "%1% infill pattern doesn't support 100%% density." +msgstr "La trama riempimento %1% non supporta il 100%% di densità." msgid "" "Switch to rectilinear pattern?\n" @@ -2503,67 +2589,67 @@ msgstr "" "Quindi, ripristina il layer skirt su 1 per evitare collisioni." msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Livellamento automatico piano" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Preriscaldamento del piano" msgid "Sweeping XY mech mode" -msgstr "Sweeping XY mech mode" +msgstr "Modalità Sweeping XY mech" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Cambio filamento" msgid "M400 pause" -msgstr "M400 pause" +msgstr "M400 pausa" msgid "Paused due to filament runout" -msgstr "Paused due to filament runout" +msgstr "Pausa per filamento esaurito" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Riscaldamento hotend" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Calibrazione estrusione" msgid "Scanning bed surface" -msgstr "Scanning bed surface" +msgstr "Scansione superfice piatto" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "Ispezione del primo layer" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Identificazione tipo piatto di costruzione" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Calibrazione Micro Lidar" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Homing testa di stampa" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Pulizia nozzle" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Controllo temperatura dell'estrusore" msgid "Printing was paused by the user" -msgstr "Printing was paused by the user" +msgstr "Stampa messa in pausa dall'utente" msgid "Pause of front cover falling" -msgstr "Pause of front cover falling" +msgstr "Pausa caduta cover anteriore" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Calibrazione micro lidar" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "Calibrazione flusso estrusore" msgid "Paused due to nozzle temperature malfunction" -msgstr "Paused due to nozzle temperature malfunction" +msgstr "Pausa per malfunzionamento temperatura nozzle" msgid "Paused due to heat bed temperature malfunction" -msgstr "Paused due to heat bed temperature malfunction" +msgstr "Pausa per malfunzionamento della temperatura piano termico" msgid "MC" msgstr "MC" @@ -2581,29 +2667,51 @@ msgid "Unknown" msgstr "Sconosciuto" msgid "Fatal" -msgstr "Fatal" +msgstr "Irreversibile" msgid "Serious" -msgstr "Serious" +msgstr "Serio" msgid "Common" -msgstr "Common" +msgstr "Comune" msgid "Update successful." -msgstr "Update successful." +msgstr "Aggiornamento riuscito." msgid "Downloading failed." -msgstr "Downloading failed." +msgstr "Download non riuscito." msgid "Verification failed." -msgstr "Verification failed." +msgstr "Verifica fallita." msgid "Update failed." -msgstr "Update failed." +msgstr "Aggiornamento fallito" msgid "Failed to start printing job" msgstr "Impossibile avviare il processo di stampa" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "predefinito" @@ -2615,17 +2723,17 @@ msgstr "N/A" #, c-format, boost-format msgid "%s can't be percentage" -msgstr "%s can’t be a percentage" +msgstr "%s non può essere una percentuale" #, c-format, boost-format msgid "Value %s is out of range, continue?" -msgstr "Value %s is out of range, continue?" +msgstr "Il valore %s non rientra nell'intervallo, continuare?" msgid "Parameter validation" msgstr "Validazione parametri" msgid "Value is out of range." -msgstr "Value is out of range." +msgstr "Valore fuori intervallo." #, c-format, boost-format msgid "" @@ -2633,22 +2741,22 @@ msgid "" "YES for %s%%, \n" "NO for %s %s." msgstr "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"È %s%% o %s %s?\n" +"SÌ per %s%%, \n" +"NO per %s %s." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" -msgstr "Invalid format. Expected vector format: \"%1%\"" +msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" msgid "Layer Height" -msgstr "Layer Height" +msgstr "Altezza layer" msgid "Line Width" -msgstr "Line Width" +msgstr "Larghezza linea" msgid "Fan Speed" -msgstr "Fan Speed" +msgstr "Velocità ventola" msgid "Temperature" msgstr "Temperatura" @@ -2662,9 +2770,6 @@ msgstr "Strumento" msgid "Layer Time" msgstr "Tempo layer" -msgid "Layer Time (log)" -msgstr "Tempo layer (log)" - msgid "Height: " msgstr "Altezza:" @@ -2687,13 +2792,13 @@ msgid "Temperature: " msgstr "Temperatura:" msgid "Loading G-codes" -msgstr "Loading G-code" +msgstr "Caricamento del G-code" msgid "Generating geometry vertex data" -msgstr "Generating geometry vertex data" +msgstr "Generazione dati vertici geometria" msgid "Generating geometry index data" -msgstr "Generating geometry index data" +msgstr "Generazione dati di indice geometrico" msgid "Statistics of All Plates" msgstr "Statistiche di tutti i piatti" @@ -2723,19 +2828,19 @@ msgid "from" msgstr "da" msgid "Color Scheme" -msgstr "Color scheme" +msgstr "Schema Colore" msgid "Time" msgstr "Tempo" msgid "Percent" -msgstr "Percent" +msgstr "Percentuale" msgid "Layer Height (mm)" -msgstr "Layer height (mm)" +msgstr "Altezza layer (mm)" msgid "Line Width (mm)" -msgstr "Line width (mm)" +msgstr "Larghezza linea (mm)" msgid "Speed (mm/s)" msgstr "Velocità (mm/s)" @@ -2749,6 +2854,9 @@ msgstr "Temperatura (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Flusso volumetrico (mm³/s)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "Filamento usato" @@ -2759,28 +2867,28 @@ msgid "Seams" msgstr "Giunzioni" msgid "Retract" -msgstr "Retract" +msgstr "Retrazione" msgid "Unretract" -msgstr "Unretract" +msgstr "De-retrazione" msgid "Filament Changes" -msgstr "Filament changes" +msgstr "Cambi filamento" msgid "Wipe" -msgstr "Pulitura" +msgstr "Pulizia" msgid "Options" msgstr "Opzioni" msgid "travel" -msgstr "Travel" +msgstr "Spostamento" msgid "Extruder" msgstr "Estrusore" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Tempi cambio filamento" msgid "Cost" msgstr "Costo" @@ -2801,7 +2909,7 @@ msgid "Print settings" msgstr "Impostazioni di stampa" msgid "Total Estimation" -msgstr "Total estimation" +msgstr "Stima totale" msgid "Time Estimation" msgstr "Tempo stimato" @@ -2810,16 +2918,16 @@ msgid "Normal mode" msgstr "Modalità normale" msgid "Prepare time" -msgstr "Prepare time" +msgstr "Tempo preparazione" msgid "Model printing time" -msgstr "Model printing time" +msgstr "Tempo stampa del modello" msgid "Switch to silent mode" -msgstr "Switch to silent mode" +msgstr "Passa a modalità silenziosa" msgid "Switch to normal mode" -msgstr "Switch to normal mode" +msgstr "Passa a modalità normale" msgid "Variable layer height" msgstr "Altezza layer adattativo" @@ -2870,13 +2978,13 @@ msgid "Increase/decrease edit area" msgstr "Aumenta/diminuisci l'area di modifica" msgid "Sequence" -msgstr "Sequence" +msgstr "Sequenza" msgid "Mirror Object" msgstr "Specchia Oggetto" msgid "Tool Move" -msgstr "Tool move" +msgstr "Sposta strumento" msgid "Tool Rotate" msgstr "Strumento Ruota" @@ -2885,16 +2993,16 @@ msgid "Move Object" msgstr "Sposta oggetto" msgid "Auto Orientation options" -msgstr "Auto orientation options" +msgstr "Opzioni orientamento automatico" msgid "Enable rotation" -msgstr "Enable rotation" +msgstr "Abilita rotazione" msgid "Optimize support interface area" -msgstr "Optimize support interface area" +msgstr "Ottimizza l'area dell'interfaccia di supporto" msgid "Orient" -msgstr "Orient" +msgstr "Orienta" msgid "Arrange options" msgstr "Opzioni di disposizione" @@ -2903,28 +3011,28 @@ msgid "Spacing" msgstr "Spaziatura " msgid "Auto rotate for arrangement" -msgstr "Auto rotate for arrangement" +msgstr "Ruota automaticamente per disporre" msgid "Allow multiple materials on same plate" -msgstr "Allow multiple materials on same plate" +msgstr "Consenti più materiali sullo stesso piatto" msgid "Avoid extrusion calibration region" -msgstr "Avoid extrusion calibration region" +msgstr "Evitare la regione di calibrazione dell'estrusione" msgid "Add" msgstr "Aggiungi" msgid "Add plate" -msgstr "Add Plate" +msgstr "Aggiungi piatto" msgid "Auto orient" -msgstr "Auto Orient" +msgstr "Orientamento automatico" msgid "Arrange all objects" -msgstr "Arrange all objects" +msgstr "Disponi tutti gli oggetti" msgid "Arrange objects on selected plates" -msgstr "Arrange objects on selected plates" +msgstr "Disponi gli oggetti sui piatti selezionati" msgid "Split to objects" msgstr "Dividi in oggetti" @@ -2933,22 +3041,22 @@ msgid "Split to parts" msgstr "Dividi in parti" msgid "Assembly View" -msgstr "Assembly View" +msgstr "Vista montaggio" msgid "Select Plate" -msgstr "Select Plate" +msgstr "Seleziona piatto" msgid "Assembly Return" -msgstr "Assembly Return" +msgstr "Ritorna al montaggio" msgid "return" -msgstr "return" +msgstr "Indietro" msgid "Paint Toolbar" -msgstr "Paint Toolbar" +msgstr "Barra strumenti di pittura" msgid "Explosion Ratio" -msgstr "Explosion Ratio" +msgstr "Rapporto di esplosione" msgid "Section View" msgstr "Vista in sezione" @@ -2957,34 +3065,36 @@ msgid "Assemble Control" msgstr "Controllo assemblaggio" msgid "Total Volume:" -msgstr "Total Volume:" +msgstr "Volume totale:" msgid "Assembly Info" -msgstr "Assembly Info" +msgstr "Informazioni sul montaggio" msgid "Volume:" msgstr "Volume:" msgid "Size:" -msgstr "Size:" +msgstr "Dimensioni:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Sono stati trovati conflitti di percorsi G-code al layer %d. Separare " +"ulteriormente gli oggetti in conflitto (%s <-> %s)." msgid "An object is layed over the boundary of plate." -msgstr "An object is laid over the boundary of the plate." +msgstr "Un oggetto è posizionato oltre il bordo del piatto." msgid "A G-code path goes beyond the max print height." msgstr "" msgid "A G-code path goes beyond the boundary of plate." -msgstr "A G-code path goes beyond plate boundaries." +msgstr "Un percorso G-code va oltre il confine del piatto." msgid "Only the object being edit is visible." -msgstr "Only the object being edited is visible." +msgstr "È visibile solo l'oggetto da modificare." msgid "" "An object is laid over the boundary of plate or exceeds the height limit.\n" @@ -3009,28 +3119,28 @@ msgid "Resonance frequency identification" msgstr "Identificazione frequenza di risonanza" msgid "Calibration program" -msgstr "Calibration program" +msgstr "Programma calibrazione" msgid "" "The calibration program detects the status of your device automatically to " "minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"The calibration program detects the status of your device automatically to " -"minimize deviation.\n" -"It keeps the device performing optimally." +"Il programma di calibrazione rileva automaticamente lo stato del dispositivo " +"per ridurre al minimo le deviazioni.\n" +"Questa funzione aiuta il dispositivo a mantenere prestazioni ottimali." msgid "Calibration Flow" -msgstr "Calibration Flow" +msgstr "Calibrazione flusso" msgid "Start Calibration" -msgstr "Start Calibration" +msgstr "Inizia calibrazione" msgid "Completed" msgstr "Completato" msgid "Calibrating" -msgstr "Calibrating" +msgstr "Calibrazione" msgid "Auto-record Monitoring" msgstr "Monitora registrazione automatica" @@ -3039,7 +3149,7 @@ msgid "Go Live" msgstr "Vai in diretta" msgid "Resolution" -msgstr "Resolution" +msgstr "Risoluzione" msgid "Show \"Live Video\" guide page." msgstr "Mostra pagina della guida \"Diretta Video\"." @@ -3051,17 +3161,17 @@ msgid "1080p" msgstr "1080p" msgid "ConnectPrinter(LAN)" -msgstr "Connect Printer (LAN)" +msgstr "Connetti la stampante (LAN)" msgid "Please input the printer access code:" -msgstr "Please input the printer access code:" +msgstr "Inserisci il codice di accesso alla stampante:" msgid "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" msgstr "" -"You can find it in \"Settings > Network > Access code\"\n" -"on the printer, as shown in the figure:" +"Si trova in \"Impostazioni > Rete > Codice di accesso\".\n" +"sulla stampante, come mostrato nella figura:" msgid "Invalid input." msgstr "Ingresso non valido" @@ -3073,28 +3183,28 @@ msgid "Open a new window" msgstr "Apri una nuova finestra" msgid "Application is closing" -msgstr "Closing application" +msgstr "Chiusura applicazione" msgid "Closing Application while some presets are modified." -msgstr "Closing Application while some presets are modified." +msgstr "Chiusura dell'applicazione durante la modifica di alcuni preset." msgid "Logging" -msgstr "Logging" +msgstr "Accesso" msgid "Prepare" -msgstr "Prepare" +msgstr "Prepara" msgid "Preview" msgstr "Anteprima" msgid "Device" -msgstr "Device" +msgstr "Dispositivo" msgid "Project" -msgstr "Project" +msgstr "Progetto" msgid "Yes" -msgstr "Yes" +msgstr "Sì" msgid "No" msgstr "No" @@ -3102,20 +3212,23 @@ msgstr "No" msgid "will be closed before creating a new model. Do you want to continue?" msgstr " verrà chiuso prima di creare un nuovo modello. Vuoi continuare?" +msgid "Upload" +msgstr "" + msgid "Slice plate" -msgstr "Slice plate" +msgstr "Slice piatto" msgid "Print plate" msgstr "Stampa piatto" msgid "Slice all" -msgstr "Slice all" +msgstr "Slice totale" msgid "Export G-code file" msgstr "Esporta file G-code" msgid "Send" -msgstr "Send" +msgstr "Invia" msgid "Export plate sliced file" msgstr "Esporta il file del piatto elaborato" @@ -3124,7 +3237,7 @@ msgid "Export all sliced file" msgstr "Esporta tutti i file elaborati" msgid "Print all" -msgstr "Print all" +msgstr "Stampa tutto" msgid "Send all" msgstr "Invia tutto" @@ -3133,26 +3246,29 @@ msgid "Keyboard Shortcuts" msgstr "Scorciatoie Tastiera" msgid "Show the list of the keyboard shortcuts" -msgstr "Mostra l'elenco delle scorciatoie di tastiera" +msgstr "Mostra l'elenco delle scorciatoie da tastiera" msgid "Setup Wizard" -msgstr "Setup Wizard" +msgstr "Configurazione guidata" msgid "Show Configuration Folder" -msgstr "Show Configuration Folder" +msgstr "Mostra cartella di configurazione" msgid "Show Tip of the Day" msgstr "Suggerimento del giorno" +msgid "Report issue" +msgstr "Segnala un problema" + msgid "Check for Update" -msgstr "Check for Updates" +msgstr "Verifica aggiornamenti" msgid "Open Network Test" msgstr "Apri test di rete" #, c-format, boost-format msgid "&About %s" -msgstr "Inform&azioni su %s" +msgstr "&informazioni su %s" msgid "Upload Models" msgstr "Carica modelli" @@ -3161,7 +3277,7 @@ msgid "Download Models" msgstr "Scarica Modelli" msgid "Default View" -msgstr "Default View" +msgstr "Vista predefinita" #. TRN To be shown in the main menu View->Top msgid "Top" @@ -3178,7 +3294,7 @@ msgid "Bottom View" msgstr "Vista inferiore" msgid "Front" -msgstr "Frontale" +msgstr "Anteriore" msgid "Front View" msgstr "Vista anteriore" @@ -3217,19 +3333,19 @@ msgid "Recent projects" msgstr "Prog&etti recenti" msgid "Save Project" -msgstr "Save Project" +msgstr "Salva Progetto" msgid "Save current project to file" -msgstr "Save current project to file" +msgstr "Salva progetto corrente su file" msgid "Save Project as" -msgstr "Save Project as" +msgstr "Salva Progetto come" msgid "Shift+" msgstr "Shift+" msgid "Save current project as" -msgstr "Save current project as" +msgstr "Salva Progetto corrente come" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" @@ -3238,22 +3354,22 @@ msgid "Load a model" msgstr "Carica modello" msgid "Import Configs" -msgstr "Import Configs" +msgstr "Importa configurazioni" msgid "Load configs" -msgstr "Load configs" +msgstr "Carica configurazioni" msgid "Import" -msgstr "Import" +msgstr "Importa" msgid "Export all objects as STL" -msgstr "Export All Objects as STL" +msgstr "Esporta tutti gli oggetti come STL" msgid "Export Generic 3MF" -msgstr "Export Generic 3MF" +msgstr "Esporta 3mf generico" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Export 3mf file without using some 3mf-extensions" +msgstr "Esporta file 3mf senza usare alcune estensioni 3mf" msgid "Export current sliced file" msgstr "Esporta il file elaborato corrente" @@ -3268,7 +3384,7 @@ msgid "Export current plate as G-code" msgstr "Esporta piatto corrente come G-code" msgid "Export &Configs" -msgstr "Export &Configs" +msgstr "Esporta &Configurazioni" msgid "Export current configuration to files" msgstr "Esporta la configurazione corrente in file" @@ -3277,7 +3393,7 @@ msgid "Export" msgstr "Esporta" msgid "Quit" -msgstr "Quit" +msgstr "Esci" msgid "Undo" msgstr "Annulla" @@ -3286,7 +3402,7 @@ msgid "Redo" msgstr "Ripeti" msgid "Cut selection to clipboard" -msgstr "Cut selection to clipboard" +msgstr "Taglia la selezione negli appunti" msgid "Copy" msgstr "Copia" @@ -3313,13 +3429,13 @@ msgid "Deletes all objects" msgstr "Elimina tutti gli oggetti" msgid "Clone selected" -msgstr "Clone Selected" +msgstr "Clone selezionato" msgid "Clone copies of selections" -msgstr "Clone copies of selections" +msgstr "Clonare copie delle selezioni" msgid "Select all" -msgstr "Select All" +msgstr "Seleziona tutto" msgid "Selects all objects" msgstr "Seleziona tutti gli oggetti" @@ -3331,10 +3447,10 @@ msgid "Deselects all objects" msgstr "Deseleziona tutti gli oggetti" msgid "Use Perspective View" -msgstr "Use Perspective View" +msgstr "Usa vista prospettica" msgid "Use Orthogonal View" -msgstr "Use Orthogonal View" +msgstr "Usa vista ortogonale" msgid "Show &Labels" msgstr "Mostra &Etichette" @@ -3342,6 +3458,12 @@ msgstr "Mostra &Etichette" msgid "Show object labels in 3D scene" msgstr "Mostra etichette oggetti nella scena 3D" +msgid "Show &Overhang" +msgstr "Mostra sporgenze" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Mostra la sporgenza dell'oggetto evidenziata nella scena 3D" + msgid "Preferences" msgstr "Preferenze" @@ -3375,9 +3497,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3396,11 +3515,8 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "Modelli 3D" - msgid "&Open G-code" -msgstr "Apri G-code" +msgstr "&Apri G-code" msgid "Open a G-code file" msgstr "Apri un file G-code" @@ -3412,7 +3528,7 @@ msgid "Reload the plater from disk" msgstr "Ricarica piano da disco" msgid "Export &Toolpaths as OBJ" -msgstr "Esporta percorso strumen&to come OBJ" +msgstr "Esporta &percorso strumento come OBJ" msgid "Export toolpaths as OBJ" msgstr "Esporta percorso strumento come OBJ" @@ -3424,7 +3540,7 @@ msgid "Open Studio" msgstr "Apri Studio" msgid "&Quit" -msgstr "Es&ci" +msgstr "&Esci" #, c-format, boost-format msgid "Quit %s" @@ -3434,7 +3550,7 @@ msgid "&File" msgstr "&File" msgid "&View" -msgstr "&Vista" +msgstr "&Visualizza" msgid "&Help" msgstr "&Aiuto" @@ -3448,13 +3564,13 @@ msgid "A config exists with the same name: %s, do you want to override it." msgstr "Esiste una configurazione con lo stesso nome: %s. Vuoi sovrascriverla?" msgid "Overwrite file" -msgstr "Overwrite file" +msgstr "Sovrascrivi file" msgid "Yes to All" -msgstr "Yes to All" +msgstr "Sì a tutto" msgid "No to All" -msgstr "No to All" +msgstr "No a tutto" msgid "Choose a directory" msgstr "Scegliere una directory" @@ -3466,7 +3582,7 @@ msgstr[0] "" msgstr[1] "" msgid "Export result" -msgstr "Export Result" +msgstr "Risultato Esportazione" msgid "Select profile to load:" msgstr "Seleziona profilo da caricare:" @@ -3479,13 +3595,13 @@ msgstr[0] "" msgstr[1] "" msgid "Import result" -msgstr "Import result" +msgstr "Risultato dell'importazione" msgid "File is missing" -msgstr "File is missing" +msgstr "File mancante" msgid "The project is no longer available." -msgstr "The project is no longer available." +msgstr "Il progetto non è più disponibile." msgid "Filament Settings" msgstr "Impostazioni Filamento" @@ -3504,35 +3620,36 @@ msgstr "" "3. I presets della stampante" msgid "Synchronization" -msgstr "Synchronization" +msgstr "Sincronizzazione" msgid "Initialize failed (No Device)!" -msgstr "Initialization failed (No Device)!" +msgstr "Inizializzazione fallita (nessun dispositivo)!" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"Inizializzazione fallita (la connessione del dispositivo non è pronta)!" msgid "Initialize failed (No Camera Device)!" msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" -msgid "Initializing..." -msgstr "Initializing..." - -msgid "Loading..." -msgstr "Loading..." - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Inizializzazione fallita (non supportata in modalità solo LAN)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inizializzazione fallita (non accessibile in modalità solo LAN)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" "Stampante in fase di caricamento; attendi il completamento del caricamento." +msgid "Loading..." +msgstr "Caricamento…" + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Inizializzazione fallita (non accessibile in modalità solo LAN)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Inizializzazione fallita (indirizzo IP LAN della stampante mancante)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Inizializzazione fallita (non supportata dalla stampante)!" +msgid "Initializing..." +msgstr "Inizializzazione ..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3546,7 +3663,7 @@ msgid "Stopped [%d]!" msgstr "Interrotto [%d]!" msgid "Stopped." -msgstr "Stopped." +msgstr "Interrotto." msgid "LAN Connection Failed (Failed to start liveview)" msgstr "Connessione LAN non riuscita (impossibile avviare liveview)" @@ -3563,9 +3680,12 @@ msgstr "Scaricare strumenti telecamera virtuale" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"È in funzione un'altra telecamera virtuale.\n" +"Bambu Studio supporta solo una singola telecamera virtuale.\n" +"Si desidera interrompere questa telecamera virtuale?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3575,17 +3695,17 @@ msgid "Information" msgstr "Informazione" msgid "Playing..." -msgstr "Playing..." +msgstr "Riproduzione" #, c-format, boost-format msgid "Load failed [%d]!" -msgstr "Loading failed [%d]!" +msgstr "Caricamento non riuscito [%d]!" msgid "Year" -msgstr "Year" +msgstr "Anno" msgid "Month" -msgstr "Month" +msgstr "Mese" msgid "All Files" msgstr "Tutti i file" @@ -3600,7 +3720,7 @@ msgid "Show all files, recent first." msgstr "Mostra tutti i file, prima i recenti." msgid "Timelapse" -msgstr "Timelapse" +msgstr "TimeLapse" msgid "Switch to timelapse files." msgstr "Passa ai file timelapse." @@ -3611,11 +3731,14 @@ msgstr "Video" msgid "Switch to video files." msgstr "Passare ai file video." +msgid "Switch to 3mf model files." +msgstr "Passa ai file modello 3mf." + msgid "Delete selected files from printer." msgstr "Elimina i file selezionati dalla stampante." msgid "Download" -msgstr "Download" +msgstr "Scarica" msgid "Download selected files from printer." msgstr "Scarica i file selezionati dalla stampante." @@ -3627,37 +3750,54 @@ msgid "Batch manage files." msgstr "Gestione batch dei file." msgid "No printers." -msgstr "No printers." - -msgid "Not supported by this model of printer!" -msgstr "Non supportato da questo modello di stampante!" - -msgid "Connecting..." -msgstr "Connecting..." +msgstr "Nessuna stampante." #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "Connection failed [%d]!" +msgstr "Connessione non riuscita [%d]!" msgid "Loading file list..." -msgstr "Loading file list..." - -msgid "No files" -msgstr "No files" - -msgid "Not accessible in LAN-only mode!" -msgstr "Non accessibile in modalità solo LAN!" - -msgid "Missing LAN ip of printer!" -msgstr "Manca l'IP LAN della stampante!" +msgstr "Caricamento elenco file..." #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "No files [%d]" +msgstr "No files [%d]" + +#, c-format, boost-format +msgid "Load failed [%d]" +msgstr "Caricamento non riuscito [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Elimina i file" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Vuoi eliminare il file '%s' dalla stampante?" + +msgid "Delete file" +msgstr "Elimina file" + +msgid "Fetching model infomations ..." +msgstr "Recupero informazioni del modello..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Impossibile recuperare le informazioni del modello dalla stampante." + +msgid "Failed to parse model infomations." +msgstr "Analisi delle informazioni sul modello non riuscita" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Il file \"%s\" è stato perso! Si prega di scaricarlo di nuovo." @@ -3678,6 +3818,12 @@ msgstr "Download completato" msgid "Downloading %d%%..." msgstr "Scaricamento %d%%..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Velocità:" @@ -3694,11 +3840,32 @@ msgid "Translation/Zoom" msgstr "Traduzione/Zoom" msgid "3Dconnexion settings" -msgstr "Impostazioni 3Dconnexion" +msgstr "Impostazioni 3D connexion" msgid "Swap Y/Z axes" msgstr "Inverti assi Y/Z" +msgid "Printing Progress" +msgstr "Progresso di stampa" + +msgid "Resume" +msgstr "Continua" + +msgid "Stop" +msgstr "Ferma" + +msgid "0" +msgstr "0" + +msgid "Layer: N/A" +msgstr "Layer: N/A" + +msgid "Immediately score" +msgstr "Punteggio immediato" + +msgid "Clear" +msgstr "Cancella" + msgid "Camera" msgstr "Camera" @@ -3708,26 +3875,8 @@ msgstr "MicroSD" msgid "Camera Setting" msgstr "Impostazioni camera" -msgid "Printing Progress" -msgstr "Printing progress" - -msgid "Resume" -msgstr "Resume" - -msgid "Stop" -msgstr "Stop" - -msgid "0" -msgstr "0" - -msgid "Layer: N/A" -msgstr "Layer: N/A" - -msgid "Clear" -msgstr "Cancella" - msgid "Control" -msgstr "Control" +msgstr "Controllo" msgid "Print Options" msgstr "Opzioni stampa" @@ -3736,7 +3885,7 @@ msgid "100%" msgstr "100%" msgid "Lamp" -msgstr "Lamp" +msgstr "luce" msgid "Aux" msgstr "Ausiliario" @@ -3748,10 +3897,10 @@ msgid "Bed" msgstr "Piano" msgid "Unload" -msgstr "Unload" +msgstr "Scarica" msgid "Debug Info" -msgstr "Debug Info" +msgstr "Informazioni di debug" msgid "No SD Card" msgstr "Nessuna scheda microSD" @@ -3759,34 +3908,17 @@ msgstr "Nessuna scheda microSD" msgid "SD Card Abnormal" msgstr "microSD anomala" -msgid "Printing List" -msgstr "Printing list" - msgid "Cancel print" msgstr "Annulla la stampa" msgid "Are you sure you want to cancel this print?" msgstr "Sei sicuro di voler annullare la stampa?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Disconnessione dalla stampante [%s] a causa della modalità LAN disattivata. " -"Ricollegare la stampante accedendo con il proprio account utente." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Disconnessione dalla stampante [%s] a causa della modalità LAN attivata. " -"Ricollegare la stampante inserendo il codice di accesso che può essere " -"ottenuto dal display della stampante." +msgid "Done" +msgstr "Fine" msgid "Downloading..." -msgstr "Downloading..." +msgstr "Download in corso…" msgid "Cloud Slicing..." msgstr "Slicing in cloud..." @@ -3799,6 +3931,12 @@ msgstr "Ci sono %s attività davanti nella coda di slicing del cloud." msgid "Layer: %s" msgstr "Layer: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Assegna un punteggio per il tuo modello Bambu Market preferito." + +msgid "Score" +msgstr "Punteggio" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Layer: %d/%d" @@ -3828,7 +3966,7 @@ msgid "This only takes effect during printing" msgstr "Questo ha effetto solo in fase di stampa" msgid "Silent" -msgstr "Silent" +msgstr "Silenzioso" msgid "Standard" msgstr "Standard" @@ -3842,24 +3980,15 @@ msgstr "Ludicrous" msgid "Can't start this without SD card." msgstr "Impossibile iniziare senza scheda MicroSD." -msgid "Failed to connect to the server" -msgstr "Failed to connect to the server" - msgid "Status" msgstr "Stato" -msgid "Media" -msgstr "Media" - msgid "Update" -msgstr "Update" +msgstr "Aggiorna" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Failed to connect to the printer" - msgid "Don't show again" msgstr "Non mostrare più" @@ -3873,7 +4002,7 @@ msgstr "%s ha riscontrato un errore" #, c-format, boost-format msgid "%s warning" -msgstr "Avviso %s" +msgstr "attenzione %s" #, c-format, boost-format msgid "%s has a warning" @@ -3881,32 +4010,32 @@ msgstr "%s ha un avviso" #, c-format, boost-format msgid "%s info" -msgstr "Informazioni %s " +msgstr "info %s" #, c-format, boost-format msgid "%s information" msgstr "%s informazioni" msgid "Skip" -msgstr "Skip" +msgstr "Salta" msgid "3D Mouse disconnected." msgstr "Mouse 3D disconnesso." msgid "Configuration can update now." -msgstr "A new configuration is available. Update now?" +msgstr "È disponibile una nuova configurazione. Aggiorna adesso?" msgid "Detail." -msgstr "More" +msgstr "Altro" msgid "Integration was successful." -msgstr "Integration was successful." +msgstr "L'integrazione è avvenuta con successo." msgid "Integration failed." -msgstr "Integration failed." +msgstr "Integrazione fallita." msgid "Undo integration was successful." -msgstr "Undo integration was successful." +msgstr "Annullamento integrazione riuscita." msgid "New network plug-in available." msgstr "Nuovo plug-in di network disponibile" @@ -3915,16 +4044,16 @@ msgid "Details" msgstr "Dettagli" msgid "Undo integration failed." -msgstr "Undo integration failed." +msgstr "Annullamento integrazione non riuscito." msgid "Exporting." -msgstr "Esportazione." +msgstr "Esportazione" msgid "Software has New version." -msgstr "An update is available!" +msgstr "Aggiornamento disponibile!" msgid "Goto download page." -msgstr "Go to download page" +msgstr "Vai alla pagina di download" msgid "Open Folder." msgstr "Apri Cartella." @@ -3935,14 +4064,14 @@ msgstr "Rimuovi l'hardware in modo sicuro." #, c-format, boost-format msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." -msgstr[0] "%1$d Object has custom supports." -msgstr[1] "%1$d Objects have custom supports." +msgstr[0] "%1$d L'oggetto ha supporti personalizzati." +msgstr[1] "%1$d Gli oggetti hanno supporti personalizzati." #, c-format, boost-format msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." -msgstr[0] "%1$d Object has color painting." -msgstr[1] "%1$d Objects have color painting." +msgstr[0] "%1$d L'oggetto ha una pittura a colori." +msgstr[1] "%1$d Gli oggetti hanno una pittura a colori." #, c-format, boost-format msgid "%1$d object was loaded as a part of cut object." @@ -3963,16 +4092,16 @@ msgid "Cancel upload" msgstr "Annulla caricamento" msgid "Slice ok." -msgstr "Slice complete" +msgstr "Slice completo" msgid "Jump to" -msgstr "Jump to" +msgstr "Vai a" msgid "Error:" -msgstr "Error:" +msgstr "Errore:" msgid "Warning:" -msgstr "Warning:" +msgstr "Attenzione:" msgid "Export successfully." msgstr "Esportato correttamente" @@ -3981,7 +4110,7 @@ msgid "Serious warning:" msgstr "" msgid " (Repair)" -msgstr " (Repair)" +msgstr "(Ripara)" msgid " Click here to install it." msgstr "Clicca per installarlo." @@ -3990,16 +4119,16 @@ msgid "WARNING:" msgstr "ATTENZIONE:" msgid "Your model needs support ! Please make support material enable." -msgstr "Your model needs support! Please enable support material." +msgstr "Il modello necessita di supporti! Abilita i materiali di supporto." msgid "Gcode path overlap" -msgstr "G-code path overlap" +msgstr "Sovrapposizione del percorso G-code" msgid "Support painting" -msgstr "Support Painting" +msgstr "Pittura Supporti" msgid "Color painting" -msgstr "Color Painting" +msgstr "Pittura a colori" msgid "Cut connectors" msgstr "Taglia connettori" @@ -4014,11 +4143,11 @@ msgid "" "The application cannot run normally because OpenGL version is lower than " "2.0.\n" msgstr "" -"The application cannot run normally because your OpenGL version is lower " -"than 2.0.\n" +"L'applicazione non può essere eseguita normalmente perché la versione OpenGL " +"è precedente alla 2.0.\n" msgid "Please upgrade your graphics card driver." -msgstr "Please upgrade your graphics card driver." +msgstr "Aggiorna i driver della scheda grafica." msgid "Unsupported OpenGL version" msgstr "Versione OpenGL non supportata" @@ -4028,7 +4157,7 @@ msgid "" "Unable to load shaders:\n" "%s" msgstr "" -"Unable to load shaders:\n" +"Impossibile caricare gli shader:\n" "%s" msgid "Error loading shaders" @@ -4065,35 +4194,32 @@ msgid "Auto-recovery from step loss" msgstr "Recupero automatico perdita passi" msgid "Global" -msgstr "Global" +msgstr "Globale" msgid "Objects" -msgstr "Objects" +msgstr "Oggetti" msgid "Advance" -msgstr "Advanced" +msgstr "Avanzate" msgid "Compare presets" -msgstr "Confronta i preset" +msgstr "Confronta presets" msgid "View all object's settings" -msgstr "View all object's settings" +msgstr "Visualizza tutte le impostazioni oggetto" msgid "Filament settings" -msgstr "Filament settings" +msgstr "Impostazioni Filamento" msgid "Printer settings" -msgstr "Printer settings" - -msgid "Untitled" -msgstr "Senza titolo" +msgstr "Impostazioni stampante" #, boost-format -msgid " plate %1%:" -msgstr " plate %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" -msgstr "Invalid name, the following characters are not allowed:" +msgstr "Nome non valido, i seguenti caratteri non sono consentiti:" msgid "Sliced Info" msgstr "Informazioni processo" @@ -4108,13 +4234,13 @@ msgid "Used Filament (g)" msgstr "Filamento usato (g)" msgid "Used Materials" -msgstr "Used Materials" +msgstr "Materiali usati" msgid "Estimated time" -msgstr "Estimated time" +msgstr "Tempo stimato" msgid "Filament changes" -msgstr "Filament changes" +msgstr "Cambi filamento" msgid "Click to edit preset" msgstr "Clicca per modificare il preset" @@ -4123,10 +4249,10 @@ msgid "Connection" msgstr "Connessione" msgid "Bed type" -msgstr "Bed type" +msgstr "Tipo di piatto" msgid "Flushing volumes" -msgstr "Flushing volumes" +msgstr "Volumi di spurgo" msgid "Add one filament" msgstr "Aggiungere un filamento" @@ -4174,14 +4300,14 @@ msgstr "" "Non ci sono filamenti compatibili, la sincronizzazione non viene eseguita." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, boost-format msgid "Do you want to save changes to \"%1%\"?" -msgstr "Do you want to save changes to \"%1%\"?" +msgstr "Vuoi salvare le modifiche a \"%1%\"?" #, c-format, boost-format msgid "" @@ -4197,10 +4323,10 @@ msgstr "Espulsione del dispositivo %s (%s) non riuscita." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "" -"Previously unsaved items have been detected. Do you want to restore them?" +"Sono stati rilevati elementi precedentemente non salvati. Vuoi ripristinarli?" msgid "Restore" -msgstr "Restore" +msgstr "Ripristina" msgid "" "The bed temperature exceeds filament's vitrification temperature. Please " @@ -4221,7 +4347,7 @@ msgstr "" #, c-format, boost-format msgid "Loading file: %s" -msgstr "Loading file: %s" +msgstr "Caricamento file: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "Il 3mf non proviene da Bambu Lab, carica solo dati geometrici." @@ -4232,8 +4358,10 @@ msgstr "Carica 3mf" msgid "The Config can not be loaded." msgstr "La configurazione non può essere caricata." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" +"Il 3mf è stato generato da una vecchia versione di Bambu Studio, caricando " +"solo i dati geometrici." #, c-format, boost-format msgid "" @@ -4244,10 +4372,10 @@ msgstr "" "chiavi non riconosciute:" msgid "You'd better upgrade your software.\n" -msgstr "You should update your software.\n" +msgstr "Devi aggiornare il software.\n" msgid "Newer 3mf version" -msgstr "Newer 3mf version" +msgstr "Versione 3mf più recente" #, c-format, boost-format msgid "" @@ -4267,34 +4395,38 @@ msgid "The 3mf is not compatible, load geometry data only!" msgstr "Il 3mf non è compatibile, carica solo i dati della geometria!" msgid "Incompatible 3mf" -msgstr "Incompatible 3mf" +msgstr "3mf incompatibile" msgid "Name of components inside step file is not UTF8 format!" -msgstr "Component name(s) inside step file not in UTF8 format!" +msgstr "" +"Il nome/i del componente all'interno del file step non è in formato UTF8!" msgid "The name may show garbage characters!" -msgstr "Because of unsupported text encoding, garbage characters may appear!" +msgstr "" +"A causa di una codifica del testo non supportata, potrebbero apparire " +"caratteri inutili!" #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." -msgstr "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "" +"Caricamento del file \"%1%\" non riuscito. Trovata configurazione non valida." msgid "Objects with zero volume removed" -msgstr "Objects with zero volume removed" +msgstr "Oggetti con volume zero rimossi" msgid "The volume of the object is zero" -msgstr "The volume of the object is zero" +msgstr "Il volume dell'oggetto è zero" #, 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 "" -"The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"L'oggetto del file %s è troppo piccolo e può essere in metri o pollici.\n" +" Si desidera scalare in millimetri?" msgid "Object too small" -msgstr "Object too small" +msgstr "Oggetto troppo piccolo" msgid "" "This file contains several objects positioned at multiple heights.\n" @@ -4309,13 +4441,13 @@ msgid "Multi-part object detected" msgstr "Rilevato oggetto in più parti" msgid "Load these files as a single object with multiple parts?\n" -msgstr "Load these files as a single object with multiple parts?\n" +msgstr "Caricare questi file come un singolo oggetto con più parti?\n" msgid "Object with multiple parts was detected" -msgstr "An object with multiple parts was detected" +msgstr "È stato rilevato un oggetto con più parti" msgid "The file does not contain any geometry data." -msgstr "The file does not contain any geometry data." +msgstr "Il file non contiene dati geometrici." msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " @@ -4346,10 +4478,10 @@ msgstr "" "In seguito, la coerenza del modello non può essere garantita." msgid "The selected object couldn't be split." -msgstr "The selected object couldn't be split." +msgstr "L'oggetto selezionato non può essere diviso." msgid "Another export job is running." -msgstr "Another export job is running." +msgstr "È in esecuzione un altro processo di esportazione." msgid "Select a new file" msgstr "Seleziona nuovo file" @@ -4361,16 +4493,16 @@ msgid "Error during replace" msgstr "Errore durante la sostituzione" msgid "Please select a file" -msgstr "Please select a file" +msgstr "Seleziona file" msgid "Slicing" msgstr "Slicing" msgid "There are warnings after slicing models:" -msgstr "There are warnings after slicing models:" +msgstr "Ci sono avvisi dopo aver elaborato i modelli:" msgid "warnings" -msgstr "warnings" +msgstr "Avvisi" msgid "Invalid data" msgstr "Dati non validi" @@ -4380,10 +4512,10 @@ msgstr "Slicing Annullato" #, c-format, boost-format msgid "Slicing Plate %d" -msgstr "Slicing Plate %d" +msgstr "Slicing Piatto %d" msgid "Please resolve the slicing errors and publish again." -msgstr "Please resolve the slicing errors and publish again." +msgstr "Risolvi gli errori di slicing e pubblica nuovamente." msgid "" "Network Plug-in is not detected. Network related features are unavailable." @@ -4399,13 +4531,14 @@ msgstr "" "Il file caricato contiene solo G-code, non può accedere alla pagina Prepara" msgid "You can keep the modified presets to the new project or discard them" -msgstr "You can keep the modified presets for the new project or discard them" +msgstr "" +"È possibile conservare i preset modificati per il nuovo progetto o eliminarli" msgid "Creating a new project" -msgstr "Creazione nuovo progetto" +msgstr "Crea un nuovo progetto" msgid "Load project" -msgstr "Load project" +msgstr "Carica progetto" msgid "" "Failed to save the project.\n" @@ -4436,16 +4569,16 @@ msgid "The selected file" msgstr "Il file selezionato" msgid "does not contain valid gcode." -msgstr "non contiene un g-code valido." +msgstr "non contiene G-code valido." msgid "Error occurs while loading G-code file" -msgstr "An Error has occurred while loading the G-code file." +msgstr "Si è verificato un errore durante il caricamento del file G-code." msgid "Drop project file" -msgstr "Drop project file" +msgstr "Elimina il file di progetto" msgid "Please select an action" -msgstr "Please select an action" +msgstr "Seleziona un'azione" msgid "Open as project" msgstr "Apri come progetto" @@ -4454,33 +4587,33 @@ msgid "Import geometry only" msgstr "Importa solo la geometria" msgid "Only one G-code file can be opened at the same time." -msgstr "Only one G-code file can be opened at a time." +msgstr "È possibile aprire un solo file G-code alla volta." msgid "G-code loading" -msgstr "G-code loading" +msgstr "Caricamento G-code" msgid "G-code files can not be loaded with models together!" -msgstr "G-code files and models cannot be loaded together!" +msgstr "I file e i modelli G-code non possono essere caricati insieme!" msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "Impossibile aggiungere modelli in modalità anteprima" msgid "Add Models" -msgstr "Add Models" +msgstr "Aggiungi modelli" msgid "All objects will be removed, continue?" msgstr "Saranno rimossi tutti gli oggetti, continuare?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"The current project has unsaved changes. Would you like to save before " -"continuing?" +"Il progetto corrente ha modifiche non salvate. Desideri salvarle prima di " +"continuare?" msgid "Remember my choice." msgstr "Ricorda la mia scelta" msgid "Number of copies:" -msgstr "Number of copies:" +msgstr "Numero di copie:" msgid "Copies of the selected object" msgstr "Copie dell'oggetto selezionato" @@ -4489,7 +4622,7 @@ msgid "Save G-code file as:" msgstr "Salva il file G-code come:" msgid "Save Sliced file as:" -msgstr "Save Sliced file as:" +msgstr "Salva file elaborato come:" #, c-format, boost-format msgid "" @@ -4510,8 +4643,9 @@ msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." msgstr "" -"Print By Object: \n" -"We suggest using auto-arrange to avoid collisions when printing." +"Stampa per oggetto: \n" +"Ti consigliamo di utilizzare la disposizione automatica per evitare " +"collisioni durante la stampa." msgid "Send G-code" msgstr "Invia G-code" @@ -4520,10 +4654,12 @@ msgid "Send to printer" msgstr "Manda alla stampante" msgid "Custom supports and color painting were removed before repairing." -msgstr "Custom supports and color painting were removed before repairing." +msgstr "" +"I supporti personalizzati e la pittura a colori sono stati rimossi prima " +"della riparazione." msgid "Invalid number" -msgstr "Invalid number" +msgstr "Numero non valido" msgid "Plate Settings" msgstr "Impostazioni Piatto" @@ -4538,19 +4674,19 @@ msgstr "" #, boost-format msgid "Part name: %1%\n" -msgstr "Part name: %1%\n" +msgstr "Nome parte: %1%\n" #, boost-format msgid "Object name: %1%\n" -msgstr "Object name: %1%\n" +msgstr "Nome oggetto: %1%\n" #, boost-format msgid "Size: %1% x %2% x %3% in\n" -msgstr "Size: %1% x %2% x %3% in\n" +msgstr "Dimensioni: %1% x %2% x %3% in\n" #, boost-format msgid "Size: %1% x %2% x %3% mm\n" -msgstr "Size: %1% x %2% x %3% mm\n" +msgstr "Dimensioni: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" @@ -4562,15 +4698,17 @@ msgstr "Volume: %1% mm³\n" #, boost-format msgid "Triangles: %1%\n" -msgstr "Triangles: %1%\n" +msgstr "Triangoli: %1%\n" msgid "Tips:" msgstr "Suggerimenti:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" +"La funzione \"Correggi modello\" è attualmente disponibile solo su Windows. " +"Si prega di riparare il modello su Bambu Studio (Windows) o su software CAD." #, c-format, boost-format msgid "" @@ -4583,28 +4721,28 @@ msgstr "" "un numero diverso da zero." msgid "Switching the language requires application restart.\n" -msgstr "Switching languages requires the application to restart.\n" +msgstr "Il cambio lingua richiede il riavvio dell'applicazione.\n" msgid "Do you want to continue?" -msgstr "Do you want to continue?" +msgstr "Vuoi continuare?" msgid "Language selection" msgstr "Selezione lingua" msgid "Switching application language while some presets are modified." -msgstr "Switching application language while some presets are modified." +msgstr "Cambio lingua applicazione durante la modifica di alcuni preset." msgid "Changing application language" -msgstr "Changing application language" +msgstr "Modifica lingua applicazione" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "La modifica della regione ti disconnetterà dal tuo account.\n" msgid "Region selection" -msgstr "Region selection" +msgstr "Selezione Paese" msgid "Second" -msgstr "Second" +msgstr "Secondo" msgid "Browse" msgstr "Sfoglia" @@ -4613,37 +4751,34 @@ msgid "Choose Download Directory" msgstr "Scegliere la directory di download" msgid "General Settings" -msgstr "General Settings" +msgstr "Impostazioni generali" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Asia-Pacifico" msgid "China" -msgstr "China" +msgstr "Cina" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" -msgstr "North America" +msgstr "Nord America" msgid "Others" -msgstr "Others" +msgstr "Altro" msgid "Login Region" -msgstr "Login Region" - -msgid "Stealth Mode" -msgstr "" +msgstr "Regione di accesso" msgid "Metric" -msgstr "Metric" +msgstr "Metrico" msgid "Imperial" -msgstr "Imperial" +msgstr "Imperiale" msgid "Units" -msgstr "Units" +msgstr "Unità" msgid "Zoom to mouse position" msgstr "Zoom posizione del mouse" @@ -4661,20 +4796,15 @@ msgstr "Mostra \"Suggerimento del giorno\" dopo l'avvio" msgid "If enabled, useful hints are displayed at startup." msgstr "Se abilitato, all'avvio vengono visualizzati suggerimenti utili." -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Preset" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets (Printer/Filament/Process)" +msgstr "" +"Sincronizzazione automatica preset utente (stampante/filamento/processo)" msgid "User Sync" -msgstr "User Sync" +msgstr "Sincronizza utente" msgid "Update built-in Presets automatically." msgstr "Aggiorna automaticamente i preset." @@ -4685,32 +4815,38 @@ msgstr "Sincronizzazione sistema" msgid "Clear my choice on the unsaved presets." msgstr "Cancella la mia scelta sui preset non salvati." -msgid "Associate files to OrcaSlicer" -msgstr "Associate files to Orca Slicer" +msgid "Associate files to BambuStudio" +msgstr "Associa i file a Bambu Studio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Associate .3mf files to Orca Slicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Associa i file .3mf a Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .3mf " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .3mf." -msgid "Associate .stl files to OrcaSlicer" -msgstr "Associate .stl files to Orca Slicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Associa i file .stl a Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .stl " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .stl." -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Associate .step/.stp files to Orca Slicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Associa i file .step/.stp a Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"If enabled, this sets Orca Slicer as the default application to open .step " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .step." + +msgid "Online Models" +msgstr "Modelli Online" + +msgid "Show online staff-picked models on the home page" +msgstr "Mostra i modelli online selezionati dallo staff nella home page" msgid "Maximum recent projects" msgstr "Numero massimo di progetti recenti" @@ -4722,7 +4858,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Cancella la mia scelta sui progetti non salvati." msgid "Auto-Backup" -msgstr "Auto-Backup" +msgstr "Backup automatico" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -4745,59 +4881,68 @@ msgstr "Modalità Scura" msgid "Enable Dark mode" msgstr "Attiva modalità Scura" +msgid "Develop mode" +msgstr "Modalità sviluppatore" + +msgid "Skip AMS blacklist check" +msgstr "Salta check Blacklist AMS" + msgid "Home page and daily tips" -msgstr "Home page and daily tips" +msgstr "Home page e suggerimenti quotidiani" msgid "Show home page on startup" -msgstr "Show home page on startup" +msgstr "Mostra pagina iniziale all'avvio" msgid "Sync settings" -msgstr "Sync settings" +msgstr "Impostazioni sincronizzazione" msgid "User sync" -msgstr "User sync" +msgstr "Sincronizza utente" msgid "Preset sync" -msgstr "Preset sync" +msgstr "Sincronizzazione preset" msgid "Preferences sync" -msgstr "Preferences sync" +msgstr "Sincronizzazione preferenze" msgid "View control settings" -msgstr "View control settings" +msgstr "Visualizza impostazioni di controllo" msgid "Rotate of view" -msgstr "Rotate View" +msgstr "Ruota vista" msgid "Move of view" -msgstr "Pan View" +msgstr "Vista panoramica" msgid "Zoom of view" -msgstr "Zoom View" +msgstr "Vista Zoom" msgid "Other" msgstr "Altro" msgid "Mouse wheel reverses when zooming" -msgstr "Reverse scroll direction while zooming" +msgstr "Invertire la direzione di scorrimento durante lo zoom" -msgid "Develop mode" -msgstr "Developer mode" +msgid "Enable SSL(MQTT)" +msgstr "Abilita SSL (MQTT)" -msgid "Dump video" -msgstr "Dump video" +msgid "Enable SSL(FTP)" +msgstr "Abilita SSL (FTP)" + +msgid "Internal developer mode" +msgstr "Modalità sviluppatore interno" msgid "Log Level" -msgstr "Log Level" +msgstr "Livello log" msgid "fatal" -msgstr "fatal" +msgstr "fatale" msgid "error" -msgstr "error" +msgstr "Errore" msgid "warning" -msgstr "warning" +msgstr "attenzione" msgid "info" msgstr "info" @@ -4806,10 +4951,10 @@ msgid "debug" msgstr "debug" msgid "trace" -msgstr "trace" +msgstr "Traccia" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Impostazione host" msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "DEV host: api-dev.bambu-lab.com/v1" @@ -4821,22 +4966,22 @@ msgid "PRE host: api-pre.bambu-lab.com/v1" msgstr "PRE host: api-pre.bambu-lab.com/v1" msgid "Product host" -msgstr "Product host" +msgstr "Host del prodotto" msgid "debug save button" -msgstr "Debug save button" +msgstr "Pulsante salvataggio debug" msgid "save debug settings" -msgstr "save debug settings" +msgstr "salva impostazioni debug" msgid "DEBUG settings have saved successfully!" -msgstr "Debug settings have been saved successfully!" +msgstr "Le impostazioni di debug sono state salvate correttamente!" msgid "Switch cloud environment, Please login again!" msgstr "Cambia ambiente cloud; Effettua nuovamente il login!" msgid "System presets" -msgstr "Preset di sistema" +msgstr "Preset sistema" msgid "User presets" msgstr "Preset utente" @@ -4845,10 +4990,10 @@ msgid "Incompatible presets" msgstr "Preset incompatibili" msgid "AMS filaments" -msgstr "AMS filament" +msgstr "Filamento AMS" msgid "Click to pick filament color" -msgstr "Click to select filament color" +msgstr "Fai click per selezionare il colore del filamento" msgid "Please choose the filament colour" msgstr "Si prega di scegliere il colore del filamento" @@ -4860,7 +5005,7 @@ msgid "Edit preset" msgstr "Modifica preset" msgid "Project-inside presets" -msgstr "Project-inside presets" +msgstr "Preset interno al progetto" msgid "Add/Remove filaments" msgstr "Aggiungi/rimuovi filamento" @@ -4871,42 +5016,39 @@ msgstr "Aggiungi/rimuovi materiali" msgid "Add/Remove printers" msgstr "Aggiungi/Rimuovi stampanti" +msgid "Incompatible" +msgstr "Non compatibile" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Uguale a Sequenza stampa globale" msgid "Print sequence" -msgstr "Print sequence" - -msgid "Plate name" -msgstr "Nome Piatto" +msgstr "Sequenza di stampa" msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Uguale al tipo di piano globale" + msgid "Same as Global Bed Type" msgstr "Uguale al tipo di piano globale" -msgid "Cool Plate" -msgstr "Cool Plate" - -msgid "Engineering Plate" -msgstr "Engineering Plate" - -msgid "High Temp Plate" -msgstr "High Temp Plate" - -msgid "Textured PEI Plate" -msgstr "Textured PEI Plate" - msgid "By Layer" msgstr "Per layer" msgid "By Object" msgstr "Per oggetto" +msgid "Plate name" +msgstr "Nome Piatto" + msgid "Accept" msgstr "Accetta" @@ -4914,80 +5056,82 @@ msgid "Log Out" msgstr "Log Out" msgid "Slice all plate to obtain time and filament estimation" -msgstr "Slice all plates to obtain time and filament estimation" +msgstr "Slice di tutti i piatti per ottenere una stima del tempo e filamento" msgid "Packing project data into 3mf file" -msgstr "Packing project data into 3mf file" +msgstr "Packing dati progetto in 3mf file" msgid "Uploading 3mf" -msgstr "Uploading 3mf" +msgstr "Caricamento 3mf" msgid "Jump to model publish web page" -msgstr "Jump to model publish web page" +msgstr "Vai alla pagina web di pubblicazione del modello" msgid "Note: The preparation may takes several minutes. Please be patiant." -msgstr "Note: The preparation may take several minutes. Please be patient." +msgstr "" +"Nota: la preparazione può richiedere alcuni minuti. Si prega di avere " +"pazienza." msgid "Publish" -msgstr "Publish" +msgstr "Pubblica" msgid "Publish was cancelled" -msgstr "Publish was cancelled" +msgstr "La pubblicazione è stata annullata" msgid "Slicing Plate 1" -msgstr "Slicing Plate 1" +msgstr "Slicing Piatto 1" msgid "Packing data to 3mf" msgstr "Packing data to 3mf" msgid "Jump to webpage" -msgstr "Jump to webpage" +msgstr "Vai alla pagina web" #, c-format, boost-format msgid "Save %s as" -msgstr "Save %s as" +msgstr "Salva %s come" msgid "User Preset" -msgstr "User Preset" +msgstr "Preset utente" msgid "Project Inside Preset" -msgstr "Project Inside Preset" +msgstr "Preset interno al Progetto" msgid "Name is invalid;" -msgstr "Name is invalid;" +msgstr "Nome non valido" msgid "illegal characters:" -msgstr "Illegal characters:" +msgstr "Caratteri illegali:" msgid "illegal suffix:" -msgstr "Illegal suffix:" +msgstr "Suffisso illegale:" msgid "Name is unavailable." -msgstr "Name is unavailable." +msgstr "Nome non disponibile" msgid "Overwrite a system profile is not allowed" -msgstr "Overwriting a system profile is not allowed." +msgstr "Non è consentito sovrascrivere un profilo di sistema." #, boost-format msgid "Preset \"%1%\" already exists." -msgstr "Preset \"%1%\" already exists." +msgstr "Preset \"%1%\" esiste già." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." msgstr "" -"Preset \"%1%\" already exists and is incompatible with the current printer." +"Preset \"%1%\" esiste già ma è incompatibile con la stampante corrente." msgid "Please note that saving action will replace this preset" -msgstr "Please note that saving will overwrite the current preset." +msgstr "Tieni presente che il salvataggio sovrascriverà il preset corrente." msgid "The name is not allowed to be empty." -msgstr "The name field is not allowed to be empty." +msgstr "Il campo nome non può essere vuoto." msgid "The name is not allowed to start with space character." -msgstr "The name is not allowed to start with a space." +msgstr "Il nome non può iniziare con uno spazio." msgid "The name is not allowed to end with space character." -msgstr "The name is not allowed to end with a space." +msgstr "Il nome non può terminare con uno spazio." msgid "The name cannot be the same as a preset alias name." msgstr "Il nome non può essere uguale a quello di un preset." @@ -5001,54 +5145,60 @@ msgstr "Copia" #, boost-format msgid "Printer \"%1%\" is selected with preset \"%2%\"" -msgstr "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "La stampante \"%1%\" è selezionata con il preset \"%2%\"" #, boost-format msgid "Please choose an action with \"%1%\" preset after saving." -msgstr "Please choose an action with \"%1%\" preset after saving." +msgstr "Scegli un'azione con \"%1%\" preimpostata dopo il salvataggio." #, boost-format msgid "For \"%1%\", change \"%2%\" to \"%3%\" " -msgstr "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "Per \"%1%\", cambia \"%2%\" con \"%3%\"." #, boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" -msgstr "For \"%1%\", add \"%2%\" as a new preset" +msgstr "Per \"%1%\", aggiungere \"%2%\" come nuovo preset" #, boost-format msgid "Simply switch to \"%1%\"" -msgstr "Simply switch to \"%1%\"" +msgstr "Basta passare a \"%1%\"" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Attività annullata" msgid "(LAN)" msgstr "(LAN)" msgid "My Device" -msgstr "My Device" +msgstr "Mio dispositivo" msgid "Other Device" -msgstr "Other Device" +msgstr "Altro dispositivo" + +msgid "Online" +msgstr "Online" msgid "Input access code" -msgstr "Input access code" +msgstr "Inserisci codice di accesso" msgid "Can't find my devices?" msgstr "Non riesci a trovare i dispositivi?" msgid "Log out successful." -msgstr "Log out successful." +msgstr "Log out riuscito." + +msgid "Offline" +msgstr "Off-line" msgid "Busy" -msgstr "Busy" +msgstr "Occupato" msgid "Bambu Cool Plate" msgstr "Bambu Cool Plate" +msgid "PLA Plate" +msgstr "PLA Plate" + msgid "Bamabu Engineering Plate" msgstr "Bambu Engineering Plate" @@ -5056,31 +5206,45 @@ msgid "Bamabu High Temperature Plate" msgstr "Bambu High Temperature Plate" msgid "Send print job to" -msgstr "Send print job to" +msgstr "Invia stampa a" msgid "Refresh" -msgstr "Refresh" +msgstr "Aggiorna" msgid "Bed Leveling" -msgstr "Bed leveling" +msgstr "Livellamento piano" -msgid "Flow Calibration" -msgstr "Flow calibration" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Impossibile connettersi alla stampante" msgid "send completed" -msgstr "Send complete" +msgstr "Invio completo" + +msgid "Error code" +msgstr "Codice di errore" + +msgid "Check the status of current system services" +msgstr "Verifica lo stato attuale dei servizi di sistema." + +msgid "Printer local connection failed, please try again." +msgstr "Connessione locale della stampante fallita; Si prega di riprovare." msgid "No login account, only printers in LAN mode are displayed" -msgstr "No login account, only printers in LAN mode are displayed" +msgstr "" +"Nessun account di login, vengono visualizzate solo le stampanti in modalità " +"LAN" msgid "Connecting to server" -msgstr "Connecting to server" +msgstr "Connessione in corso al server" msgid "Synchronizing device information" -msgstr "Synchronizing device information" +msgstr "Sincronizzazione informazioni dispositivo" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information timed out" +msgstr "La sincronizzazione informazioni dispositivo è scaduta" msgid "Cannot send the print job when the printer is updating firmware" msgstr "" @@ -5089,11 +5253,10 @@ msgstr "" msgid "" "The printer is executing instructions. Please restart printing after it ends" -msgstr "" -"The printer is executing instructions. Please restart printing after it ends" +msgstr "La stampante sta eseguendo le istruzioni. Riavvia la stampa al termine" msgid "The printer is busy on other print job" -msgstr "The printer is busy with another print job." +msgstr "La stampante è occupata con altro lavoro di stampa." #, c-format, boost-format msgid "" @@ -5114,15 +5277,15 @@ msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" -"Filaments to AMS slots mappings have been established. You can click a " -"filament above to change its mapping AMS slot" +"La mappatura tra slot AMS e filamenti è stata effettuata. È possibile fare " +"clic su un filamento in alto per modificare il relativo slot AMS" msgid "" "Please click each filament above to specify its mapping AMS slot before " "sending the print job" msgstr "" -"Please click each filament above to specify its mapping AMS slot before " -"sending the print job" +"Fai clic su ciascun filamento in alto per specificare lo slot AMS di " +"mappatura prima di inviare il lavoro di stampa" #, c-format, boost-format msgid "" @@ -5149,6 +5312,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "È necessario inserire una scheda microSD prima di stampare." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "È necessario inserire una scheda microSD per registrare un timelapse." @@ -5198,52 +5364,165 @@ msgid "" msgstr "" "Fai clic sul pulsante di conferma se desideri continuare con la stampa." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" -msgstr "Preparing print job" +msgstr "Preparazione lavoro di stampa" + +msgid "Abnormal print file data. Please slice again" +msgstr "Dati file di stampa anormali. Eseguire nuovamente l'elaborazione" + +msgid "The name length exceeds the limit." +msgstr "La lunghezza del nome supera il limite." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" msgid "Modifying the device name" -msgstr "Modifying the device name" +msgstr "Modifica nome del dispositivo" msgid "Send to Printer SD card" msgstr "Invia a microSD stampante" msgid "Cannot send the print task when the upgrade is in progress" -msgstr "Cannot send print tasks when an update is in progress" +msgstr "" +"Impossibile inviare attività di stampa quando è in corso un aggiornamento" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "È necessario inserire una scheda MicroSD prima di inviare alla scheda SD " "della stampante." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "" +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "La stampante deve essere sulla stessa LAN di Bambu Studio." msgid "The printer does not support sending to printer SD card." msgstr "La stampante non supporta l'invio alla scheda microSD della stampante." +msgid "Failed to create socket" +msgstr "Impossibile creare il socket" + +msgid "Failed to connect socket" +msgstr "Connessione del socket non riuscita" + +msgid "Failed to publish login request" +msgstr "Non è stato possibile pubblicare la richiesta di login" + +msgid "Get ticket from device timeout" +msgstr "Timeout durante il recupero del Ticket dal dispositivo." + +msgid "Get ticket from server timeout" +msgstr "Timeout durante il recupero del Ticket dal server." + +msgid "Failed to post ticket to server" +msgstr "Inserimento del ticket sul server non riuscito" + +msgid "Failed to parse login report reason" +msgstr "Non è stato possibile analizzare la causa del rapporto di login." + +msgid "Receive login report timeout" +msgstr "Timeout ricezione del rapporto di login" + +msgid "Unknown Failure" +msgstr "Fallimento sconosciuto" + msgid "Log in printer" -msgstr "Log in printer" +msgstr "Log in stampante" msgid "Would you like to log in this printer with current account?" -msgstr "Would you like to log in this printer with the current account?" +msgstr "Vuoi accedere alla stampante con l'account corrente?" + +msgid "Check the reason" +msgstr "Verifica la causa" + +msgid "Read and accept" +msgstr "Leggi e accetta" + +msgid "Terms and Conditions" +msgstr "Termini e condizioni" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"Grazie per aver acquistato un dispositivo Bambu Lab. Prima di utilizzare il " +"dispositivo Bambu Lab, si prega di leggere i termini e le condizioni. " +"Facendo clic per accettare di utilizzare il tuo dispositivo Bambu Lab, " +"accetti di rispettare l'Informativa sulla privacy e le Condizioni d'uso " +"(collettivamente, i \"Termini\"). Se non rispetti o non accetti " +"l'Informativa sulla privacy di Bambu Lab, ti preghiamo di non utilizzare i " +"dispositivi e i servizi di Bambu Lab." + +msgid "and" +msgstr "e" + +msgid "Privacy Policy" +msgstr "Informativa Privacy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "Chiediamo il tuo aiuto per migliorare tutte le stampanti" + +msgid "Statement about User Experience Improvement Program" +msgstr "Dichiarazione del programma miglioramento dell'esperienza utente" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"Nella comunità della stampa 3D, impariamo dai successi e dagli insuccessi " +"degli altri per adattare i nostri parametri e impostazioni di slicing. %s " +"segue lo stesso principio e utilizza l'apprendimento automatico per " +"migliorare le sue prestazioni basandosi sui successi e sugli insuccessi di " +"un vasto numero di stampe effettuate dai nostri utenti. Stiamo addestrando " +"%s affinché diventi più intelligente alimentandolo con dati reali. Se sei " +"d'accordo, questo servizio accederà alle informazioni dai tuoi registri " +"degli errori e dai registri di utilizzo, che possono includere informazioni " +"descritte nell'Informativa sulla privacy. Non raccoglieremo alcun Dato " +"Personale con il quale un individuo possa essere identificato direttamente o " +"indirettamente, incluso, a titolo esemplificativo, nomi, indirizzi, " +"informazioni di pagamento o numeri di telefono. Abilitando questo servizio, " +"accetti questi termini e la dichiarazione sull'Informativa sulla privacy." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Dichiarazione del piano miglioramento dell'esperienza utente" msgid "Log in successful." -msgstr "Log in successful." +msgstr "Log in effettuato con successo." msgid "Log out printer" -msgstr "Log out printer" +msgstr "Log out dalla stampante" msgid "Would you like to log out the printer?" -msgstr "Would you like to log out the printer?" +msgstr "Vuoi disconnettere la stampante?" msgid "Please log in first." -msgstr "Please log in first." +msgstr "Prima effettua il login." msgid "There was a problem connecting to the printer. Please try again." -msgstr "There was a problem connecting to the printer. Please try again." +msgstr "Si è verificato un problema di connessione alla stampante. Riprovare." msgid "Failed to log out." -msgstr "Failed to log out." +msgstr "Disconnessione non riuscita." #. TRN "Save current Settings" #, c-format, boost-format @@ -5327,52 +5606,50 @@ msgstr "" "piatto e scegli \"Aggiungi primitiva\" ->\"Timelapse Torre di pulizia\"»." msgid "Line width" -msgstr "Line width" +msgstr "Larghezza linea" msgid "Seam" -msgstr "Seam" +msgstr "Giuntura" msgid "Precision" -msgstr "Precision" +msgstr "Precisione" msgid "Wall generator" msgstr "Generatore parete" msgid "Walls" -msgstr "Walls" +msgstr "Pareti" msgid "Top/bottom shells" -msgstr "Top/bottom shells" +msgstr "Gusci superiori/inferiori" + +msgid "Sparse infill" +msgstr "Riempimento" msgid "Initial layer speed" -msgstr "First layer speed" +msgstr "Velocità primo layer" msgid "Other layers speed" -msgstr "Other layers speed" +msgstr "Velocità altri layer" msgid "Overhang speed" -msgstr "Overhang speed" +msgstr "Velocità di sbalzo" 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" msgstr "" -"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" - -msgid "Bridge" -msgstr "Bridge" - -msgid "Set speed for external and internal bridges" -msgstr "" +"È la velocità per vari gradi di sporgenza. I gradi di sporgenza sono " +"espressi come percentuale della larghezza della linea. Velocità 0 significa " +"che non c'è rallentamento per l'intervallo di gradi di sporgenza e viene " +"utilizzata la velocità della parete." msgid "Travel speed" -msgstr "Travel speed" +msgstr "Velocità spostamento" msgid "Acceleration" -msgstr "Acceleration" +msgstr "Accelerazione" msgid "Jerk(XY)" msgstr "" @@ -5381,22 +5658,22 @@ msgid "Raft" msgstr "Raft" msgid "Support filament" -msgstr "Filament for Supports" +msgstr "Filamento per supporti" msgid "Prime tower" msgstr "Prime tower" msgid "Special mode" -msgstr "Special mode" +msgstr "Modalità speciale" msgid "G-code output" msgstr "Uscita G-code" -msgid "Post-processing Scripts" +msgid "Post-processing scripts" msgstr "Script post-elaborazione" msgid "Frequent" -msgstr "Frequent" +msgstr "Frequente" #, c-format, boost-format msgid "" @@ -5408,71 +5685,79 @@ msgid_plural "" "Please remove them, or will beat G-code visualization and printing time " "estimation." msgstr[0] "" -"Following line %s contains reserved keywords.\n" -"Please remove it, or G-code visualization and print time estimation will be " -"broken." +"La riga seguente %s contiene parole chiave riservata.\n" +"Rimuovilo, altrimenti la visualizzazione G-code e la stima del tempo di " +"stampa verranno interrotte." msgstr[1] "" -"Following lines %s contain reserved keywords.\n" -"Please remove them, or G-code visualization and print time estimation will " -"be broken." +"Le righe seguenti %s contengono parole chiavi riservate.\n" +"Rimuovile o la visualizzazione G-code e la stima del tempo di stampa " +"verranno interrotte." msgid "Reserved keywords found" -msgstr "Reserved keywords found" +msgstr "Parole chiave riservate trovate" msgid "Setting Overrides" -msgstr "Setting Overrides" +msgstr "Sovrascrivi impostazioni" msgid "Retraction" msgstr "Retrazione" msgid "Basic information" -msgstr "Basic information" +msgstr "Info di base" msgid "Recommended nozzle temperature" -msgstr "Recommended nozzle temperature" +msgstr "Temperatura nozzle consigliata" msgid "Recommended nozzle temperature range of this filament. 0 means no set" -msgstr "Recommended nozzle temperature range of this filament. 0 means not set" +msgstr "" +"Intervallo di temperatura del nozzle consigliato per questo filamento. 0 " +"significa non impostato" msgid "Recommended temperature range" -msgstr "Recommended temperature range" +msgstr "Intervallo di temperatura consigliato" msgid "Print temperature" -msgstr "Print temperature" +msgstr "Temperatura stampa" msgid "Nozzle" -msgstr "Ugello" +msgstr "Nozzle" msgid "Nozzle temperature when printing" -msgstr "Nozzle temperature when printing" +msgstr "Temperatura del nozzle durante la stampa" -msgid "Cool plate" -msgstr "Cool plate" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"This is the bed temperature when the cool plate is installed. A value of 0 " -"means the filament does not support printing on the Cool Plate." +"Temperatura del piano quando è installato il piatto Cool Plate. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Cool Plate." -msgid "Engineering plate" -msgstr "Engineering plate" +msgid "Engineering Plate" +msgstr "Engineering Plate" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"This is the bed temperature when the engineering plate is installed. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Temperatura del piano quando è installato il piatto Engineering. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Engineering." + +msgid "High Temp Plate" +msgstr "High Temp Plate" 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 "" -"This is the bed temperature when the high temperature plate is installed. A " -"value of 0 means the filament does not support printing on the High Temp " -"Plate." +"Temperatura del piano quando è installato il piatto High Temperature. Il " +"valore 0 significa che il filamento non supporta la stampa su piatto High " +"Temperature." + +msgid "Textured PEI Plate" +msgstr "Textured PEI Plate" msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " @@ -5482,19 +5767,19 @@ msgstr "" "0 significa che il filamento non è supportato sul piatto Textured PEI" msgid "Volumetric speed limitation" -msgstr "Volumetric speed limitation" +msgstr "Limitazione velocità volumetrica" msgid "Cooling" msgstr "Raffreddamento" msgid "Cooling for specific layer" -msgstr "Cooling for specific layer" +msgstr "Raffreddamento per specifico layer" msgid "Part cooling fan" -msgstr "Part cooling fan" +msgstr "Ventola di raffreddamento oggetto" msgid "Min fan speed threshold" -msgstr "Min fan speed threshold" +msgstr "Soglia minima velocità della ventola" msgid "" "Part cooling fan speed will start to run at min speed when the estimated " @@ -5502,113 +5787,96 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"The part cooling fan will run at the minimum fan speed when the estimated " -"layer time is longer than the threshold value. When the layer time is " -"shorter than the threshold, the fan speed will be interpolated between the " -"minimum and maximum fan speed according to layer printing time." +"La ventola di raffreddamento della parte funzionerà alla velocità minima " +"della ventola quando la durata stimata del layer è superiore al valore di " +"soglia. Quando il tempo del layer è inferiore alla soglia, la velocità della " +"ventola verrà interpolata tra la velocità minima e massima della ventola in " +"base al tempo di stampa a layer." msgid "Max fan speed threshold" -msgstr "Max fan speed threshold" +msgstr "Soglia massima velocità della ventola" msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" msgstr "" -"The part cooling fan will run at maximum speed when the estimated layer time " -"is shorter than the threshold value." +"La ventola di raffreddamento funzionerà alla massima velocità quando il " +"tempo layer stimato è inferiore al valore di soglia." msgid "Auxiliary part cooling fan" -msgstr "Auxiliary part cooling fan" +msgstr "Ventola di raffreddamento ausiliaria" msgid "Filament start G-code" -msgstr "Filament start G-code" +msgstr "G-code avvio filamento" msgid "Filament end G-code" -msgstr "Filament end G-code" +msgstr "G-code finale filamento" msgid "Printable space" -msgstr "Printable space" - -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" +msgstr "Spazio di stampa" msgid "Extruder Clearance" msgstr "Spazio estrusore" msgid "Accessory" -msgstr "Accessory" +msgstr "Accessori" msgid "Machine gcode" -msgstr "Machine G-code" +msgstr "G-code" msgid "Machine start G-code" -msgstr "Machine start G-code" +msgstr "start G-code" msgid "Machine end G-code" -msgstr "Machine end G-code" +msgstr "Fine G-code" msgid "Before layer change G-code" msgstr "G-code prima del cambio layer" msgid "Layer change G-code" -msgstr "Layer change G-code" +msgstr "G-code cambio layer" msgid "Change filament G-code" -msgstr "Change filament G-code" +msgstr "G-code cambio filamento" msgid "Pause G-code" -msgstr "Pause G-code" +msgstr "Pausa G-code" msgid "Template Custom G-code" msgstr "Modello G-code personalizzato" msgid "Motion ability" -msgstr "Motion ability" +msgstr "Capacità di movimento" msgid "Normal" msgstr "Normale" msgid "Speed limitation" -msgstr "Speed limitation" +msgstr "Limitazione velocità" msgid "Acceleration limitation" -msgstr "Acceleration limitation" +msgstr "Limita Accelerazione" msgid "Jerk limitation" -msgstr "Jerk limitation" +msgstr "Limitazione jerk" msgid "Layer height limits" msgstr "Limiti altezza layer" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" -msgstr "Retraction when switching material" - -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" +msgstr "Retrazione quando si cambia materiale" msgid "Detached" msgstr "Distaccato" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "The following preset will be deleted too:" -msgstr[1] "The following presets will be deleted too:" +msgstr[0] "Verrà eliminato anche il seguente preset:" +msgstr[1] "Verranno eliminati anche i seguenti presets:" #, boost-format msgid "Are you sure to %1% the selected preset?" -msgstr "Are you sure you want to %1% the selected preset?" +msgstr "Sei sicuro di voler %1% il preset selezionato?" #. TRN Remove/Delete #, boost-format @@ -5622,22 +5890,25 @@ msgid "Set" msgstr "Imposta" msgid "Click to reset current value and attach to the global value." -msgstr "Click to reset current value and attach to the global value." +msgstr "" +"Fare clic per ripristinare il valore corrente e associarlo al valore globale." msgid "Click to drop current modify and reset to saved value." -msgstr "Click to drop current modifications and reset to saved value." +msgstr "" +"Fai clic per eliminare le modifiche correnti e ripristinare il valore " +"salvato." msgid "Process Settings" -msgstr "Process Settings" +msgstr "Impostazioni processo" msgid "Undef" -msgstr "Undef" +msgstr "Indefinito" msgid "Unsaved Changes" msgstr "Modifiche non salvate" msgid "Discard or Keep changes" -msgstr "Discard or keep changes" +msgstr "Scarta o mantieni le modifiche" msgid "Old Value" msgstr "Valore precedente" @@ -5655,29 +5926,30 @@ msgid "Discard" msgstr "Cancella" msgid "Click the right mouse button to display the full text." -msgstr "Click the right mouse button to display the full text." +msgstr "" +"Clicca il pulsante destro del mouse per visualizzare il testo completo." msgid "All changes will not be saved" -msgstr "No changes will be saved." +msgstr "Nessuna modifica verrà salvata." msgid "All changes will be discarded." -msgstr "All changes will be discarded." +msgstr "Tutte le modifiche verranno eliminate." msgid "Save the selected options." msgstr "Salvare le opzioni selezionate." msgid "Keep the selected options." -msgstr "Keep the selected options." +msgstr "Mantieni le opzioni selezionate." msgid "Transfer the selected options to the newly selected preset." -msgstr "Transfer the selected options to the newly selected preset." +msgstr "Trasferisci le opzioni selezionate nel preset appena selezionato." #, boost-format msgid "" "Save the selected options to preset \n" "\"%1%\"." msgstr "" -"Save the selected options to preset \n" +"Salva le opzioni selezionate in un preset \n" "\"%1%\"." #, boost-format @@ -5685,28 +5957,28 @@ msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"Transfer the selected options to the newly selected preset \n" +"Trasferisci le opzioni selezionate nel preset appena selezionato \n" "\"%1%\"." #, boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" -msgstr "Preset \"%1%\" contains the following unsaved changes:" +msgstr "Preset \"%1%\" contiene modifiche non salvate:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" msgstr "" -"Preset \"%1%\" is not compatible with the new printer profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" non compatibile con il nuovo profilo della stampante e " +"contiene modifiche non salvate:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" msgstr "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" non compatibile con il nuovo profilo di processo e contiene " +"modifiche non salvate:" #, boost-format msgid "" @@ -5732,7 +6004,7 @@ msgid "General" msgstr "Generale" msgid "Capabilities" -msgstr "Caratteristiche" +msgstr "Capacità" msgid "Select presets to compare" msgstr "Seleziona i preset da confrontare" @@ -5744,93 +6016,94 @@ msgid "Add File" msgstr "Aggiungi file" msgid "Set as cover" -msgstr "Set as cover" +msgstr "Impostare come copertina" msgid "Cover" -msgstr "Cover" +msgstr "Copertina" #, boost-format msgid "The name \"%1%\" already exists." -msgstr "The name \"%1%\" already exists." +msgstr "Il nome \"%1%\" già esiste." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Info di base" msgid "Pictures" -msgstr "Pictures" +msgstr "Immagini" msgid "Bill of Materials" -msgstr "Bill of Materials" +msgstr "Lista materiali" msgid "Assembly Guide" -msgstr "Assembly Guide" +msgstr "Guida al montaggio" msgid "Author" msgstr "Autore" msgid "Model Name" -msgstr "Model Name" +msgstr "Nome modello" #, c-format, boost-format msgid "%s Update" -msgstr "%s Update" +msgstr "Aggiorna %s" msgid "A new version is available" -msgstr "A new version is available" +msgstr "Una nuova versione è disponibile." msgid "Configuration update" -msgstr "Aggiornamento di configurazione" +msgstr "Aggiornamento della configurazione" msgid "A new configuration package available, Do you want to install it?" -msgstr "A new configuration package is available. Do you want to install it?" +msgstr "È disponibile un nuovo pacchetto di configurazione. Vuoi installarlo?" msgid "Description:" -msgstr "Description:" +msgstr "Descrizione:" msgid "Configuration incompatible" -msgstr "Configuration incompatible" +msgstr "Configurazione non compatibile" msgid "the configuration package is incompatible with current application." msgstr "" -"the configuration package is incompatible with the current application." +"il pacchetto di configurazione non è compatibile con l'applicazione corrente." #, c-format, 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 "" -"The configuration package is incompatible with the current application.\n" -"%s will update the configuration package to allow the application to start." +"Pacchetto configurazione non compatibile con l'applicazione corrente.\n" +"%s aggiornerà il pacchetto configurazione per consentire l'avvio " +"dell'applicazione." #, c-format, boost-format msgid "Exit %s" -msgstr "Chiudi %s" +msgstr "Esci %s" msgid "the Configuration package is incompatible with current APP." msgstr "" -"The configuration package is incompatible with the current version of Bambu " -"Studio." +"Il pacchetto di configurazione non è compatibile con la versione corrente di " +"Bambu Studio." msgid "Configuration updates" msgstr "Aggiornamenti di configurazione" msgid "No updates available." -msgstr "No updates available." +msgstr "Nessun aggiornamento disponibile." msgid "The configuration is up to date." -msgstr "The configuration is up to date." +msgstr "Configurazione aggiornata." msgid "Auto-Calc" -msgstr "Auto-Calc" +msgstr "Calcolo automatico" msgid "Flushing volumes for filament change" -msgstr "Flushing volumes for filament change" +msgstr "Volumi di spurgo per il cambio filamento" msgid "Multiplier" msgstr "Moltiplicatore" msgid "Flushing volume (mm³) for each filament pair." -msgstr "Flushing volume (mm³) for each filament pair." +msgstr "Volume di spurgo (mm³) per ogni coppia di filamento." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" @@ -5847,28 +6120,30 @@ msgid "loaded" msgstr "caricato" msgid "Filament #" -msgstr "Filament #" +msgstr "Filamento #" msgid "From" msgstr "Da" msgid "To" -msgstr "To" +msgstr "A" msgid "Login" msgstr "Login" msgid "The configuration package is changed in previous Config Guide" -msgstr "The configuration package is changed in previous Config Guide" +msgstr "" +"Il pacchetto di configurazione è stato modificato nella precedente Guida " +"alla configurazione" msgid "Configuration package changed" -msgstr "Configuration package changed" +msgstr "Pacchetto di configurazione modificato" msgid "Toolbar" -msgstr "Toolbar" +msgstr "Barra strumenti" msgid "Objects list" -msgstr "Objects list" +msgstr "Elenco oggetti" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "Importa geometrie da file STL/STEP/3MF/OBJ/AMF." @@ -5894,7 +6169,7 @@ msgid "Show keyboard shortcuts list" msgstr "Mostra elenco scorciatoie di tastiera" msgid "Global shortcuts" -msgstr "Global shortcuts" +msgstr "Scorciatoie globali" msgid "Rotate View" msgstr "Ruota vista" @@ -5919,9 +6194,9 @@ msgid "" "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"This auto orients selected objects or all objects. If there are selected " -"objects, it just orients the selected ones. Otherwise, it will orient all " -"objects in the current plate." +"Questo orienta automaticamente gli oggetti selezionati o tutti gli oggetti. " +"Se ci sono oggetti selezionati, orienta solo quelli selezionati. Altrimenti, " +"orienterà tutti gli oggetti nel piatto corrente." msgid "Shift+Tab" msgstr "Shift+Tab" @@ -5945,7 +6220,7 @@ msgid "⌘+Left mouse button" msgstr "⌘+Tasto sinistro del mouse" msgid "Select multiple objects" -msgstr "Select multiple objects" +msgstr "Seleziona più oggetti" msgid "Ctrl+Any arrow" msgstr "Ctrl+qualsiasi freccia" @@ -5960,7 +6235,7 @@ msgid "Shift+Left mouse button" msgstr "Shift+tasto sinistro mouse" msgid "Select objects by rectangle" -msgstr "Select objects by rectangle" +msgstr "Seleziona oggetti per rettangolo" msgid "Arrow Up" msgstr "Freccia Su" @@ -5996,28 +6271,28 @@ msgid "Esc" msgstr "Esc" msgid "keyboard 1-9: set filament for object/part" -msgstr "Keyboard 1-9: set filament for object/part" +msgstr "Tastiera 1-9: imposta il filamento per l'oggetto/la parte" msgid "Camera view - Default" -msgstr "Camera view - Default" +msgstr "Vista telecamera - Default" msgid "Camera view - Top" -msgstr "Camera view - Top" +msgstr "Vista telecamera - In Alto" msgid "Camera view - Bottom" -msgstr "Camera view - Bottom" +msgstr "Vista telecamera - Basso" msgid "Camera view - Front" -msgstr "Camera view - Front" +msgstr "Vista telecamera - Fronte" msgid "Camera view - Behind" -msgstr "Camera view - Behind" +msgstr "Vista telecamera - Dietro" msgid "Camera Angle - Left side" -msgstr "Camera Angle - Left side" +msgstr "Angolo della camera - Lato sinistro" msgid "Camera Angle - Right side" -msgstr "Camera Angle - Right side" +msgstr "Angolo della camera - Lato destro" msgid "Select all objects" msgstr "Seleziona tutti gli oggetti" @@ -6043,26 +6318,23 @@ msgstr "Punti di supporto SLA Gizmo" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM pittura giunzione" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "Piano" msgid "Move: press to snap by 1mm" -msgstr "Move: press to snap by 1mm" +msgstr "Sposta: premi per muovere di 1 mm" msgid "⌘+Mouse wheel" msgstr "⌘+Rotella mouse" msgid "Support/Color Painting: adjust pen radius" -msgstr "Support/Color Painting: adjust pen radius" +msgstr "Supporto/Pittura a colori: regolare il raggio della penna" msgid "⌥+Mouse wheel" msgstr "⌥+Rotella mouse" msgid "Support/Color Painting: adjust section position" -msgstr "Support/Color Painting: adjust section position" +msgstr "Supporto/Pittura a colori: regolare la posizione della sezione" msgid "Ctrl+Mouse wheel" msgstr "Ctrl+Rotellina del mouse" @@ -6074,31 +6346,34 @@ msgid "Gizmo" msgstr "Gizmo" msgid "Set extruder number for the objects and parts" -msgstr "Set extruder number for the objects and parts" +msgstr "Imposta il numero estrusore per gli oggetti e le parti" msgid "Delete objects, parts, modifiers " -msgstr "Delete objects, parts, modifiers" +msgstr "Cancella oggetti, parti, modificatori" msgid "Space" -msgstr "Space" +msgstr "Spazio" msgid "Select the object/part and press space to change the name" -msgstr "Select the object/part and press space to change the name" +msgstr "" +"Seleziona l'oggetto/la parte e premi la barra spaziatrice per cambiare il " +"nome" msgid "Mouse click" -msgstr "Mouse click" +msgstr "Clic del mouse" msgid "Select the object/part and mouse click to change the name" -msgstr "Select the object/part and mouse click to change the name" +msgstr "" +"Seleziona l'oggetto/la parte e fai clic con il mouse per modificare il nome" msgid "Objects List" msgstr "Elenco oggetti" msgid "Vertical slider - Move active thumb Up" -msgstr "Cursore di scorrimento verticale - Solleva cursore attivo" +msgstr "Cursore scorrimento verticale - Solleva cursore attivo" msgid "Vertical slider - Move active thumb Down" -msgstr "Cursore di scorrimento verticale - Abbassa cursore attivo" +msgstr "Cursore scorrimento verticale - Abbassa cursore attivo" msgid "Horizontal slider - Move active thumb Left" msgstr "" @@ -6110,11 +6385,8 @@ msgstr "Cursore di scorrimento orizzontale - Sposta a destra il cursore attivo" msgid "On/Off one layer mode of the vertical slider" msgstr "On/Off modalità un layer del cursore di scorrimento verticale" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" -msgstr "Move slider 5x faster" +msgstr "Sposta il cursore 5 volte più velocemente" msgid "Shift+Mouse wheel" msgstr "Shift+Rotella mouse" @@ -6130,28 +6402,28 @@ msgid "Network plug-in update" msgstr "Aggiornamento del plug-in di rete" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" +"Clicca su OK per aggiornare il plug-in di rete al prossimo avvio di Bambu " +"Studio." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "Disponibile nuovo plug-in di rete (%s). Vuoi installarlo?" -msgid "New version of Orca Slicer" -msgstr "New version of Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Nuova versione di Bambu Studio" msgid "Don't remind me of this version again" msgstr "Non ricordarmi più questa versione." -msgid "Done" -msgstr "Fine" - msgid "LAN Connection Failed (Sending print file)" msgstr "Connessione LAN fallita (invio del file di stampa)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" +"Step 1, conferma che Bambu Studio e la tua stampante siano sulla stessa LAN." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6233,150 +6505,155 @@ msgid "Extension Board" msgstr "Scheda di estensione" msgid "Saving objects into the 3mf failed." -msgstr "Saving objects into the 3mf failed." +msgstr "Salvataggio oggetti 3mf fallito." msgid "Only Windows 10 is supported." -msgstr "Only Windows 10 is supported." +msgstr "È supportato solo Windows 10." msgid "Failed to initialize the WinRT library." -msgstr "Failed to initialize the WinRT library." +msgstr "Impossibile inizializzare la libreria WinRT." msgid "Exporting objects" -msgstr "Exporting objects" +msgstr "Esportazione oggetti" msgid "Failed loading objects." -msgstr "Failed loading objects." +msgstr "Caricamento oggetti fallito." msgid "Repairing object by Windows service" -msgstr "Repairing object by Windows service" +msgstr "Riparazione oggetto da parte del servizio Windows" msgid "Repair failed." -msgstr "Repair failed." +msgstr "Riparazione fallita." msgid "Loading repaired objects" -msgstr "Loading repaired objects" +msgstr "Caricamento oggetti riparati" msgid "Exporting 3mf file failed" -msgstr "Exporting 3mf file failed" +msgstr "Esportazione del file 3mf non riuscita" msgid "Import 3mf file failed" -msgstr "Import 3mf file failed" +msgstr "Importazione del file 3mf non riuscita" msgid "Repaired 3mf file does not contain any object" -msgstr "The repaired 3mf file does not contain any objects." +msgstr "Il file 3mf riparato non contiene alcun oggetto." msgid "Repaired 3mf file contains more than one object" -msgstr "The repaired 3mf file contains more than one object." +msgstr "Il file 3mf riparato contiene più di un oggetto." msgid "Repaired 3mf file does not contain any volume" -msgstr "The repaired 3mf file does not contain any volume." +msgstr "Il file 3mf riparato non contiene alcun volume." msgid "Repaired 3mf file contains more than one volume" -msgstr "The repaired 3mf file contains more than one volume." +msgstr "Il file 3mf riparato contiene più di un volume." msgid "Repair finished" -msgstr "Repair finished" +msgstr "Riparazione finita" msgid "Repair canceled" -msgstr "Repair canceled" +msgstr "Riparazione annullata" #, boost-format msgid "Copying of file %1% to %2% failed: %3%" msgstr "Copia del file %1% su %2% non riuscita: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "La copia della directory %1% in %2% non è riuscita: %3%." + msgid "Need to check the unsaved changes before configuration updates." -msgstr "Please check any unsaved changes before updating the configuration." +msgstr "" +"Controllare le modifiche non salvate prima di aggiornare la configurazione." msgid "Configuration package updated to " -msgstr "Configuration package updated to " +msgstr "Pacchetto di configurazione aggiornato a " msgid "Open G-code file:" msgstr "Apri un file G-code:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"I seguenti oggetti(o) hanno un layer iniziale vuoto e non possono essere " +"stampati. Tagliare la parte inferiore o attivare i supporti." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." -msgstr "The object has empty layers between %1% and %2% and can’t be printed." +msgstr "" +"L'oggetto ha layer vuoti compresi tra %1% e %2% e non può essere stampato." #, boost-format msgid "Object: %1%" -msgstr "Object: %1%" +msgstr "Oggetto: %1%" msgid "" "Maybe parts of the object at these height are too thin, or the object has " "faulty mesh" msgstr "" -"Parts of the object at these heights may be too thin or the object may have " -"a faulty mesh." +"Le parti dell'oggetto a queste altezze potrebbero essere troppo sottili o " +"l'oggetto potrebbe avere una mesh difettosa." msgid "No object can be printed. Maybe too small" -msgstr "No object can be printed. It may be too small." +msgstr "" +"Non è possibile stampare alcun oggetto. Potrebbe essere troppo piccolo." msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" msgstr "" -"Failed to generate G-code for invalid custom G-code.\n" +"Impossibile generare il G-code per G-code personalizzato non valido.\n" "\n" msgid "Please check the custom G-code or use the default custom G-code." -msgstr "Please check the custom G-code or use the default custom G-code." +msgstr "" +"Controlla il G-code personalizzato o utilizza il G-code personalizzato " +"predefinito." #, boost-format msgid "Generating G-code: layer %1%" -msgstr "Generating G-code: layer %1%" +msgstr "Genera G-code: layer %1%" msgid "Inner wall" -msgstr "Inner wall" +msgstr "Parete interna" msgid "Outer wall" -msgstr "Outer wall" +msgstr "Parete esterna" msgid "Overhang wall" -msgstr "Overhang wall" - -msgid "Sparse infill" -msgstr "Sparse infill" +msgstr "Parete a sbalzo" msgid "Internal solid infill" -msgstr "Internal solid infill" +msgstr "Riempimento solido interno" msgid "Top surface" -msgstr "Top surface" +msgstr "Superficie superiore" msgid "Bottom surface" -msgstr "Bottom surface" +msgstr "Superficie inferiore" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Bridge" msgid "Gap infill" -msgstr "Gap infill" - -msgid "Skirt" -msgstr "" +msgstr "Riempimento gap" msgid "Support interface" -msgstr "Support interface" +msgstr "Interfaccia supporto" msgid "Support transition" -msgstr "Support transition" +msgstr "Supporto alla transizione" msgid "Multiple" -msgstr "Multiple" +msgstr "Multiplo" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " -msgstr "Failed to calculate line width of %1%. Cannot get value of “%2%” " +msgstr "" +"Impossibile calcolare la larghezza della linea di %1%. Impossibile ottenere " +"il valore \"%2%\" " msgid "undefined error" -msgstr "errore non definito" +msgstr "errore indefinito" msgid "too many files" msgstr "troppi file" @@ -6397,16 +6674,16 @@ msgid "failed finding central directory" msgstr "directory centrale non trovata" msgid "not a ZIP archive" -msgstr "non un archivio ZIP" +msgstr "non è un archivio ZIP" msgid "invalid header or corrupted" -msgstr "invalid header or corrupted" +msgstr "intestazione non valida o danneggiata" msgid "unsupported multidisk" -msgstr "Saving to RAID is not supported." +msgstr "Il salvataggio su RAID non supportato." msgid "decompression failed" -msgstr "decompression failed" +msgstr "decompressione fallita" msgid "compression failed" msgstr "compressione fallita" @@ -6415,10 +6692,10 @@ msgid "unexpected decompressed size" msgstr "dimensione decompressa imprevista" msgid "CRC check failed" -msgstr "CRC check failed" +msgstr "Controllo CRC non riuscito" msgid "unsupported central directory size" -msgstr "dimensione della directory centrale non supportata" +msgstr "dimensione directory centrale non supportata" msgid "allocation failed" msgstr "allocazione fallita" @@ -6451,7 +6728,7 @@ msgid "invalid filename" msgstr "nome file non valido" msgid "buffer too small" -msgstr "buffer troppo piccolo" +msgstr "Buffer troppo piccolo" msgid "internal error" msgstr "errore interno" @@ -6460,13 +6737,13 @@ msgid "file not found" msgstr "file non trovato" msgid "archive too large" -msgstr "Archive too large" +msgstr "Archivio troppo grande" msgid "validation failed" -msgstr "convalida non riuscita" +msgstr "convalida fallita" msgid "write callback failed" -msgstr "write callback failed" +msgstr "scrittura callback fallita" #, boost-format msgid "" @@ -6477,11 +6754,11 @@ msgstr "" #, boost-format msgid "%1% is too close to others, and collisions may be caused." -msgstr "%1% is too close to others, and collisions may be caused." +msgstr "%1% è troppo vicino ad altri oggetti e potrebbe causare collisioni." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%1% is too tall, and collisions will be caused." +msgstr "%1% è troppo alto e si verificheranno collisioni." msgid " is too close to others, there may be collisions when printing." msgstr "" @@ -6497,22 +6774,23 @@ msgid "Prime Tower" msgstr "Prime Tower" msgid " is too close to others, and collisions may be caused.\n" -msgstr " is too close to others, and collisions may be caused.\n" +msgstr " è troppo vicino agli altri e possono verificarsi collisioni.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " is too close to an exclusion area, and collisions will be caused.\n" +msgstr "" +" è troppo vicino a un'area di esclusione e si verificheranno collisioni.\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 "" -"Unable to print multiple filaments which have large temperature differences " -"together. Otherwise, the extruder and nozzle may be blocked or damaged " -"during printing." +"Impossibile stampare filamenti che presentano grandi differenze di " +"temperatura insieme. In caso contrario, l'estrusore e il nozzle potrebbero " +"bloccarsi o danneggiarsi durante la stampa." msgid "No extrusions under current settings." -msgstr "No extrusions under current settings." +msgstr "Nessuna estrusione con le impostazioni attuali." msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " @@ -6525,46 +6803,49 @@ msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." msgstr "" -"Please select \"By object\" print sequence to print multiple objects in " -"spiral vase mode." +"Seleziona la sequenza di stampa \"Per oggetto\" per stampare più oggetti in " +"modalità vaso a spirale." msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." msgstr "" -"Spiral (vase) mode does not work when an object contains more than one " -"material." +"La modalità Spirale (vaso) non funziona quando un oggetto contiene più di un " +"materiale." msgid "The prime tower is not supported in \"By object\" print." -msgstr "A prime tower is not supported in “By object” print." +msgstr "La Prime Tower non è supportata nella stampa \"Per oggetto\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A prime tower is not supported when adaptive layer height is on. It requires " -"that all objects have the same layer height." +"La Prime Tower non è supportata quando è attivo Layer adattativi. Richiede " +"che tutti gli oggetti abbiano la stessa altezza layer." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"A prime tower requires any “support gap” to be a multiple of layer height." +"La Prime Tower richiede che il \"gap supporto\" sia un multiplo dell'altezza " +"del layer." msgid "The prime tower requires that all objects have the same layer heights" -msgstr "A prime tower requires that all objects have the same layer height." +msgstr "" +"La Prime Tower richiede che tutti gli oggetti abbiano la stessa altezza " +"layer." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"A prime tower requires that all objects are printed over the same number of " -"raft layers." +"La Prime Tower richiede che tutti gli oggetti siano stampati sullo stesso " +"numero di layers del raft." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A prime tower requires that all objects are sliced with the same layer " -"height." +"La Prime Tower richiede che tutti gli oggetti siano elaborati con la stessa " +"altezza layer." msgid "" "The prime tower is only supported if all objects have the same variable " @@ -6574,61 +6855,47 @@ msgstr "" "altezza layer adattativi." msgid "Too small line width" -msgstr "Line width too small" +msgstr "Larghezza linea troppo piccola" msgid "Too large line width" -msgstr "Line width too large" +msgstr "Larghezza linea troppo grande" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"A prime tower requires that support has the same layer height as the object." +"La Prime Tower richiede che il supporto abbia la stessa altezza layer " +"dell'oggetto." msgid "" "Support enforcers are used but support is not enabled. Please enable support." msgstr "" -"Support enforcers are used but support is not enabled. Please enable support." +"Utilizzati supporti forzati ma i supporti non sono abilitati. Abilitare i " +"supporti." msgid "Layer height cannot exceed nozzle diameter" -msgstr "Layer height cannot exceed nozzle diameter." - -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" +msgstr "L'altezza del layer non può superare il diametro del nozzle." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Piatto %d: %s non supporta il filamento %s" msgid "Generating skirt & brim" -msgstr "Generating skirt & brim" +msgstr "Generazione skirt & brim" msgid "Exporting G-code" -msgstr "Esportando il G-code" +msgstr "Esportazione G-code" msgid "Generating G-code" msgstr "Generazione G-code" msgid "Failed processing of the filename_format template." -msgstr "Processing of the filename_format template failed." +msgstr "Elaborazione del modello filename_format non riuscita." msgid "Printable area" -msgstr "Printable area" +msgstr "Area di stampa" msgid "Bed exclude area" -msgstr "Excluded bed area" +msgstr "Zona piano esclusa" msgid "" "Unprintable area in XY plane. For example, X1 Series printers use the front " @@ -6653,23 +6920,23 @@ msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"This shrinks the first layer on the build plate to compensate for elephant " -"foot effect." +"Questo restringe il primo layer sulla piatto per compensare l'effetto zampa " +"d'elefante." msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"This is the height for each layer. Smaller layer heights give greater " -"accuracy but longer printing time." +"Questa è l'altezza di ogni layer. Le altezze dei layers inferiori offrono " +"una maggiore precisione ma tempi di stampa più lunghi." msgid "Printable height" -msgstr "Printable height" +msgstr "Altezza di stampa" msgid "Maximum printable height which is limited by mechanism of printer" msgstr "" -"This is the maximum printable height which is limited by the height of the " -"build area." +"È l'altezza massima stampabile, limitata dall'altezza dell'area di " +"costruzione." msgid "Printer preset names" msgstr "Nomi dei preset della stampante" @@ -6757,8 +7024,8 @@ msgstr "Evita di attraversare le pareti" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"This detours to avoid traveling across walls, which may cause blobs on the " -"surface" +"Questa deviazione evita di attraversare le pareti, il che può causare la " +"formazione di bolle sulla superficie." msgid "Avoid crossing wall - Max detour length" msgstr "Evitare di attraversare le pareti - Lunghezza massima della deviazione" @@ -6785,8 +7052,8 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Cool Plate" msgstr "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the Cool Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa sul Cool Plate." msgid "°C" msgstr "°C" @@ -6795,15 +7062,16 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the Engineering Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa su piatto " +"Engineering." 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 "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the High Temp Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa sul High Temp." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " @@ -6813,31 +7081,31 @@ msgstr "" "filamento non supportata la stampa su piatto Textured PEI." msgid "Initial layer" -msgstr "First layer" +msgstr "Primo layer" msgid "Initial layer bed temperature" -msgstr "First 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" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Questa è la temperatura del piatto del primo layer. Un valore pari a 0 " +"indica che il filamento non supporta la stampa sul piatto Cool Plate." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Temperatura del piano quando è installato il piatto Cool Plate. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Engineering." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Questa è la temperatura del piano del primo layer. Un valore pari a 0 indica " +"che il filamento non supporta la stampa sul piatto High Temp." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -6847,28 +7115,30 @@ msgstr "" "supportato sul piatto Textured PEI." msgid "Bed types supported by the printer" -msgstr "Bed types supported by the printer" +msgstr "Tipi di piatti supportati dalla stampante" msgid "First layer print sequence" msgstr "" msgid "This G-code is inserted at every layer change before lifting z" -msgstr "This G-code is inserted at every layer change before lifting z." +msgstr "" +"Questo G-code viene inserito ad ogni cambio layer prima del sollevamento z." msgid "Bottom shell layers" -msgstr "Bottom shell layers" +msgstr "Layer inferiori guscio" msgid "" "This is the number of solid layers of bottom shell, including the bottom " "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"This is the number of solid layers of bottom shell, including the bottom " -"surface layer. When the thickness calculated by this value is thinner than " -"bottom shell thickness, the bottom shell layers will be increased" +"È il numero di layers solidi del guscio inferiore, compreso Il layer " +"superficiale inferiore. Se lo spessore calcolato da questo valore è più " +"sottile dello spessore del guscio inferiore, i layers del guscio inferiore " +"verranno aumentati." msgid "Bottom shell thickness" -msgstr "Bottom shell thickness" +msgstr "Spessore del guscio inferiore" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " @@ -6877,36 +7147,39 @@ msgid "" "is disabled and thickness of bottom shell is absolutely determained by " "bottom shell layers" msgstr "" -"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 a shell when layer height is small. 0 means that this " -"setting is disabled and the thickness of the bottom shell is determined " -"simply by the number of bottom shell layers." +"Il numero di layers solidi inferiori aumenta durante l'elaborazione se lo " +"spessore calcolato dei layers del guscio inferiore è più sottile di questo " +"valore. Questo può evitare di avere un guscio troppo sottile quando " +"l'altezza layer è ridotta. 0 significa che questa impostazione è " +"disabilitata e lo spessore del guscio inferiore è determinato semplicemente " +"dal numero di layers del guscio inferiore." msgid "Force cooling for overhang and bridge" -msgstr "Force cooling for overhangs and bridges" +msgstr "Raffreddamento forzato per sbalzo e ponte" msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" msgstr "" -"Enable this option to optimize the part cooling fan speed for overhangs and " -"bridges to get better cooling" +"Abilita questa opzione per ottimizzare la velocità della ventola di " +"raffreddamento degli oggetti per sporgenze e ponti per ottenere un " +"raffreddamento migliore." msgid "Fan speed for overhang" -msgstr "Fan speed for overhangs" +msgstr "Velocità della ventola per le sporgenze" 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 "" -"Force part cooling fan to be this speed when printing bridges or overhang " -"walls which have a large overhang degree. Forcing cooling for overhangs and " -"bridges can achieve better quality for these parts." +"Forzare la ventola di raffreddamento a questa velocità quando si stampano " +"ponti o sporgenze con un elevato grado di sporgenza. Forzando il " +"raffreddamento per le sporgenze e i ponti si può ottenere una qualità " +"migliore per queste parti." msgid "Cooling overhang threshold" -msgstr "Cooling overhang threshold" +msgstr "Soglia di sbalzo per il raffreddamento" #, c-format msgid "" @@ -6921,8 +7194,8 @@ msgstr "" "dei layer. 0%% significa forzare il raffreddamento per tutta la parete " "esterna, indipendentemente dal grado di sporgenza." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "Direzione bridge" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6933,21 +7206,15 @@ msgstr "" "collegamento verrà calcolato automaticamente. Altrimenti l'angolo fornito " "verrà utilizzato per i Bridge esterni. Usa 180° per un angolo zero." -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" -msgstr "Bridge flow" +msgstr "Flusso del Bridge" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Decrease this value slightly (for example 0.9) to reduce the amount of " -"material extruded for bridges to avoid sagging." +"Diminuire leggermente questo valore (ad esempio 0.9) per ridurre la quantità " +"di materiale per il ponte e migliorare l'abbassamento dello stesso" msgid "Top surface flow ratio" msgstr "" @@ -6957,95 +7224,57 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" -msgstr "Only one wall on top surfaces" +msgstr "Solo una parete sulle superfici superiori" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Use only one wall on flat top surfaces, to give more space to the top infill " -"pattern" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "Tutte le superfici superiori" + +msgid "Topmost surface" +msgstr "Superficie superiore più alta" + msgid "Only one wall on first layer" msgstr "Solo un perimetro sul primo layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Utilizzare solo una parete sul primo layer dei modelli" msgid "Slow down for overhang" -msgstr "Slow down for overhangs" +msgstr "Rallenta in caso di sporgenze" msgid "Enable this option to slow printing down for different overhang degree" msgstr "" -"Enable this option to slow down when printing overhangs. The speeds for " -"different overhang percentages are set below." - -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "This is the speed for bridges and 100% overhang walls." +"Abilita questa opzione per rallentare quando la stampa presenta sporgenze. " +"Le velocità per le diverse percentuali di sporgenza sono indicate di seguito." msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "E' la velocità per i ponti e le pareti pendenti al 100%." msgid "Brim width" msgstr "Larghezza brim" msgid "Distance from model to the outermost brim line" -msgstr "This is the distance from the model to the outermost brim line." +msgstr "Questa è la distanza tra il modello e la linea del brim più esterno." msgid "Brim type" -msgstr "Tipo di brim" +msgstr "Tipo brim" msgid "" "This controls the generation of the brim at outer and/or inner side of " @@ -7055,80 +7284,44 @@ msgstr "" "Auto significa che la larghezza del brim viene analizzata e calcolata " "automaticamente." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "Solo brim esterno" - -msgid "Inner brim only" -msgstr "Solo brim interno" - -msgid "Outer and inner brim" -msgstr "Brim interno e esterno" - msgid "Brim-object gap" -msgstr "Brim-object gap" +msgstr "Gap brim e oggetto" msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"This creates a gap between the innermost brim line and the object and can " -"make the brim easier to remove." - -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" +"Questo crea un gap tra la linea interna del brim e l'oggetto per rendere il " +"brim più facile da rimuovere" msgid "Compatible machine" -msgstr "Compatible machine" +msgstr "Macchina compatibile" msgid "upward compatible machine" msgstr "macchina compatibile con versioni successive" msgid "Compatible machine condition" -msgstr "Compatible machine condition" +msgstr "Condizione della macchina compatibile" msgid "Compatible process profiles" -msgstr "Compatible process profiles" +msgstr "Profili di processo compatibili" msgid "Compatible process profiles condition" -msgstr "Compatible process profiles condition" +msgstr "Condizione dei profili di processo compatibili" msgid "Print sequence, layer by layer or object by object" msgstr "" -"This determines the print sequence, allowing you to print layer-by-layer or " -"object-by-object." +"Questo determina la sequenza di stampa, che consente di stampare layer per " +"layer o oggetto per oggetto." msgid "By layer" -msgstr "By layer" +msgstr "Per layer" msgid "By object" -msgstr "By object" +msgstr "Per oggetto" msgid "Slow printing down for better layer cooling" -msgstr "Slow printing down for better layer cooling" +msgstr "Rallenta stampa per un migliore raffreddamento layers" msgid "" "Enable this option to slow printing speed down to make the final layer time " @@ -7136,20 +7329,21 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Enable this option to slow printing speed down to ensure that the final " -"layer time is not shorter than the layer time threshold in \"Max fan speed " -"threshold\", so that the layer can be cooled for a longer time. This can " -"improve the quality for small details." +"Abilita questa opzione per rallentare la velocità di stampa in modo che il " +"tempo finale del layer non sia inferiore alla soglia di tempo nel valore " +"\"Soglia di velocità massima della ventola\", in modo che il layer possa " +"essere raffreddato più a lungo.\n" +"Ciò può migliorare la qualità per i piccoli dettagli" msgid "Normal printing" -msgstr "Normal printing" +msgstr "Stampa normale" msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"This is the default acceleration for both normal printing and travel after " -"the first layer." +"E' l'accelerazione predefinita sia per la stampa normale che per la corsa " +"dopo il primo layer." msgid "mm/s²" msgstr "mm/s²" @@ -7158,37 +7352,39 @@ msgid "Default filament profile" msgstr "Profilo filamento predefinito" msgid "Default filament profile when switch to this machine profile" -msgstr "Default filament profile when switching to this machine profile" +msgstr "" +"Profilo filamento predefinito quando si passa a questo profilo macchina" msgid "Default process profile" -msgstr "Default process profile" +msgstr "Profilo di processo predefinito" msgid "Default process profile when switch to this machine profile" -msgstr "Default process profile when switching to this machine profile" +msgstr "" +"Profilo di processo predefinito quando si passa a questo profilo macchina" msgid "No cooling for the first" -msgstr "No cooling for the first" +msgstr "Nessun raffreddamento per il primo" 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 "" -"Turn off all cooling fans for the first few layers. This can be used to " -"improve bed adhesion." +"Spegnere tutte le ventole di raffreddamento per i primi layer. Questo può " +"servire a migliorare l'adesione del piatto." msgid "layers" -msgstr "layer" +msgstr "layers" msgid "Don't support bridges" -msgstr "Non supportare i bridge" +msgstr "Non supporta i bridge" 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 "" -"This disables supporting bridges, which decreases the amount of support " -"required. Bridges can usually be printed directly without support over a " -"reasonable distance." +"Questo disabilita i supporti per i bridge, riducendo la quantità di supporto " +"necessaria. In genere i bridge possono essere stampati direttamente senza " +"supporto per una distanza ragionevole." msgid "Thick bridges" msgstr "Ponti spessi" @@ -7210,18 +7406,18 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"This is the maximum 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." +"Questa è la lunghezza massima dei ponti che non necessitano di supporto. " +"Impostalo su 0 se desideri che tutti i bridge siano supportati e impostalo " +"su un valore molto grande se non vuoi che nessun bridge sia supportato." msgid "End G-code" -msgstr "G-code finale" +msgstr "G-code Finale" msgid "End G-code when finish the whole printing" -msgstr "Add end G-Code when finishing the entire print." +msgstr "Aggiungi G-code quando si termina l'intera stampa." msgid "End G-code when finish the printing of this filament" -msgstr "Add end G-code when finishing the printing of this filament." +msgstr "Aggiungi G-code quando si termina la stampa di questo filamento." msgid "Ensure vertical shell thickness" msgstr "Garantisci spessore verticale del guscio" @@ -7238,18 +7434,19 @@ msgid "Internal bridge support thickness" msgstr "Spessore supporto interno del ponte" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" -msgstr "Top surface pattern" +msgstr "Trama superfice superiore" msgid "Line pattern of top surface infill" -msgstr "This is the line pattern for top surface infill." +msgstr "" +"Questo è la Trama lineare per il riempimento della superficie superiore." msgid "Concentric" msgstr "Concentrico" @@ -7261,7 +7458,7 @@ msgid "Monotonic" msgstr "Monotonico" msgid "Monotonic line" -msgstr "Monotonic line" +msgstr "Linea monotonica" msgid "Aligned Rectilinear" msgstr "Rettilineo allineato" @@ -7276,12 +7473,12 @@ msgid "Octagram Spiral" msgstr "Spirale a Ottogramma" msgid "Bottom surface pattern" -msgstr "Bottom surface pattern" +msgstr "Trama superficie inferiore" msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "" -"This is the line pattern of bottom surface infill, not including bridge " -"infill." +"Questo è la trama lineare del riempimento della superficie inferiore, " +"escluso il riempimento del ponte." msgid "Internal solid infill pattern" msgstr "" @@ -7291,58 +7488,41 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "Larghezza linea della parete esterna" 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 "" -"This is the printing speed for the outer walls of parts. These are generally " -"printed slower than inner walls for higher quality." - -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" +"E' la velocità di stampa per le pareti esterne dei pezzi. Queste vengono " +"generalmente stampate più lentamente delle pareti interne per ottenere una " +"qualità superiore." msgid "Order of inner wall/outer wall/infil" -msgstr "Order of inner wall/outer wall/infill" +msgstr "Ordine di parete interna/esterna/riempimento" msgid "Print sequence of inner wall, outer wall and infill. " -msgstr "This is the print sequence of inner walls, outer walls, and infill." +msgstr "" +"È la sequenza di stampa di pareti interne, pareti esterne e dei riempimenti." msgid "inner/outer/infill" -msgstr "inner/outer/infill" +msgstr "interno/esterno/riempimento" msgid "outer/inner/infill" -msgstr "outer/inner/infill" +msgstr "esterno/interno/riempimento" msgid "infill/inner/outer" -msgstr "infill/inner/outer" +msgstr "riempimento/interno/esterno" msgid "infill/outer/inner" -msgstr "infill/outer/inner" +msgstr "riempimento/esterno/interno" msgid "inner-outer-inner/infill" msgstr "interno-esterno-interno/riempimento" msgid "Height to rod" -msgstr "Height to rod" +msgstr "Altezza asta" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " @@ -7352,7 +7532,7 @@ msgstr "" "le collisioni nella stampa di oggetto per oggetto." msgid "Height to lid" -msgstr "Height to lid" +msgstr "Altezza dal coperchio" msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" @@ -7368,17 +7548,27 @@ msgstr "" "Raggio di sicurezza attorno all'estrusore: utilizzato per evitare collisioni " "nella stampa per oggetto." +msgid "Max Radius" +msgstr "Raggio massimo" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Raggio di distanza massimo intorno all'estrusore. Utilizzato per evitare le " +"collisioni nella stampa di oggetti singoli." + msgid "Extruder Color" msgstr "Colore estrusore" msgid "Only used as a visual help on UI" -msgstr "Only used as a visual help on UI" +msgstr "Utilizzato solo come aiuto visivo per l'interfaccia utente" msgid "Extruder offset" msgstr "Offset estrusore" msgid "Flow ratio" -msgstr "Flow ratio" +msgstr "Rapporto di flusso" msgid "" "The material may have volumetric change after switching between molten state " @@ -7387,28 +7577,37 @@ msgid "" "and 1.05. Maybe you can tune this value to get nice flat surface when there " "has slight overflow or underflow" msgstr "" -"The material may have volumetric change after switching between molten and " -"crystalline states. This setting changes all extrusion flow of this filament " -"in G-code proportionally. The recommended value range is between 0.95 and " -"1.05. You may be able to tune this value to get a nice flat surface if there " -"is slight overflow or underflow." +"Il materiale può subire variazioni volumetriche dopo il passaggio dallo " +"stato fuso a quello cristallino. Questa impostazione modifica in modo " +"proporzionale tutti i flussi di estrusione di questo filamento in G-code. " +"L'intervallo di valori raccomandato è compreso tra 0,95 e 1,05. È possibile " +"regolare questo valore per ottenere una superficie piatta se si verifica una " +"leggera sovra-estrusione o sotto-estrusione." + +msgid "Object flow ratio" +msgstr "Flow ratio oggetto" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "" +"Il rapporto di flusso impostato per oggetto; il significato è lo stesso del " +"rapporto di flusso." msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "Larghezza di linea predefinita per linee impostate a zero" + msgid "Keep fan always on" msgstr "Mantieni la ventola sempre accesa" @@ -7416,21 +7615,22 @@ msgid "" "If enable this setting, part cooling fan will never be stoped and will run " "at least at minimum speed to reduce the frequency of starting and stoping" msgstr "" -"Enabling this setting means that part cooling fan will never stop entirely " -"and will instead run at least at minimum speed to reduce the frequency of " -"starting and stopping." +"Se si attiva questa impostazione, la ventola di raffreddamento non si " +"arresterà mai del tutto, ma funzionerà almeno alla velocità minima per " +"ridurre la frequenza di avvio e arresto." msgid "Layer time" -msgstr "Layer time" +msgstr "Tempo layer" 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 "" -"The part cooling fan will be enabled for layers where the estimated time is " -"shorter than this value. Fan speed is interpolated between the minimum and " -"maximum fan speeds according to layer printing time." +"La ventola di raffreddamento parziale verrà attivata per i layers in cui il " +"tempo stimato è inferiore a questo valore. La velocità della ventola viene " +"interpolata tra la velocità minima e massima della ventola in base al tempo " +"di stampa a layer." msgid "s" msgstr "s" @@ -7470,60 +7670,40 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "Durata caricamento filamento" msgid "Time to load new filament when switch filament. For statistics only" msgstr "" -"Time to load new filament when switching filament, for statistical purposes " -"only." +"Tempo di caricamento del nuovo filamento quando si cambia filamento, solo a " +"fini statistici." msgid "Filament unload time" msgstr "Durata scaricamento filamento" msgid "Time to unload old filament when switch filament. For statistics only" msgstr "" -"Time to unload old filament when switching filament, for statistical " -"purposes only." +"Tempo di scarico vecchio filamento quando si cambia filamento, solo a fini " +"statistici." msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" msgstr "" -"Filament diameter is used to calculate extrusion variables in G-code, so it " -"is important that this is accurate and precise." - -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" +"Il diametro del filamento viene utilizzato per calcolare le variabili di " +"estrusione nel G-code, quindi è importante che sia accurato e preciso." msgid "Density" msgstr "Densità" msgid "Filament density. For statistics only" -msgstr "Filament density, for statistical purposes only." +msgstr "Densità filamento, solo a fini statistici." msgid "g/cm³" msgstr "g/cm³" msgid "The material type of filament" -msgstr "Filament material type" +msgstr "Tipo di filamento" msgid "Soluble material" msgstr "Materiale solubile" @@ -7531,7 +7711,8 @@ msgstr "Materiale solubile" msgid "" "Soluble material is commonly used to print support and support interface" msgstr "" -"Soluble material is commonly used to print support and support interfaces" +"Il materiale solubile viene comunemente utilizzato per stampare il supporto " +"e l'interfaccia di supporto" msgid "Support material" msgstr "Materiale di supporto" @@ -7539,26 +7720,27 @@ msgstr "Materiale di supporto" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interfaces." +"Il materiale di supporto viene comunemente utilizzato per stampare il " +"supporto e le interfacce di supporto." msgid "Temperature of vitrificaiton" -msgstr "Temperature of vitrification" +msgstr "Temperatura di vetrificazione" msgid "" "Material becomes soft at this temperature. Thus the heatbed cannot be hotter " "than this tempature" msgstr "" -"Material becomes soft at this temperature. Thus, the heat bed cannot be " -"hotter than this temperature." +"Il materiale diventa morbido a questa temperatura. Pertanto, il piano non " +"può essere più caldo di questa temperatura." msgid "Price" -msgstr "Price" +msgstr "Prezzo" msgid "Filament price. For statistics only" -msgstr "Filament price, for statistical purposes only." +msgstr "Prezzo del filamento, solo a fini statistici." msgid "money/kg" -msgstr "soldi/kg" +msgstr "prezzo/kg" msgid "Vendor" msgstr "" @@ -7567,32 +7749,32 @@ msgid "Vendor of filament. For show only" msgstr "" msgid "(Undefined)" -msgstr "(Undefined)" +msgstr "(Indefinito)" msgid "Infill direction" -msgstr "Infill direction" +msgstr "Direzione riempimento" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"This is the angle for sparse infill pattern, which controls the start or " -"main direction of lines." +"Questo è l'angolo della trama di riempimento che controlla l'inizio o la " +"direzione principale delle linee." msgid "Sparse infill density" -msgstr "Sparse infill density" +msgstr "Densità riempimento" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" msgstr "" -"This is the density of internal sparse infill. 100% means that the object " -"will be solid throughout." +"Questa è la densità del riempimento interno. 100%% significa che l'oggetto " +"sarà in ogni sua parte." msgid "Sparse infill pattern" -msgstr "Sparse infill pattern" +msgstr "Trama riempimento" msgid "Line pattern for internal sparse infill" -msgstr "This is the line pattern for internal sparse infill." +msgstr "Questo è la trama lineare per il riempimento interno." msgid "Grid" msgstr "Griglia" @@ -7604,7 +7786,7 @@ msgid "Cubic" msgstr "Cubico" msgid "Tri-hexagon" -msgstr "Tri-hexagon" +msgstr "Tri-esagono" msgid "Gyroid" msgstr "Giroide" @@ -7624,72 +7806,20 @@ msgstr "Supporto cubico" msgid "Lightning" msgstr "Lightning" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (senza ancore aperte)" - -msgid "1000 (unlimited)" -msgstr "1000 (senza limiti)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"This is the acceleration of top surface infill. Using a lower value may " -"improve top surface quality." +"Questa è l'accelerazione del riempimento della superficie superiore. " +"L'utilizzo di un valore inferiore può migliorare la qualità della superficie " +"superiore." msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" "Accelerazione della parete esterna: l'utilizzo di un valore inferiore può " "migliorare la qualità." -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7697,18 +7827,15 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " "adhensive" msgstr "" -"This is the printing acceleration for the first layer. Using limited " -"acceleration can improve build plate adhesion." +"Questa è l'accelerazione di stampa per il primo layer. L'uso di " +"un'accelerazione limitata può migliorare l'adesione sul piatto." msgid "Enable accel_to_decel" msgstr "" @@ -7723,97 +7850,71 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "Larghezza linea del primo layer" + msgid "Initial layer height" -msgstr "Altezza layer iniziale" +msgstr "Altezza primo layer" msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhension" msgstr "" -"This is the height of the first layer. Making the first layer height thicker " -"can improve build plate adhesion." +"Questa è l'altezza layer iniziale. L'aumento dell'altezza del primo layer " +"può migliorare l'adesione al piatto" msgid "Speed of initial layer except the solid infill part" msgstr "" -"This is the speed for the first layer except for solid infill sections." +"E' la velocità per il primo layer, tranne che per le sezioni di riempimento " +"solido." msgid "Initial layer infill" -msgstr "First layer infill" +msgstr "Riempimento primo layer" msgid "Speed of solid infill part of initial layer" -msgstr "This is the speed for solid infill parts of the first layer." - -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "E' la velocità per le parti di riempimento solido del primo layer." msgid "Initial layer nozzle temperature" -msgstr "First layer nozzle temperature" +msgstr "Temperatura nozzle primo layer" msgid "Nozzle temperature to print initial layer when using this filament" -msgstr "Nozzle temperature for printing the first layer with this filament" +msgstr "" +"Temperatura del nozzle per la stampa del primo layer con questo filamento" msgid "Full fan speed at layer" msgstr "Massima velocità della ventola al layer" -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." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"This setting makes the toolhead randomly jitter while printing walls so that " -"the surface has a rough textured look. This setting controls the fuzzy " -"position." +"Questa impostazione fa vibrare casualmente la testa di stampa durante la " +"stampa su pareti, in modo che la superficie abbia un aspetto ruvido. Questa " +"impostazione controlla la posizione fuzzy Skin." msgid "None" msgstr "Nessuno" @@ -7828,211 +7929,194 @@ msgid "All walls" msgstr "Tutte le pareti" msgid "Fuzzy skin thickness" -msgstr "Spessore superficie crespa" +msgstr "Spessore fuzzy skin" msgid "" "The width within which to jitter. It's adversed to be below outer wall line " "width" msgstr "" -"The width of jittering: it’s recommended to keep this lower than the outer " -"wall line width." +"Ampiezza del tremolio: si consiglia di mantenerla inferiore alla larghezza " +"della linea della parete esterna." msgid "Fuzzy skin point distance" -msgstr "Distanza punti superficie crespa" +msgstr "Distanza punti fuzzy skin" msgid "" "The average diatance between the random points introducded on each line " "segment" msgstr "" -"The average distance between the random points introduced on each line " -"segment" +"La distanza media tra i punti casuali introdotti su ogni segmento di linea" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "Layers e Perimetri" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"This is the speed for gap infill. Gaps usually have irregular line width and " -"should be printed more slowly." +"E' la velocità per il riempimento del gap. I gap hanno solitamente una " +"larghezza linea irregolare e devono essere stampate più lentamente." msgid "Arc fitting" -msgstr "Arc fitting" +msgstr "Raccordo ad arco" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " "tolerance is same with resolution" msgstr "" -"Enable this to get a G-code file with G2 and G3 moves. The fitting tolerance " -"is the same as the resolution." +"Abilita questa funzione per ottenere un file G-code con gli spostamenti " +"circolari in G2 e G3. La tolleranza di adattamento è la stessa della " +"risoluzione" msgid "Add line number" -msgstr "Add line number" +msgstr "Aggiungi numero di riga" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" msgstr "" -"Enable this to add line number(Nx) at the beginning of each G-Code line." +"Abilita questa opzione per aggiungere il numero di riga (Nx) all'inizio di " +"ogni riga del G-code" msgid "Scan first layer" -msgstr "Scan first layer" +msgstr "Scansiona Primo layer" msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" msgstr "" -"Enable this to allow the camera on the printer to check the quality of the " -"first layer." +"Attivare questa opzione per consentire alla fotocamera della stampante di " +"verificare la qualità del primo layer." msgid "Nozzle type" -msgstr "Nozzle type" +msgstr "Tipo di nozzle" msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"The metallic material of the nozzle: This determines the abrasive resistance " -"of the nozzle and what kind of filament can be printed." +"Il materiale metallico del nozzle: determina la resistenza all'abrasione del " +"nozzle e il tipo di filamento che può essere stampato." msgid "Undefine" msgstr "Indefinito" msgid "Hardened steel" -msgstr "Hardened steel" +msgstr "Acciaio temprato" msgid "Stainless steel" -msgstr "Stainless steel" +msgstr "Acciaio inox" msgid "Brass" -msgstr "Brass" - -msgid "Nozzle HRC" -msgstr "Nozzle HRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"Durezza nozzle. Zero significa che non è necessario controllarla durante lo " -"slicing." - -msgid "HRC" -msgstr "HRC" +msgstr "Ottone" msgid "Enable this option if machine has auxiliary part cooling fan" -msgstr "Enable this option if the machine has an auxiliary part cooling fan" - -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 comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." msgstr "" +"Abilitare questa opzione se la stampante dispone di una ventola di " +"raffreddamento ausiliaria per gli oggetti" msgid "G-code flavor" msgstr "Formato G-code" msgid "What kind of gcode the printer is compatible with" -msgstr "What kind of G-code the printer is compatible with." - -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" +msgstr "Con che tipo di G-code è compatibile la stampante." msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" -msgstr "Infill combination" +msgstr "Combinazione riempimento" msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Automatically combine sparse infill of several layers to print together in " -"order to reduce time. Walls are still printed with original layer height." +"Combina automaticamente il riempimento di più layer per ridurre i tempi. Le " +"pareti vengono comunque stampate con l'altezza originale del layer" -msgid "Filament to print internal sparse infill." -msgstr "This is the filament for printing internal sparse infill." +msgid "Length of sparse infill anchor" +msgstr "Lunghezza ancoraggio riempimento" msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." msgstr "" +"Questo collega una linea di riempimento a un perimetro interno con un breve " +"segmento aggiuntivo. Se espresso come percentuale (esempio: 15%), viene " +"calcolato sulla larghezza della linea di riempimento. Lo slicer cerca di " +"collegare due linee di riempimento vicine a un breve segmento di perimetro. " +"Se non viene trovato un segmento di perimetro più corto di " +"infill_anchor_max, la linea di riempimento viene collegata a un segmento di " +"perimetro solo da un lato e la lunghezza del segmento di perimetro viene " +"limitata a questo parametro, ma non oltre anchor_length_max. Imposta questo " +"parametro a zero per disabilitare l'ancoraggio dei perimetri collegati a una " +"singola linea di riempimento." + +msgid "0 (no open anchors)" +msgstr "0 (senza ancore aperte)" + +msgid "1000 (unlimited)" +msgstr "1000 (senza limiti)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Lunghezza massima ancoraggio riempimento" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"Collega una linea di riempimento a un perimetro interno con un breve " +"segmento aggiuntivo. Se espressa come percentuale (esempio: 15%), viene " +"calcolata sulla larghezza della linea di riempimento. Lo slicer cerca di " +"collegare due linee di riempimento vicine a un breve segmento perimetrale. " +"Se non viene trovato un segmento di perimetro più corto di questo parametro, " +"la linea di riempimento viene collegata a un segmento solo da un lato e la " +"lunghezza è limitata da infill_anchor, ma non sarà più lunga di questo " +"parametro. Imposta a zero per disabilitare l'ancoraggio." + +msgid "0 (not anchored)" +msgstr "0 (non ancorato)" + +msgid "Filament to print internal sparse infill." +msgstr "Questo è il filamento per la stampa del riempimento interno." + +msgid "Line width of internal sparse infill" +msgstr "Larghezza linea del riempimento interno" msgid "Infill/Wall overlap" -msgstr "Infill/wall overlap" +msgstr "Sovrapposizione riempimento/parete" 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 "" -"This allows the infill area to be enlarged slightly to overlap with walls " -"for better bonding. The percentage value is relative to line width of sparse " -"infill." +"Ciò consente di allargare leggermente l'area di riempimento per sovrapporla " +"alle pareti per una migliore adesione. Il valore percentuale è relativo alla " +"larghezza della linea del riempimento." msgid "Speed of internal sparse infill" -msgstr "This is the speed for internal sparse infill." - -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" +msgstr "E' la velocità del riempimento interno." msgid "Ironing Type" msgstr "Tipo di stiratura" @@ -8041,59 +8125,55 @@ 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 "" -"Ironing uses a small flow to print at the same height of a surface to make " -"flat surfaces smoother. This setting controls which layers are being ironed." +"La stiratura utilizza un flusso ridotto per stampare alla stessa altezza di " +"una superficie per rendere le superfici piane più lisce. Questa impostazione " +"controlla quali layer vengono stirati." msgid "No ironing" -msgstr "No ironing" - -msgid "Top surfaces" -msgstr "All top surfaces" - -msgid "Topmost surface" -msgstr "Topmost surface only" +msgstr "Non stirare" msgid "All solid layer" -msgstr "All solid layers" +msgstr "Tutti i layers solidi" msgid "Ironing Pattern" msgstr "Trama stiratura" msgid "Ironing flow" -msgstr "Ironing flow" +msgstr "Flusso stiratura" 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 "" -"This is the amount of material to be extruded during ironing. It is relative " -"to the flow of normal layer height. Too high a value will result in " -"overextrusion on the surface." +"È la quantità di materiale da estrudere durante la stiratura. È relativo al " +"flusso dell'altezza normale del layer. Un valore troppo alto provoca una " +"sovraestrusione sulla superficie." msgid "Ironing line spacing" -msgstr "Ironing line spacing" +msgstr "Spaziatura linee di stiratura" msgid "The distance between the lines of ironing" -msgstr "This is the distance between the lines used for ironing." +msgstr "È la distanza tra le linee utilizzate per la stiratura." msgid "Ironing speed" -msgstr "Ironing speed" +msgstr "Velocità stiratura" msgid "Print speed of ironing lines" -msgstr "This is the print speed for ironing lines." +msgstr "È la velocità di stampa per le linee di stiratura." msgid "This gcode part is inserted at every layer change after lift z" -msgstr "This G-code is inserted at every layer change after the z lift." +msgstr "" +"Questo G-code viene inserito a ogni cambio di layer dopo l'elevazione z." msgid "Supports silent mode" -msgstr "Silent Mode" +msgstr "Modalità silenziosa" msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" msgstr "" -"Whether the machine supports silent mode in which machine uses lower " -"acceleration to print more quietly" +"Se la macchina supporta la modalità silenziosa, in cui la macchina utilizza " +"un'accelerazione inferiore per stampare in modo più silenzioso" msgid "" "This G-code will be used as a code for the pause print. User can insert " @@ -8106,31 +8186,31 @@ msgid "This G-code will be used as a custom code" msgstr "Questo G-code verrà utilizzato come codice personalizzato" msgid "Maximum speed X" -msgstr "Maximum speed X" +msgstr "Velocità massima X" msgid "Maximum speed Y" -msgstr "Maximum speed Y" +msgstr "Velocità massima Y" msgid "Maximum speed Z" -msgstr "Maximum speed Z" +msgstr "Velocità massima Z" msgid "Maximum speed E" -msgstr "Maximum speed E" +msgstr "Velocità massima E" msgid "Machine limits" msgstr "Limiti macchina" msgid "Maximum X speed" -msgstr "Maximum X speed" +msgstr "Velocità massima X" msgid "Maximum Y speed" -msgstr "Maximum Y speed" +msgstr "Velocità massima Y" msgid "Maximum Z speed" -msgstr "Maximum Z speed" +msgstr "Velocità massima Z" msgid "Maximum E speed" -msgstr "Maximum E speed" +msgstr "Velocità massima E" msgid "Maximum acceleration X" msgstr "Accelerazione massima X" @@ -8181,34 +8261,34 @@ msgid "Maximum jerk of the E axis" msgstr "Jerk massimo dell'asse E" msgid "Minimum speed for extruding" -msgstr "Minimum speed for extruding" +msgstr "Velocità minima di estrusione" msgid "Minimum speed for extruding (M205 S)" -msgstr "Minimum speed for extruding (M205 S)" +msgstr "Velocità minima di estrusione (M205 S)" msgid "Minimum travel speed" -msgstr "Minimum travel speed" +msgstr "Velocità di spostamento minima" msgid "Minimum travel speed (M205 T)" -msgstr "Minimum travel speed (M205 T)" +msgstr "Velocità di spostamento minima (M205 T)" msgid "Maximum acceleration for extruding" -msgstr "Maximum acceleration for extruding" +msgstr "Accelerazione massima per l'estrusione" msgid "Maximum acceleration for extruding (M204 P)" -msgstr "Maximum acceleration for extruding (M204 P)" +msgstr "Accelerazione massima per l'estrusione (M204 P)" msgid "Maximum acceleration for retracting" -msgstr "Maximum acceleration for retracting" +msgstr "Accelerazione massima per la retrazione" msgid "Maximum acceleration for retracting (M204 R)" -msgstr "Maximum acceleration for retracting (M204 R)" +msgstr "Accelerazione massima per retrazione (M204 R)" msgid "Maximum acceleration for travel" -msgstr "Maximum acceleration for travel" +msgstr "Accelerazione massima per spostamenti" msgid "Maximum acceleration for travel (M204 T)" -msgstr "Maximum acceleration for travel (M204 T)" +msgstr "Accelerazione massima per spostamenti (M204 T)" msgid "Fan speed" msgstr "Velocità ventola" @@ -8217,8 +8297,9 @@ msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed limitation of part cooling fan" msgstr "" -"The part cooling fan speed may be increased when auto cooling is enabled. " -"This is the maximum speed for the part cooling fan." +"La velocità della ventola di raffreddamento può essere aumentata quando è " +"abilitato il raffreddamento automatico. Questa è la limitazione massima " +"della velocità della ventola di raffreddamento parziale" msgid "Max" msgstr "Massimo" @@ -8227,20 +8308,20 @@ msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" -"The highest printable layer height for the extruder: this is used to limit " -"the maximum layer height when adaptive layer height is enabled." +"L'altezza massima del layer stampabile per l'estrusore: viene utilizzata per " +"limitare l'altezza massima del layer quando è abilitato il layer adattativo." msgid "Minimum speed for part cooling fan" -msgstr "Minimum speed for part cooling fan" +msgstr "Velocità minima ventola di raffreddamento" 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 "" -"This is the speed of auxiliary part cooling fan. The auxiliary fan will run " -"at this speed during printing except for during the first several layers " -"which may be set to have no part cooling." +"Velocità ventola ausiliaria raffreddamento oggetto. La ventola ausiliaria " +"funzionerà a questa velocità durante la stampa, ad eccezione dei primi " +"layers, che possono essere impostati per non avere raffreddamento dei pezzi." msgid "Min" msgstr "Minimo" @@ -8249,20 +8330,20 @@ msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" msgstr "" -"The lowest printable layer height for the extruder. This is used to limit " -"the minimum layer height when adaptive layer height is enabled." +"L'altezza minima del layer stampabile per l'estrusore. Viene utilizzata per " +"limitare l'altezza minima del layer quando è abilito il layer adattativo." msgid "Min print speed" msgstr "Velocità minima di stampa" msgid "The minimum printing speed when slow down for cooling" -msgstr "The minimum printing speed when slowing down for cooling." +msgstr "La velocità di stampa minima quando si rallenta per il raffreddamento." msgid "Nozzle diameter" -msgstr "Diametro ugello" +msgstr "Diametro Nozzle" msgid "Diameter of nozzle" -msgstr "The diameter of the nozzle" +msgstr "Diametro del nozzle" msgid "Host Type" msgstr "Tipo host" @@ -8275,10 +8356,10 @@ msgstr "" "contenere il tipo di host." msgid "Nozzle volume" -msgstr "Nozzle volume" +msgstr "Volume del nozzle" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "Volume of nozzle between the filament cutter and the end of the nozzle" +msgstr "Volume del nozzle tra taglierina ed estremità nozzle" msgid "Start end points" msgstr "Punti iniziali e finali" @@ -8289,7 +8370,7 @@ msgstr "" "scarico." msgid "Reduce infill retraction" -msgstr "Reduce infill retraction" +msgstr "Riduci la retrazione nel riempimento" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " @@ -8305,92 +8386,70 @@ msgid "Enable" msgstr "Abilita" msgid "Filename format" -msgstr "Filename format" +msgstr "Formato nome file" msgid "User can self-define the project file name when export" -msgstr "Users can decide project file names when exporting." - -msgid "Make overhang printable" msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" +"Gli utenti possono decidere i nomi dei file progetto nell'esportazione." msgid "Detect overhang wall" -msgstr "Detect overhang walls" +msgstr "Rileva parete a sbalzo" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"This detects the overhang percentage relative to line width and uses a " -"different speed to print. For 100%% overhang, bridging speed is used." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "Larghezza linea delle pareti interne" msgid "Speed of inner wall" -msgstr "This is the speed for inner walls." +msgstr "E' la velocità per le pareti interne." msgid "Number of walls of every layer" -msgstr "This is the number of walls per layer." +msgstr "Questo è il numero di pareti per layer." + +msgid "Post-processing Scripts" +msgstr "Script post-elaborazione" msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"Se desideri elaborare l output del G-code tramite script personalizzati, " +"elenca i loro percorsi assoluti qui. Separa più script con un punto e " +"virgola. Gli script saranno eseguiti tramite il percorso assoluto del file G-" +"code come primo argomento e potranno essere lette anche le impostazioni " +"delle variabili" msgid "Raft contact Z distance" msgstr "Distanza di contatto Z Raft" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"This is the Z gap between an object and a raft. It is ignored for soluble " -"interfaces." +"È lo spazio Z tra oggetto e raft. Viene ignorato per le interfacce solubili." msgid "Raft expansion" msgstr "Espansione del raft" msgid "Expand all raft layers in XY plane" -msgstr "This expands all raft layers in XY plane." +msgstr "Questo espande tutti i layers del raft nel piano XY." msgid "Initial layer density" -msgstr "First layer density" +msgstr "Densità primo layer" msgid "Density of the first raft or support layer" -msgstr "This is the density of the first raft or support layer." +msgstr "Questa è la densità del raft o del layer di supporto." msgid "Initial layer expansion" -msgstr "First layer expansion" +msgstr "Espansione primo layer" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "This expands the first raft or support layer to improve bed adhesion." +msgstr "" +"Questo espande il primo raft o layer di supporto per migliorare l'adesione " +"al piatto." msgid "Raft layers" msgstr "Layer raft" @@ -8399,27 +8458,28 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Object will be raised by this number of support layers. Use this function to " -"avoid warping when printing ABS." +"L'oggetto verrà sollevato da questo numero di layer di supporto. Utilizzare " +"questa funzione per evitare deformazioni durante la stampa di ABS." msgid "" "G-code path is genereated after simplifing 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 "" -"The G-code path is generated after simplifying the contour of models to " -"avoid too many points and G-code lines. Smaller values mean higher " -"resolution and more time required to slice." +"Il percorso del G-code viene generato dopo aver semplificato il contorno del " +"modello per evitare molti punti e linee nel file G-code.\n" +"Un valore più piccolo significa una risoluzione più elevata e un tempo " +"maggiore per l'elaborazione" msgid "Travel distance threshold" -msgstr "Travel distance threshold" +msgstr "Soglia distanza di spostamento" msgid "" "Only trigger retraction when the travel distance is longer than this " "threshold" msgstr "" -"Only trigger retraction when the travel distance is longer than this " -"threshold." +"L'attivazione della retrazione avviene solo quando la distanza percorsa è " +"superiore a questa soglia." msgid "Retract amount before wipe" msgstr "Retrai la quantità prima di pulire" @@ -8427,14 +8487,14 @@ msgstr "Retrai la quantità prima di pulire" msgid "" "The length of fast retraction before wipe, relative to retraction length" msgstr "" -"This is the length of fast retraction before a wipe, relative to retraction " -"length." +"È la lunghezza della retrazione rapida prima di una pulizia, rispetto alla " +"lunghezza di retrazione." msgid "Retract when change layer" -msgstr "Retract on layer change" +msgstr "Ritrai al cambio layer" msgid "Force a retraction when changes layer" -msgstr "This forces a retraction on layer changes." +msgstr "Questo forza una retrazione nei cambi layer." msgid "Length" msgstr "Lunghezza" @@ -8446,24 +8506,25 @@ msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"This is the amount of filament in the extruder that is pulled back to avoid " -"oozing during long travel distances. Set to 0 to disable retraction." +"È la quantità filamento nell'estrusore che viene ritirata per evitare la " +"trasudazione durante le lunghe distanze. Imposta su 0 per disattivare la " +"retrazione." msgid "Z hop when retract" -msgstr "Z hop when retracting" +msgstr "Z hop in fase retrazione" 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 "" -"Whenever there is a retraction, the nozzle is lifted a little to create " -"clearance between the nozzle and the print. This prevents the nozzle from " -"hitting the print when traveling more. Using spiral lines to lift z can " -"prevent stringing." +"Ogni volta che si verifica una retrazione, il nozzle viene sollevato " +"leggermente per creare spazio tra nozzle e stampa. Ciò impedisce al nozzle " +"di colpire la stampa quando si viaggia di più. L'uso di linee a spirale per " +"sollevare z può evitare che si stringano." -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Tipo Z Hop" msgid "Slope" msgstr "Inclinato" @@ -8471,60 +8532,17 @@ msgstr "Inclinato" msgid "Spiral" msgstr "Spirale" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" msgstr "Velocità di retrazione" msgid "Speed of retractions" -msgstr "This is the speed for retraction." +msgstr "E' la velocità di retrazione." msgid "Deretraction Speed" msgstr "Velocità di deretrazione" @@ -8533,25 +8551,14 @@ msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"The speed for reloading filament into the extruder after a retraction; " -"setting this to 0 means that it will be the same speed as the retraction." - -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" +"La velocità di ricarica filamento nell'estrusore dopo una retrazione; " +"impostando 0, la velocità sarà la stessa della retrazione." msgid "Seam position" msgstr "Posizione giunzione" msgid "The start position to print each part of outer wall" -msgstr "This is the starting position for each part of the outer wall." +msgstr "E' la posizione di partenza per ogni parte della parete esterna." msgid "Nearest" msgstr "Più vicino" @@ -8560,44 +8567,19 @@ msgid "Aligned" msgstr "Allineato" msgid "Back" -msgstr "Back" +msgstr "Posteriore" msgid "Random" msgstr "Casuale" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8611,10 +8593,10 @@ msgid "" msgstr "" msgid "Skirt distance" -msgstr "Skirt distance" +msgstr "Distanza Skirt" msgid "Distance from skirt to brim or object" -msgstr "This is the distance from the skirt to the brim or the object." +msgstr "Questa è la distanza dallo skirt al brim o all'oggetto." msgid "Skirt height" msgstr "Altezza skirt" @@ -8623,45 +8605,40 @@ msgid "How many layers of skirt. Usually only one layer" msgstr "Numero di layer skirt: solitamente uno" msgid "Skirt loops" -msgstr "Skirt loops" +msgstr "Anelli skirt" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" -"This is the number of loops for the skirt. 0 means the skirt is disabled." - -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" +"Questo è il numero di loop per lo skirt. 0 indica che lo skirt è disattivata." 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 "" -"The printing speed in exported G-code will be slowed down when the estimated " -"layer time is shorter than this value in order to get better cooling for " -"these layers." +"La velocità di stampa nel G-code esportato verrà rallentata quando il tempo " +"stimato del layer è inferiore a questo valore per ottenere un migliore " +"raffreddamento per questi layers." msgid "Minimum sparse infill threshold" -msgstr "Minimum sparse infill threshold" +msgstr "Soglia minima riempimento" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"Sparse infill areas which are smaller than this threshold value are replaced " -"by internal solid infill." +"L'area riempimento che è inferiore al valore di soglia viene sostituita da " +"un riempimento solido interno." -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Larghezza linea del riempimento solido interno" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" -"This is the speed for internal solid infill, not including the top or bottom " -"surface." +"E' la velocità del riempimento solido interno, esclusa la superficie " +"superiore o inferiore." msgid "Spiral vase" msgstr "Vaso a spirale" @@ -8671,9 +8648,9 @@ msgid "" "model into a single walled print with solid bottom layers. The final " "generated model has no seam" msgstr "" -"This enables spiraling, which 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." +"Consente la stampa a spirale, che attenua i movimenti Z del contorno esterno " +"e trasforma un modello solido in una stampa a parete singola con layers " +"inferiori solidi. Il modello finale generato non presenta alcuna giunzione." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -8704,10 +8681,10 @@ msgid "Start G-code" msgstr "G-code iniziale" msgid "Start G-code when start the whole printing" -msgstr "G-code added when starting a print" +msgstr "G-code aggiunto all'avvio di una stampa" msgid "Start G-code when start the printing of this filament" -msgstr "G-code added when the printer starts using this filament" +msgstr "G-code aggiunto quando la stampante utilizza questo filamento" msgid "Slice gap closing radius" msgstr "Raggio chiusura del gap" @@ -8743,10 +8720,10 @@ msgid "Close holes" msgstr "Chiudi fori" msgid "Enable support" -msgstr "Enable support" +msgstr "Abilita supporti" msgid "Enable support generation." -msgstr "This enables support generation." +msgstr "Abilita la generazione dei supporti." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " @@ -8758,10 +8735,10 @@ msgstr "" "generati solo gli esecutori del supporto." msgid "normal(auto)" -msgstr "normal(auto)" +msgstr "normale(auto)" msgid "tree(auto)" -msgstr "tree(auto)" +msgstr "albero(auto)" msgid "normal(manual)" msgstr "normale(manuale)" @@ -8770,7 +8747,7 @@ msgid "tree(manual)" msgstr "albero(manuale)" msgid "Support/object xy distance" -msgstr "Support/object xy distance" +msgstr "Distanza xy supporto/oggetto" msgid "XY separation between an object and its support" msgstr "Separazione XY tra un oggetto e il suo supporto" @@ -8779,14 +8756,13 @@ msgid "Pattern angle" msgstr "Angolo trama" msgid "Use this setting to rotate the support pattern on the horizontal plane." -msgstr "" -"Use this setting to rotate the support pattern on the horizontal plane." +msgstr "Usa questo per ruotare sul piano orizzontale la trama del supporto." msgid "On build plate only" -msgstr "On build plate only" +msgstr "Solo dal piatto" msgid "Don't create support on model surface, only on build plate" -msgstr "This setting only generates supports that begin on the build plate." +msgstr "Questa impostazione genera solo i supporti che poggiano sul piatto." msgid "Support critical regions only" msgstr "Supporta solo aree critiche" @@ -8805,10 +8781,11 @@ msgid "Remove small overhangs that possibly need no supports." msgstr "" msgid "Top Z distance" -msgstr "Top Z distance" +msgstr "Distanza Z superiore" msgid "The z gap between the top support interface and object" -msgstr "This determines the Z gap between top support interfaces and objects." +msgstr "" +"Determina lo spazio Z gap tra le interfacce supporto superiori e gli oggetti." msgid "Bottom Z distance" msgstr "Distanza Z inferiore" @@ -8827,19 +8804,17 @@ msgstr "" "non viene utilizzato alcun filamento specifico per il supporto e viene " "utilizzato il filamento corrente" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "Larghezza linea di supporto" msgid "Interface use loop pattern" -msgstr "Loop pattern interface" +msgstr "Trama loop interfaccia" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"Copre con anelli il layer superiore del supporto a contatto. Disattivato per " -"impostazione predefinita." +"Questo copre i layer superiori di contatto dei supporti con degli anelli. " +"Disabilitato per impostazione predefinita." msgid "Support/raft interface" msgstr "Interfaccia supporto/raft" @@ -8856,32 +8831,31 @@ msgid "Top interface layers" msgstr "Layer superiori di interfaccia " msgid "Number of top interface layers" -msgstr "This is the number of top interface layers." +msgstr "È il numero di layer di interfaccia superiore." msgid "Bottom interface layers" msgstr "Layer inferiori di interfaccia " msgid "Top interface spacing" -msgstr "Top interface spacing" +msgstr "Spaziatura interfaccia superiore" msgid "Spacing of interface lines. Zero means solid interface" -msgstr "This is the spacing of interface lines. 0 means solid interface." +msgstr "Spaziatura linee interfaccia. 0 significa interfaccia solida" msgid "Bottom interface spacing" -msgstr "Bottom interface spacing" +msgstr "Spaziatura inferiore interfaccia" msgid "Spacing of bottom interface lines. Zero means solid interface" -msgstr "" -"This is the spacing of bottom interface lines. 0 means solid interface." +msgstr "Spaziatura linee interfaccia di fondo. 0 significa interfaccia solida" msgid "Speed of support interface" -msgstr "This is the speed for support interfaces." +msgstr "E' la velocità per le interfacce di supporto." msgid "Base pattern" -msgstr "Base pattern" +msgstr "Trama base" msgid "Line pattern of support" -msgstr "This is the line pattern for support." +msgstr "Questo è la trama lineare del supporto." msgid "Rectilinear grid" msgstr "Griglia rettilinea" @@ -8897,18 +8871,18 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"This is the line pattern for support interfaces. The default pattern for non-" -"soluble support interfaces is Rectilinear while the default pattern for " -"soluble support interfaces is Concentric." +"Questo è la Trama lineare per le interfacce di supporto. Il modello " +"predefinito per le interfacce di supporto non solubili è rettilineo mentre " +"il modello predefinito per le interfacce di supporto solubili è concentrico." msgid "Rectilinear Interlaced" msgstr "Rettilineo Interlacciato" msgid "Base pattern spacing" -msgstr "Base pattern spacing" +msgstr "Spazio trama base" msgid "Spacing between support lines" -msgstr "This determines the spacing between support lines." +msgstr "Questo determina la spaziatura tra le linee di supporto." msgid "Normal Support expansion" msgstr "Espansione normale dei supporti" @@ -8918,7 +8892,7 @@ msgstr "" "Espandere (+) o restringere (-) la portata orizzontale del supporto normale" msgid "Speed of support" -msgstr "This is the speed for support." +msgstr "E' la velocità del supporto." msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -8950,7 +8924,7 @@ msgid "Tree Hybrid" msgstr "Albero ibrido" msgid "Independent support layer height" -msgstr "Independent support layer height" +msgstr "Altezza layer di supporto indipendente" msgid "" "Support layer uses layer height independent with object layer. This is to " @@ -8963,78 +8937,54 @@ msgstr "" "la Prime Tower è abilitata." msgid "Threshold angle" -msgstr "Threshold angle" +msgstr "Angolo di soglia" msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." msgstr "" -"Support will be generated for overhangs whose slope angle is below this " -"threshold." +"Il supporto sarà generato per le sporgenze il cui angolo di inclinazione è " +"inferiore alla soglia." msgid "Tree support branch angle" -msgstr "Tree support branch angle" +msgstr "Angolo ramo supporti ad albero" 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 "" -"This setting determines the maximum overhang angle that the branches of tree " -"support are allowed to make. If the angle is increased, the branches can be " -"printed more horizontally, allowing them to reach farther." +"Questa determina l'angolo massimo di sporgenza che i rami del supporto ad " +"albero possono raggiungere. Se l'angolo viene aumentato, i rami possono " +"essere stampati più orizzontalmente, permettendo loro di arrivare più " +"lontano." msgid "Tree support branch distance" -msgstr "Tree support branch distance" +msgstr "Distanza ramo supporti ad albero" msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "" -"This setting determines the distance between neighboring tree support nodes." +"Questa determina la distanza tra i nodi di supporto dell'albero vicini." -msgid "Adaptive layer height" -msgstr "Adaptive layer height" +msgid "Tree support branch diameter" +msgstr "Diametro ramo supporti ad albero" -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" +msgid "This setting determines the initial diameter of support nodes." +msgstr "Questa determina il diametro iniziale dei nodi di supporto." -msgid "Auto brim width" -msgstr "" +msgid "Tree support wall loops" +msgstr "Loop parete supporto ad albero" -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" +msgid "This setting specify the count of walls around tree support" +msgstr "Questa specifica il numero di pareti attorno al supporto ad albero." msgid "Tree support brim width" msgstr "Larghezza brim supporto ad albero" -msgid "Distance from tree branch to the outermost brim line" +msgid "The brim width around tree support. 0 means auto." msgstr "" - -msgid "Tree support branch diameter" -msgstr "Tree support branch diameter" - -msgid "This setting determines the initial diameter of support nodes." -msgstr "This setting determines the initial diameter of support nodes." - -msgid "Tree support wall loops" -msgstr "Tree support wall loops" - -msgid "This setting specify the count of walls around tree support" -msgstr "This setting specifies the wall count around tree support." - -msgid "Tree support with infill" -msgstr "Tree support with infill" - -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"This setting specifies whether to add infill inside large hollows of tree " -"support." +"Larghezza del brim attorno al supporto ad albero. 0 significa automatico." msgid "Chamber temperature" msgstr "" @@ -9043,10 +8993,10 @@ msgid "Target chamber temperature" msgstr "" msgid "Nozzle temperature for layers after the initial one" -msgstr "Nozzle temperature after the first layer" +msgstr "Temperatura del nozzle dopo il primo layer" msgid "Bed temperature difference" -msgstr "Bed temperature difference" +msgstr "Differenza di temperatura del piano" msgid "" "Do not recommend bed temperature of other layer to be lower than initial " @@ -9059,47 +9009,47 @@ msgstr "" "dell'oggetto dal piatto." msgid "Detect thin wall" -msgstr "Detect thin walls" +msgstr "Rileva pareti sottili" 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 "" -"This detects thin walls which can’t contain two lines and uses a single line " -"to print. It may not print as well because it’s not a closed loop." +"Questo rileva pareti sottili che non possono contenere due righe e utilizza " +"una sola riga per la stampa. Potrebbe non essere stampato altrettanto bene " +"perché non è un circuito chiuso." msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"This G-code is inserted when filament is changed, including T commands to " -"trigger tool change." +"Questo G-code viene inserito al cambio filamento, compresi i comandi T per " +"attivare il cambio utensile." -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Larghezza linea per le superfici superiori" msgid "Speed of top surface infill which is solid" -msgstr "This is the speed for solid top surface infill." +msgstr "E' la velocità per il riempimento superficie superiore solida." msgid "Top shell layers" -msgstr "Top shell layers" +msgstr "Layer guscio superiore" msgid "" "This is the number of solid layers of top shell, including the top surface " "layer. When the thickness calculated by this value is thinner than top shell " "thickness, the top shell layers will be increased" msgstr "" -"This is the number of solid layers of top shell, including the top surface " -"layer. When the thickness calculated by this value is thinner than the top " -"shell thickness, the top shell layers will be increased" +"È il numero di layers solidi del guscio superiore, compreso il layer " +"superficiale superiore. Se lo spessore calcolato con questo valore è più " +"sottile dello spessore del guscio superiore, i layers del guscio superiore " +"vengono aumentati." msgid "Top solid layers" msgstr "Layer solidi superiori" msgid "Top shell thickness" -msgstr "Top shell thickness" +msgstr "Spessore guscio superiore" msgid "" "The number of top solid layers is increased when slicing if the thickness " @@ -9108,34 +9058,44 @@ msgid "" "is disabled and thickness of top shell is absolutely determained by top " "shell layers" msgstr "" -"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 a shell when layer height is small. 0 means that this " -"setting is disabled and thickness of top shell is determined simply by the " -"number of top shell layers." +"Il numero di layers solidi superiori aumenta durante l'elaborazione se lo " +"spessore calcolato dai layers superiori del guscio è più sottile di questo " +"valore. Questo può evitare di avere un guscio troppo sottile quando " +"l'altezza del layer è ridotta. 0 significa che questa impostazione è " +"disabilitata e lo spessore del guscio superiore è determinato semplicemente " +"dal numero di layers superiori del guscio." msgid "Speed of travel which is faster and without extrusion" -msgstr "This is the speed at which traveling is done." +msgstr "È la velocità con cui si viaggia." + +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" msgid "Wipe while retracting" -msgstr "Pulisci durante la retrazione" +msgstr "Pulisci in fase di retrazione" 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 "" -"This moves the nozzle along the last extrusion path when retracting to clean " -"any leaked material on the nozzle. This can minimize blobs when printing a " -"new part after traveling." +"Questo sposta il nozzle lungo l'ultimo percorso di estrusione quando si " +"ritrae per pulire il materiale fuoriuscito dal nozzle. In questo modo è " +"possibile ridurre al minimo i blob quando si stampa una nuova parte dopo lo " +"spostamento." msgid "Wipe Distance" -msgstr "Wipe distance" +msgstr "Distanza pulizia" msgid "" "Discribe how long the nozzle will move along the last path when retracting" msgstr "" -"This describes how long the nozzle will move along the last path while " -"retracting." +"Descrive per quanto tempo il nozzle si muoverà lungo l'ultimo percorso " +"mentre si ritrae." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " @@ -9150,7 +9110,7 @@ msgid "Purging volumes" msgstr "Volumi di spurgo" msgid "Flush multiplier" -msgstr "Flush multiplier" +msgstr "Moltiplicatore spurgo" msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " @@ -9160,17 +9120,16 @@ msgstr "" "moltiplicato per i volumi di spurgo indicati nella tabella." msgid "Prime volume" -msgstr "Prime volume" +msgstr "Volume primario" msgid "The volume of material to prime extruder on tower." -msgstr "" -"This is the volume of material to prime the extruder with on the tower." +msgstr "E' il volume materiale da usare per la Prime Tower" msgid "Width" msgstr "Larghezza" msgid "Width of prime tower" -msgstr "This is the width of prime towers." +msgstr "È la larghezza della Prime Tower." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -9205,20 +9164,21 @@ msgstr "" "Prime Tower." msgid "X-Y hole compensation" -msgstr "X-Y hole compensation" +msgstr "Compensazione foro X-Y" msgid "" "Holes of object will be grown or shrunk in XY plane by the configured value. " "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 "" -"Holes in objects will be grown or shrunk in the XY plane by the set value. " -"Positive values make holes bigger and negative values make holes smaller. " -"This function is used to adjust size slightly when objects have assembly " -"issues." +"I fori negli oggetti vengono ingranditi o rimpiccioliti nel piano XY in base " +"al valore impostato. Un valore positivo ingrandisce i fori mentre un valore " +"negativo rimpicciolisce i fori. Questa funzione viene utilizzata per " +"regolare leggermente le dimensioni quando gli oggetti presentano problemi di " +"assemblaggio." msgid "X-Y contour compensation" -msgstr "X-Y contour compensation" +msgstr "Compensazione contorni X-Y" msgid "" "Contour of object will be grown or shrunk in XY plane by the configured " @@ -9226,28 +9186,11 @@ msgid "" "smaller. This function is used to adjust size slightly when the object has " "assembling issue" msgstr "" -"The contour of objects will be grown or shrunk in the XY plane by the set " -"value. Positive values make contours bigger, and negative values make " -"contours smaller. This function is used to adjust sizes slightly when " -"objects have assembly issues." - -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" +"Il contorno degli oggetti viene ingrandito o rimpicciolito nel piano XY in " +"base al valore impostato. I valori positivi ingrandiscono i contorni e " +"quelli negativi li rimpiccioliscono. Questa funzione viene utilizzata per " +"regolare leggermente le dimensioni quando gli oggetti presentano problemi di " +"assemblaggio." msgid "" "Classic wall generator produces walls with constant extrusion width and for " @@ -9356,16 +9299,17 @@ msgstr "" "diametro del nozzle" msgid "Detect narrow internal solid infill" -msgstr "Detect narrow internal solid infill" +msgstr "Rileva riempimento solido interno stretto" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used defaultly." msgstr "" -"This option will auto-detect narrow internal solid infill areas. If enabled, " -"the concentric pattern will be used for the area to speed up printing. " -"Otherwise, the rectilinear pattern will be used by default." +"Questa rileva automaticamente le aree interne strette di riempimento solido. " +"Se abilitato, la trama concentrica verrà utilizzato per l'area per " +"velocizzare la stampa. Altrimenti, la trama rettilinea verrà utilizzata per " +"impostazione predefinita." msgid "invalid value " msgstr "Valore non valido" @@ -9384,10 +9328,10 @@ msgid " not in range " msgstr "Fuori portata" msgid "Export 3MF" -msgstr "Esporta 3MF" +msgstr "Esporta 3mf" msgid "Export project as 3MF." -msgstr "This exports the project as a 3mf file." +msgstr "Questo esporta il progetto come file 3mf." msgid "Export slicing data" msgstr "Esporta dati elaborati" @@ -9408,13 +9352,13 @@ msgid "Export the objects as multiple STL." msgstr "" msgid "Slice" -msgstr "Processa" +msgstr "Slice" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" -msgstr "Slice the plates: 0-all plates, i-plate i, others-invalid" +msgstr "Slicing dei piatti: 0-tutti i piatti, i-piatto i, altri-invalidi" msgid "Show command help." -msgstr "This shows command help." +msgstr "Mostra la guida ai comandi." msgid "UpToDate" msgstr "Aggiornato" @@ -9458,13 +9402,13 @@ msgid "Output Model Info" msgstr "Info Modello di output" msgid "Output the model's information." -msgstr "This outputs the model’s information." +msgstr "Questo produce le informazioni del modello." msgid "Export Settings" -msgstr "Export Settings" +msgstr "Esporta impostazioni" msgid "Export settings to a file." -msgstr "This exports settings to a file." +msgstr "Questo esporta le impostazioni in un file." msgid "Send progress to pipe" msgstr "Inviare l'avanzamento al pipe" @@ -9473,10 +9417,10 @@ msgid "Send progress to pipe." msgstr "Inviare l'avanzamento al pipe" msgid "Arrange Options" -msgstr "Arrange Options" +msgstr "Opzioni disposizione" msgid "Arrange options: 0-disable, 1-enable, others-auto" -msgstr "Arrange options: 0-disable, 1-enable, others-auto" +msgstr "Opzioni di disposizione: 0-disabilita, 1-abilita, altro-auto" msgid "Repetions count" msgstr "" @@ -9485,28 +9429,28 @@ msgid "Repetions count of the whole model" msgstr "" msgid "Convert Unit" -msgstr "Convert Unit" +msgstr "Converti unità" msgid "Convert the units of model" -msgstr "Convert the units of model" +msgstr "Converti le unità del modello" msgid "Orient the model" -msgstr "Orient the model" +msgstr "Orienta il modello" msgid "Scale the model by a float factor" -msgstr "Scale the model by a float factor" +msgstr "Ridimensiona il modello in base a un fattore float" msgid "Load General Settings" -msgstr "Load General Settings" +msgstr "Carica impostazioni generali" msgid "Load process/machine settings from the specified file" -msgstr "Load process/machine settings from the specified file" +msgstr "Carica le impostazioni di processo/macchina dal file specificato" msgid "Load Filament Settings" -msgstr "Load Filament Settings" +msgstr "Carica impostazioni filamento" msgid "Load filament settings from the specified file list" -msgstr "Load filament settings from the specified file list" +msgstr "Carica le impostazioni del filamento dall'elenco di file specificato" msgid "Skip Objects" msgstr "Salta oggetti" @@ -9522,51 +9466,42 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" -msgstr "Output directory" +msgstr "Cartella destinazione" msgid "Output directory for the exported files." -msgstr "This is the output directory for exported files." +msgstr "Questa è la cartella di destinazione per i file esportati." msgid "Debug level" -msgstr "Debug level" +msgstr "Livello di debug" msgid "" "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:" +"Imposta livello di debug. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" "trace\n" msgid "Error in zip archive" -msgstr "Error in zip archive" +msgstr "Errore nell'archivio zip" msgid "Generating walls" -msgstr "Generating walls" +msgstr "Generazione pareti" msgid "Generating infill regions" -msgstr "Generating infill regions" +msgstr "Generazione regioni di riempimento" msgid "Generating infill toolpath" -msgstr "Generating infill toolpath" +msgstr "Generazione percorso utensile di riempimento" msgid "Detect overhangs for auto-lift" msgstr "Rilevare le sporgenze per il sollevamento automatico" msgid "Generating support" -msgstr "Generating support" +msgstr "Generazione supporto" msgid "Checking support necessity" -msgstr "Checking support necessity" +msgstr "Verifica necessità di supporto" msgid "floating regions" msgstr "regioni galleggianti" @@ -9586,10 +9521,11 @@ msgstr "" "generazione dei supporti." msgid "Optimizing toolpath" -msgstr "Optimizing toolpath" +msgstr "Ottimizzazione del percorso utensile" msgid "Empty layers around bottom are replaced by nearest normal layers." -msgstr "Empty layers around bottom are replaced by nearest normal layers." +msgstr "" +"I layers vuoti intorno al fondo sono sostituiti da layers normali più vicini." msgid "The model has too many empty layers." msgstr "Il modello ha troppi layers vuoti." @@ -9616,34 +9552,34 @@ msgstr "" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support: generate toolpath at layer %d" +msgstr "Supporto: generazione percorso utensile al layer %d" msgid "Support: detect overhangs" -msgstr "Support: detect overhangs" +msgstr "Supporto: rilevamento sporgenze" msgid "Support: generate contact points" -msgstr "Support: generate contact points" +msgstr "Supporto: generazione punti di contatto" msgid "Support: propagate branches" -msgstr "Support: propagate branches" +msgstr "Supporto: propagazione rami" msgid "Support: draw polygons" -msgstr "Support: draw polygons" +msgstr "Supporto: disegno poligoni" msgid "Support: generate toolpath" -msgstr "Support: generate toolpath" +msgstr "Supporto: generazione percorso utensile" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support: generate polygons at layer %d" +msgstr "Supporto: generazione poligoni al layer %d" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support: fix holes at layer %d" +msgstr "Supporto: correzione dei buchi nel layer %d" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support: propagate branches at layer %d" +msgstr "Supporto: propagazione rami al layer %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." @@ -9680,140 +9616,399 @@ msgstr "Il file contiene un indice dei vertici non valido." msgid "This OBJ file couldn't be read because it's empty." msgstr "Impossibile leggere il file OBJ perché è vuoto." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" -msgstr "Finito" - -msgid "Unable to perform boolean operation on selected parts" +msgid "We would use Lidar to read the calibration result" msgstr "" -msgid "Mesh Boolean" +msgid "Prev" msgstr "" -msgid "Union" +msgid "Recalibration" msgstr "" -msgid "Difference" +msgid "Calibrate" msgstr "" -msgid "Intersection" +msgid "Finish" +msgstr "Fine" + +msgid "Wiki" msgstr "" -msgid "Source Volume" +msgid "How to use calibration result?" msgstr "" -msgid "Tool Volume" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Subtract from" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Subtract with" +msgid "Calibration not supported" msgstr "" -msgid "selected" +msgid "Flow Dynamics" msgstr "" -msgid "Part 1" +msgid "Flow Rate" msgstr "" -msgid "Part 2" +msgid "Max Volumetric Speed" msgstr "" -msgid "Delete input" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "Send to print" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "The name cannot be empty." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Fallito" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "Caricamento" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Tipo di piatto" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9872,7 +10067,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9927,47 +10122,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" +msgstr "Finito" + +msgid "Send to print" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Upload to Printer Host with the following filename:" msgstr "" -msgid "Open CA certificate file" +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Caricamento" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -10086,17 +10354,27 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"Sottrarre una parte\n" +"Sapevi che è possibile sottrarre una mesh da un'altra utilizzando il " +"modificatore Parte negativa? In questo modo è possibile, ad esempio, creare " +"fori facilmente ridimensionabili direttamente in Bambu Studio. Per saperne " +"di più, consulta la documentazione." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEP\n" +"Sapevi che puoi migliorare la qualità di stampa elaborando un file STEP " +"anziché un file STL?\n" +"Bambu Studio supporta la suddivisione in sezioni di file STEP, fornendo " +"risultati più fluidi rispetto a un STL a risoluzione inferiore. Provalo!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10230,605 +10508,33 @@ msgstr "" "una maggiore densità riempimento per migliorare la resistenza del modello?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "La configurazione potrebbe essere generata da una versione più recente di " -#~ "Bambu Studio." +#~ "Usa solo una parete su superfici piane, per dare più spazio alla trama " +#~ "riempimento superiore" -#~ msgid "Internal Version" -#~ msgstr "Versione interna" +#~ msgid "Nozzle HRC" +#~ msgstr "Nozzle HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "Bambu Studio ha esaurito la memoria e verrà chiuso. Questo potrebbe " -#~ "essere un bug. Segnala questo errore al supporto tecnico." +#~ "Durezza nozzle. Zero significa che non è necessario controllarla durante " +#~ "lo slicing." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "Si è verificato un errore nella localizzazione e Bambu Studio verrà " -#~ "chiuso. " - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "BambuStudio ha ricevuto un'eccezione non gestita: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Il file di configurazione di Bambu Studio non può essere analizzato e " -#~ "potrebbe essere danneggiato. Elimina il file e riprova." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio necessita di aggiornamento" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Scegli file (.gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "La versione Bambu Studio è obsoleta, devi aggiornarla all'ultima versione " -#~ "prima di poterla utilizzare normalmente" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Inizializzazione della GUI di Bambu Studio non riuscita" - -#~ msgid "Check cloud service status" -#~ msgstr "Verifica lo stato del servizio cloud" - -#~ msgid "code" -#~ msgstr "Codice" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Connessione al servizio cloud non riuscita" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Fai clic sul link in alto per visualizzare lo stato del servizio cloud" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connessione stampante fallita" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Controlla la connessione di rete della stampante e di Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Inserisco il nuovo filamento nell'estrusore" - -#~ msgid "Grab new filament" -#~ msgstr "Prendo un nuovo filamento" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Dati anomali del file di stampa. Eseguire nuovamente l'elaborazione" - -#~ msgid "Task canceled." -#~ msgstr "Attività annullata." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Attività di Upload scaduto. Controlla lo stato della rete e riprova." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "" -#~ "File di stampa non trovato; si prega di eseguire nuovamente lo slice" - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "Il file di stampa supera la dimensione massima consentita (1 GB). " -#~ "Semplifica il modello ed elaboralo nuovamente" - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Caricamento del file in ftp non riuscito. Riprova." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Controlla lo stato attuale del server Bambu Lab cliccando sul link qui " -#~ "sopra." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "La dimensione del file di stampa è troppo grande. Modifica la dimensione " -#~ "del file e riprova." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "File di stampa non trovato; elabora nuovamente il file e invia per la " -#~ "stampa." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Impossibile caricare il file di stampa tramite FTP. Controlla lo stato " -#~ "della rete e riprova." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio è concesso in licenza sotto" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio è basato su PrusaSlicer di Prusa Research, che si basa su " -#~ "Slic3r di Alessandro Ranellucci e sulla community RepRap" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio è basato su PrusaSlicer di PrusaResearch e SuperSlicer di " -#~ "Merill (supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "" -#~ "Bambu Studio ha anche fatto riferimento ad alcune idee di Cura by " -#~ "Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "Esistono molte parti del software che provengono dai contributi della " -#~ "community, quindi non siamo in grado di elencarle una per una e verranno " -#~ "invece attribuite nei commenti ai codici corrispondenti." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Altezza layer troppo grande\n" -#~ "È stato ripristinato a 0.2" - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Sono stati trovati conflitti di percorsi G-code al layer %d. Separare " -#~ "ulteriormente gli oggetti in conflitto (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Segnala un problema" - -#~ msgid "Show &Overhang" -#~ msgstr "Mostra sporgenze" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Mostra la sporgenza dell'oggetto evidenziata nella scena 3D" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "" -#~ "Inizializzazione fallita (la connessione del dispositivo non è pronta)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "È in funzione un'altra telecamera virtuale.\n" -#~ "Bambu Studio supporta solo una singola telecamera virtuale.\n" -#~ "Si desidera interrompere questa telecamera virtuale?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Passa ai file modello 3mf." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Caricamento non riuscito [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Vuoi eliminare il file '%s' dalla stampante?" - -#~ msgid "Delete file" -#~ msgstr "Elimina file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Recupero informazioni del modello..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Impossibile recuperare le informazioni del modello dalla stampante." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Analisi delle informazioni sul modello non riuscita" - -#~ msgid "Immediately score" -#~ msgstr "Punteggio immediato" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Assegna un punteggio per il tuo modello Bambu Market preferito." - -#~ msgid "Score" -#~ msgstr "Punteggio" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "Il 3mf è stato generato da una vecchia versione di Bambu Studio, " -#~ "caricando solo i dati geometrici." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "La funzione \"Correggi modello\" è attualmente disponibile solo su " -#~ "Windows. Si prega di riparare il modello su Bambu Studio (Windows) o su " -#~ "software CAD." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Associa i file a Bambu Studio" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Associa i file .3mf a Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Se abilitata, imposta Bambu Studio come applicazione predefinita per " -#~ "aprire i file .3mf." - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Associa i file .stl a Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Se abilitata, imposta Bambu Studio come applicazione predefinita per " -#~ "aprire i file .stl." - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Associa i file .step/.stp a Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Se abilitata, imposta Bambu Studio come applicazione predefinita per " -#~ "aprire i file .step." - -#~ msgid "Online Models" -#~ msgstr "Modelli Online" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Mostra i modelli online selezionati dallo staff nella home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Salta check Blacklist AMS" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Abilita SSL (MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Abilita SSL (FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Modalità sviluppatore interno" - -#~ msgid "Incompatible" -#~ msgstr "Non compatibile" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Uguale al tipo di piano globale" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Impossibile connettersi alla stampante" - -#~ msgid "Error code" -#~ msgstr "Codice di errore" - -#~ msgid "Check the status of current system services" -#~ msgstr "Verifica lo stato attuale dei servizi di sistema." - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Connessione locale della stampante fallita; Si prega di riprovare." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "La lunghezza del nome supera il limite." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "La stampante deve essere sulla stessa LAN di Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Impossibile creare il socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Connessione del socket non riuscita" - -#~ msgid "Failed to publish login request" -#~ msgstr "Non è stato possibile pubblicare la richiesta di login" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout durante il recupero del Ticket dal dispositivo." - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout durante il recupero del Ticket dal server." - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Inserimento del ticket sul server non riuscito" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Non è stato possibile analizzare la causa del rapporto di login." - -#~ msgid "Receive login report timeout" -#~ msgstr "Timeout ricezione del rapporto di login" - -#~ msgid "Check the reason" -#~ msgstr "Verifica la causa" - -#~ msgid "Read and accept" -#~ msgstr "Leggi e accetta" - -#~ msgid "Terms and Conditions" -#~ msgstr "Termini e condizioni" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "Grazie per aver acquistato un dispositivo Bambu Lab. Prima di utilizzare " -#~ "il dispositivo Bambu Lab, si prega di leggere i termini e le condizioni. " -#~ "Facendo clic per accettare di utilizzare il tuo dispositivo Bambu Lab, " -#~ "accetti di rispettare l'Informativa sulla privacy e le Condizioni d'uso " -#~ "(collettivamente, i \"Termini\"). Se non rispetti o non accetti " -#~ "l'Informativa sulla privacy di Bambu Lab, ti preghiamo di non utilizzare " -#~ "i dispositivi e i servizi di Bambu Lab." - -#~ msgid "and" -#~ msgstr "e" - -#~ msgid "Privacy Policy" -#~ msgstr "Informativa Privacy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "Chiediamo il tuo aiuto per migliorare tutte le stampanti" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Dichiarazione del programma miglioramento dell'esperienza utente" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "Nella comunità della stampa 3D, impariamo dai successi e dagli insuccessi " -#~ "degli altri per adattare i nostri parametri e impostazioni di slicing. %s " -#~ "segue lo stesso principio e utilizza l'apprendimento automatico per " -#~ "migliorare le sue prestazioni basandosi sui successi e sugli insuccessi " -#~ "di un vasto numero di stampe effettuate dai nostri utenti. Stiamo " -#~ "addestrando %s affinché diventi più intelligente alimentandolo con dati " -#~ "reali. Se sei d'accordo, questo servizio accederà alle informazioni dai " -#~ "tuoi registri degli errori e dai registri di utilizzo, che possono " -#~ "includere informazioni descritte nell'Informativa sulla privacy. Non " -#~ "raccoglieremo alcun Dato Personale con il quale un individuo possa essere " -#~ "identificato direttamente o indirettamente, incluso, a titolo " -#~ "esemplificativo, nomi, indirizzi, informazioni di pagamento o numeri di " -#~ "telefono. Abilitando questo servizio, accetti questi termini e la " -#~ "dichiarazione sull'Informativa sulla privacy." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Dichiarazione del piano miglioramento dell'esperienza utente" - -#~ msgid "Post-processing scripts" -#~ msgstr "Script post-elaborazione" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Clicca su OK per aggiornare il plug-in di rete al prossimo avvio di Bambu " -#~ "Studio." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Nuova versione di Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Step 1, conferma che Bambu Studio e la tua stampante siano sulla stessa " -#~ "LAN." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "La copia della directory %1% in %2% non è riuscita: %3%." - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "I seguenti oggetti(o) hanno un layer iniziale vuoto e non possono essere " -#~ "stampati. Tagliare la parte inferiore o attivare i supporti." - -#~ msgid "Bridge direction" -#~ msgstr "Direzione bridge" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Utilizzare solo una parete sul primo layer dei modelli" - -#~ msgid "Line width of outer wall" -#~ msgstr "Larghezza linea della parete esterna" - -#~ msgid "Max Radius" -#~ msgstr "Raggio massimo" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Raggio di distanza massimo intorno all'estrusore. Utilizzato per evitare " -#~ "le collisioni nella stampa di oggetti singoli." - -#~ msgid "Object flow ratio" -#~ msgstr "Flow ratio oggetto" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "Il rapporto di flusso impostato per oggetto; il significato è lo stesso " -#~ "del rapporto di flusso." - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "Larghezza di linea predefinita per linee impostate a zero" - -#~ msgid "Line width of initial layer" -#~ msgstr "Larghezza linea del primo layer" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Lunghezza ancoraggio riempimento" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "Questo collega una linea di riempimento a un perimetro interno con un " -#~ "breve segmento aggiuntivo. Se espresso come percentuale (esempio: 15%), " -#~ "viene calcolato sulla larghezza della linea di riempimento. Lo slicer " -#~ "cerca di collegare due linee di riempimento vicine a un breve segmento di " -#~ "perimetro. Se non viene trovato un segmento di perimetro più corto di " -#~ "infill_anchor_max, la linea di riempimento viene collegata a un segmento " -#~ "di perimetro solo da un lato e la lunghezza del segmento di perimetro " -#~ "viene limitata a questo parametro, ma non oltre anchor_length_max. " -#~ "Imposta questo parametro a zero per disabilitare l'ancoraggio dei " -#~ "perimetri collegati a una singola linea di riempimento." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Lunghezza massima ancoraggio riempimento" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "Collega una linea di riempimento a un perimetro interno con un breve " -#~ "segmento aggiuntivo. Se espressa come percentuale (esempio: 15%), viene " -#~ "calcolata sulla larghezza della linea di riempimento. Lo slicer cerca di " -#~ "collegare due linee di riempimento vicine a un breve segmento " -#~ "perimetrale. Se non viene trovato un segmento di perimetro più corto di " -#~ "questo parametro, la linea di riempimento viene collegata a un segmento " -#~ "solo da un lato e la lunghezza è limitata da infill_anchor, ma non sarà " -#~ "più lunga di questo parametro. Imposta a zero per disabilitare " -#~ "l'ancoraggio." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (non ancorato)" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Larghezza linea del riempimento interno" - -#~ msgid "Line width of inner wall" -#~ msgstr "Larghezza linea delle pareti interne" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "Se desideri elaborare l output del G-code tramite script personalizzati, " -#~ "elenca i loro percorsi assoluti qui. Separa più script con un punto e " -#~ "virgola. Gli script saranno eseguiti tramite il percorso assoluto del " -#~ "file G-code come primo argomento e potranno essere lette anche le " -#~ "impostazioni delle variabili" - -#~ msgid "Z Hop Type" -#~ msgstr "Tipo Z Hop" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Larghezza linea del riempimento solido interno" - -#~ msgid "Line width of support" -#~ msgstr "Larghezza linea di supporto" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "" -#~ "Larghezza del brim attorno al supporto ad albero. 0 significa automatico." - -#~ msgid "Line width for top surfaces" -#~ msgstr "Larghezza linea per le superfici superiori" - -#~ msgid "Finish" -#~ msgstr "Fine" - -#~ msgid "Failed" -#~ msgstr "Fallito" - -#~ msgid "Plate Type" -#~ msgstr "Tipo di piatto" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Sottrarre una parte\n" -#~ "Sapevi che è possibile sottrarre una mesh da un'altra utilizzando il " -#~ "modificatore Parte negativa? In questo modo è possibile, ad esempio, " -#~ "creare fori facilmente ridimensionabili direttamente in Bambu Studio. Per " -#~ "saperne di più, consulta la documentazione." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "Sapevi che puoi migliorare la qualità di stampa elaborando un file STEP " -#~ "anziché un file STL?\n" -#~ "Bambu Studio supporta la suddivisione in sezioni di file STEP, fornendo " -#~ "risultati più fluidi rispetto a un STL a risoluzione inferiore. Provalo!" +#~ "Questo rileva la percentuale di sporgenza rispetto alla larghezza della " +#~ "linea e utilizza una velocità di stampa diversa. Per una sporgenza del " +#~ "100%%, viene utilizzata la velocità dei ponti." #~ msgid "Pause Print" #~ msgstr "Pausa Stampa" @@ -10839,12 +10545,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Elimina Pausa Stampa" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Calibra fattori flusso dinamico" + #~ msgid "\\u2103" #~ msgstr "\\u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Calibrazione flusso" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -10867,6 +10579,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "Modelli 3D" + #~ msgid "AMSMaterialsSetting" #~ msgstr "Impostazione materiali AMS" @@ -10887,9 +10602,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Volume attuale = Volume di spurgo * Moltiplicatore" +#~ msgid "Adaptive layer height" +#~ msgstr "Altezza layer adattivo" + #~ msgid "Add Custom Printer" #~ msgstr "Aggiungi stampante personalizzata" +#~ msgid "Ams filament backup" +#~ msgstr "Backup filamento AMS" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -10919,6 +10640,9 @@ msgstr "" #~ "Ciò può causare un calo della qualità delle superfici a sbalzo quando si " #~ "stampa rapidamente.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Assembla le parti selezionate in un'unica parte" + #~ msgid "Auto arrange" #~ msgstr "Disposizione automaticaarrange" @@ -10968,6 +10692,12 @@ msgstr "" #~ "di questo filamento.\n" #~ "Ciò può causare un blocco del nozzle o un errore di stampa" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Spessore minimo del guscio inferiore" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Layers solidi inferiori" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11014,6 +10744,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Consumo" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Conferma se il filamento è stato estruso" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate" + +#~ msgid "Cool plate" +#~ msgstr "Cool Plate" + #~ msgid "Creating" #~ msgstr "Creazione" @@ -11049,6 +10788,23 @@ msgstr "" #~ "Si - Abilita Arachne e disabilita il rallentamento degli sbalzi\n" #~ "No - Rinuncia all'uso di Arachne questa volta" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Disconnessione dalla stampante [%s] a causa della modalità LAN " +#~ "disattivata. Ricollegare la stampante accedendo con il proprio account " +#~ "utente." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Disconnessione dalla stampante [%s] a causa della modalità LAN attivata. " +#~ "Ricollegare la stampante inserendo il codice di accesso che può essere " +#~ "ottenuto dal display della stampante." + #~ msgid "Display printable box" #~ msgstr "Mostra box stampabile" @@ -11104,6 +10860,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Scaricando il plug-in Bambu Network" +#~ msgid "Dump video" +#~ msgstr "Scarica video" + #~ msgid "Edit plate setitngs" #~ msgstr "Modifica impostazioni piatto" @@ -11120,6 +10879,9 @@ msgstr "" #~ "Si noti che questa opzione ha effetto solo se non è stata generata una " #~ "prime tower sul piatto corrente." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + #~ msgid "Enter a search term" #~ msgstr "Inserire un termine di ricerca" @@ -11167,14 +10929,29 @@ msgstr "" #~ "Impossibile connettersi alla stampante attraverso la LAN. Immettere " #~ "l'indirizzo IP e il codice di accesso corretti della stampante." +#~ msgid "Failed to get ticket" +#~ msgstr "Impossibile recuperare il ticket" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Non è stato possibile analizzare la causa del rapporto di login." +#~ msgid "Failed uploading print file" +#~ msgstr "Caricamento del file di stampa non riuscito" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "" #~ "Caricamento del file di stampa non riuscito. Inserisci nuovamente " #~ "l'indirizzo IP." +#~ msgid "Failure of bind" +#~ msgstr "Errore associazione" + +#~ msgid "Failure of printer login" +#~ msgstr "Errore di accesso alla stampante" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Alimenta il nuovo filamento dalla bobina esterna" + #~ msgid "Filament 1" #~ msgstr "Filamento 1" @@ -11240,6 +11017,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Selezione dei filamenti" +#~ msgid "Filaments replace" +#~ msgstr "Filamento Backup" + #~ msgid "Fix model locally" #~ msgstr "Correggi il modello localmente" @@ -11328,6 +11108,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Inizializzazione fallita [%d]!" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "Inizializzazione fallita (non supportata dalla stampante)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Inizializzazione fallita (non supportata in modalità solo LAN)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "Inizializzazione fallita (non supportata senza tunnel video remoto)!" @@ -11364,6 +11150,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Tempo layer(log): " +#~ msgid "Layer Time (log)" +#~ msgstr "Tempo layer (log)" + #~ msgid "Layers: %d/%d" #~ msgstr "Layers: %d/%d" @@ -11373,6 +11162,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Layers: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Layers e Perimetri" + #~ msgid "Leaving Seam painting" #~ msgstr "Lascia pittura giunzione" @@ -11385,6 +11177,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Gestione" +#~ msgid "Manual" +#~ msgstr "Manuale" + #~ msgid "Max travel detour distance" #~ msgstr "Distanza massima di spostamento" @@ -11395,6 +11190,12 @@ msgstr "" #~ "Distanza massima di deviazione per evitare di attraversare le pareti. Se " #~ "la distanza è maggiore di questo valore, non ci sarà alcuna deviazione." +#~ msgid "Media" +#~ msgstr "Media" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Manca l'IP LAN della stampante!" + #~ msgid "Modify" #~ msgstr "Modifica" @@ -11410,15 +11211,31 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "NO AMS" +#~ msgid "No files" +#~ msgstr "Nessun file" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Non accessibile in modalità solo LAN!" + #~ msgid "Not supported." #~ msgstr "Non supportato." +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Non supportato da questo modello di stampante!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Nota: la posizione dell'IP e del codice di accesso sulla macchina è la " #~ "seguente:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Un oggetto ha un layer iniziale vuoto e non può essere stampato. Tagliare " +#~ "il fondo o attivare i supporti." + #~ msgid "Open &PrusaSlicer" #~ msgstr "Apri &PrusaSlicer" @@ -11489,6 +11306,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Compila prima il rapporto." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Fai un logout e rieffettua il login alla stampante." + #~ msgid "Please upgrade your printer first" #~ msgstr "Prima aggiorna la stampante" @@ -11523,6 +11343,10 @@ msgstr "" #~ "Consente di stampare una Prime Tower per pulire il materiale nel nozzle " #~ "dopo il passaggio a un nuovo materiale." +#~ msgid "Print file not found, please slice again" +#~ msgstr "" +#~ "File di stampa non trovato; si prega di eseguire nuovamente lo slice" + #~ msgid "Printer Selection" #~ msgstr "Seleziona stampante" @@ -11531,6 +11355,9 @@ msgstr "" #~ "Il firmware stampante non supporta la mappatura degli slot materiali = > " #~ "AMS." +#~ msgid "Printing List" +#~ msgstr "Elenco di stampa" + #~ 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 " @@ -11594,9 +11421,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Seleziona tipo di Piatto" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Invio a stampante fallito. Riprova." + #~ msgid "Sending" #~ msgstr "Invio…" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Invia file G-code tramite servizio cloud" + +#~ msgid "Set Printable" +#~ msgstr "Imposta stampabile" + +#~ msgid "Set Unprintable" +#~ msgstr "Imposta non stampabile" + #~ msgid "Set pen size" #~ msgstr "Imposta dimensioni penna" @@ -11770,6 +11609,13 @@ msgstr "" #~ "tentata una ripaparazione, tuttavia si consiglia di controllare i " #~ "risultati o di riparare il file di input e riprovare." +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "Il file di stampa supera la dimensione massima consentita (1 GB). " +#~ "Semplifica il modello ed elaboralo di nuovo" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11788,6 +11634,9 @@ msgstr "" #~ "tipo della stampante attualmente selezionata. Si consiglia di " #~ "risuddividere selezionando lo stesso tipo di stampante.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "Il parametro del Paese non è corretto." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11815,6 +11664,13 @@ msgstr "" #~ "filamento per risparmiare filamento e ridurre il tempo di stampa. I " #~ "colori degli oggetti saranno quindi mescolati." +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Questa specifica se aggiungere un riempimento all'interno di ampie cavità " +#~ "del supporto ad albero." + #~ 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, " @@ -11831,15 +11687,31 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse senza testa strumenti" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Spessore minimo del guscio superiore" + +#~ msgid "Top Solid Layers" +#~ msgstr "Layer solidi superiori" + #~ msgid "Translation" #~ msgstr "Traduzione" +#~ msgid "Tree support with infill" +#~ msgstr "Riempimento supporti ad albero" + #~ msgid "Unable to connect printer" #~ msgstr "Impossibile collegare la stampante" #~ msgid "Unable to create zip file" #~ msgstr "Impossibile creare un file zip" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "L'attività di caricamento è scaduta. Controlla la rete e riprova" + +#~ msgid "User authorization timeout" +#~ msgstr "Timeout autorizzazione utente" + #~ msgid "User pause" #~ msgstr "Pausa utente" @@ -11890,6 +11762,9 @@ msgstr "" #~ "consigliano le seguenti impostazioni:\n" #~ "0 distanza superiore, 0 distanza tra interfacce, trama concentrica." +#~ msgid "Wrong Access code" +#~ msgstr "Codice di accesso errato" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -11940,6 +11815,9 @@ msgstr "" #~ " è troppo vicino agli altri, si verificheranno collisioni durante la " #~ "stampa.\n" +#~ msgid " plate %1%:" +#~ msgstr " piatto %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr " verrà chiuso prima di creare un nuovo modello. Vuoi continuare?" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 6ebb6b705..574dbf364 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -1,17 +1,14 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "サポートペイント" @@ -534,8 +531,8 @@ msgstr "未定義" msgid "%1% was replaced with %2%" msgstr "%1% は %2% に置き換えられました" -msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "" +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "構成データは、これより新しいBambu Studioで作成された可能性があります" msgid "Some values have been replaced. Please check them:" msgstr "変更された値があります、ご確認ください:" @@ -560,29 +557,43 @@ msgstr "構成ファイル %1% がロードされましたが、一部の値が msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "内部バージョン" + +msgid "Version" +msgstr "バージョン" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"メモリの割り当てに異常がありました、間も無く終了いたします。弊社サポートチー" +"ムへご連絡ください。" msgid "Fatal error" msgstr "重大なエラー" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." -msgstr "" +msgstr "エラーが発生しました、Bambu Studioを再開してください。(Localization)" msgid "Critical error" msgstr "重大なエラー" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "異常がありました: %1%" + +msgid "Untitled" +msgstr "名称未設定" msgid "Downloading Bambu Network Plug-in" msgstr "Bambuネットワークプラグインをダウンロード" +msgid "Login information expired. Please login again." +msgstr "サインイン情報の有効期限切れ、もう一度サインインしてください" + msgid "Incorrect password" msgstr "パスワードが正しくありません" @@ -591,9 +602,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "%s を接続できませんでした [SN: %s、code = %s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"設定ファイルは解析できません、ファイルが壊れている可能性があります。ファイル" +"を削除して、もう一度試してください。" #, c-format, boost-format msgid "" @@ -613,8 +626,8 @@ msgstr "構成を読込み中" msgid "Click to download new version in default browser: %s" msgstr "新バージョンをダウンロードするにはクリックしてください: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer をアップデートする必要があります" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio をアップデートする必要があります" msgid "This is the newest version." msgstr "最新バージョンです。" @@ -637,8 +650,8 @@ msgstr "ファイルを選択 (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "ファイルを選択 (3mf/step/stl/svg/obj/amf)" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "ファイルを選択 (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "プリセットが変更されました。" @@ -658,14 +671,11 @@ msgid "Open Project" msgstr "プロジェクトを開く" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"現在のOrca Slicerはバージョンが古いため使用できません、アップデートしてくださ" -"い。" - -msgid "Login information expired. Please login again." -msgstr "サインイン情報の有効期限切れ、もう一度サインインしてください" +"現在のBambu Studioはバージョンが古いため使用できません、アップデートしてくだ" +"さい。" msgid "Privacy Policy Update" msgstr "Privacy Policy Update" @@ -718,7 +728,7 @@ msgstr "開く" msgid "Rename" msgstr "名前を変更" -msgid "Orca Slicer GUI initialization failed" +msgid "Bambu Studio GUI initialization failed" msgstr "GUI初期化に失敗した" #, boost-format @@ -746,18 +756,6 @@ msgstr "速度" msgid "Strength" msgstr "強度" -msgid "Top Solid Layers" -msgstr "トップソリッド層" - -msgid "Top Minimum Shell Thickness" -msgstr "トップ面最小厚み" - -msgid "Bottom Solid Layers" -msgstr "底面ソリッド層" - -msgid "Bottom Minimum Shell Thickness" -msgstr "底面最小厚さ" - msgid "Ironing" msgstr "アイロン" @@ -815,18 +813,6 @@ msgstr "Edit Text" msgid "Load..." msgstr "ファイルを読込む" -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "キューブ" @@ -836,6 +822,18 @@ msgstr "シリンダー" msgid "Cone" msgstr "コーン" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Height Range Modifier" @@ -851,12 +849,6 @@ msgstr "個別オブジェクトとして設定" msgid "Set as individual objects" msgstr "個別オブジェクトとして設定" -msgid "Fill bed with copies" -msgstr "Fill bed with copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Fill the remaining area of bed with copies of the selected object" - msgid "Printable" msgstr "造形可能" @@ -936,8 +928,11 @@ msgstr "選択したオブジェクトを一つオブジェクトに組み立て msgid "Assemble the selected objects to an object with single part" msgstr "選択したオブジェクトを一つオブジェクトに組み立てます(単パーツ)" -msgid "Assemble the selected parts to a single part" -msgstr "選択したパーツを一つのパーツに組み立てます" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "X軸方向" @@ -1056,18 +1051,21 @@ msgstr "選択した項目のフィラメントを設定" msgid "current" msgstr "現在" -msgid "Set Unprintable" -msgstr "造形不可に設定" - -msgid "Set Printable" -msgstr "造形可能に設定" - msgid "Unlock" msgstr "ロック解除" msgid "Lock" msgstr "ロック" +msgid "Fill bed with copies" +msgstr "Fill bed with copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Fill the remaining area of bed with copies of the selected object" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "名称" @@ -1122,6 +1120,9 @@ msgstr "ファイルを読み込み中" msgid "Error!" msgstr "エラー!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "一般" @@ -1300,15 +1301,6 @@ msgstr "複数のセルのコピーには対応していません。" msgid "Outside" msgstr "外側" -msgid "Auto" -msgstr "自動" - -msgid "Manual" -msgstr "手動" - -msgid "No-brim" -msgstr "ブリム無し" - msgid " " msgstr "" @@ -1324,6 +1316,21 @@ msgstr "インフィル密度 (%)" msgid "Auto Brim" msgstr "オートブリム" +msgid "Auto" +msgstr "自動" + +msgid "Outer brim only" +msgstr "Outer brim only" + +msgid "Inner brim only" +msgstr "Inner brim only" + +msgid "Outer and inner brim" +msgstr "Outer and inner brim" + +msgid "No-brim" +msgstr "ブリム無し" + msgid "Outer wall speed" msgstr "外壁造形速度" @@ -1429,6 +1436,33 @@ msgstr "プリンタ無し" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "サーバーに接続できませんでした" + +msgid "Check cloud service status" +msgstr "Check cloud service status" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Failed to connect to cloud service" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Please click on the hyperlink above to view the cloud service status" + +msgid "Failed to connect to the printer" +msgstr "プリンターへ接続できませんでした" + +msgid "Connection to printer failed" +msgstr "Connection to printer failed" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Please check the network connection of the printer and Studio." + +msgid "Connecting..." +msgstr "接続中…" + msgid "?" msgstr "?" @@ -1438,8 +1472,8 @@ msgstr "空" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS filament backup" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS が接続されていません" @@ -1497,11 +1531,11 @@ msgstr "フィラメントを押出機に押入れる" msgid "Purge old filament" msgstr "古いフィラメントを排出" -msgid "Feed new filament from external spool" -msgstr "Feed new filament from external spool" +msgid "Push new filament into the extruder" +msgstr "Push new filament into the extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirm whether the filament has been extruded" +msgid "Grab new filament" +msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1600,55 +1634,59 @@ msgstr "サインイン中" msgid "Login failed" msgstr "サインイン失敗" -msgid "The region parameter is incorrrect" -msgstr "地域が正しくありません" - -msgid "Failure of printer login" -msgstr "プリンター登録失敗" - -msgid "Failed to get ticket" -msgstr "チケットを取得できませんでした" - -msgid "User authorization timeout" -msgstr "ユーザー認証タイムアウト" - -msgid "Failure of bind" -msgstr "デバイス紐付け失敗" - -msgid "Unknown Failure" -msgstr "不明な失敗" - msgid "Please check the printer network connection." msgstr "プリンターとのネットワーク接続をご確認ください" -msgid "Abnormal print file data. Please slice again" -msgstr "ファイルに異常があります、もう一度スライスしてください" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormal print file data: please slice again." -msgid "Task canceled" -msgstr "タスクを取消しました" +msgid "Task canceled." +msgstr "Task canceled." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "" -"タスクのアップロードはタイムアウトしました。ネットワークをご確認ください。" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Upload task timed out. Please check the network status and try again." msgid "Cloud service connection failed. Please try again." msgstr "クラウドサービス接続できませんでした、もう一度お試しください" -msgid "Print file not found, please slice again" -msgstr "造形ファイルを見つけませんでした、もう一度スライスしてください" +msgid "Print file not found. please slice again." +msgstr "Print file not found; please slice again." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -"ファイルサイズが 1GByteを超える為、読込みできません。モデルを修正してスライス" -"してください。" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." -msgid "Failed uploading print file" -msgstr "ファイルをアップロードできませんでした" +msgid "Failed to send the print job. Please try again." +msgstr "造形タスクを送信できませんでした、もう一度お試しください。" -msgid "Wrong Access code" -msgstr "アクセスコードが間違っています" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Failed to upload file to ftp. Please try again." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Check the current status of the Bambu Lab server by clicking on the link " +"above." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"The size of the print file is too large. Please adjust the file size and try " +"again." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Print file not found; please slice it again and send it for printing." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Failed to upload print file via FTP. Please check the network status and try " +"again." msgid "Sending print job over LAN" msgstr "LAN経由で造形タスクを送信" @@ -1669,24 +1707,16 @@ msgstr "構成を送信" msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "送信しました、%s秒後デバイスページへ移動します" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "SDカードが必要です" -msgid "Failed to send the print job. Please try again." -msgstr "造形タスクを送信できませんでした、もう一度お試しください。" - -msgid "Send to Printer failed. Please try again." -msgstr "プリンターへの送信は失敗しました、もう一度お試しください。" - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "LANでG-codeファイルを送信" -msgid "Sending gcode file through cloud service" -msgstr "クラウドサービでG-codeファイルを送信" - msgid "Sending gcode file to sdcard" msgstr "G-codeファイルをSDカードに送信" @@ -1697,9 +1727,6 @@ msgstr "送信しました、%s秒後自動閉じます。" msgid "An SD card needs to be inserted before sending to printer." msgstr "SDカードが必要です" -msgid "Please log out and login to the printer again." -msgstr "一旦サインアウトし、再度サインインしてください" - msgid "Choose SLA archive:" msgstr "Choose SLA archive:" @@ -1783,17 +1810,18 @@ msgstr "著作権情報" msgid "License" msgstr "ライセンス" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicerのライセンス" +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studioのライセンス" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu StudioはPrusa Research社のPrusaSlicerをベースとして開発され、" +"Alessandro RanellucciさんのSlic3rとRepRapを特別に感謝します。" msgid "Libraries" msgstr "ライブラリー" @@ -1809,14 +1837,12 @@ msgstr "" msgid "About %s" msgstr "%s について" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu StudioはPrusaResearch製のPrusaSlicerとMerill製のSuperSlicerに基づいて作" +"られています。" msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -1829,8 +1855,16 @@ msgstr "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." -msgid "Version" -msgstr "バージョン" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu StudioはUltimaker製のCuraも参考しています" + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"このソフトウェアはコミュニティから沢山の貢献をいただいております。全ての貢献" +"者を表示できませんが、ソースコードのコメントにも確認できます。" msgid "AMS Materials Setting" msgstr "AMS素材設定" @@ -1865,8 +1899,11 @@ msgstr "シリアル番号" msgid "Setting AMS slot information while printing is not supported" msgstr "造形中に、AMSスロットを設定できません。" -msgid "Factors of dynamic flow cali" -msgstr "流量標定係数" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "係数K" @@ -1880,15 +1917,15 @@ msgstr "Setting Virtual slot information while printing is not supported" msgid "Are you sure you want to clear the filament information?" msgstr "Are you sure you want to clear the filament information?" +msgid "You need to select the material type and color first." +msgstr "You need to select the material type and color first." + msgid "Please input a valid value (K in 0~0.5)" msgstr "有効な値を入力してください (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 "You need to select the material type and color first." -msgstr "You need to select the material type and color first." - msgid "Other Color" msgstr "Other Color" @@ -2040,12 +2077,21 @@ msgstr "AMSのフィラメントで造形します" msgid "Print with filaments mounted on the back of the chassis" msgstr "外部スプールホルダーのフィラメントで造形します" -msgid "Filaments replace" -msgstr "Backup Filament" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Group" +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 "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -2317,6 +2363,11 @@ msgid "" "Reset to 0.2" msgstr "積層ピッチが小さすぎます、0.2にリセットされました" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "積層ピッチが大きいすぎます、0.2にリセットされました" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2527,6 +2578,28 @@ msgstr "更新が失敗しました。" msgid "Failed to start printing job" msgstr "造形タスクを開始できませんでした" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "デフォルト" @@ -2584,9 +2657,6 @@ msgstr "ツール" msgid "Layer Time" msgstr "積層時間" -msgid "Layer Time (log)" -msgstr "積層時間 (Log)" - msgid "Height: " msgstr "高度" @@ -2671,6 +2741,9 @@ msgstr "温度 (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "流量 (mm³/s)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "フィラメント使用量" @@ -2892,9 +2965,11 @@ msgstr "サイズ:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicting objects further (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "プレートの境界を超えるオブジェクトがあります" @@ -3020,6 +3095,9 @@ msgstr "いいえ" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "will be closed before creating a new model. Do you want to continue?" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "スライス" @@ -3062,6 +3140,9 @@ msgstr "構成フォルダを表示" msgid "Show Tip of the Day" msgstr "「毎日のヒント」を表示" +msgid "Report issue" +msgstr "Report issue" + msgid "Check for Update" msgstr "更新を確認" @@ -3260,6 +3341,12 @@ msgstr "ラベルを表示" msgid "Show object labels in 3D scene" msgstr "3Dシーンにラベルを表示" +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Show object overhang highlight in 3D scene" + msgid "Preferences" msgstr "設定" @@ -3293,9 +3380,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3314,9 +3398,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "3D モデル" - msgid "&Open G-code" msgstr "G-codeを開く" @@ -3424,29 +3505,29 @@ msgstr "同期" msgid "Initialize failed (No Device)!" msgstr "初期化失敗 (デバイス無し)" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + msgid "Initialize failed (No Camera Device)!" msgstr "初期化失敗 (カメラ無し)" -msgid "Initializing..." -msgstr "初期化中..." - -msgid "Loading..." -msgstr "読込み中" - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "初期化失敗 (ローカルモードではサポートしません)" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初期化失敗 (ローカルモードではアクセスできません)" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "プリンターがダウンロード中、完了までお待ちください" +msgid "Loading..." +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 "初期化失敗 (プリンターIP無効)" -msgid "Initialize failed (Not supported by printer)!" -msgstr "初期化失敗 (プリンターがサポートしません)" +msgid "Initializing..." +msgstr "初期化中..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3475,9 +3556,11 @@ msgstr "バーチャルカメラツールをダウンロード" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"別のバーチャルカメラを作動しています為、もう一個が起動できません。\n" +"このバーチャルカメラを停止しますか?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3523,6 +3606,9 @@ msgstr "ビデオ" msgid "Switch to video files." msgstr "ビデオファイルに切替え" +msgid "Switch to 3mf model files." +msgstr "Switch to 3mf model files." + msgid "Delete selected files from printer." msgstr "プリンターから選択したファイルを削除" @@ -3541,12 +3627,6 @@ msgstr "ファイルのバッチ処理" msgid "No printers." msgstr "プリンタなし" -msgid "Not supported by this model of printer!" -msgstr "この機種のプリンターには対応していません" - -msgid "Connecting..." -msgstr "接続中…" - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "接続に失敗しました (%d)" @@ -3554,22 +3634,44 @@ msgstr "接続に失敗しました (%d)" msgid "Loading file list..." msgstr "ファイルリストを読込み中" -msgid "No files" -msgstr "ファイル無し" - -msgid "Not accessible in LAN-only mode!" -msgstr "ローカルモードではアクセスできません" - -msgid "Missing LAN ip of printer!" -msgstr "プリンターのIPが見つかりません" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "No files [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "Load failed [%d]" +msgstr "Load failed [%d]" + +#, c-format, 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?" +msgstr[0] "" msgid "Delete files" msgstr "Delete files" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Do you want to delete the file '%s' from printer?" + +msgid "Delete file" +msgstr "Delete file" + +msgid "Fetching model infomations ..." +msgstr "Fetching model information..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Failed to fetch model infomation from printer." + +msgid "Failed to parse model infomations." +msgstr "Failed to parse model infomation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。" @@ -3590,6 +3692,12 @@ msgstr "ダウンロード完了" msgid "Downloading %d%%..." msgstr "ダウンロード中 %d%%" +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "速度" @@ -3611,15 +3719,6 @@ msgstr "3Dconnexion設定" msgid "Swap Y/Z axes" msgstr "Y/Z 軸を交換" -msgid "Camera" -msgstr "カメラ" - -msgid "SD Card" -msgstr "SDカード" - -msgid "Camera Setting" -msgstr "カメラ設定" - msgid "Printing Progress" msgstr "進捗" @@ -3635,9 +3734,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Layer: N/A" +msgid "Immediately score" +msgstr "Immediately score" + msgid "Clear" msgstr "クリア" +msgid "Camera" +msgstr "カメラ" + +msgid "SD Card" +msgstr "SDカード" + +msgid "Camera Setting" +msgstr "カメラ設定" + msgid "Control" msgstr "コントロール" @@ -3671,30 +3782,14 @@ msgstr "SDカードなし" msgid "SD Card Abnormal" msgstr "SDカードに異常があります。" -msgid "Printing List" -msgstr "造形リスト" - msgid "Cancel print" msgstr "造形を取消し" msgid "Are you sure you want to cancel this print?" msgstr "現在の造形をキャンセルしても宜しいでしょうか?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"ローカルモードが無効にした為、プリンター %s との接続が切断されました。もう一" -"度接続してください。" - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"ローカルモードを有効にした為、プリンター %s との接続が切断されました、もう一" -"度接続してください。" +msgid "Done" +msgstr "Done" msgid "Downloading..." msgstr "ダウンロード中" @@ -3710,6 +3805,12 @@ msgstr "In Cloud Slicing Queue, there are %s tasks ahead of you." msgid "Layer: %s" msgstr "Layer: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Please give a score for your favorite Bambu Market model." + +msgid "Score" +msgstr "Score" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Layer: %d/%d" @@ -3751,24 +3852,15 @@ msgstr "超高速" msgid "Can't start this without SD card." msgstr "起動するのにSDカードが必要です。" -msgid "Failed to connect to the server" -msgstr "サーバーに接続できませんでした" - msgid "Status" msgstr "デバイス状態" -msgid "Media" -msgstr "メディア" - msgid "Update" msgstr "更新" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "プリンターへ接続できませんでした" - msgid "Don't show again" msgstr "次回から表示しない" @@ -3988,12 +4080,9 @@ msgstr "フィラメント設定" msgid "Printer settings" msgstr "プリンター設定" -msgid "Untitled" -msgstr "名称未設定" - #, boost-format -msgid " plate %1%:" -msgstr "プレート%1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "無効な名前です、次の文字を使用できません:" @@ -4075,10 +4164,10 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "適用できるフィラメントがありません、同期を行えません" 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を更新してください。" +"There are some unknown or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." +msgstr "" #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -4129,9 +4218,9 @@ msgstr "3mfを読込み" msgid "The Config can not be loaded." msgstr "構成を読込めませんでした" -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"3mfは古いバージョンのOrca Slicerで作成されています、ジオメトリーデータのみ読" +"3mfは古いバージョンのBambu Studioで作成されています、ジオメトリーデータのみ読" "込みます。" #, c-format, boost-format @@ -4463,10 +4552,10 @@ msgstr "ヒント" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" -"「モデル修復」はWindowsのみご利用できます。Orca Slicer (Windows)か他のCADソフ" -"トウェアで修復してください。" +"「モデル修復」はWindowsのみご利用できます。Bambu Studio (Windows)か他のCADソ" +"フトウェアで修復してください。" #, c-format, boost-format msgid "" @@ -4529,9 +4618,6 @@ msgstr "その他" msgid "Login Region" msgstr "地域" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "メートル" @@ -4557,12 +4643,6 @@ msgstr "起動後「毎日のヒント」を表示" msgid "If enabled, useful hints are displayed at startup." msgstr "有効になる場合、起動時にヒントを表示されます。" -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Presets" @@ -4581,26 +4661,32 @@ msgstr "System Sync" msgid "Clear my choice on the unsaved presets." msgstr "Clear my choice on the unsaved presets." -msgid "Associate files to OrcaSlicer" -msgstr "ファイルをOrca Slicerに関連付ける" +msgid "Associate files to BambuStudio" +msgstr "ファイルをBambu Studioに関連付ける" -msgid "Associate .3mf files to OrcaSlicer" -msgstr ".3mfファイルをOrca Slicerに関連付けます。" +msgid "Associate .3mf files to BambuStudio" +msgstr ".3mfファイルをBambu Studioに関連付けます。" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" -msgstr "デフォルトで.3mfファイルをOrca Slicerで開く" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "デフォルトで.3mfファイルをBambu Studioで開く" -msgid "Associate .stl files to OrcaSlicer" -msgstr ".stlファイルをOrca Slicerに関連付けます。" +msgid "Associate .stl files to BambuStudio" +msgstr ".stlファイルをBambu Studioに関連付けます。" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" -msgstr "デフォルトで.stlファイルをOrca Slicerで開く" +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "デフォルトで.stlファイルをBambu Studioで開く" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr ".step/.stpファイルをOrca Slicerに関連付けます。" +msgid "Associate .step/.stp files to BambuStudio" +msgstr ".step/.stpファイルをBambu Studioに関連付けます。" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" -msgstr "デフォルトで.step/.stpファイルをOrca Slicerで開く" +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "デフォルトで.step/.stpファイルをBambu Studioで開く" + +msgid "Online Models" +msgstr "Online Models" + +msgid "Show online staff-picked models on the home page" +msgstr "Show online staff-picked models on the home page" msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -4635,6 +4721,12 @@ msgstr "ダークモード" msgid "Enable Dark mode" msgstr "ダークモードを有効" +msgid "Develop mode" +msgstr "開発者モード" + +msgid "Skip AMS blacklist check" +msgstr "Skip AMS blacklist check" + msgid "Home page and daily tips" msgstr "ホームページとヒント" @@ -4671,11 +4763,14 @@ msgstr "その他" msgid "Mouse wheel reverses when zooming" msgstr "ズーム中にスクロール方向を反転させる" -msgid "Develop mode" -msgstr "開発者モード" +msgid "Enable SSL(MQTT)" +msgstr "Enable SSL(MQTT)" -msgid "Dump video" -msgstr "ビデオをダウンロード" +msgid "Enable SSL(FTP)" +msgstr "Enable SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internal developer mode" msgid "Log Level" msgstr "Log Level" @@ -4761,42 +4856,39 @@ msgstr "素材を追加/削除" msgid "Add/Remove printers" msgstr "プリンターを追加/削除" +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "造形シーケンス" -msgid "Plate name" -msgstr "Plate name" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Same as Global Plate Type" + msgid "Same as Global Bed Type" msgstr "全般設定の「ベッドタイプ」と同様" -msgid "Cool Plate" -msgstr "常温プレート" - -msgid "Engineering Plate" -msgstr "エンジニアリングプレート" - -msgid "High Temp Plate" -msgstr "高温プレート" - -msgid "Textured PEI Plate" -msgstr "PEIプレート" - msgid "By Layer" msgstr "By Layer" msgid "By Object" msgstr "By Object" +msgid "Plate name" +msgstr "Plate name" + msgid "Accept" msgstr "Accept" @@ -4908,11 +5000,8 @@ msgstr "\"%1%\"に対して、\"%2%\"を新しいプリセットとして追加 msgid "Simply switch to \"%1%\"" msgstr "\"%1%\"に切り替え" -msgid "Online" -msgstr "オンライン" - -msgid "Offline" -msgstr "オフライン" +msgid "Task canceled" +msgstr "タスクを取消しました" msgid "(LAN)" msgstr "(LAN)" @@ -4923,6 +5012,9 @@ msgstr "私のデバイス" msgid "Other Device" msgstr "その他のデバイス" +msgid "Online" +msgstr "オンライン" + msgid "Input access code" msgstr "アクセスコードを入力" @@ -4932,12 +5024,18 @@ msgstr "デバイスが見つからない?" msgid "Log out successful." msgstr "サインアウトしました" +msgid "Offline" +msgstr "オフライン" + msgid "Busy" msgstr "ビジー状態" msgid "Bambu Cool Plate" msgstr "Bambu 常温プレート" +msgid "PLA Plate" +msgstr "PLA Plate" + msgid "Bamabu Engineering Plate" msgstr "Bambu エンジニアリングプレート" @@ -4953,12 +5051,24 @@ msgstr "再読込" msgid "Bed Leveling" msgstr "ベッドレベリング" -msgid "Flow Calibration" -msgstr "流量キャリブレーション" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "プリンターに接続できない" msgid "send completed" msgstr "送信完了" +msgid "Error code" +msgstr "Error code" + +msgid "Check the status of current system services" +msgstr "Check the status of current system services" + +msgid "Printer local connection failed, please try again." +msgstr "Printer local connection failed; please try again." + msgid "No login account, only printers in LAN mode are displayed" msgstr "アカウント無し、ローカルモードのプリンターのみが表示されます" @@ -5022,6 +5132,9 @@ msgstr "このプリンターはAMSスロットマッピングをサポートし msgid "An SD card needs to be inserted before printing." msgstr "SDカードが必要です" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "SDカードが必要です" @@ -5068,9 +5181,27 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "造形タスクを準備" +msgid "Abnormal print file data. Please slice again" +msgstr "ファイルに異常があります、もう一度スライスしてください" + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "デバイス名を変更" @@ -5084,19 +5215,109 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "A MicroSD card needs to be inserted before sending to the printer SD card." -msgid "The printer is required to be in the same LAN as Orca Slicer." +msgid "The printer is required to be in the same LAN as Bambu Studio." msgstr "" -"このプリンターを使用するには、Orca Slicerを同一のLANで使用してください。" +"このプリンターを使用するには、Bambu Studioを同一のLANで使用してください。" msgid "The printer does not support sending to printer SD card." msgstr "このプリンターはSDカードに送信することができません" +msgid "Failed to create socket" +msgstr "Failed to create socket" + +msgid "Failed to connect socket" +msgstr "Failed to connect socket" + +msgid "Failed to publish login request" +msgstr "Failed to publish login request" + +msgid "Get ticket from device timeout" +msgstr "Timeout getting ticket from device" + +msgid "Get ticket from server timeout" +msgstr "Timeout getting ticket from server" + +msgid "Failed to post ticket to server" +msgstr "Failed to post ticket to server" + +msgid "Failed to parse login report reason" +msgstr "Failed to parse login report reason" + +msgid "Receive login report timeout" +msgstr "Receive login report timeout" + +msgid "Unknown Failure" +msgstr "不明な失敗" + msgid "Log in printer" msgstr "プリンターを登録" msgid "Would you like to log in this printer with current account?" msgstr "現在のアカウントでプリンターをサインインしますか?" +msgid "Check the reason" +msgstr "Check the reason" + +msgid "Read and accept" +msgstr "Read and accept" + +msgid "Terms and Conditions" +msgstr "Terms and Conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"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 " +"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." + +msgid "and" +msgstr "and" + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "We ask for your help to improve everyone's printer" + +msgid "Statement about User Experience Improvement Program" +msgstr "Statement about User Experience Improvement Program" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"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 " +"same principle and uses machine learning to improve its performance from the " +"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." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Statement on User Experience Improvement Plan" + msgid "Log in successful." msgstr "登録成功" @@ -5205,6 +5426,9 @@ msgstr "壁面" msgid "Top/bottom shells" msgstr "トップ面/底面" +msgid "Sparse infill" +msgstr "スパース インフィル" + msgid "Initial layer speed" msgstr "1層目の移動速度" @@ -5222,12 +5446,6 @@ msgstr "" "オーバーハングを造形時の速度です。オーバーハングの角度が線幅に対する割合で表" "示します。0は減速無しで壁面の速度が使用されます。" -msgid "Bridge" -msgstr "ブリッジ" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "移動速度" @@ -5252,8 +5470,8 @@ msgstr "特別モード" msgid "G-code output" msgstr "G-code出力" -msgid "Post-processing Scripts" -msgstr "Post-processing Scripts" +msgid "Post-processing scripts" +msgstr "Post-processing scripts" msgid "Frequent" msgstr "よく使う" @@ -5301,8 +5519,8 @@ msgstr "ノズル" msgid "Nozzle temperature when printing" msgstr "ノズル温度" -msgid "Cool plate" -msgstr "常温プレート" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5311,7 +5529,7 @@ msgstr "" "常温プレートが装着時のベッド温度です。値が0の場合、フィラメントが常温プレート" "に使用できない意味です。" -msgid "Engineering plate" +msgid "Engineering Plate" msgstr "エンジニアリングプレート" msgid "" @@ -5321,6 +5539,9 @@ msgstr "" "エンジニアリングプレートが装着時のベッド温度です。値が0の場合、フィラメントが" "エンジニアリングプレートに使用できない意味です。" +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" @@ -5328,6 +5549,9 @@ msgstr "" "高温プレートが装着時のベッド温度です。値が0の場合、フィラメントが高温プレート" "に使用できない意味です。" +msgid "Textured PEI Plate" +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" @@ -5381,12 +5605,6 @@ msgstr "フィラメント終了G-code" msgid "Printable space" msgstr "造形可能領域" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "押出機クリアランス" @@ -5435,21 +5653,9 @@ msgstr "振動特性" msgid "Layer height limits" msgstr "積層ピッチの制限" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "素材変更時のリトラクション" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "分離的" @@ -5651,7 +5857,7 @@ msgid "Exit %s" msgstr "%s を終了" msgid "the Configuration package is incompatible with current APP." -msgstr "構成パッケージは、このバージョンのOrca Slicerに適用できません" +msgstr "構成パッケージは、このバージョンのBambu Studioに適用できません" msgid "Configuration updates" msgstr "構成の更新" @@ -5880,9 +6086,6 @@ msgstr "SLAサポートポイント" msgid "Gizmo FDM paint-on seam" msgstr "継ぎ目ペイント" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "準備" @@ -5946,9 +6149,6 @@ msgstr "水平スライダー (右)" msgid "On/Off one layer mode of the vertical slider" msgstr "On/Off one layer mode of the vertical slider" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "5x" @@ -5966,30 +6166,28 @@ msgid "Network plug-in update" msgstr "ネットワークプラグインの更新" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"OK をクリックすると、次回 Orca Slicer を起動したときにネットワークプラグイン" +"OK をクリックすると、次回 Bambu Studio を起動したときにネットワークプラグイン" "が更新されます。" #, 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" +msgid "New version of Bambu Studio" msgstr "新バージョン" msgid "Don't remind me of this version again" msgstr "今後このバージョンの通知をしません" -msgid "Done" -msgstr "Done" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN接続失敗 (造形ファイル送信)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "1Orca Slicerとプリンターが同一のLANに繋いでいること確認してください。" +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." +msgstr "" +"1Bambu Studioとプリンターが同一のLANに繋いでいること確認してください。" msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6116,6 +6314,10 @@ msgstr "修復を取消しました" msgid "Copying of file %1% to %2% failed: %3%" msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "フォルダ %1% を %2% へのコピーが失敗しました (%3%)" + msgid "Need to check the unsaved changes before configuration updates." msgstr "構成を更新する前に、未保存の変更をご確認ください" @@ -6126,11 +6328,11 @@ msgid "Open G-code file:" msgstr "G-codeファイルを開く" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"オブジェクトはプレートと接触していないため造形できません。サポートを有効する" -"か、オブジェクトを修正してください。" +"The following object(s) have an empty initial layer and can't be printed. " +"Please cut the bottom or enable supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6170,9 +6372,6 @@ msgstr "外壁" msgid "Overhang wall" msgstr "オーバーハング" -msgid "Sparse infill" -msgstr "スパース インフィル" - msgid "Internal solid infill" msgstr "内部ソリッド インフィル" @@ -6182,15 +6381,12 @@ msgstr "トップ面" msgid "Bottom surface" msgstr "底面" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "ブリッジ" msgid "Gap infill" msgstr "隙間インフィル" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "サポート接触面" @@ -6412,22 +6608,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "積層ピッチはノズルの直径を超える為設定できません" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "プレート %d: %s がフィラメント %s を使用できません" @@ -6710,8 +6890,8 @@ msgstr "" "how much width of the line without support from lower layer. 0% means " "forcing cooling for all outer wall no matter the overhang degree." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "ブリッジ方向" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6721,12 +6901,6 @@ msgstr "" "ブリッジ角度。値が0の場合は自動計算となります。0°を使用したい場合は180を入力" "していください。" -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "ブリッジ流量" @@ -6745,18 +6919,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -6764,37 +6930,23 @@ msgstr "トップ面に1層" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "トップ面に1層だけ造形します、インフィルを多い空間を与えます。" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "全てのトップ面" + +msgid "Topmost surface" +msgstr "最上部のみ" + msgid "Only one wall on first layer" msgstr "Only one wall on first layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Use only one wall on the first layer of models" msgid "Slow down for overhang" msgstr "オーバーハング減速" @@ -6804,25 +6956,11 @@ msgstr "" "オーバーハングを造形時に速度を下げます。各角度のオーバーハングに対して、下記" "の減速パラメータを設定してください。" -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "ブリッジを造形する時に速度です。" - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "ブリッジを造形する時に速度です。" msgid "Brim width" msgstr "ブリム幅" @@ -6840,18 +6978,6 @@ msgstr "" "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." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "" - -msgid "Inner brim only" -msgstr "Inner brim only" - -msgid "Outer and inner brim" -msgstr "Outer and inner brim" - msgid "Brim-object gap" msgstr "ブリムとオブジェクトの間隔" @@ -6862,30 +6988,6 @@ msgstr "" "ブリムを取り外しやすくする為、一番内側のブリムラインをモデルと少し距離を設け" "ます。" -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "対応機種" @@ -7011,11 +7113,11 @@ 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -7062,10 +7164,8 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "外壁の線幅" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7073,23 +7173,6 @@ msgid "" msgstr "" "外壁の造形速度です。普段は内壁より遅い速度を指定し、仕上がりが良くなります。" -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "造形順番" @@ -7137,6 +7220,14 @@ msgstr "" "押出機のクリアランス(半径):オブジェクト順で造形する時にこのパラメータでオ" "ブジェクトの間隔を計算します。" +msgid "Max Radius" +msgstr "最大半径" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "押出機のクリアランス半径。オブジェクト順で造形する時に衝突防止用です。" + msgid "Extruder Color" msgstr "押出機の色" @@ -7159,22 +7250,28 @@ msgstr "" "フィラメントは温度により体積が変わります。この設定で押出流量を比例的に調整し" "ます。 0.95 ~ 1.05の間で設定していください。" +msgid "Object flow ratio" +msgstr "Object flow ratio" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "The flow ratio set by object; the meaning is the same as flow ratio." + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "線幅が0に設定された時のデフォルト線幅" + msgid "Keep fan always on" msgstr "ファン常時ON" @@ -7230,14 +7327,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "フィラメントロード時間" @@ -7261,18 +7350,6 @@ msgstr "" "押出制御に使用されるパラメータなので、精確なフィラメント直径を入力してくださ" "い" -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "密度" @@ -7378,54 +7455,6 @@ msgstr "キュービックサポート" msgid "Lightning" msgstr "ライトニング" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (no open anchors)" - -msgid "1000 (unlimited)" -msgstr "1000 (unlimited)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7436,12 +7465,7 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "外壁の加速度:低い値では品質を向上させることができます。" -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7449,10 +7473,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7474,29 +7495,33 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "1層目の線幅" + msgid "Initial layer height" msgstr "1層目の高さ" @@ -7514,20 +7539,6 @@ msgstr "1層目インフィル" msgid "Speed of solid infill part of initial layer" msgstr "1層目のソリッド インフィルの造形速度です。" -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "" - msgid "Initial layer nozzle temperature" msgstr "1層目のノズル温度" @@ -7537,24 +7548,6 @@ msgstr "1層目でのノズル温度" msgid "Full fan speed at layer" msgstr "最大回転速度の積層" -msgid "" -"Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7593,12 +7586,9 @@ msgstr "ポイント間の平均距離" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "積層と境界" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -7652,81 +7642,21 @@ msgstr "ステンレススチール" msgid "Brass" msgstr "真鍮" -msgid "Nozzle HRC" -msgstr "ノズルHRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "ノズル硬度です、値が0になる場合、ノズル硬度を考慮しません。" - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" 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" -"It won't move fan comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "G-codeスタイル" msgid "What kind of gcode the printer is compatible with" msgstr "プリンターが対応するG-code" -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -7739,13 +7669,66 @@ msgstr "" "複数層のスパース インフィルをまとめて造形し、時間短縮に効きます。壁面はこの設" "定に影響されません" +msgid "Length of sparse infill anchor" +msgstr "Length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring " +"perimeters connected to a single infill line." + +msgid "0 (no open anchors)" +msgstr "0 (no open anchors)" + +msgid "1000 (unlimited)" +msgstr "1000 (unlimited)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximum length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." + +msgid "0 (not anchored)" +msgstr "0 (not anchored)" + msgid "Filament to print internal sparse infill." msgstr "スパース インフィルを造形時使用するフィラメントです。" -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "Line width of internal sparse infill" +msgstr "スパース インフィルの線幅" msgid "Infill/Wall overlap" msgstr "インフィル/壁面 オーバーラップ" @@ -7760,15 +7743,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "スパース インフィルの造形速度です。" -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "アイロン面" @@ -7782,12 +7756,6 @@ msgstr "" msgid "No ironing" msgstr "しない" -msgid "Top surfaces" -msgstr "全てのトップ面" - -msgid "Topmost surface" -msgstr "最上部のみ" - msgid "All solid layer" msgstr "全てのソリッド積層" @@ -8028,47 +7996,16 @@ msgstr "ファイル名形式" msgid "User can self-define the project file name when export" msgstr "エクスポート時ファイル名を設定できます" -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "オーバーハングを検出" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"この設定により、線幅に対するオーバーハングの割合を検出し、異なる速度で造形し" -"ます。100%%のオーバーハングの場合、ブリッジの速度が使用されます。" -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "内壁の線幅" msgid "Speed of inner wall" msgstr "内壁の造形速度です。" @@ -8076,13 +8013,19 @@ msgstr "内壁の造形速度です。" msgid "Number of walls of every layer" msgstr "壁面の層数です。" +msgid "Post-processing Scripts" +msgstr "Post-processing Scripts" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"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 via the absolute path to the G-code file as the first " +"argument, and variables of settings can also be read" msgid "Raft contact Z distance" msgstr "ラフト接触面Z間隔" @@ -8176,8 +8119,8 @@ msgstr "" "リトラクション時に、ノズルを少し上げてから移動します。この動作でモデルとの衝" "突を回避できます。" -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Z方向調整タイプ" msgid "Slope" msgstr "スロープ" @@ -8185,53 +8128,10 @@ msgstr "スロープ" msgid "Spiral" msgstr "スパイラル" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8250,17 +8150,6 @@ msgstr "" "リトラクション後フィラメントをロードする時の速度です、値が0の場合、リトラク" "ションの速度と同じくなります。" -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "継ぎ目位置" @@ -8279,39 +8168,14 @@ msgstr "背面" msgid "Random" msgstr "ランダム" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8342,12 +8206,6 @@ msgstr "スカートのループ数" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "スカートのループ数です、値が0の場合、スカートが無効になります。" -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8364,10 +8222,11 @@ msgstr "" "スパース インフィルの面積がこの値以下の場合、ソリッド インフィルに変換されま" "す" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "ソリッド インフィルの線幅" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "ソリッド インフィルの造形速度です。" @@ -8522,10 +8381,8 @@ msgstr "" "サポートとラフトを造形用のフィラメント。「デフォルト」では当時のフィラメント" "を使用する意味です。" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "サポートの線幅" msgid "Interface use loop pattern" msgstr "接触面は同心パターンにする" @@ -8673,28 +8530,6 @@ msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "サポートタイプがツリーの時、隣接するノードの距離です。" -msgid "Adaptive layer height" -msgstr "アダプティブ積層ピッチ" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "Tree support brim width" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "ツリーサポート枝直径" @@ -8707,14 +8542,11 @@ msgstr "ツリーサポート壁層数" msgid "This setting specify the count of walls around tree support" msgstr "ツリーサポートの壁面層数です。" -msgid "Tree support with infill" -msgstr "ツリーサポートインフィル使用" +msgid "Tree support brim width" +msgstr "Tree support brim width" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"この設定により、大きいツリーサポートを造形する時に、インフィルを追加します。" +msgid "The brim width around tree support. 0 means auto." +msgstr "The brim width around tree support. 0 means auto." msgid "Chamber temperature" msgstr "" @@ -8751,10 +8583,8 @@ msgid "" "tool change" msgstr "フィラメントを切り替える直後に実行するG-codeです。" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "トップ面の線幅" msgid "Speed of top surface infill which is solid" msgstr "トップ面のインフィルの造形速度です。" @@ -8790,6 +8620,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "移動完了時の速度です。" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "リトラクション時に拭き上げ" @@ -8889,24 +8727,6 @@ msgstr "" "オブジェクトの輪郭の大きさの調整値です。正数は大きくし、負数は小さくします。" "これがパーツを組み立てる為にはめあいの微調整です。" -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9166,15 +8986,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "出力先フォルダ" @@ -9321,140 +9132,399 @@ msgstr "The file contains invalid vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "This OBJ file couldn't be read because it's empty." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" +msgid "We would use Lidar to read the calibration result" +msgstr "" + +msgid "Prev" +msgstr "" + +msgid "Recalibration" +msgstr "" + +msgid "Calibrate" +msgstr "" + +msgid "Finish" msgstr "完了" -msgid "Unable to perform boolean operation on selected parts" +msgid "Wiki" msgstr "" -msgid "Mesh Boolean" +msgid "How to use calibration result?" msgstr "" -msgid "Union" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Difference" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Intersection" +msgid "Calibration not supported" msgstr "" -msgid "Source Volume" +msgid "Flow Dynamics" msgstr "" -msgid "Tool Volume" +msgid "Flow Rate" msgstr "" -msgid "Subtract from" +msgid "Max Volumetric Speed" msgstr "" -msgid "Subtract with" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "selected" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Part 1" +msgid "The name cannot be empty." msgstr "" -msgid "Part 2" +#, boost-format +msgid "The selected preset: %1% is not found." msgstr "" -msgid "Delete input" +msgid "The name cannot be the same as the system preset name." msgstr "" -msgid "Send to print" +msgid "The name is the same as another existing preset name" msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "create new preset failed." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "失敗" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "アップロード中" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Plate Type" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9513,7 +9583,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9568,47 +9638,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" +msgstr "完了" + +msgid "Send to print" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Upload to Printer Host with the following filename:" msgstr "" -msgid "Open CA certificate file" +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "アップロード中" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -9718,17 +9861,22 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"パーツをサブストラクト\n" +"マイナスパーツでモデルからメッシュを引くことができます。" #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEP\n" +"STEP形式で、STL形式よりもっと高品質なスライス結果を得られます、是非お試しくだ" +"さい。" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -9846,573 +9994,28 @@ msgstr "" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." -#~ msgstr "" -#~ "構成データは、これより新しいBambu Studioで作成された可能性があります" +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" +#~ msgstr "トップ面に1層だけ造形します、インフィルを多い空間を与えます。" -#~ msgid "Internal Version" -#~ msgstr "内部バージョン" +#~ msgid "Nozzle HRC" +#~ msgstr "ノズルHRC" #~ msgid "" -#~ "BambuStudio 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 "" -#~ "メモリの割り当てに異常がありました、間も無く終了いたします。弊社サポート" -#~ "チームへご連絡ください。" +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." +#~ msgstr "ノズル硬度です、値が0になる場合、ノズル硬度を考慮しません。" -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "エラーが発生しました、Bambu Studioを再開してください。(Localization)" - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "異常がありました: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "設定ファイルは解析できません、ファイルが壊れている可能性があります。ファイ" -#~ "ルを削除して、もう一度試してください。" - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio をアップデートする必要があります" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "ファイルを選択 (.gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "現在のBambu Studioはバージョンが古いため使用できません、アップデートしてく" -#~ "ださい。" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "GUI初期化に失敗した" - -#~ msgid "Check cloud service status" -#~ msgstr "Check cloud service status" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Failed to connect to cloud service" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Please click on the hyperlink above to view the cloud service status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connection to printer failed" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Please check the network connection of the printer and Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Push new filament into the extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Grab new filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormal print file data: please slice again." - -#~ msgid "Task canceled." -#~ msgstr "Task canceled." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Upload task timed out. Please check the network status and try again." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Print file not found; please slice again." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Failed to upload file to ftp. Please try again." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Check the current status of the Bambu Lab server by clicking on the link " -#~ "above." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Print file not found; please slice it again and send it for printing." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Failed to upload print file via FTP. Please check the network status and " -#~ "try again." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studioのライセンス" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu StudioはPrusa Research社のPrusaSlicerをベースとして開発され、" -#~ "Alessandro RanellucciさんのSlic3rとRepRapを特別に感謝します。" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu StudioはPrusaResearch製のPrusaSlicerとMerill製のSuperSlicerに基づい" -#~ "て作られています。" - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "Bambu StudioはUltimaker製のCuraも参考しています" - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "このソフトウェアはコミュニティから沢山の貢献をいただいております。全ての貢" -#~ "献者を表示できませんが、ソースコードのコメントにも確認できます。" - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "積層ピッチが大きいすぎます、0.2にリセットされました" - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicting objects further (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Report issue" - -#~ msgid "Show &Overhang" -#~ msgstr "Show &Overhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Show object overhang highlight in 3D scene" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initialization failed (Device connection not ready)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "別のバーチャルカメラを作動しています為、もう一個が起動できません。\n" -#~ "このバーチャルカメラを停止しますか?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Switch to 3mf model files." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Load failed [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Do you want to delete the file '%s' from printer?" - -#~ msgid "Delete file" -#~ msgstr "Delete file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Fetching model information..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Failed to fetch model infomation from printer." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Failed to parse model infomation" - -#~ msgid "Immediately score" -#~ msgstr "Immediately score" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Please give a score for your favorite Bambu Market model." - -#~ msgid "Score" -#~ msgstr "Score" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "3mfは古いバージョンのBambu Studioで作成されています、ジオメトリーデータの" -#~ "み読込みます。" - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "「モデル修復」はWindowsのみご利用できます。Bambu Studio (Windows)か他のCAD" -#~ "ソフトウェアで修復してください。" - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "ファイルをBambu Studioに関連付ける" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr ".3mfファイルをBambu Studioに関連付けます。" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "デフォルトで.3mfファイルをBambu Studioで開く" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr ".stlファイルをBambu Studioに関連付けます。" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "デフォルトで.stlファイルをBambu Studioで開く" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr ".step/.stpファイルをBambu Studioに関連付けます。" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "デフォルトで.step/.stpファイルをBambu Studioで開く" - -#~ msgid "Online Models" -#~ msgstr "Online Models" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Show online staff-picked models on the home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Skip AMS blacklist check" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Enable SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Enable SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internal developer mode" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Same as Global Plate Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "プリンターに接続できない" - -#~ msgid "Error code" -#~ msgstr "Error code" - -#~ msgid "Check the status of current system services" -#~ msgstr "Check the status of current system services" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Printer local connection failed; please try again." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "The name length exceeds the limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "" -#~ "このプリンターを使用するには、Bambu Studioを同一のLANで使用してください。" - -#~ msgid "Failed to create socket" -#~ msgstr "Failed to create socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Failed to connect socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Failed to publish login request" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout getting ticket from device" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout getting ticket from server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Failed to post ticket to server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Failed to parse login report reason" - -#~ msgid "Receive login report timeout" -#~ msgstr "Receive login report timeout" - -#~ msgid "Check the reason" -#~ msgstr "Check the reason" - -#~ msgid "Read and accept" -#~ msgstr "Read and accept" - -#~ msgid "Terms and Conditions" -#~ msgstr "Terms and Conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "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 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." - -#~ msgid "and" -#~ msgstr "and" - -#~ msgid "Privacy Policy" -#~ msgstr "Privacy Policy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "We ask for your help to improve everyone's printer" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Statement about User Experience Improvement Program" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "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 same principle and uses machine learning to improve its performance " -#~ "from the 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." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Statement on User Experience Improvement Plan" - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-processing scripts" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "OK をクリックすると、次回 Bambu Studio を起動したときにネットワークプラグ" -#~ "インが更新されます。" - -#~ msgid "New version of Bambu Studio" -#~ msgstr "新バージョン" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "1Bambu Studioとプリンターが同一のLANに繋いでいること確認してください。" - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "フォルダ %1% を %2% へのコピーが失敗しました (%3%)" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "The following object(s) have an empty initial layer and can't be printed. " -#~ "Please cut the bottom or enable supports." - -#~ msgid "Bridge direction" -#~ msgstr "ブリッジ方向" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Use only one wall on the first layer of models" - -#~ msgid "Line width of outer wall" -#~ msgstr "外壁の線幅" - -#~ msgid "Max Radius" -#~ msgstr "最大半径" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "押出機のクリアランス半径。オブジェクト順で造形する時に衝突防止用です。" - -#~ msgid "Object flow ratio" -#~ msgstr "Object flow ratio" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "The flow ratio set by object; the meaning is the same as flow ratio." - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "線幅が0に設定された時のデフォルト線幅" - -#~ msgid "Line width of initial layer" -#~ msgstr "1層目の線幅" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximum length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (not anchored)" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "スパース インフィルの線幅" - -#~ msgid "Line width of inner wall" -#~ msgstr "内壁の線幅" - -#~ msgid "" -#~ "If you want to process the output G-code through custom scripts, just " -#~ "list their absolute paths here. Separate multiple scripts with a " -#~ "semicolon. Scripts will be passed the absolute path to the G-code file as " -#~ "the first argument, and variables of settings also can be read" -#~ msgstr "" -#~ "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 via the absolute path to the G-code " -#~ "file as the first argument, and variables of settings can also be read" - -#~ msgid "Z Hop Type" -#~ msgstr "Z方向調整タイプ" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "ソリッド インフィルの線幅" - -#~ msgid "Line width of support" -#~ msgstr "サポートの線幅" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "The brim width around tree support. 0 means auto." - -#~ msgid "Line width for top surfaces" -#~ msgstr "トップ面の線幅" - -#~ msgid "Finish" -#~ msgstr "完了" - -#~ msgid "Failed" -#~ msgstr "失敗" - -#~ msgid "Plate Type" -#~ msgstr "Plate Type" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "パーツをサブストラクト\n" -#~ "マイナスパーツでモデルからメッシュを引くことができます。" - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "STEP形式で、STL形式よりもっと高品質なスライス結果を得られます、是非お試し" -#~ "ください。" +#~ "この設定により、線幅に対するオーバーハングの割合を検出し、異なる速度で造形" +#~ "します。100%%のオーバーハングの場合、ブリッジの速度が使用されます。" #~ msgid "Pause Print" #~ msgstr "Pause Print" @@ -10423,12 +10026,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Delete Pause Print" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "流量標定係数" + #~ msgid "\\u2103" #~ msgstr "u2103" #~ msgid "mm\\u00B3" #~ msgstr "mmu00B3" +#~ msgid "Flow Calibration" +#~ msgstr "流量キャリブレーション" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -10448,6 +10057,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "3D モデル" + #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS素材設定" @@ -10466,9 +10078,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "実フラッシュ量 = フラッシュ量 × マルチプライヤー" +#~ msgid "Adaptive layer height" +#~ msgstr "アダプティブ積層ピッチ" + #~ msgid "Add Custom Printer" #~ msgstr "カスタムプリンターを追加" +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -10492,6 +10110,9 @@ msgstr "" #~ "Arachneを使用するには、オーハーハング減速を無効にする必要があります。従っ" #~ "てオーバーハングの造形品質が劣る可能性があります。\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "選択したパーツを一つのパーツに組み立てます" + #~ msgid "Auto arrange" #~ msgstr "自動レイアウト" @@ -10531,6 +10152,12 @@ msgstr "" #~ "ベッド温度がフィラメントのガラス化温度より高いです、ノズル詰まりまたは造形" #~ "失敗となる可能性があります" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "底面最小厚さ" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "底面ソリッド層" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -10576,6 +10203,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "消費量" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Confirm whether the filament has been extruded" + +#~ msgid "Cool Plate" +#~ msgstr "常温プレート" + +#~ msgid "Cool plate" +#~ msgstr "常温プレート" + #~ msgid "Creating" #~ msgstr "作成中" @@ -10610,6 +10246,21 @@ msgstr "" #~ "はい - Arachneを有効し、オーバーハング減速を無効にする\n" #~ "いいえ - Arachneを無効にします" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "ローカルモードが無効にした為、プリンター %s との接続が切断されました。もう" +#~ "一度接続してください。" + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "ローカルモードを有効にした為、プリンター %s との接続が切断されました、もう" +#~ "一度接続してください。" + #~ msgid "Display printable box" #~ msgstr "造形可能な境界を表示" @@ -10659,6 +10310,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Bambuネットワークプラグインをダウンロード" +#~ msgid "Dump video" +#~ msgstr "ビデオをダウンロード" + #~ msgid "Edit plate setitngs" #~ msgstr "Edit plate settings" @@ -10672,6 +10326,9 @@ msgstr "" #~ "この設定により、1層目以外の積層ピッチを自動調整します。\n" #~ "注意:この設定が有効な場合、プライムタワーを無効にしてください。" +#~ msgid "Engineering plate" +#~ msgstr "エンジニアリングプレート" + #~ msgid "Enter a search term" #~ msgstr "検索語を入力" @@ -10719,12 +10376,27 @@ msgstr "" #~ "プリンターと接続できませんでした。IPアドレスとアクセスコードをご確認くださ" #~ "い。" +#~ msgid "Failed to get ticket" +#~ msgstr "チケットを取得できませんでした" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Failed to parse login report reason" +#~ msgid "Failed uploading print file" +#~ msgstr "ファイルをアップロードできませんでした" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" +#~ msgid "Failure of bind" +#~ msgstr "デバイス紐付け失敗" + +#~ msgid "Failure of printer login" +#~ msgstr "プリンター登録失敗" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Feed new filament from external spool" + #~ msgid "Filament 1" #~ msgstr "フィラメント 1" @@ -10776,6 +10448,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "フィラメント選択" +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + #~ msgid "Fix model locally" #~ msgstr "モデルをローカルで修正" @@ -10857,6 +10532,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "初期化失敗 [%d]" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "初期化失敗 (プリンターがサポートしません)" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "初期化失敗 (ローカルモードではサポートしません)" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "初期化失敗 (ビデオ)" @@ -10892,6 +10573,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "積層時間 (log)" +#~ msgid "Layer Time (log)" +#~ msgstr "積層時間 (Log)" + #~ msgid "Layers: %d/%d" #~ msgstr "積層: %d/%d" @@ -10901,6 +10585,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "積層: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "積層と境界" + #~ msgid "Leaving Seam painting" #~ msgstr "継ぎ目ペイントを退出" @@ -10913,6 +10600,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "管理" +#~ msgid "Manual" +#~ msgstr "手動" + #~ msgid "Max travel detour distance" #~ msgstr "最大迂回距離" @@ -10923,6 +10613,12 @@ msgstr "" #~ "壁面と接触しないために最大の迂回移動距離です、これ以上の移動距離に対して" #~ "は、迂回することを保証しません。" +#~ msgid "Media" +#~ msgstr "メディア" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "プリンターのIPが見つかりません" + #~ msgid "Modify" #~ msgstr "修正" @@ -10938,13 +10634,29 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "AMS無し" +#~ msgid "No files" +#~ msgstr "ファイル無し" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "ローカルモードではアクセスできません" + #~ msgid "Not supported." #~ msgstr "未対応" +#~ msgid "Not supported by this model of printer!" +#~ msgstr "この機種のプリンターには対応していません" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "注: IPアドレス とアクセスコードの確認場所は次の通り" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "オブジェクトはプレートと接触していないため造形できません。サポートを有効す" +#~ "るか、オブジェクトを修正してください。" + #~ msgid "Open &PrusaSlicer" #~ msgstr "PrusaSlicerを開く" @@ -11009,6 +10721,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "まずはレポートをご記入ください。" +#~ msgid "Please log out and login to the printer again." +#~ msgstr "一旦サインアウトし、再度サインインしてください" + #~ msgid "Please upgrade your printer first" #~ msgstr "ファームウェアをアップデートしてください" @@ -11041,12 +10756,18 @@ msgstr "" #~ "フィラメントを入れ替えるために、ノズルに残るフィラメントをフラッシュする特" #~ "定の造形物です。" +#~ msgid "Print file not found, please slice again" +#~ msgstr "造形ファイルを見つけませんでした、もう一度スライスしてください" + #~ msgid "Printer Selection" #~ msgstr "プリンター選択" #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "素材とAMSスロットのマッピングがサポートしません" +#~ msgid "Printing List" +#~ msgstr "造形リスト" + #~ 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 " @@ -11103,9 +10824,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "ベッドタイプを選択" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "プリンターへの送信は失敗しました、もう一度お試しください。" + #~ msgid "Sending" #~ msgstr "送信中" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "クラウドサービでG-codeファイルを送信" + +#~ msgid "Set Printable" +#~ msgstr "造形可能に設定" + +#~ msgid "Set Unprintable" +#~ msgstr "造形不可に設定" + #~ msgid "Set pen size" #~ msgstr "ペンサイズを設定" @@ -11257,6 +10990,13 @@ msgstr "" #~ "このモデルはオーバーラップや自己交差する部分があるため、修復を行いました。" #~ "この結果をご確認の上、次の操作をしてください。" +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "ファイルサイズが 1GByteを超える為、読込みできません。モデルを修正してスラ" +#~ "イスしてください。" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11273,6 +11013,9 @@ msgstr "" #~ "G-code中の機種は現在選択したプリンターではありません、プリンターを選択し直" #~ "すか、一致機種でスライスしてください。\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "地域が正しくありません" + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11293,6 +11036,13 @@ msgstr "" #~ "フィラメントを入れ替える時に、廃料をこのオブジェクトにフラッシュします。時" #~ "間とフィラメントの節約につながりますが、このオブジェクトが混色になります。" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ 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, " @@ -11307,15 +11057,32 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "ヘッド抜きのタイムラプスビデオ" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "トップ面最小厚み" + +#~ msgid "Top Solid Layers" +#~ msgstr "トップソリッド層" + #~ msgid "Translation" #~ msgstr "移動" +#~ msgid "Tree support with infill" +#~ msgstr "ツリーサポートインフィル使用" + #~ msgid "Unable to connect printer" #~ msgstr "プリンターに接続できませんでした" #~ msgid "Unable to create zip file" #~ msgstr "ZIP ファイルを作成できませんでした" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "タスクのアップロードはタイムアウトしました。ネットワークをご確認ください。" + +#~ msgid "User authorization timeout" +#~ msgstr "ユーザー認証タイムアウト" + #~ msgid "User pause" #~ msgstr "ユーザによる一時停止" @@ -11360,6 +11127,9 @@ msgstr "" #~ "following settings:\n" #~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgid "Wrong Access code" +#~ msgstr "アクセスコードが間違っています" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "一般設定" @@ -11400,6 +11170,9 @@ msgstr "" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr "他のオブジェクトに近すぎるので、衝突の可能性があります。\n" +#~ msgid " plate %1%:" +#~ msgstr "プレート%1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr "を閉じてから新しいモデルを作成します、続行しますか?" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index dada53499..2120a8901 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -132,8 +132,16 @@ src/libslic3r/PlaceholderParser.cpp src/libslic3r/TreeSupport.cpp src/libslic3r/Model.cpp src/libslic3r/Format/OBJ.cpp -src/slic3r/GUI/BonjourDialog.cpp -src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp -src/slic3r/GUI/PrintHostDialogs.cpp +src/slic3r/GUI/CalibrationWizardPage.cpp +src/slic3r/GUI/CalibrationPanel.cpp +src/slic3r/GUI/CalibrationWizard.cpp +src/slic3r/GUI/CalibrationWizardStartPage.cpp +src/slic3r/GUI/CalibrationWizardSavePage.cpp +src/slic3r/GUI/CalibrationWizardPresetPage.cpp +src/slic3r/GUI/CalibrationWizardCaliPage.cpp +src/slic3r/GUI/CaliHistoryDialog.cpp src/slic3r/GUI/calib_dlg.cpp -src/slic3r/GUI/PhysicalPrinterDialog.cpp \ No newline at end of file +src/slic3r/GUI/BonjourDialog.cpp +src/slic3r/GUI/calib_dlg.cpp +src/slic3r/GUI/PrintHostDialogs.cpp +src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp \ No newline at end of file diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 623de4bbe..4983824b6 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -535,8 +535,10 @@ msgstr "Niet gedefinieerd" msgid "%1% was replaced with %2%" msgstr "%1% is vervangen door %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" +"Het kan zijn dat de configuratie gegenereerd is een nieuwere versie van " +"BambuStudio." msgid "Some values have been replaced. Please check them:" msgstr "Sommige waarden zijn aangepast. Controleer deze alstublieft:" @@ -564,29 +566,43 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Interne versie" + +msgid "Version" +msgstr "Versie" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"Bambu Studio wordt beëindigd omdat het geheugen bijna vol is. Het kan een " +"bug zijn. Meldt dit probleem alstublieft bij support." msgid "Fatal error" msgstr "Fatale fout" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." -msgstr "" +msgstr "Er is een lokalisatiefout opgetreden en Bambu Studio wordt afgesloten." msgid "Critical error" msgstr "Kritische fout" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "Er is een onbekende uitzondering opgetreden in Bambu Studio : %1%" + +msgid "Untitled" +msgstr "Naamloos" msgid "Downloading Bambu Network Plug-in" msgstr "Bambu Netwerk Plug-in downloaden" +msgid "Login information expired. Please login again." +msgstr "Uw inlog is verlopen. Log alstublieft opnieuw in." + msgid "Incorrect password" msgstr "Onjuist wachtwoord" @@ -595,9 +611,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "Verbinding met %s is mislukt! [SN: %s, code=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"Het Bambu Studio-configuratiebestand is mogelijk beschadigd en kan niet " +"worden geladen. Verwijder het bestand en probeer het opnieuw." #, c-format, boost-format msgid "" @@ -618,8 +636,8 @@ msgid "Click to download new version in default browser: %s" msgstr "" "Klik hier om de nieuwe versie te downloaden in je standaard browser: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer heeft een upgrade nodig" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio heeft een upgrade nodig" msgid "This is the newest version." msgstr "Dit is de nieuwste versie." @@ -642,8 +660,8 @@ msgstr "Kies een bestand (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Kies een of meer bestanden (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Kies een bestand (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "Sommige voorinstellingen zijn aangepast." @@ -665,15 +683,12 @@ msgid "Open Project" msgstr "Open project" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"De versie van Orca Slicer is te oud en dient te worden bijgewerkt naar de " +"De versie van Bambu studio is te oud en dient te worden bijgewerkt naar de " "nieuwste versie voordat deze normaal kan worden gebruikt" -msgid "Login information expired. Please login again." -msgstr "Uw inlog is verlopen. Log alstublieft opnieuw in." - msgid "Privacy Policy Update" msgstr "Privacy Policy Update" @@ -725,8 +740,8 @@ msgstr "Open" msgid "Rename" msgstr "Naam wijzigen" -msgid "Orca Slicer GUI initialization failed" -msgstr "Initialisatie van Orca Slicer GUI is mislukt" +msgid "Bambu Studio GUI initialization failed" +msgstr "Initialisatie van Bambu Studio GUI is mislukt" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -753,18 +768,6 @@ msgstr "Snelheid" msgid "Strength" msgstr "Sterkte" -msgid "Top Solid Layers" -msgstr "Aantal solide bovenste lagen" - -msgid "Top Minimum Shell Thickness" -msgstr "Minimale dikte van de toplaag" - -msgid "Bottom Solid Layers" -msgstr "Aantal gesloten bodem lagen" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Minimale bodem dikte" - msgid "Ironing" msgstr "Strijken" @@ -822,18 +825,6 @@ msgstr "Edit Text" msgid "Load..." msgstr "Laden..." -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "Kubus" @@ -843,6 +834,18 @@ msgstr "Cilinder" msgid "Cone" msgstr "Kegel" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Height Range Modifier" @@ -858,12 +861,6 @@ msgstr "Instellen als individueel object" msgid "Set as individual objects" msgstr "Instellen als individuele objecten" -msgid "Fill bed with copies" -msgstr "Fill bed with copies" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Fill the remaining area of bed with copies of the selected object" - msgid "Printable" msgstr "Afdrukbaar" @@ -945,8 +942,11 @@ msgid "Assemble the selected objects to an object with single part" msgstr "" "Monteer de geselecteerde objecten tot een object bestaande uit 1 onderdeel" -msgid "Assemble the selected parts to a single part" -msgstr "Monteer de geselecteerde onderdelen tot een enkel onderdeel" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "Langs de X as" @@ -1066,18 +1066,21 @@ msgstr "Filament instellen voor de geselecteerde items" msgid "current" msgstr "Huidige" -msgid "Set Unprintable" -msgstr "Instellen als niet printbaar" - -msgid "Set Printable" -msgstr "Instellen als printbaar" - msgid "Unlock" msgstr "Ontgrendelen" msgid "Lock" msgstr "Vergrendelen" +msgid "Fill bed with copies" +msgstr "Fill bed with copies" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Fill the remaining area of bed with copies of the selected object" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Naam" @@ -1141,6 +1144,9 @@ msgstr "Bestand laden" msgid "Error!" msgstr "Fout!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Algemeen" @@ -1334,15 +1340,6 @@ msgstr "Het kopiëren van meerdere cellen wordt niet ondersteund." msgid "Outside" msgstr "Buitenkant" -msgid "Auto" -msgstr "Automatisch" - -msgid "Manual" -msgstr "Handmatig" - -msgid "No-brim" -msgstr "Geen extra rand (brim)" - msgid " " msgstr "" @@ -1358,6 +1355,21 @@ msgstr "Vulling (infill) dichtheid(%)" msgid "Auto Brim" msgstr "Brim automatisch instellen" +msgid "Auto" +msgstr "Automatisch" + +msgid "Outer brim only" +msgstr "Outer brim only" + +msgid "Inner brim only" +msgstr "Inner brim only" + +msgid "Outer and inner brim" +msgstr "Outer and inner brim" + +msgid "No-brim" +msgstr "Geen extra rand (brim)" + msgid "Outer wall speed" msgstr "Snelheid buitenwand" @@ -1463,6 +1475,33 @@ msgstr "Geen printer" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "Verbinding maken met de server is mislukt" + +msgid "Check cloud service status" +msgstr "Check cloud service status" + +msgid "code" +msgstr "code" + +msgid "Failed to connect to cloud service" +msgstr "Failed to connect to cloud service" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Please click on the hyperlink above to view the cloud service status" + +msgid "Failed to connect to the printer" +msgstr "Verbinding maken met de printer is mislukt" + +msgid "Connection to printer failed" +msgstr "Connection to printer failed" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Please check the network connection of the printer and Studio." + +msgid "Connecting..." +msgstr "Verbinden..." + msgid "?" msgstr " ?" @@ -1472,8 +1511,8 @@ msgstr "Leeg" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS filament backup" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS niet aangesloten" @@ -1531,11 +1570,11 @@ msgstr "Nieuw filament in de extruder laden" msgid "Purge old filament" msgstr "Oud filament verwijderen" -msgid "Feed new filament from external spool" -msgstr "Feed new filament from external spool" +msgid "Push new filament into the extruder" +msgstr "Push new filament into the extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Confirm whether the filament has been extruded" +msgid "Grab new filament" +msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1639,56 +1678,59 @@ msgstr "Bezig met inloggen" msgid "Login failed" msgstr "Inloggen mislukt" -msgid "The region parameter is incorrrect" -msgstr "De regioparameter is onjuist." - -msgid "Failure of printer login" -msgstr "Fout bij inloggen op printer" - -msgid "Failed to get ticket" -msgstr "Het is niet gelukt om een ticket te verkrijgen" - -msgid "User authorization timeout" -msgstr "Timeout voor gebruikersautorisatie" - -msgid "Failure of bind" -msgstr "Koppeling mislukt" - -msgid "Unknown Failure" -msgstr "Onbekende fout" - msgid "Please check the printer network connection." msgstr "Controleer de netwerkverbinding van de printer." -msgid "Abnormal print file data. Please slice again" -msgstr "Abnormale printbestand. Slice opnieuw" +msgid "Abnormal print file data. Please slice again." +msgstr "Abnormal print file data: please slice again." -msgid "Task canceled" -msgstr "Taak geannuleerd" +msgid "Task canceled." +msgstr "Task canceled." -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "" -"Time-out tijdens het uploaden van de taak. Controleer of er een " -"netwerkprobleem is en probeer het opnieuw" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "Upload task timed out. Please check the network status and try again." msgid "Cloud service connection failed. Please try again." msgstr "Verbinding met cloudservice is mislukt. Probeer het nog eens." -msgid "Print file not found, please slice again" -msgstr "Print bestand niet gevonden, opnieuw slicen a.u.b." +msgid "Print file not found. please slice again." +msgstr "Print file not found; please slice again." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" -"Het afdrukbestand overschrijdt de maximale grootte (1 GB). Vereenvoudig het " -"model en slice opnieuw" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." -msgid "Failed uploading print file" -msgstr "Uploaden van het printbestand is mislukt" +msgid "Failed to send the print job. Please try again." +msgstr "Het verzenden van de printopdracht is mislukt. Probeer het opnieuw." -msgid "Wrong Access code" -msgstr "Verkeerde toegangscode" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Failed to upload file to ftp. Please try again." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Check the current status of the Bambu Lab server by clicking on the link " +"above." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"The size of the print file is too large. Please adjust the file size and try " +"again." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "Print file not found; please slice it again and send it for printing." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Failed to upload print file via FTP. Please check the network status and try " +"again." msgid "Sending print job over LAN" msgstr "Printopdracht verzenden via LAN" @@ -1709,26 +1751,18 @@ msgstr "Print configuratie verzenden" msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "Succesvol verzonden. Springt automatisch naar de apparaatpagina in %ss" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "" "Er moet een MicroSD-kaart worden geplaatst voordat er via LAN kan worden " "afgedrukt." -msgid "Failed to send the print job. Please try again." -msgstr "Het verzenden van de printopdracht is mislukt. Probeer het opnieuw." - -msgid "Send to Printer failed. Please try again." -msgstr "Verzenden naar de printer is mislukt. Probeer het opnieuw." - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "G-codebestand verzenden via LAN" -msgid "Sending gcode file through cloud service" -msgstr "G-codebestand verzenden via cloudservice" - msgid "Sending gcode file to sdcard" msgstr "G-codebestand naar microSD-kaart verzenden" @@ -1741,9 +1775,6 @@ msgstr "" "Een MicroSD-kaart moet worden geplaatst voordat er iets naar de printer " "wordt gestuurd." -msgid "Please log out and login to the printer again." -msgstr "Log uit en log opnieuw in op de printer." - msgid "Choose SLA archive:" msgstr "Choose SLA archive:" @@ -1827,17 +1858,18 @@ msgstr "Auteursrecht" msgid "License" msgstr "Licentie" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer is gelicentieerd onder " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio is gelicentieerd onder " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero Algemene Openbare Licentie, versie 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu Studio is gebaseerd op PrusaSlicer van Prusa Research, welke is " +"afgeleid van Slic3r van Alessandro Ranellucci en de RepRap gemeenschap" msgid "Libraries" msgstr "Bibliotheken" @@ -1854,14 +1886,12 @@ msgstr "" msgid "About %s" msgstr "Over %s" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu Studio is gebaseerd op PrusaSlicer van PrusaResearch en SuperSlicer " +"van Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -1874,8 +1904,17 @@ msgstr "" "Slic3r is gemaakt door Alessandro Ranellucci met de hulp van vele andere " "bijdragers." -msgid "Version" -msgstr "Versie" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu Studio verwees ook naar enkele ideeën van Cura by Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"Er zijn veel delen van de software die afkomstig zijn van " +"communitybijdragen, dus we kunnen ze niet één voor één opsommen, maar in " +"plaats daarvan worden ze toegeschreven in de bijbehorende codecommentaar." msgid "AMS Materials Setting" msgstr "AMS Materiaal instellingen" @@ -1914,8 +1953,11 @@ msgstr "" "Het instellen van AMS slot informatie tijdens het printen wordt niet " "ondersteund." -msgid "Factors of dynamic flow cali" -msgstr "Factoren van dynamische flow cali" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Factor K" @@ -1929,15 +1971,15 @@ msgstr "Setting Virtual slot information while printing is not supported" msgid "Are you sure you want to clear the filament information?" msgstr "Are you sure you want to clear the filament information?" +msgid "You need to select the material type and color first." +msgstr "You need to select the material type and color first." + msgid "Please input a valid value (K in 0~0.5)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5, N in 0,6 ~ 2,0)" -msgid "You need to select the material type and color first." -msgstr "You need to select the material type and color first." - msgid "Other Color" msgstr "Other Color" @@ -2102,12 +2144,21 @@ msgstr "Printen met filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print met filament op een externe spoel" -msgid "Filaments replace" -msgstr "Backup Filament" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Group" +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 "" + msgid "AMS Settings" msgstr "AMS Instellingen" @@ -2411,6 +2462,13 @@ msgstr "" "Laaghoogte is te klein\n" "Teruggezet naar 0.2mm" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"Laaghoogte is te groot\n" +"Teruggezet naar 0.2mm" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2631,6 +2689,28 @@ msgstr "Updaten mislukt." msgid "Failed to start printing job" msgstr "Het starten van de printopdracht is mislukt" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "Standaard" @@ -2689,9 +2769,6 @@ msgstr "Hulpmiddel" msgid "Layer Time" msgstr "Laag tijd" -msgid "Layer Time (log)" -msgstr "Laagtijd (logboek)" - msgid "Height: " msgstr "Hoogte:" @@ -2776,6 +2853,9 @@ msgstr "Temperatuur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volumestroom (mm³/s)" +msgid "Layer Time (s)" +msgstr "Layer Time (s)" + msgid "Used filament" msgstr "Verbruikt filament" @@ -2997,9 +3077,11 @@ msgstr "Maat:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicting objects further (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Er bevind zich een object buiten de grenzen van de printplaat." @@ -3129,6 +3211,9 @@ msgstr "Nee" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "will be closed before creating a new model. Do you want to continue?" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "Slice printbed" @@ -3171,6 +3256,9 @@ msgstr "Toon de configuratie map" msgid "Show Tip of the Day" msgstr "Toon Tip van de dag" +msgid "Report issue" +msgstr "Report issue" + msgid "Check for Update" msgstr "Zoeken naar updates" @@ -3369,6 +3457,12 @@ msgstr "Toon &Labels" msgid "Show object labels in 3D scene" msgstr "Toon objectlabels in 3D-scène" +msgid "Show &Overhang" +msgstr "Show &Overhang" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Show object overhang highlight in 3D scene" + msgid "Preferences" msgstr "Voorkeuren" @@ -3402,9 +3496,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3423,9 +3514,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "3D Modellen" - msgid "&Open G-code" msgstr "&Open G-code" @@ -3536,30 +3624,30 @@ msgstr "Synchronisatie" msgid "Initialize failed (No Device)!" msgstr "Het initializeren is mislukt (geen apparaat)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + msgid "Initialize failed (No Camera Device)!" msgstr "Initialisatie is mislukt (geen camera-apparaat)!" -msgid "Initializing..." -msgstr "Initialiseren..." - -msgid "Loading..." -msgstr "Laden..." - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initialisatie mislukt (niet ondersteund in alleen LAN-modus)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisatie mislukt (niet toegankelijk in alleen LAN-modus)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" "De printer is bezig met downloaden. Wacht tot het downloaden is voltooid." +msgid "Loading..." +msgstr "Laden..." + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Initialisatie mislukt (niet toegankelijk in alleen LAN-modus)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Initialisatie is mislukt (LAN-IP van de printer ontbreekt)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialisatie is mislukt (niet ondersteund door de printer)!" +msgid "Initializing..." +msgstr "Initialiseren..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3590,9 +3678,12 @@ msgstr "Hulpmiddelen voor virtuele camera's downloaden" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"Er draait nog een virtuele camera.\n" +"Bambu Studio ondersteunt slechts één virtuele camera.\n" +"Wil je deze virtuele camera stoppen?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3638,6 +3729,9 @@ msgstr "Video" msgid "Switch to video files." msgstr "Schakel over naar videobestanden." +msgid "Switch to 3mf model files." +msgstr "Switch to 3mf model files." + msgid "Delete selected files from printer." msgstr "Verwijder geselecteerde bestanden van de printer." @@ -3656,12 +3750,6 @@ msgstr "Batchbeheer van bestanden." msgid "No printers." msgstr "Geen printers" -msgid "Not supported by this model of printer!" -msgstr "Niet ondersteund door dit model printer!" - -msgid "Connecting..." -msgstr "Verbinden..." - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "Verbinding mislukt [%d]!" @@ -3669,22 +3757,45 @@ msgstr "Verbinding mislukt [%d]!" msgid "Loading file list..." msgstr "Bestandslijst laden..." -msgid "No files" -msgstr "Geen bestanden" - -msgid "Not accessible in LAN-only mode!" -msgstr "Niet toegankelijk in LAN-only modus!" - -msgid "Missing LAN ip of printer!" -msgstr "LAN-IP van de printer ontbreekt!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "No files [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "Load failed [%d]" +msgstr "Load failed [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Delete files" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Do you want to delete the file '%s' from printer?" + +msgid "Delete file" +msgstr "Delete file" + +msgid "Fetching model infomations ..." +msgstr "Fetching model information..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Failed to fetch model infomation from printer." + +msgid "Failed to parse model infomations." +msgstr "Failed to parse model infomation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Bestand '%s' is verloren gegaan! Download het opnieuw." @@ -3705,6 +3816,12 @@ msgstr "Download voltooid" msgid "Downloading %d%%..." msgstr "%d%% downloaden..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Snelheid" @@ -3726,15 +3843,6 @@ msgstr "3Dconnexion instellingen" msgid "Swap Y/Z axes" msgstr "Wissel Y/Z assen om" -msgid "Camera" -msgstr "Camera" - -msgid "SD Card" -msgstr "MicroSD-kaart" - -msgid "Camera Setting" -msgstr "Camera-instelling" - msgid "Printing Progress" msgstr "Print voortgang" @@ -3750,9 +3858,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Layer: N/A" +msgid "Immediately score" +msgstr "Immediately score" + msgid "Clear" msgstr "Wissen" +msgid "Camera" +msgstr "Camera" + +msgid "SD Card" +msgstr "MicroSD-kaart" + +msgid "Camera Setting" +msgstr "Camera-instelling" + msgid "Control" msgstr "Besturing" @@ -3786,32 +3906,14 @@ msgstr "Geen microSD-kaart" msgid "SD Card Abnormal" msgstr "MicroSD Kaart Abnormaal" -msgid "Printing List" -msgstr "Print lijst" - msgid "Cancel print" msgstr "Print annuleren" msgid "Are you sure you want to cancel this print?" msgstr "Weet je zeker dat je deze print wilt annuleren?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"De verbinding met printer [%s] is verbroken omdat de LAN-modus is " -"uitgeschakeld. Sluit de printer opnieuw aan door in te loggen met uw " -"gebruikersaccount." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"De verbinding met printer [%s] is verbroken omdat de LAN-modus is " -"ingeschakeld. Sluit de printer opnieuw aan door de toegangscode in te voeren " -"die u op het scherm van de printer kunt vinden." +msgid "Done" +msgstr "Done" msgid "Downloading..." msgstr "Downloaden..." @@ -3827,6 +3929,12 @@ msgstr "In Cloud Slicing Queue, there are %s tasks ahead of you." msgid "Layer: %s" msgstr "Layer: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Please give a score for your favorite Bambu Market model." + +msgid "Score" +msgstr "Score" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Layer: %d/%d" @@ -3869,24 +3977,15 @@ msgstr "Ludicrous" msgid "Can't start this without SD card." msgstr "Kan niet starten zonder microSD-kaart." -msgid "Failed to connect to the server" -msgstr "Verbinding maken met de server is mislukt" - msgid "Status" msgstr "Status" -msgid "Media" -msgstr "Media" - msgid "Update" msgstr "Updaten" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Verbinding maken met de printer is mislukt" - msgid "Don't show again" msgstr "Niet nogmaals tonen" @@ -4121,12 +4220,9 @@ msgstr "Filament instellingen" msgid "Printer settings" msgstr "Printer instellingen" -msgid "Untitled" -msgstr "Naamloos" - #, boost-format -msgid " plate %1%:" -msgstr " printbed %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Ongeldige naam, the volgende karakters zijn niet toegestaan:" @@ -4211,9 +4307,9 @@ msgstr "" "uitgevoerd." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, boost-format @@ -4270,8 +4366,10 @@ msgstr "Laad 3mf" msgid "The Config can not be loaded." msgstr "De configuratie kan niet worden geladen." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" +"De 3mf is gegenereerd door een oude versie van Bambu Studio, enkel de " +"geometriegegevens werden geladen." #, c-format, boost-format msgid "" @@ -4619,8 +4717,10 @@ msgstr "Tips:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" +"De \"Fix Model\" functie is momenteel alleen op Windows. Repareer het model " +"in Bambu Studio (Windows) of CAD-software." #, c-format, boost-format msgid "" @@ -4686,9 +4786,6 @@ msgstr "Andere" msgid "Login Region" msgstr "Inlogregio" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Metriek" @@ -4715,12 +4812,6 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "" "Indien ingeschakeld, worden bij het opstarten nuttige tips weergegeven." -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Presets" @@ -4741,33 +4832,39 @@ msgstr "System Sync" msgid "Clear my choice on the unsaved presets." msgstr "Clear my choice on the unsaved presets." -msgid "Associate files to OrcaSlicer" -msgstr "Koppel bestanden aan Orca Slicer" +msgid "Associate files to BambuStudio" +msgstr "Koppel bestanden aan Bambu Studio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Koppel .3mf-bestanden aan Orca Slicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Koppel .3mf-bestanden aan Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"Indien ingeschakeld, wordt Orca Slicer ingesteld als de standaardtoepassing " +"Indien ingeschakeld, wordt Bambu Studio ingesteld als de standaardtoepassing " "om .3mf-bestanden te openen" -msgid "Associate .stl files to OrcaSlicer" -msgstr "Koppel .stl-bestanden aan Orca Slicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Koppel .stl-bestanden aan Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"Indien ingeschakeld, wordt Orca Slicer ingesteld als de standaardtoepassing " +"Indien ingeschakeld, wordt Bambu Studio ingesteld als de standaardtoepassing " "om .stl-bestanden te openen" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Koppel .step/.stp bestanden aan Orca Slicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Koppel .step/.stp bestanden aan Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"Indien ingeschakeld, wordt Orca Slicer ingesteld als de standaardtoepassing " +"Indien ingeschakeld, wordt Bambu Studio ingesteld als de standaardtoepassing " "om .step-bestanden te openen" +msgid "Online Models" +msgstr "Online Models" + +msgid "Show online staff-picked models on the home page" +msgstr "Show online staff-picked models on the home page" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -4801,6 +4898,12 @@ msgstr "Donkere modus" msgid "Enable Dark mode" msgstr "Donkere modus inschakelen" +msgid "Develop mode" +msgstr "Ontwikkelmodus" + +msgid "Skip AMS blacklist check" +msgstr "Skip AMS blacklist check" + msgid "Home page and daily tips" msgstr "Startpagina en dagelijkse tips" @@ -4837,11 +4940,14 @@ msgstr "Anders" msgid "Mouse wheel reverses when zooming" msgstr "Omgekeerde scrollrichting tijdens het zoomen" -msgid "Develop mode" -msgstr "Ontwikkelmodus" +msgid "Enable SSL(MQTT)" +msgstr "Enable SSL(MQTT)" -msgid "Dump video" -msgstr "Video verwijderen" +msgid "Enable SSL(FTP)" +msgstr "Enable SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internal developer mode" msgid "Log Level" msgstr "Log level" @@ -4927,42 +5033,39 @@ msgstr "Materialen toevoegen/verwijderen" msgid "Add/Remove printers" msgstr "Printers toevoegen/verwijderen" +msgid "Incompatible" +msgstr "Incompatible" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Afdrukvolgorde" -msgid "Plate name" -msgstr "Plate name" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Same as Global Plate Type" + msgid "Same as Global Bed Type" msgstr "Hetzelfde als Global Bed Type" -msgid "Cool Plate" -msgstr "Cool (koud) printbed" - -msgid "Engineering Plate" -msgstr "Engineering plate (technisch printbed)" - -msgid "High Temp Plate" -msgstr "High Temp Plate (hoge temperatuur printbed)" - -msgid "Textured PEI Plate" -msgstr "PEI plaat met structuur" - msgid "By Layer" msgstr "By Layer" msgid "By Object" msgstr "By Object" +msgid "Plate name" +msgstr "Plate name" + msgid "Accept" msgstr "Accept" @@ -5082,11 +5185,8 @@ msgstr "" msgid "Simply switch to \"%1%\"" msgstr "Schakel eenvoudig over naar \"%1%\"" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Taak geannuleerd" msgid "(LAN)" msgstr "(LAN)" @@ -5097,6 +5197,9 @@ msgstr "Mijn apparaat" msgid "Other Device" msgstr "Ander apparaat" +msgid "Online" +msgstr "Online" + msgid "Input access code" msgstr "Toegangscode invoeren" @@ -5106,12 +5209,18 @@ msgstr "Kun je geen apparaten vinden?" msgid "Log out successful." msgstr "Uitloggen gelukt." +msgid "Offline" +msgstr "Offline" + msgid "Busy" msgstr "Bezet" msgid "Bambu Cool Plate" msgstr "Bambu Cool (koude) Plate" +msgid "PLA Plate" +msgstr "PLA Plate" + msgid "Bamabu Engineering Plate" msgstr "Bambu Engineering (technische) plate" @@ -5127,12 +5236,24 @@ msgstr "Vernieuwen" msgid "Bed Leveling" msgstr "Bed leveling" -msgid "Flow Calibration" -msgstr "Flow calibratie" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Kan geen verbinding maken met de printer" msgid "send completed" msgstr "Versturen gelukt" +msgid "Error code" +msgstr "Error code" + +msgid "Check the status of current system services" +msgstr "Check the status of current system services" + +msgid "Printer local connection failed, please try again." +msgstr "Printer local connection failed; please try again." + msgid "No login account, only printers in LAN mode are displayed" msgstr "Geen login-account, alleen printers in LAN-modus worden weergegeven" @@ -5213,6 +5334,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Er moet een MicroSD-kaart worden geplaatst voordat u kunt afdrukken." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "" "Er moet een MicroSD-kaart worden geplaatst om een timelapse op te nemen." @@ -5264,9 +5388,27 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "Print opdracht voorbereiden" +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormale printbestand. Slice opnieuw" + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "De naam van het apparaat wijzigen" @@ -5280,20 +5422,110 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "A MicroSD card needs to be inserted before sending to the printer SD card." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "" +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "De printer moet zich in hetzelfde LAN bevinden als Bambu Studio." msgid "The printer does not support sending to printer SD card." msgstr "" "De printer biedt geen ondersteuning voor het verzenden naar de microSD-kaart " "van de printer." +msgid "Failed to create socket" +msgstr "Failed to create socket" + +msgid "Failed to connect socket" +msgstr "Failed to connect socket" + +msgid "Failed to publish login request" +msgstr "Failed to publish login request" + +msgid "Get ticket from device timeout" +msgstr "Timeout getting ticket from device" + +msgid "Get ticket from server timeout" +msgstr "Timeout getting ticket from server" + +msgid "Failed to post ticket to server" +msgstr "Failed to post ticket to server" + +msgid "Failed to parse login report reason" +msgstr "Failed to parse login report reason" + +msgid "Receive login report timeout" +msgstr "Receive login report timeout" + +msgid "Unknown Failure" +msgstr "Onbekende fout" + msgid "Log in printer" msgstr "Inloggen op printer" msgid "Would you like to log in this printer with current account?" msgstr "Wil je met het huidige account inloggen op de printer?" +msgid "Check the reason" +msgstr "Check the reason" + +msgid "Read and accept" +msgstr "Read and accept" + +msgid "Terms and Conditions" +msgstr "Terms and Conditions" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"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 " +"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." + +msgid "and" +msgstr "and" + +msgid "Privacy Policy" +msgstr "Privacy Policy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "We ask for your help to improve everyone's printer" + +msgid "Statement about User Experience Improvement Program" +msgstr "Statement about User Experience Improvement Program" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"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 " +"same principle and uses machine learning to improve its performance from the " +"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." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Statement on User Experience Improvement Plan" + msgid "Log in successful." msgstr "Inloggen gelukt." @@ -5414,6 +5646,9 @@ msgstr "Wanden" msgid "Top/bottom shells" msgstr "Boven-/onderlagen" +msgid "Sparse infill" +msgstr "Dunne vulling (infill)" + msgid "Initial layer speed" msgstr "Printsnelheid van de eerste laag" @@ -5433,12 +5668,6 @@ msgstr "" "afgeremd wordt voor overhanggraden en dat dezelfde snelheid als voor wanden " "gebruikt wordt." -msgid "Bridge" -msgstr "Brug" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "Verplaatsing-sneleheid" @@ -5463,8 +5692,8 @@ msgstr "Speciale modus" msgid "G-code output" msgstr "G-code uitvoer" -msgid "Post-processing Scripts" -msgstr "Post-processing Scripts" +msgid "Post-processing scripts" +msgstr "Post-processing scripts" msgid "Frequent" msgstr "Veelgebruikt" @@ -5519,8 +5748,8 @@ msgstr "Nozzle" msgid "Nozzle temperature when printing" msgstr "Nozzle temperatuur tijdens printen" -msgid "Cool plate" -msgstr "Cool (koud) printbed" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5529,7 +5758,7 @@ msgstr "" "Dit is de bedtemperatuur wanneer de koelplaat is geïnstalleerd. Een waarde " "van 0 betekent dat het filament printen op de Cool Plate niet ondersteunt." -msgid "Engineering plate" +msgid "Engineering Plate" msgstr "Engineering plate (technisch printbed)" msgid "" @@ -5540,6 +5769,9 @@ msgstr "" "waarde van 0 betekent dat het filament afdrukken op de Engineering Plate " "niet ondersteunt." +msgid "High Temp Plate" +msgstr "High Temp Plate (hoge temperatuur printbed)" + msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" @@ -5548,6 +5780,9 @@ msgstr "" "Een waarde van 0 betekent dat het filament printen op de High Temp Plate " "niet ondersteunt." +msgid "Textured PEI Plate" +msgstr "PEI plaat met structuur" + msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" @@ -5605,12 +5840,6 @@ msgstr "Filament einde G-code" msgid "Printable space" msgstr "Ruimte waarbinnen geprint kan worden" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "Extruder ruimte" @@ -5659,21 +5888,9 @@ msgstr "Jerk beperking" msgid "Layer height limits" msgstr "Limieten voor laaghoogte" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "Terugtrekken (retraction) bij het wisselen van filament" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "Losgemaakt" @@ -6130,9 +6347,6 @@ msgstr "Gizmo SLA-ondersteuningspunten" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM seam schilderen" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "Plaat" @@ -6199,9 +6413,6 @@ msgstr "Horizontale schuifbalk - Beweeg actieve duim naar rechts" msgid "On/Off one layer mode of the vertical slider" msgstr "Aan/uit één laagmodus van de verticale schuifregelaar" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "Schuifregelaar 5x sneller verplaatsen" @@ -6219,29 +6430,30 @@ msgid "Network plug-in update" msgstr "Netwerk plug-in update" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" +"Klik op OK om de netwerkplug-in bij te werken wanneer Bambu Studio de " +"volgende keer wordt gestart." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "" "Een nieuwe netwerk plug-in (%s) is beschikbaar. Wilt je deze installeren?" -msgid "New version of Orca Slicer" -msgstr "Nieuwe versie van Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Nieuwe versie van Bambu Studio" msgid "Don't remind me of this version again" msgstr "Herinner me niet meer aan deze versie." -msgid "Done" -msgstr "Done" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN-verbinding mislukt (verzenden afdrukbestand)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" +"Stap 1, bevestig dat Bambu Studio en uw printer zich in hetzelfde LAN " +"bevinden." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6372,6 +6584,10 @@ msgstr "Repareren geannuleerd" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Het kopieeren van bestand %1% naar %2% is mislukt: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Het kopieeren van map %1% naar %2% is mislukt: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "" "Controleer niet-opgeslagen wijzigingen voordat u de configuratie bijwerkt." @@ -6383,11 +6599,11 @@ msgid "Open G-code file:" msgstr "Open G-code bestand:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Eén object heeft een lege eerste laag en kan niet geprint worden. Knip een " -"stuk van de bodem van het object of genereer support." +"The following object(s) have an empty initial layer and can't be printed. " +"Please cut the bottom or enable supports." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6433,9 +6649,6 @@ msgstr "Buitenste wand" msgid "Overhang wall" msgstr "Overhangende wand" -msgid "Sparse infill" -msgstr "Dunne vulling (infill)" - msgid "Internal solid infill" msgstr "Interne solide vulling" @@ -6445,15 +6658,12 @@ msgstr "Bovenvlak" msgid "Bottom surface" msgstr "Bodem oppervlak" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Brug" msgid "Gap infill" msgstr "Gat opvulling" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support interface" @@ -6692,22 +6902,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "De laaghoogte kan niet groter zijn dan de diameter van de nozzle" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Printbed %d: %s ondersteunt filament %s niet." @@ -7025,8 +7219,8 @@ msgstr "" "laag. 0%% betekent koeling afdwingen voor de hele buitenwand, ongeacht de " "overhanggraad." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "Richting van de brug" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -7037,12 +7231,6 @@ msgstr "" "automatisch wordt berekend. Anders wordt de opgegeven hoek gebruikt voor " "externe bruggen. Gebruik 180° voor een hoek van nul." -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "Brugflow" @@ -7061,18 +7249,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -7080,39 +7260,23 @@ msgstr "Slechts één wand op de bovenste oppervlakken" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Gebruik slechts één wand op het vlakke bovenvlak, om meer ruimte te geven " -"aan het bovenste invulpatroon" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "Alle bovenoppervlakken" + +msgid "Topmost surface" +msgstr "Alleen het bovenste oppervlak" + msgid "Only one wall on first layer" msgstr "Only one wall on first layer" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Use only one wall on the first layer of models" msgid "Slow down for overhang" msgstr "Afremmen voor overhangende delen" @@ -7122,25 +7286,11 @@ msgstr "" "Schakel deze optie in om de snelheid omlaag te brengen voor verschillende " "overhangende hoeken" -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Dit is de snelheid voor bruggen en 100% overhangende wanden." - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "Dit is de snelheid voor bruggen en 100% overhangende wanden." msgid "Brim width" msgstr "Rand breedte" @@ -7158,18 +7308,6 @@ msgstr "" "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." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "" - -msgid "Inner brim only" -msgstr "Inner brim only" - -msgid "Outer and inner brim" -msgstr "Outer and inner brim" - msgid "Brim-object gap" msgstr "Ruimte tussen rand en object" @@ -7180,30 +7318,6 @@ msgstr "" "Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt " "ervoor dat het object eenvoudiger van het printbed kan worden verwijderd." -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "Geschikte machine" @@ -7344,11 +7458,11 @@ msgid "Internal bridge support thickness" msgstr "Dikte interne brugondersteuning" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -7398,10 +7512,8 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "Lijn dikte van buitenste wand" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7410,23 +7522,6 @@ msgstr "" "Dit is de snelheid voor de buitenste wand die zichtbaar is. Deze wordt " "langzamer geprint dan de binnenste wanden om een betere kwaliteit te krijgen." -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "Volgorde binnenwand/buitenwand/opvulling (infill)" @@ -7476,6 +7571,16 @@ msgstr "" "Afstandsradius rond de extruder: gebruikt om botsingen te vermijden bij het " "printen per object." +msgid "Max Radius" +msgstr "Maximale radius" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Maximale spelingsradius rond extruder. Wordt gebruikt om botsingen te " +"voorkomen bij het afdrukken op basis van objecten." + msgid "Extruder Color" msgstr "Extruder kleur" @@ -7502,22 +7607,28 @@ msgstr "" "mogelijk optimaliseren om een mooi vlak oppervlak te krijgen als er een " "lichte over- of onderflow is." +msgid "Object flow ratio" +msgstr "Object flow ratio" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "The flow ratio set by object; the meaning is the same as flow ratio." + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "Standaard lijn breedte als een lijn breedte is ingesteld op 0" + msgid "Keep fan always on" msgstr "Laat de ventilator aan staan" @@ -7580,14 +7691,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "Filament laadt tijd" @@ -7611,18 +7714,6 @@ msgstr "" "Filamentdiameter wordt gebruikt om de extrusie in de G-code te berekenen, " "het is dus belangrijk dat deze nauwkeurig wordt ingegeven" -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "Dichtheid" @@ -7736,54 +7827,6 @@ msgstr "Ondersteuning Cubic" msgid "Lightning" msgstr "Lightning" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (no open anchors)" - -msgid "1000 (unlimited)" -msgstr "1000 (unlimited)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7795,12 +7838,7 @@ msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" "Versnelling van de buitenwand: een lagere waarde kan de kwaliteit verbeteren." -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7808,10 +7846,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7834,29 +7869,33 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "Laag dikte voor eerste laag" + msgid "Initial layer height" msgstr "Laaghoogte van de eerste laag" @@ -7878,20 +7917,6 @@ msgid "Speed of solid infill part of initial layer" msgstr "" "Dit is de snelheid voor de solide vulling (infill) delen van de eerste laag." -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "" - msgid "Initial layer nozzle temperature" msgstr "Nozzle temperatuur voor de eerste laag" @@ -7903,24 +7928,6 @@ msgstr "" msgid "Full fan speed at layer" msgstr "Volledige snelheid op laag" -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." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7964,12 +7971,9 @@ msgstr "" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "Lagen en perimeters" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -8029,84 +8033,22 @@ msgstr "Roestvrij staal" msgid "Brass" msgstr "Messing" -msgid "Nozzle HRC" -msgstr "Nozzle HRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"De hardheid van de nozzle. Nul betekent geen controle op de hardheid van het " -"mondstuk tijdens het slicen." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "" "Schakel deze optie in als de machine een ventilator voor de enclosure heeft" -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 comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "G-code type" msgid "What kind of gcode the printer is compatible with" msgstr "Het type G-code waarmee de printer compatibel is" -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -8119,14 +8061,67 @@ msgstr "" "Combineer het printen van meerdere lagen vulling om te printtijd te " "verlagen. De wanden worden geprint in de originele laaghoogte." +msgid "Length of sparse infill anchor" +msgstr "Length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring " +"perimeters connected to a single infill line." + +msgid "0 (no open anchors)" +msgstr "0 (no open anchors)" + +msgid "1000 (unlimited)" +msgstr "1000 (unlimited)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximum length of sparse infill anchor" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"This connects a sparse infill line to an internal perimeter with a short " +"segment of an additional perimeter. If expressed as percentage (example: " +"15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." + +msgid "0 (not anchored)" +msgstr "0 (not anchored)" + msgid "Filament to print internal sparse infill." msgstr "" "Dit is het filament voor het printen van interne dunne vulling (infill)" -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "Line width of internal sparse infill" +msgstr "Lijn dikte voor interne dunne vulling (infill)" msgid "Infill/Wall overlap" msgstr "Vulling (infill)/wand overlap" @@ -8142,15 +8137,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "Dit is de snelheid voor de dunne vulling (infill)" -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "Strijk type" @@ -8165,12 +8151,6 @@ msgstr "" msgid "No ironing" msgstr "Niet strijken" -msgid "Top surfaces" -msgstr "Alle bovenoppervlakken" - -msgid "Topmost surface" -msgstr "Alleen het bovenste oppervlak" - msgid "All solid layer" msgstr "Alle vaste lagen" @@ -8433,48 +8413,16 @@ msgid "User can self-define the project file name when export" msgstr "" "Gebruikers kunnen zelf de project bestandsnaam kiezen tijdens het exporteren" -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "Overhange wand detecteren" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Dit maakt het mogelijk om het overhangpercentage ten opzichte van de " -"lijnbreedte te detecteren en gebruikt verschillende snelheden om af te " -"drukken. Voor 100%% overhang wordt de brugsnelheid gebruikt." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "Lijn dikte voor binnenste wand" msgid "Speed of inner wall" msgstr "Dit is de snelheid voor de binnenste wanden" @@ -8482,13 +8430,19 @@ msgstr "Dit is de snelheid voor de binnenste wanden" msgid "Number of walls of every layer" msgstr "Dit is het aantal wanden per laag." +msgid "Post-processing Scripts" +msgstr "Post-processing Scripts" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"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 via the absolute path to the G-code file as the first " +"argument, and variables of settings can also be read" msgid "Raft contact Z distance" msgstr "Vlot (raft) contact Z afstand:" @@ -8592,8 +8546,8 @@ msgstr "" "de nozzle de print raakt bij veplaatsen. Het gebruik van spiraallijnen om Z " "op te tillen kan stringing voorkomen." -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Z Hop Type" msgid "Slope" msgstr "Helling" @@ -8601,53 +8555,10 @@ msgstr "Helling" msgid "Spiral" msgstr "Spiraal" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8667,17 +8578,6 @@ msgstr "" "terugtrekking (retraction); als u dit op 0 zet, betekent dit dat het " "dezelfde snelheid heeft als het intrekken (retraction)." -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "Naad positie" @@ -8696,39 +8596,14 @@ msgstr "Achterzijde" msgid "Random" msgstr "Willekeurig" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8761,12 +8636,6 @@ msgstr "" "Dit is het aantal lussen voor de skirt. 0 betekent dat de skirt is " "uitgeschakeld." -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8785,10 +8654,11 @@ msgstr "" "Dunne opvullingen (infill) die kleiner zijn dan deze drempelwaarde worden " "vervangen door solide interne vulling (infill)." -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Lijn dikte voor interne solide vulling (infill)" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" @@ -8961,10 +8831,8 @@ msgstr "" "betekent geen specifiek filament voor ondersteuning (support) en het " "huidige filament wordt gebruikt." -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "Lijn dikte van support" msgid "Interface use loop pattern" msgstr "Luspatroon interface" @@ -9128,28 +8996,6 @@ msgstr "" "Deze instelling bepaald de afstand tussen naastliggende tree support " "knooppunten." -msgid "Adaptive layer height" -msgstr "Adaptieve laaghoogte" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "Tree support brim width" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "Tree support diameter van de takken" @@ -9162,15 +9008,11 @@ msgstr "Tree support wand lussen" msgid "This setting specify the count of walls around tree support" msgstr "Deze instelling specificeert het aantal wanden rond de tree support." -msgid "Tree support with infill" -msgstr "Tree support met vulling" +msgid "Tree support brim width" +msgstr "Tree support brim width" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"Deze instelling geeft aan of er opvulling moet worden toegevoegd in grote " -"holtes van de tree support." +msgid "The brim width around tree support. 0 means auto." +msgstr "The brim width around tree support. 0 means auto." msgid "Chamber temperature" msgstr "" @@ -9212,10 +9054,8 @@ msgstr "" "Deze G-code wordt ingevoegd wanneer filament wordt vervangen, inclusief T-" "commando's om gereedschapswissel te activeren." -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Lijn dikte voor bovenste lagen" msgid "Speed of top surface infill which is solid" msgstr "" @@ -9255,6 +9095,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "Dit is de snelheid waarmee verplaatsingen zullen worden gedaan." +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Vegen tijdens intrekken (retracting)" @@ -9371,24 +9219,6 @@ msgstr "" "negatieve waarden maken contouren kleiner. Deze functie wordt gebruikt om de " "afmetingen enigszins aan te passen wanneer objecten montageproblemen hebben." -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9659,15 +9489,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "Uitvoermap" @@ -9816,140 +9637,399 @@ msgstr "The file contains invalid vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "This OBJ file couldn't be read because it's empty." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" -msgstr "Voltooid" - -msgid "Unable to perform boolean operation on selected parts" +msgid "We would use Lidar to read the calibration result" msgstr "" -msgid "Mesh Boolean" +msgid "Prev" msgstr "" -msgid "Union" +msgid "Recalibration" msgstr "" -msgid "Difference" +msgid "Calibrate" msgstr "" -msgid "Intersection" +msgid "Finish" +msgstr "Klaar" + +msgid "Wiki" msgstr "" -msgid "Source Volume" +msgid "How to use calibration result?" msgstr "" -msgid "Tool Volume" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Subtract from" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Subtract with" +msgid "Calibration not supported" msgstr "" -msgid "selected" +msgid "Flow Dynamics" msgstr "" -msgid "Part 1" +msgid "Flow Rate" msgstr "" -msgid "Part 2" +msgid "Max Volumetric Speed" msgstr "" -msgid "Delete input" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "Send to print" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "The name cannot be empty." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Mislukt" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "Uploaden" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Plate Type" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -10008,7 +10088,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -10063,47 +10143,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" +msgstr "Voltooid" + +msgid "Send to print" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Upload to Printer Host with the following filename:" msgstr "" -msgid "Open CA certificate file" +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Uploaden" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -10221,17 +10374,27 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"Een onderdeel aftrekken\n" +"Wist je dat je de ene mesh van het andere kunt aftrekken met behulp van de " +"Negative part modifier? Op die manier kun je bijvoorbeeld gemakkelijk " +"aanpasbare gaten direct in Bambu Studio maken. Lees meer in de documentatie." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEP\n" +"Wist u dat u uw afdrukkwaliteit kunt verbeteren door een STEP-bestand te " +"slicen in plaats van een STL?\n" +"Bambu Studio ondersteunt het slicen van STEP-bestanden, waardoor de " +"resultaten vloeiender zijn dan die van een STL met een lagere resolutie. " +"Probeer het eens!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10365,591 +10528,33 @@ msgstr "" "gebruiken om de sterkte van het model te verbeteren?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" #~ msgstr "" -#~ "Het kan zijn dat de configuratie gegenereerd is een nieuwere versie van " -#~ "BambuStudio." +#~ "Gebruik slechts één wand op het vlakke bovenvlak, om meer ruimte te geven " +#~ "aan het bovenste invulpatroon" -#~ msgid "Internal Version" -#~ msgstr "Interne versie" +#~ msgid "Nozzle HRC" +#~ msgstr "Nozzle HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "Bambu Studio wordt beëindigd omdat het geheugen bijna vol is. Het kan een " -#~ "bug zijn. Meldt dit probleem alstublieft bij support." +#~ "De hardheid van de nozzle. Nul betekent geen controle op de hardheid van " +#~ "het mondstuk tijdens het slicen." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "Er is een lokalisatiefout opgetreden en Bambu Studio wordt afgesloten." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "Er is een onbekende uitzondering opgetreden in Bambu Studio : %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Het Bambu Studio-configuratiebestand is mogelijk beschadigd en kan niet " -#~ "worden geladen. Verwijder het bestand en probeer het opnieuw." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio heeft een upgrade nodig" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Kies een bestand (.gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "De versie van Bambu studio is te oud en dient te worden bijgewerkt naar " -#~ "de nieuwste versie voordat deze normaal kan worden gebruikt" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Initialisatie van Bambu Studio GUI is mislukt" - -#~ msgid "Check cloud service status" -#~ msgstr "Check cloud service status" - -#~ msgid "code" -#~ msgstr "code" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Failed to connect to cloud service" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "" -#~ "Please click on the hyperlink above to view the cloud service status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Connection to printer failed" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Please check the network connection of the printer and Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Push new filament into the extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Grab new filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Abnormal print file data: please slice again." - -#~ msgid "Task canceled." -#~ msgstr "Task canceled." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Upload task timed out. Please check the network status and try again." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Print file not found; please slice again." - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Failed to upload file to ftp. Please try again." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Check the current status of the Bambu Lab server by clicking on the link " -#~ "above." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Print file not found; please slice it again and send it for printing." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Failed to upload print file via FTP. Please check the network status and " -#~ "try again." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio is gelicentieerd onder " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio is gebaseerd op PrusaSlicer van Prusa Research, welke is " -#~ "afgeleid van Slic3r van Alessandro Ranellucci en de RepRap gemeenschap" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio is gebaseerd op PrusaSlicer van PrusaResearch en SuperSlicer " -#~ "van Merill (supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "Bambu Studio verwees ook naar enkele ideeën van Cura by Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "Er zijn veel delen van de software die afkomstig zijn van " -#~ "communitybijdragen, dus we kunnen ze niet één voor één opsommen, maar in " -#~ "plaats daarvan worden ze toegeschreven in de bijbehorende codecommentaar." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "Laaghoogte is te groot\n" -#~ "Teruggezet naar 0.2mm" - -#~ msgid "Layer Time (s)" -#~ msgstr "Layer Time (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicting objects further (%s <-> %s)." - -#~ msgid "Report issue" -#~ msgstr "Report issue" - -#~ msgid "Show &Overhang" -#~ msgstr "Show &Overhang" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Show object overhang highlight in 3D scene" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initialization failed (Device connection not ready)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "Er draait nog een virtuele camera.\n" -#~ "Bambu Studio ondersteunt slechts één virtuele camera.\n" -#~ "Wil je deze virtuele camera stoppen?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Switch to 3mf model files." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "No files [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Load failed [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Do you want to delete the file '%s' from printer?" - -#~ msgid "Delete file" -#~ msgstr "Delete file" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Fetching model information..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Failed to fetch model infomation from printer." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Failed to parse model infomation" - -#~ msgid "Immediately score" -#~ msgstr "Immediately score" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Please give a score for your favorite Bambu Market model." - -#~ msgid "Score" -#~ msgstr "Score" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "De 3mf is gegenereerd door een oude versie van Bambu Studio, enkel de " -#~ "geometriegegevens werden geladen." - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "De \"Fix Model\" functie is momenteel alleen op Windows. Repareer het " -#~ "model in Bambu Studio (Windows) of CAD-software." - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Koppel bestanden aan Bambu Studio" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Koppel .3mf-bestanden aan Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "" -#~ "Indien ingeschakeld, wordt Bambu Studio ingesteld als de " -#~ "standaardtoepassing om .3mf-bestanden te openen" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Koppel .stl-bestanden aan Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "" -#~ "Indien ingeschakeld, wordt Bambu Studio ingesteld als de " -#~ "standaardtoepassing om .stl-bestanden te openen" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Koppel .step/.stp bestanden aan Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "" -#~ "Indien ingeschakeld, wordt Bambu Studio ingesteld als de " -#~ "standaardtoepassing om .step-bestanden te openen" - -#~ msgid "Online Models" -#~ msgstr "Online Models" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Show online staff-picked models on the home page" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Skip AMS blacklist check" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Enable SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Enable SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internal developer mode" - -#~ msgid "Incompatible" -#~ msgstr "Incompatible" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Same as Global Plate Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA Plate" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Kan geen verbinding maken met de printer" - -#~ msgid "Error code" -#~ msgstr "Error code" - -#~ msgid "Check the status of current system services" -#~ msgstr "Check the status of current system services" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Printer local connection failed; please try again." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "The name length exceeds the limit." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "De printer moet zich in hetzelfde LAN bevinden als Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Failed to create socket" - -#~ msgid "Failed to connect socket" -#~ msgstr "Failed to connect socket" - -#~ msgid "Failed to publish login request" -#~ msgstr "Failed to publish login request" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout getting ticket from device" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout getting ticket from server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Failed to post ticket to server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Failed to parse login report reason" - -#~ msgid "Receive login report timeout" -#~ msgstr "Receive login report timeout" - -#~ msgid "Check the reason" -#~ msgstr "Check the reason" - -#~ msgid "Read and accept" -#~ msgstr "Read and accept" - -#~ msgid "Terms and Conditions" -#~ msgstr "Terms and Conditions" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "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 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." - -#~ msgid "and" -#~ msgstr "and" - -#~ msgid "Privacy Policy" -#~ msgstr "Privacy Policy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "We ask for your help to improve everyone's printer" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Statement about User Experience Improvement Program" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "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 same principle and uses machine learning to improve its performance " -#~ "from the 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." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Statement on User Experience Improvement Plan" - -#~ msgid "Post-processing scripts" -#~ msgstr "Post-processing scripts" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Plate" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "" -#~ "Klik op OK om de netwerkplug-in bij te werken wanneer Bambu Studio de " -#~ "volgende keer wordt gestart." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Nieuwe versie van Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "" -#~ "Stap 1, bevestig dat Bambu Studio en uw printer zich in hetzelfde LAN " -#~ "bevinden." - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "Het kopieeren van map %1% naar %2% is mislukt: %3%" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "The following object(s) have an empty initial layer and can't be printed. " -#~ "Please cut the bottom or enable supports." - -#~ msgid "Bridge direction" -#~ msgstr "Richting van de brug" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Use only one wall on the first layer of models" - -#~ msgid "Line width of outer wall" -#~ msgstr "Lijn dikte van buitenste wand" - -#~ msgid "Max Radius" -#~ msgstr "Maximale radius" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Maximale spelingsradius rond extruder. Wordt gebruikt om botsingen te " -#~ "voorkomen bij het afdrukken op basis van objecten." - -#~ msgid "Object flow ratio" -#~ msgstr "Object flow ratio" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "The flow ratio set by object; the meaning is the same as flow ratio." - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "Standaard lijn breedte als een lijn breedte is ingesteld op 0" - -#~ msgid "Line width of initial layer" -#~ msgstr "Laag dikte voor eerste laag" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximum length of sparse infill anchor" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "This connects a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. Bambu Studio 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. Set this parameter to zero to disable anchoring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (not anchored)" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Lijn dikte voor interne dunne vulling (infill)" - -#~ msgid "Line width of inner wall" -#~ msgstr "Lijn dikte voor binnenste wand" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "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 via the absolute path to the G-code " -#~ "file as the first argument, and variables of settings can also be read" - -#~ msgid "Z Hop Type" -#~ msgstr "Z Hop Type" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Lijn dikte voor interne solide vulling (infill)" - -#~ msgid "Line width of support" -#~ msgstr "Lijn dikte van support" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "The brim width around tree support. 0 means auto." - -#~ msgid "Line width for top surfaces" -#~ msgstr "Lijn dikte voor bovenste lagen" - -#~ msgid "Finish" -#~ msgstr "Klaar" - -#~ msgid "Failed" -#~ msgstr "Mislukt" - -#~ msgid "Plate Type" -#~ msgstr "Plate Type" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Een onderdeel aftrekken\n" -#~ "Wist je dat je de ene mesh van het andere kunt aftrekken met behulp van " -#~ "de Negative part modifier? Op die manier kun je bijvoorbeeld gemakkelijk " -#~ "aanpasbare gaten direct in Bambu Studio maken. Lees meer in de " -#~ "documentatie." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP\n" -#~ "Wist u dat u uw afdrukkwaliteit kunt verbeteren door een STEP-bestand te " -#~ "slicen in plaats van een STL?\n" -#~ "Bambu Studio ondersteunt het slicen van STEP-bestanden, waardoor de " -#~ "resultaten vloeiender zijn dan die van een STL met een lagere resolutie. " -#~ "Probeer het eens!" +#~ "Dit maakt het mogelijk om het overhangpercentage ten opzichte van de " +#~ "lijnbreedte te detecteren en gebruikt verschillende snelheden om af te " +#~ "drukken. Voor 100%% overhang wordt de brugsnelheid gebruikt." #~ msgid "Pause Print" #~ msgstr "Pause Print" @@ -10960,12 +10565,18 @@ msgstr "" #~ msgid "Delete Pause Print" #~ msgstr "Delete Pause Print" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Factoren van dynamische flow cali" + #~ msgid "\\u2103" #~ msgstr "\\ u2103" #~ msgid "mm\\u00B3" #~ msgstr "mm\\u00B3" +#~ msgid "Flow Calibration" +#~ msgstr "Flow calibratie" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -10988,6 +10599,9 @@ msgstr "" #~ msgid "0%" #~ msgstr "0%" +#~ msgid "3D Models" +#~ msgstr "3D Modellen" + #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materiaal instellingen" @@ -11008,9 +10622,15 @@ msgstr "" #~ msgid "Actual Volume = Flushing Volume * Multiplier" #~ msgstr "Werkelijk volume = spoelvolume * vermenigvuldigingsfactor" +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptieve laaghoogte" + #~ msgid "Add Custom Printer" #~ msgstr "Aangepaste printer toevoegen" +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" + #~ msgid "" #~ "An object is layed over the boundary of plate.\n" #~ "Please solve the problem by moving it totally inside or outside plate." @@ -11037,6 +10657,9 @@ msgstr "" #~ "uitgeschakeld. Dit kan bij snel printen de kwaliteit van overhangende " #~ "oppervlakken verminderen.\n" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Monteer de geselecteerde onderdelen tot een enkel onderdeel" + #~ msgid "Auto arrange" #~ msgstr "Automatisch rangschikken" @@ -11085,6 +10708,12 @@ msgstr "" #~ "filament. Hierdoor kan de nozzle verstopt raken en kan het printen " #~ "mislukken" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Minimale bodem dikte" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Aantal gesloten bodem lagen" + #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." @@ -11131,6 +10760,15 @@ msgstr "" #~ msgid "Comsumption" #~ msgstr "Verbruik" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Confirm whether the filament has been extruded" + +#~ msgid "Cool Plate" +#~ msgstr "Cool (koud) printbed" + +#~ msgid "Cool plate" +#~ msgstr "Cool (koud) printbed" + #~ msgid "Creating" #~ msgstr "Bezig met creëren" @@ -11166,6 +10804,23 @@ msgstr "" #~ "Ja - Arachne inschakelen en overhangvertraging uitschakelen\n" #~ "Nee - Arachne niet gebruiken voor deze afdruk" +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "De verbinding met printer [%s] is verbroken omdat de LAN-modus is " +#~ "uitgeschakeld. Sluit de printer opnieuw aan door in te loggen met uw " +#~ "gebruikersaccount." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "De verbinding met printer [%s] is verbroken omdat de LAN-modus is " +#~ "ingeschakeld. Sluit de printer opnieuw aan door de toegangscode in te " +#~ "voeren die u op het scherm van de printer kunt vinden." + #~ msgid "Display printable box" #~ msgstr "Toon printbare box" @@ -11221,6 +10876,9 @@ msgstr "" #~ msgid "Downloading Bambu Network plug-in" #~ msgstr "Bambu Netwerk Plug-in downloaden" +#~ msgid "Dump video" +#~ msgstr "Video verwijderen" + #~ msgid "Edit plate setitngs" #~ msgstr "Edit plate settings" @@ -11237,6 +10895,9 @@ msgstr "" #~ "Houd er rekening mee dat deze optie alleen van kracht is als er geen " #~ "prime-toren is gegenereerd op het huidige printbed." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate (technisch printbed)" + #~ msgid "Enter a search term" #~ msgstr "Voer een zoekterm in" @@ -11284,12 +10945,27 @@ msgstr "" #~ "Kan geen verbinding maken met de printer via LAN. Voer het juiste IP-" #~ "adres en de juiste toegangscode van de printer in." +#~ msgid "Failed to get ticket" +#~ msgstr "Het is niet gelukt om een ticket te verkrijgen" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Failed to parse login report reason" +#~ msgid "Failed uploading print file" +#~ msgstr "Uploaden van het printbestand is mislukt" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "Uploaden van printbestand is mislukt. Voer het IP-adres opnieuw in." +#~ msgid "Failure of bind" +#~ msgstr "Koppeling mislukt" + +#~ msgid "Failure of printer login" +#~ msgstr "Fout bij inloggen op printer" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Feed new filament from external spool" + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -11353,6 +11029,9 @@ msgstr "" #~ msgid "Filaments Selection" #~ msgstr "Filaments selectie" +#~ msgid "Filaments replace" +#~ msgstr "Backup Filament" + #~ msgid "Fix model locally" #~ msgstr "Repareer model lokaal" @@ -11439,6 +11118,12 @@ msgstr "" #~ msgid "Initialize failed [%d]!" #~ msgstr "Het initialiseren is mislukt [%d]!" +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "Initialisatie is mislukt (niet ondersteund door de printer)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Initialisatie mislukt (niet ondersteund in alleen LAN-modus)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "" #~ "Initialisatie is mislukt (niet ondersteund zonder externe videotunnel)!" @@ -11475,6 +11160,9 @@ msgstr "" #~ msgid "Layer Time(log): " #~ msgstr "Laagtijd (logboek):" +#~ msgid "Layer Time (log)" +#~ msgstr "Laagtijd (logboek)" + #~ msgid "Layers: %d/%d" #~ msgstr "Lagen: %d/%d" @@ -11484,6 +11172,9 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Lagen: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Lagen en perimeters" + #~ msgid "Leaving Seam painting" #~ msgstr "Naad schilderen verlaten" @@ -11496,6 +11187,9 @@ msgstr "" #~ msgid "Management" #~ msgstr "Management" +#~ msgid "Manual" +#~ msgstr "Handmatig" + #~ msgid "Max travel detour distance" #~ msgstr "Maximale afstand voor printpad omleiding" @@ -11506,6 +11200,12 @@ msgstr "" #~ "Maximale omleidingsafstand om beweging over muren te vermijden. Als de " #~ "afstand groter is dan deze waarde, is er geen omleiding." +#~ msgid "Media" +#~ msgstr "Media" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "LAN-IP van de printer ontbreekt!" + #~ msgid "Modify" #~ msgstr "Aanpassen" @@ -11521,14 +11221,30 @@ msgstr "" #~ msgid "NO AMS" #~ msgstr "GEEN AMS" +#~ msgid "No files" +#~ msgstr "Geen bestanden" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Niet toegankelijk in LAN-only modus!" + #~ msgid "Not supported." #~ msgstr "Niet ondersteund." +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Niet ondersteund door dit model printer!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" #~ "Opmerking: De locatie van IP en toegangscode op de machine zijn als volgt:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Eén object heeft een lege eerste laag en kan niet geprint worden. Knip " +#~ "een stuk van de bodem van het object of genereer support." + #~ msgid "Open &PrusaSlicer" #~ msgstr "Open &PrusaSlicer" @@ -11597,6 +11313,9 @@ msgstr "" #~ msgid "Please fill report first." #~ msgstr "Gelieve eerst het rapport in te vullen." +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Log uit en log opnieuw in op de printer." + #~ msgid "Please upgrade your printer first" #~ msgstr "Upgrade eerst uw printer" @@ -11632,6 +11351,9 @@ msgstr "" #~ "Deze optie maakt het mogelijk om een toren te printen om materiaal in de " #~ "nozzle te primen na het overschakelen naar een nieuw materiaal." +#~ msgid "Print file not found, please slice again" +#~ msgstr "Print bestand niet gevonden, opnieuw slicen a.u.b." + #~ msgid "Printer Selection" #~ msgstr "Printer selectie" @@ -11640,6 +11362,9 @@ msgstr "" #~ "De printerfirmware biedt geen ondersteuning voor material = > AMS-" #~ "sleuftoewijzing." +#~ msgid "Printing List" +#~ msgstr "Print lijst" + #~ 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 " @@ -11702,9 +11427,21 @@ msgstr "" #~ msgid "Select Bed Type" #~ msgstr "Selecteer bedtype" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Verzenden naar de printer is mislukt. Probeer het opnieuw." + #~ msgid "Sending" #~ msgstr "Verzenden" +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "G-codebestand verzenden via cloudservice" + +#~ msgid "Set Printable" +#~ msgstr "Instellen als printbaar" + +#~ msgid "Set Unprintable" +#~ msgstr "Instellen als niet printbaar" + #~ msgid "Set pen size" #~ msgstr "Selecteer pen formaat" @@ -11876,6 +11613,13 @@ msgstr "" #~ "heeft geprobeerd om het te repareren, maar misschien wilt u de resultaten " #~ "controleren of het invoerbestand repareren en het opnieuw proberen." +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "Het afdrukbestand overschrijdt de maximale grootte (1 GB). Vereenvoudig " +#~ "het model en slice opnieuw" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11894,6 +11638,9 @@ msgstr "" #~ "hetzelfde type als de momenteel geselecteerde fysieke printer. Het is " #~ "raadzaam om opnieuw te slicen door hetzelfde printertype te selecteren.\n" +#~ msgid "The region parameter is incorrrect" +#~ msgstr "De regioparameter is onjuist." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11922,6 +11669,13 @@ msgstr "" #~ "om filament te besparen en de print tijd te verkorten. De kleuren van de " #~ "objecten worden gemengd als resultaat" +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Deze instelling geeft aan of er opvulling moet worden toegevoegd in grote " +#~ "holtes van de tree support." + #~ 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, " @@ -11938,15 +11692,33 @@ msgstr "" #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse zonder toolhead" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Minimale dikte van de toplaag" + +#~ msgid "Top Solid Layers" +#~ msgstr "Aantal solide bovenste lagen" + #~ msgid "Translation" #~ msgstr "Vertaling" +#~ msgid "Tree support with infill" +#~ msgstr "Tree support met vulling" + #~ msgid "Unable to connect printer" #~ msgstr "Kan printer niet verbinden" #~ msgid "Unable to create zip file" #~ msgstr "Kan het zip-bestand niet aanmaken" +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "Time-out tijdens het uploaden van de taak. Controleer of er een " +#~ "netwerkprobleem is en probeer het opnieuw" + +#~ msgid "User authorization timeout" +#~ msgstr "Timeout voor gebruikersautorisatie" + #~ msgid "User pause" #~ msgstr "Pauze door de gebruiker" @@ -11996,6 +11768,9 @@ msgstr "" #~ "raden we de volgende instellingen aan:\n" #~ "0 op z afstand, 0 interface-afstand, concentrisch patroon." +#~ msgid "Wrong Access code" +#~ msgstr "Verkeerde toegangscode" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -12045,6 +11820,9 @@ msgstr "" #~ " bevindt zich te dichtbij andere objecten, er zullen botsingen optreden " #~ "tijdens het printen.\n" +#~ msgid " plate %1%:" +#~ msgstr " printbed %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr "" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index fbad64864..48e1d6374 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -534,8 +534,8 @@ msgstr "Oidentifierad" msgid "%1% was replaced with %2%" msgstr "%1% ersättes med %2%" -msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "" +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "Konfigurationen kan skapas av en nyare version av Bambu Studio." msgid "Some values have been replaced. Please check them:" msgstr "Några värde har ersatts. Kontrollera dem:" @@ -561,29 +561,45 @@ msgstr "" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "Intern version" + +msgid "Version" +msgstr "Version" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 "" +"Bambu Studio har slut på minne och kommer att stängas. Det kan vara en bug. " +"Rapportera problemet till Bambu Lab Teamet." msgid "Fatal error" msgstr "Allvarligt fel" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" +"Ett lokaliserings fel uppstod, Bambu Studio stängs ner. Rapportera till " +"Bambu Lab Teamet." msgid "Critical error" msgstr "Kritiskt fel" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "Bambu Studio har ett ohanterat undantag: %1%" + +msgid "Untitled" +msgstr "Ej namngiven" msgid "Downloading Bambu Network Plug-in" msgstr "Nedladdning av Bambu Network Plug-in" +msgid "Login information expired. Please login again." +msgstr "Inloggningsinformationen har löpt ut. Logga in igen." + msgid "Incorrect password" msgstr "Felaktigt lösenord" @@ -592,9 +608,11 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "Det gick inte att ansluta %s! [SN: %s, kod=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" +"Konfigurationsfilen för Bambu Studio kan vara skadad och går inte att " +"avläsa. Radera filen och försök igen." #, c-format, boost-format msgid "" @@ -614,8 +632,8 @@ msgstr "Konfigurationen laddas" msgid "Click to download new version in default browser: %s" msgstr "Tryck på ladda ner ny version ifrån standard webbläsaren: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "Orca Slicer behöver uppdateras" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio behöver uppdateras" msgid "This is the newest version." msgstr "Det är den senaste versionen." @@ -638,8 +656,8 @@ msgstr "Välj en fil (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Välj en eller flera filer (3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "Välj en fil (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "Några inställningar har ändrats." @@ -662,15 +680,12 @@ msgid "Open Project" msgstr "Öppna Projekt" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"Versionen av Orca Slicer är för låg och behöver uppdateras till den senaste " +"Versionen av Bambu studio är för låg och behöver uppdateras till den senaste " "versionen innan den kan användas normalt" -msgid "Login information expired. Please login again." -msgstr "Inloggningsinformationen har löpt ut. Logga in igen." - msgid "Privacy Policy Update" msgstr "Uppdatering av integritetspolicy" @@ -722,8 +737,8 @@ msgstr "Öppna" msgid "Rename" msgstr "Döp om" -msgid "Orca Slicer GUI initialization failed" -msgstr "Orca Slicer GUI-initiering misslyckades" +msgid "Bambu Studio GUI initialization failed" +msgstr "Bambu Studio GUI-initiering misslyckades" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -750,18 +765,6 @@ msgstr "Hastighet" msgid "Strength" msgstr "Styrka" -msgid "Top Solid Layers" -msgstr "Massiva Top Lager" - -msgid "Top Minimum Shell Thickness" -msgstr "Minsta Top Skal Tjocklek" - -msgid "Bottom Solid Layers" -msgstr "Massiva Botten Lager" - -msgid "Bottom Minimum Shell Thickness" -msgstr "Minsta Botten Skal Tjocklek" - msgid "Ironing" msgstr "Strykning" @@ -819,18 +822,6 @@ msgstr "Redigera text" msgid "Load..." msgstr "Ladda..." -msgid "Orca Cube" -msgstr "" - -msgid "3DBenchy" -msgstr "" - -msgid "Autodesk FDM Test" -msgstr "" - -msgid "Voron Cube" -msgstr "" - msgid "Cube" msgstr "Kub" @@ -840,6 +831,18 @@ msgstr "Cylinder" msgid "Cone" msgstr "Kon" +msgid "Bambu Cube" +msgstr "" + +msgid "Bambu Cube V2" +msgstr "" + +msgid "3DBenchy" +msgstr "" + +msgid "ksr FDMTest" +msgstr "" + msgid "Height range Modifier" msgstr "Modifierare av höjd intervall" @@ -855,13 +858,6 @@ msgstr "Ställ in som ett enskilt objekt" msgid "Set as individual objects" msgstr "Ställ in som enskilda objekt" -msgid "Fill bed with copies" -msgstr "Fyll byggplattan med kopior" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "" -"Fyll det återstående området av byggytan med kopior av det valda objektet" - msgid "Printable" msgstr "Utskriftsbar" @@ -941,8 +937,11 @@ msgstr "Montera de valda objekten till ett objekt med multipla delar" msgid "Assemble the selected objects to an object with single part" msgstr "Montera de valda objekten till ett objekt med en enda del" -msgid "Assemble the selected parts to a single part" -msgstr "Montera den valda delen till en enda del" +msgid "Mesh boolean" +msgstr "" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "" msgid "Along X axis" msgstr "Längs med X Axis" @@ -1061,18 +1060,22 @@ msgstr "Välj Filament för valda delar" msgid "current" msgstr "nuvarande" -msgid "Set Unprintable" -msgstr "Ange ej utskrivbar" - -msgid "Set Printable" -msgstr "Ange utskrivbar" - msgid "Unlock" msgstr "Lås upp" msgid "Lock" msgstr "Lås" +msgid "Fill bed with copies" +msgstr "Fyll byggplattan med kopior" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "" +"Fyll det återstående området av byggytan med kopior av det valda objektet" + +msgid "Edit Plate Name" +msgstr "" + msgid "Name" msgstr "Namn" @@ -1130,6 +1133,9 @@ msgstr "Laddar fil" msgid "Error!" msgstr "Fel!" +msgid "Failed to get the model data in the current file." +msgstr "" + msgid "Generic" msgstr "Allmän" @@ -1319,15 +1325,6 @@ msgstr "Kopiering av flertalet celler stöds ej" msgid "Outside" msgstr "Utsida" -msgid "Auto" -msgstr "Auto" - -msgid "Manual" -msgstr "Manuell" - -msgid "No-brim" -msgstr "Ingen Brim" - msgid " " msgstr "" @@ -1343,6 +1340,21 @@ msgstr "Ifyllnads densitet(%)" msgid "Auto Brim" msgstr "Auto Brim" +msgid "Auto" +msgstr "Auto" + +msgid "Outer brim only" +msgstr "Endast yttre brim" + +msgid "Inner brim only" +msgstr "Endast inre kant" + +msgid "Outer and inner brim" +msgstr "Yttre och inre brim" + +msgid "No-brim" +msgstr "Ingen Brim" + msgid "Outer wall speed" msgstr "Ytterväggs hastighet" @@ -1448,6 +1460,33 @@ msgstr "Ingen skrivare" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "Uppkoppling till servern misslyckades" + +msgid "Check cloud service status" +msgstr "Kontrollera molntjänstens status" + +msgid "code" +msgstr "kod" + +msgid "Failed to connect to cloud service" +msgstr "Det gick inte att ansluta till molntjänsten" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "Klicka på hyperlänken ovan för att se molntjänstens status" + +msgid "Failed to connect to the printer" +msgstr "Uppkoppling till printern misslyckades" + +msgid "Connection to printer failed" +msgstr "Anslutning till skrivaren misslyckades" + +msgid "Please check the network connection of the printer and Studio." +msgstr "Kontrollera nätverksanslutningen för skrivaren och Studio." + +msgid "Connecting..." +msgstr "Sammankopplar..." + msgid "?" msgstr " ?" @@ -1457,8 +1496,8 @@ msgstr "Tom" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS filament backup" +msgid "Auto Refill" +msgstr "" msgid "AMS not connected" msgstr "AMS ej ansluten" @@ -1514,11 +1553,11 @@ msgstr "Mata in nytt filament i extrudern" msgid "Purge old filament" msgstr "Rensa gammalt filament" -msgid "Feed new filament from external spool" -msgstr "Mata in nytt filament från extern spole" +msgid "Push new filament into the extruder" +msgstr "Mata nytt filament till extruder" -msgid "Confirm whether the filament has been extruded" -msgstr "Bekräfta om filamentet har extruderats" +msgid "Grab new filament" +msgstr "Ta ett nytt filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1621,56 +1660,61 @@ msgstr "Loggar in" msgid "Login failed" msgstr "Inloggning misslyckades" -msgid "The region parameter is incorrrect" -msgstr "Region parametern är felaktig." - -msgid "Failure of printer login" -msgstr "Fel i inloggningen till skrivaren" - -msgid "Failed to get ticket" -msgstr "Misslyckades med att få en kvittering" - -msgid "User authorization timeout" -msgstr "Timeout för användarauktorisering" - -msgid "Failure of bind" -msgstr "Fel vid sammankoppling" - -msgid "Unknown Failure" -msgstr "Okänt fel" - msgid "Please check the printer network connection." msgstr "Kontrollera skrivarens nätverksanslutning." -msgid "Abnormal print file data. Please slice again" -msgstr "Onormal utskrifts fil data. Vänligen bered igen" +msgid "Abnormal print file data. Please slice again." +msgstr "Onormal utskrifts fil data: Vänligen bered igen." -msgid "Task canceled" -msgstr "Uppgift avbruten" +msgid "Task canceled." +msgstr "Uppgiften avbruten." -msgid "Upload task timed out. Please check the network problem and try again" +msgid "Upload task timed out. Please check the network status and try again." msgstr "" -"Uppladdningsuppgiften tog timeout. Kontrollera nätverksproblemet och försök " -"igen" +"Uppladdningsuppgiften tog slut. Kontrollera nätverksstatusen och försök igen." msgid "Cloud service connection failed. Please try again." msgstr "Anslutningen till molntjänsten misslyckades. Försök igen." -msgid "Print file not found, please slice again" -msgstr "Det gick inte att hitta utskrifts filen, vänligen bered igen" +msgid "Print file not found. please slice again." +msgstr "Det gick inte att hitta utskrifts filen; bered den igen" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"model and slice again." msgstr "" "Utskrifts filen överskrider den högsta tillåtna storleken (1 GB). Förenkla " "modellen och bered igen" -msgid "Failed uploading print file" -msgstr "Uppladdning av utskrifts filen misslyckades" +msgid "Failed to send the print job. Please try again." +msgstr "Det gick inte att skicka utskriftsjobbet. Var god försök igen." -msgid "Wrong Access code" -msgstr "Fel åtkomstkod" +msgid "Failed to upload file to ftp. Please try again." +msgstr "Det gick inte att ladda upp filen till ftp. Vänligen försök igen." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "" +"Kontrollera den aktuella statusen för Bambu Lab servern genom att klicka på " +"länken ovan." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"Storleken på utskrifts filen är för stor. Vänligen justera filstorleken och " +"försök igen." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "" +"Utskrifts filen hittades inte; bered den igen och skicka till utskrift." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Det gick inte att ladda upp utskriftsfilen via FTP. Kontrollera " +"nätverksstatusen och försök igen." msgid "Sending print job over LAN" msgstr "Skicka utskriftsjobb via LAN" @@ -1692,24 +1736,16 @@ msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om %s s" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "Ett Micro SD-kort måste sättas i innan utskrift via LAN." -msgid "Failed to send the print job. Please try again." -msgstr "Det gick inte att skicka utskriftsjobbet. Var god försök igen." - -msgid "Send to Printer failed. Please try again." -msgstr "Det gick inte att skicka till skrivaren. Var god försök igen." - -msgid "No space left on Printer SD card" -msgstr "" - msgid "Sending gcode file over LAN" msgstr "Skickar G-kod fil över LAN" -msgid "Sending gcode file through cloud service" -msgstr "Skickar G-kod filen via molntjänsten" - msgid "Sending gcode file to sdcard" msgstr "Skickar G-kod fil till MicroSD-kort" @@ -1720,9 +1756,6 @@ msgstr "Framgångsrikt skickat. Stäng den aktuella sidan i %s s" msgid "An SD card needs to be inserted before sending to printer." msgstr "Ett Micro SD-kort måste sättas i innan det skickas till skrivaren." -msgid "Please log out and login to the printer again." -msgstr "Logga ut och logga in på skrivaren igen." - msgid "Choose SLA archive:" msgstr "Välj SLA arkiv:" @@ -1807,17 +1840,18 @@ msgstr "Upphovsrätt" msgid "License" msgstr "Licens" -msgid "Orca Slicer is licensed under " -msgstr "Orca Slicer är licensierad under " +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio är licensierad under " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, version 3" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu Studio är baserad på PrusaSlicer av Prusa Research, som är från Slic3r " +"av Alessandro Ranellucci och RepRap-communityn" msgid "Libraries" msgstr "Bibliotek" @@ -1833,14 +1867,12 @@ msgstr "" msgid "About %s" msgstr "Om %s" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu Studio är baserad på PrusaSlicer av PrusaResearch och SuperSlicer av " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -1853,8 +1885,17 @@ msgstr "" "Slic3r skapades av Alessandro Ranellucci med hjälp av många andra " "medarbetare." -msgid "Version" -msgstr "Version" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu Studio refererar även några idéer från Cura av Ultimaker." + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"Det finns många delar av programvaran som kommer ifrån bidrag av " +"communityn , så vi kan inte lista dem en och en, utan de kommer istället att " +"anges i motsvarande kod kommentarer." msgid "AMS Materials Setting" msgstr "AMS Material Inställning" @@ -1891,8 +1932,11 @@ msgstr "SN" msgid "Setting AMS slot information while printing is not supported" msgstr "Inställning av AMS-facks information under utskrift stöds inte" -msgid "Factors of dynamic flow cali" -msgstr "Faktorer för dynamiskt flödeskallibrering" +msgid "Factors of Flow Dynamics Calibration" +msgstr "" + +msgid "PA Profile" +msgstr "" msgid "Factor K" msgstr "Faktor K" @@ -1906,15 +1950,15 @@ msgstr "Inställning av information om virtuell plats under utskrift stöds inte msgid "Are you sure you want to clear the filament information?" msgstr "Är du säker på att du vill rensa filament informationen?" +msgid "You need to select the material type and color first." +msgstr "Du måste först välja materialtyp och färg." + msgid "Please input a valid value (K in 0~0.5)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5, N i 0,6 ~ 2,0)" -msgid "You need to select the material type and color first." -msgstr "Du måste först välja materialtyp och färg." - msgid "Other Color" msgstr "Annan färg" @@ -2078,12 +2122,21 @@ msgstr "Skriv ut med filament i AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Skriv ut med filament på en extern spole" -msgid "Filaments replace" -msgstr "Reserv filament" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" msgid "Group" msgstr "Grupp" +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 "" + msgid "AMS Settings" msgstr "AMS Inställningar" @@ -2381,6 +2434,13 @@ msgstr "" "För liten lagerhöjd.\n" "Den har återställts till 0.2" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "" +"För stor lagerhöjd.\n" +"Den har återställts till 0.2" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2598,6 +2658,28 @@ msgstr "Uppdatering misslyckades." msgid "Failed to start printing job" msgstr "Det gick inte att starta utskriftsjobbet" +msgid "Invalid nozzle diameter" +msgstr "" + +msgid "Calibration error" +msgstr "" + +msgid "TPU is not supported by AMS." +msgstr "" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "" + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" + msgid "default" msgstr "standard" @@ -2656,9 +2738,6 @@ msgstr "Verktyg" msgid "Layer Time" msgstr "Lager tid" -msgid "Layer Time (log)" -msgstr "Lagertid (logg)" - msgid "Height: " msgstr "Höjd: " @@ -2743,6 +2822,9 @@ msgstr "Temperatur (°C)" msgid "Volumetric flow rate (mm³/s)" msgstr "Volymetrisk flödeshastighet (mm³/s)" +msgid "Layer Time (s)" +msgstr "Lagertid (s)" + msgid "Used filament" msgstr "Använt filament" @@ -2964,9 +3046,11 @@ msgstr "Storlek:" #, c-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)." +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." msgstr "" +"Konflikter i g-kodens banor har hittats i lager %d. Separera de motstridiga " +"objekten ytterligare (%s<->%s)." msgid "An object is layed over the boundary of plate." msgstr "Ett objekt är placerad över byggplattans begränsningar." @@ -3095,6 +3179,9 @@ msgstr "Nej" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "avslutas innan en ny modell skapas. Vill du fortsätta?" +msgid "Upload" +msgstr "" + msgid "Slice plate" msgstr "Bered plattan" @@ -3137,6 +3224,9 @@ msgstr "Visa Konfigurations Mapp" msgid "Show Tip of the Day" msgstr "Visa dagens tips" +msgid "Report issue" +msgstr "Rapportera problem" + msgid "Check for Update" msgstr "Sök efter Uppdatering" @@ -3335,6 +3425,12 @@ msgstr "Visa & Etiketter" msgid "Show object labels in 3D scene" msgstr "Visa objekt etiketter i 3D-scenen" +msgid "Show &Overhang" +msgstr "Visa & Överhäng" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Visa objektets överhäng i 3D-scen" + msgid "Preferences" msgstr "Inställningar" @@ -3368,9 +3464,6 @@ msgstr "" msgid "Retraction test" msgstr "" -msgid "Orca Tolerance Test" -msgstr "" - msgid "Max flowrate" msgstr "" @@ -3389,9 +3482,6 @@ msgstr "" msgid "More calibrations" msgstr "" -msgid "3D Models" -msgstr "3D-modeller" - msgid "&Open G-code" msgstr "&Öppna G-kod" @@ -3502,30 +3592,30 @@ msgstr "Synkronisering" msgid "Initialize failed (No Device)!" msgstr "Start misslyckad (Ingen Enhet)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initieringen misslyckades (Enhets anslutningen är inte klar)!" + msgid "Initialize failed (No Camera Device)!" msgstr "Initieringen misslyckades (ingen kamera enhet)!" -msgid "Initializing..." -msgstr "Startar..." - -msgid "Loading..." -msgstr "Laddar..." - -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initieringen misslyckades (stöds inte i LAN-läge)!" - -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initieringen misslyckades (Ej tillgängligt i endast LAN-läge)!" - msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" "Skrivaren är upptagen med att ladda ner; vänta tills nedladdningen är klar." +msgid "Loading..." +msgstr "Laddar..." + +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "" + +msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgstr "Initieringen misslyckades (Ej tillgängligt i endast LAN-läge)!" + msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "Initieringen misslyckades (skrivarens LAN-IP saknas)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "Initieringen misslyckades (stöds inte av skrivaren)!" +msgid "Initializing..." +msgstr "Startar..." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3556,9 +3646,12 @@ msgstr "Ladda ner Virtuella Kamerans Verktyg" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"En annan virtuell kamera körs.\n" +"Bambu Studio stöder endast en virtuell kamera.\n" +"Vill du stoppa den här virtuella kameran?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3604,6 +3697,9 @@ msgstr "Video" msgid "Switch to video files." msgstr "Växla till video filer." +msgid "Switch to 3mf model files." +msgstr "Byt till 3mf modell filer." + msgid "Delete selected files from printer." msgstr "Ta bort valda filer från skrivaren." @@ -3622,12 +3718,6 @@ msgstr "Batch hantera filer." msgid "No printers." msgstr "Ingen printer." -msgid "Not supported by this model of printer!" -msgstr "Stöds inte av denna modell av skrivare!" - -msgid "Connecting..." -msgstr "Sammankopplar..." - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "Sammankoppling misslyckades [%d]" @@ -3635,22 +3725,45 @@ msgstr "Sammankoppling misslyckades [%d]" msgid "Loading file list..." msgstr "Laddar fil lista..." -msgid "No files" -msgstr "Inga filer" - -msgid "Not accessible in LAN-only mode!" -msgstr "Ej tillgänglig i LAN-läge!" - -msgid "Missing LAN ip of printer!" -msgstr "Saknar skrivarens LAN-IP!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "Inga filer [%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgid "Load failed [%d]" +msgstr "Inläsning misslyckades [%d]" + +#, c-format, 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?" +msgstr[0] "" +msgstr[1] "" msgid "Delete files" msgstr "Radera filer" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Vill du radera filen '%s' från skrivaren?" + +msgid "Delete file" +msgstr "Radera fil" + +msgid "Fetching model infomations ..." +msgstr "Hämtar information om modellen..." + +msgid "Failed to fetching model infomations from printer." +msgstr "Det gick inte att hämta modell information från skrivaren." + +msgid "Failed to parse model infomations." +msgstr "Det gick inte att analysera modellinformation" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Filen '%s' förlorades! Ladda ner den igen." @@ -3671,6 +3784,12 @@ msgstr "Nedladdning slutförd" msgid "Downloading %d%%..." msgstr "Laddar ner %d%%..." +msgid "Not supported on the current printer version." +msgstr "" + +msgid "Storage unavailable, insert SD card." +msgstr "" + msgid "Speed:" msgstr "Hastighet:" @@ -3692,15 +3811,6 @@ msgstr "3Dconnexion inställningar" msgid "Swap Y/Z axes" msgstr "Byta Y/Z axes" -msgid "Camera" -msgstr "Kamera" - -msgid "SD Card" -msgstr "MicroSD-kort" - -msgid "Camera Setting" -msgstr "Kamerainställning" - msgid "Printing Progress" msgstr "Utskriftsförlopp" @@ -3716,9 +3826,21 @@ msgstr "0" msgid "Layer: N/A" msgstr "Lager: N/A" +msgid "Immediately score" +msgstr "Omedelbar resultat" + msgid "Clear" msgstr "Rensa" +msgid "Camera" +msgstr "Kamera" + +msgid "SD Card" +msgstr "MicroSD-kort" + +msgid "Camera Setting" +msgstr "Kamerainställning" + msgid "Control" msgstr "Kontroll" @@ -3752,31 +3874,14 @@ msgstr "Inget MicroSD-kort" msgid "SD Card Abnormal" msgstr "MicroSD-kortet är onormalt" -msgid "Printing List" -msgstr "Utskrifts Lista" - msgid "Cancel print" msgstr "Avbryt utskrift" msgid "Are you sure you want to cancel this print?" msgstr "Är du säker på att du vill avbryta utskriften?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"Frånkopplad från skrivaren [%s] på grund av att LAN-läget är inaktiverat. " -"Vänligen återanslut skrivaren genom att logga in med ditt användarkonto." - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"Frånkopplad från skrivaren [%s] på grund av att LAN-läge är aktiverat. " -"Anslut skrivaren igen genom att ange åtkomstkoden som kan hämtas från " -"skrivar skärmen." +msgid "Done" +msgstr "Klar" msgid "Downloading..." msgstr "Laddar ner..." @@ -3792,6 +3897,12 @@ msgstr "I Moln Berednings Kön finns det %s uppgifter framför dig." msgid "Layer: %s" msgstr "Lager: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "Vänligen ge ett betyg till din favorit modell från Bambu Market." + +msgid "Score" +msgstr "Resultat" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "Lager: %d/%d" @@ -3833,24 +3944,15 @@ msgstr "Galet" msgid "Can't start this without SD card." msgstr "Kan inte starta utan MicroSD-kort." -msgid "Failed to connect to the server" -msgstr "Uppkoppling till servern misslyckades" - msgid "Status" msgstr "Status" -msgid "Media" -msgstr "Media" - msgid "Update" msgstr "Uppdatera" msgid "HMS" msgstr "HMS" -msgid "Failed to connect to the printer" -msgstr "Uppkoppling till printern misslyckades" - msgid "Don't show again" msgstr "Visa inte igen" @@ -4075,12 +4177,9 @@ msgstr "Filament inställningar" msgid "Printer settings" msgstr "Skrivarens inställningar" -msgid "Untitled" -msgstr "Ej namngiven" - #, boost-format -msgid " plate %1%:" -msgstr " platta %1%:" +msgid " plate %1%: " +msgstr "" msgid "Invalid name, the following characters are not allowed:" msgstr "Ogiltligt namn, följande tecken är inte tillåtna:" @@ -4163,9 +4262,9 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "Det finns inga kompatibla filament och synkronisering utförs inte." 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" #, boost-format @@ -4220,8 +4319,10 @@ msgstr "Ladda 3mf" msgid "The Config can not be loaded." msgstr "Konfigurationen kan inte laddas." -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" +"3mf-filen genererades i en gammal version av Bambu Studio laddar endast " +"geometri data." #, c-format, boost-format msgid "" @@ -4558,8 +4659,10 @@ msgstr "Tips:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" +"Funktionen ”Fix Model” är för närvarande bara på Windows. Reparera modellen " +"i Bambu Studio (Windows) eller CAD-program." #, c-format, boost-format msgid "" @@ -4622,9 +4725,6 @@ msgstr "Andra" msgid "Login Region" msgstr "Logga in Region" -msgid "Stealth Mode" -msgstr "" - msgid "Metric" msgstr "Metrisk" @@ -4650,12 +4750,6 @@ msgstr "Visa \"Dagens tips\" efter start" msgid "If enabled, useful hints are displayed at startup." msgstr "Om aktiverad visas användbara tips vid start." -msgid "Show g-code window" -msgstr "" - -msgid "If enabled, g-code window will be displayed." -msgstr "" - msgid "Presets" msgstr "Förinställningar" @@ -4676,26 +4770,32 @@ msgstr "Synkronisering av system" msgid "Clear my choice on the unsaved presets." msgstr "Rensa mitt val för de osparade förinställningarna." -msgid "Associate files to OrcaSlicer" -msgstr "Associerade filer till Orca Slicer" +msgid "Associate files to BambuStudio" +msgstr "Associerade filer till Bambu Studio" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "Associerade .3mf files till Orca Slicer" +msgid "Associate .3mf files to BambuStudio" +msgstr "Associerade .3mf files till Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" -msgstr "Om aktiverad, väljs Orca Slicer som standard att öppna .3mf filer" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .3mf filer" -msgid "Associate .stl files to OrcaSlicer" -msgstr "Associerade .stl filer till Orca Slicer" +msgid "Associate .stl files to BambuStudio" +msgstr "Associerade .stl filer till Bambu Studio" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" -msgstr "Om aktiverad, väljs Orca Slicer som standard att öppna .stl filer" +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .stl filer" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "Associera .step/.stp-filer till OrcaSlicer" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "Associera .step/.stp-filer till BambuStudio" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" -msgstr "Om aktiverad, väljs Orca Slicer som standard att öppna .step filer" +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .step filer" + +msgid "Online Models" +msgstr "Online modeller" + +msgid "Show online staff-picked models on the home page" +msgstr "Visa personalens utvalda modeller online på startsidan" msgid "Maximum recent projects" msgstr "Maximalt antal nyligen genomförda projekt" @@ -4730,6 +4830,12 @@ msgstr "Mörkt Läge" msgid "Enable Dark mode" msgstr "Aktivera mörkt läge" +msgid "Develop mode" +msgstr "Utvecklingsläge" + +msgid "Skip AMS blacklist check" +msgstr "Hoppa över kontrollen av AMS svarta lista" + msgid "Home page and daily tips" msgstr "Hemsida och dagliga förslag" @@ -4766,11 +4872,14 @@ msgstr "Andra" msgid "Mouse wheel reverses when zooming" msgstr "Reversera mushjulet för att zooma" -msgid "Develop mode" -msgstr "Utvecklingsläge" +msgid "Enable SSL(MQTT)" +msgstr "Aktivera SSL(MQTT)" -msgid "Dump video" -msgstr "Lämna video" +msgid "Enable SSL(FTP)" +msgstr "Aktivera SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Internt utvecklarläge" msgid "Log Level" msgstr "Logg Nivå" @@ -4856,42 +4965,39 @@ msgstr "Lägg till/Ta bort material" msgid "Add/Remove printers" msgstr "Lägg till/Ta bort skrivare" +msgid "Incompatible" +msgstr "Inkompatibel" + +msgid "The selected preset is null!" +msgstr "" + msgid "Same as Global Print Sequence" msgstr "Samma som Global Utskrifts Sekvens" msgid "Print sequence" msgstr "Utskrifts sekvens" -msgid "Plate name" -msgstr "Plattans namn" - msgid "Customize" msgstr "" -msgid "First Layer print sequence" +msgid "First layer filament sequence" msgstr "" +msgid "Same as Global Plate Type" +msgstr "Samma som Global Bed Type" + msgid "Same as Global Bed Type" msgstr "Samma som Global Bed Type" -msgid "Cool Plate" -msgstr "Cool Plate" - -msgid "Engineering Plate" -msgstr "Engineering Plate" - -msgid "High Temp Plate" -msgstr "High Temp Plate" - -msgid "Textured PEI Plate" -msgstr "Texturerad PEI-platta" - msgid "By Layer" msgstr "Per lager" msgid "By Object" msgstr "Per objekt" +msgid "Plate name" +msgstr "Plattans namn" + msgid "Accept" msgstr "Godkänn" @@ -5006,11 +5112,8 @@ msgstr "För \"%1%\", lägg till \"%2%\" som ny förinställning" msgid "Simply switch to \"%1%\"" msgstr "Byta till \"%1%\"" -msgid "Online" -msgstr "Online" - -msgid "Offline" -msgstr "Offline" +msgid "Task canceled" +msgstr "Uppgift avbruten" msgid "(LAN)" msgstr "(LAN)" @@ -5021,6 +5124,9 @@ msgstr "Min Enhet" msgid "Other Device" msgstr "Andra Enheter" +msgid "Online" +msgstr "Online" + msgid "Input access code" msgstr "Inmatning av åtkomstkod" @@ -5030,12 +5136,18 @@ msgstr "Hittar du inte enheter?" msgid "Log out successful." msgstr "Utloggning lyckades." +msgid "Offline" +msgstr "Offline" + msgid "Busy" msgstr "Upptagen" msgid "Bambu Cool Plate" msgstr "Bambu Cool Plate" +msgid "PLA Plate" +msgstr "PLA platta" + msgid "Bamabu Engineering Plate" msgstr "Bambu Engineering Plate" @@ -5051,12 +5163,24 @@ msgstr "Uppdatera" msgid "Bed Leveling" msgstr "Justering av Byggplattan" -msgid "Flow Calibration" -msgstr "Flödes Kalibrering" +msgid "Flow Dynamics Calibration" +msgstr "" + +msgid "Can't connect to the printer" +msgstr "Kan inte ansluta till skrivaren" msgid "send completed" msgstr "Skicka komplett" +msgid "Error code" +msgstr "Felkod" + +msgid "Check the status of current system services" +msgstr "Kontrollera status för aktuella systemtjänster" + +msgid "Printer local connection failed, please try again." +msgstr "Den lokala anslutningen till skrivaren misslyckades; försök igen." + msgid "No login account, only printers in LAN mode are displayed" msgstr "Inget inloggningskonto, bara skrivare i LAN-läge visas" @@ -5136,6 +5260,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Ett Micro SD-kort måste sättas i innan utskrift." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted to record timelapse." msgstr "Ett Micro SD-kort måste sättas i för att spela in en timelapse." @@ -5185,9 +5312,27 @@ msgid "" msgstr "" "Klicka på knappen Bekräfta om du fortfarande vill fortsätta med utskriften." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" + msgid "Preparing print job" msgstr "Förbereder utskriftsjobb" +msgid "Abnormal print file data. Please slice again" +msgstr "Onormal utskrifts fil data. Vänligen bered igen" + +msgid "The name length exceeds the limit." +msgstr "Namnlängden överskrider gränsen." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "" + msgid "Modifying the device name" msgstr "Ändra enhetens namn" @@ -5200,18 +5345,111 @@ msgstr "Det går inte att skicka utskriftsuppgiften när uppgraderingen pågår" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Ett MicroSD-kort måste sättas i innan du skickar till skrivaren." -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "" +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "Skrivaren måste finnas på samma LAN som Bambu Studio." msgid "The printer does not support sending to printer SD card." msgstr "Skrivaren har inte stöd för att skicka till skrivarens MicroSD kort." +msgid "Failed to create socket" +msgstr "Det gick inte att skapa uttaget" + +msgid "Failed to connect socket" +msgstr "Det gick inte att ansluta uttaget" + +msgid "Failed to publish login request" +msgstr "Det gick inte att publicera inloggningsbegäran" + +msgid "Get ticket from device timeout" +msgstr "Timeout för att hämta ärende från enhet" + +msgid "Get ticket from server timeout" +msgstr "Timeout för att hämta ärende från server" + +msgid "Failed to post ticket to server" +msgstr "Misslyckades med att skicka biljett till server" + +msgid "Failed to parse login report reason" +msgstr "Det gick inte att analysera orsaken till inloggningsrapporten" + +msgid "Receive login report timeout" +msgstr "Timeout för mottagande av inloggnings rapport" + +msgid "Unknown Failure" +msgstr "Okänt fel" + msgid "Log in printer" msgstr "Logga in skrivare" msgid "Would you like to log in this printer with current account?" msgstr "Logga in skrivaren till nuvarande konto?" +msgid "Check the reason" +msgstr "Kontrollera orsaken" + +msgid "Read and accept" +msgstr "Läs och acceptera" + +msgid "Terms and Conditions" +msgstr "Villkor och bestämmelser" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"Tack för att du har köpt en Bambu Lab enhet. Innan du använder din Bambu Lab " +"enhet ska du läsa villkoren. Genom att klicka för att godkänna användningen " +"av din Bambu Lab enhet godkänner du att följa sekretesspolicyn och " +"användningsvillkoren (gemensamt kallade \"Villkor\"). Om du inte följer " +"eller samtycker till Bambu Labs integritetspolicy ska du inte använda Bambu " +"Labs utrustning och tjänster." + +msgid "and" +msgstr "och" + +msgid "Privacy Policy" +msgstr "Integritetspolicy" + +msgid "We ask for your help to improve everyone's printer" +msgstr "Vi ber om din hjälp för att förbättra allas skrivare." + +msgid "Statement about User Experience Improvement Program" +msgstr "Uttalande om programmet för förbättring av användarupplevelsen" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"I 3D-utskrifts gemenskapen lär vi oss av varandras framgångar och " +"misslyckanden för att justera våra egna berednings parametrar och " +"inställningar. %s följer samma princip och använder maskin inlärning för att " +"förbättra sin prestanda från framgångar och misslyckanden i det stora " +"antalet utskrifter av våra användare. Vi tränar %s att bli smartare genom " +"att ge dem data från den verkliga världen. Om du är villig kommer denna " +"tjänst att få tillgång till information från dina fel- och " +"användningsloggar, som kan innehålla information som beskrivs i " +"sekretesspolicyn. Vi kommer inte att samla in några personuppgifter genom " +"vilka en person kan identifieras direkt eller indirekt, inklusive men inte " +"begränsat till namn, adresser, betalningsinformation eller telefonnummer. " +"Genom att aktivera denna tjänst godkänner du dessa villkor och uttalandet om " +"integritetspolicy." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Uttalande om plan för förbättring av användarupplevelsen" + msgid "Log in successful." msgstr "Inloggningen lyckades." @@ -5328,6 +5566,9 @@ msgstr "Väggar" msgid "Top/bottom shells" msgstr "Topp/botten skal" +msgid "Sparse infill" +msgstr "Sparsam ifyllnad" + msgid "Initial layer speed" msgstr "Hastighet på första lager" @@ -5346,12 +5587,6 @@ msgstr "" "uttrycks som en procent av linjebredden. Hastigheten 0 betyder att den inte " "minskar för överhängs gradernas område och hastigheten för väggarna används" -msgid "Bridge" -msgstr "Bridge/bro" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "Förflyttnings hastighet" @@ -5376,7 +5611,7 @@ msgstr "Special läge" msgid "G-code output" msgstr "G-kod utgång" -msgid "Post-processing Scripts" +msgid "Post-processing scripts" msgstr "Skript för efterbehandling" msgid "Frequent" @@ -5432,8 +5667,8 @@ msgstr "Nozzel" msgid "Nozzle temperature when printing" msgstr "Nozzel temperatur vid utskrift" -msgid "Cool plate" -msgstr "Kall platta" +msgid "Cool Plate / PLA Plate" +msgstr "Cool Plate / PLA Platta" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5442,8 +5677,8 @@ msgstr "" "Detta är byggplattans temperatur när Cool Plate är installerad. Värdet 0 " "betyder att filamentet inte stöder utskrift på Cool Plate." -msgid "Engineering plate" -msgstr "Engineering plate" +msgid "Engineering Plate" +msgstr "Engineering Plate" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " @@ -5452,6 +5687,9 @@ msgstr "" "Detta är byggplattans temperatur när Engineering Plate är installerad. Ett " "värde på 0 betyder att filamentet inte stöder utskrift på Engineering Plate." +msgid "High Temp Plate" +msgstr "High Temp Plate" + msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" @@ -5459,6 +5697,9 @@ msgstr "" "Detta är byggplattans temperatur när High Temp Plate är installerad. Värdet " "0 betyder att filamentet inte stöder utskrift på High Temp Plate." +msgid "Textured PEI Plate" +msgstr "Texturerad PEI-platta" + msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" @@ -5514,12 +5755,6 @@ msgstr "Filament stop G-kod" msgid "Printable space" msgstr "Utskriftsbar yta" -msgid "Cooling Fan" -msgstr "" - -msgid "Fan speed-up time" -msgstr "" - msgid "Extruder Clearance" msgstr "Extruder Frigång" @@ -5568,21 +5803,9 @@ msgstr "Jerk begränsning" msgid "Layer height limits" msgstr "Lagerhöjds begränsning" -msgid "Lift Z Enforcement" -msgstr "" - msgid "Retraction when switching material" msgstr "Reduktion vid material byte" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "" - msgid "Detached" msgstr "Fristående" @@ -6032,9 +6255,6 @@ msgstr "Gizmo SLA support punkter" msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM målad söm" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "Plätering/Förgyllning" @@ -6098,9 +6318,6 @@ msgstr "Horisontell reglage - Flytta aktivt tryck Höger" msgid "On/Off one layer mode of the vertical slider" msgstr "På/Av 1 lager läge för det vertikala reglaget" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "Flytta reglage 5x snabbare" @@ -6118,28 +6335,27 @@ msgid "Network plug-in update" msgstr "Uppdatering av nätverks plugin" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +"Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" +"Klicka på OK för att uppdatera Nätverks plugin programmet nästa gång Bambu " +"Studio startar." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "En ny nätverksplugin (%s) är tillgänglig. Vill du installera den?" -msgid "New version of Orca Slicer" -msgstr "Ny version av Orca Slicer" +msgid "New version of Bambu Studio" +msgstr "Ny version av Bambu Studio" msgid "Don't remind me of this version again" msgstr "Påminn mig inte om den här versionen igen." -msgid "Done" -msgstr "Klar" - msgid "LAN Connection Failed (Sending print file)" msgstr "LAN-anslutning misslyckades (skickar utskriftsfil)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "" +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." +msgstr "Steg 1: Bekräfta att Bambu Studio och din skrivare finns på samma LAN." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -6270,6 +6486,10 @@ msgstr "Reparation avbruten" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Kopierar fil %1% till %2% misslyckade: %3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "Kopierar katalog %1% till %2% misslyckade: %3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "Kontrollera ej sparade ändringar innan konfigureringen uppdateras." @@ -6280,11 +6500,11 @@ msgid "Open G-code file:" msgstr "Öppna G-kod fil:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "" -"Ett objekt har ett tomt första lager och kan inte skrivas ut.Skär ut botten " -"eller aktivera support." +"Följande objekt har ett tomt initiallager och kan inte skrivas ut. Vänligen " +"klipp botten eller aktivera support." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." @@ -6327,9 +6547,6 @@ msgstr "Yttre vägg" msgid "Overhang wall" msgstr "Överhängs vägg" -msgid "Sparse infill" -msgstr "Sparsam ifyllnad" - msgid "Internal solid infill" msgstr "Invändig solid fyllnad" @@ -6339,15 +6556,12 @@ msgstr "Topp yta" msgid "Bottom surface" msgstr "Botten yta" -msgid "Internal Bridge" -msgstr "" +msgid "Bridge" +msgstr "Bridge/bro" msgid "Gap infill" msgstr "Mellanrums ifyllnad" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support kontaktyta" @@ -6568,22 +6782,6 @@ msgstr "" msgid "Layer height cannot exceed nozzle diameter" msgstr "Lagerhöjden kan inte överstiga nozzel diametern" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Plate %d: %s stöder inte filamentet %s" @@ -6890,8 +7088,8 @@ msgstr "" "anger hur mycket bredden på linjen utan stöd från det nedre lagret. 0%% " "betyder tvinga kylning för all yttervägg oavsett överhängs grad." -msgid "Bridge infill direction" -msgstr "" +msgid "Bridge direction" +msgstr "Bridge riktning" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6902,12 +7100,6 @@ msgstr "" "automatiskt. Annars kommer den medföljande vinkeln att användas för extern " "bridging. Använd 180° för noll vinkel." -msgid "Bridge density" -msgstr "" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "Bridge/Brygg flöde" @@ -6926,18 +7118,10 @@ msgid "" "decrease it slightly to have smooth surface finish" msgstr "" -msgid "Bottom surface flow ratio" +msgid "Initial layer flow ratio" msgstr "" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "" - -msgid "Precise wall(experimental)" -msgstr "" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." +msgid "This factor affects the amount of material for the initial layer" msgstr "" msgid "Only one wall on top surfaces" @@ -6945,39 +7129,23 @@ msgstr "Endast en vägg på topp ytan" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "" -"Använd endast en vägg på topp ytan, för att ge mer utrymme till det övre " -"ifyllningsmönstret" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." +msgid "Not apply" msgstr "" +msgid "Top surfaces" +msgstr "Top ytor" + +msgid "Topmost surface" +msgstr "Endast högsta ytan" + msgid "Only one wall on first layer" msgstr "Endast en vägg på första lagret" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "" - -msgid "Classic mode" -msgstr "" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "Använd endast en vägg på det första lagret av modeller" msgid "Slow down for overhang" msgstr "Sakta ner vid överhäng" @@ -6986,25 +7154,11 @@ msgid "Enable this option to slow printing down for different overhang degree" msgstr "" "Aktivera detta val för att sänka hastigheten för olika överhängs grader" -msgid "mm/s or %" -msgstr "" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "Hastighet för bridges/bryggor och hela överhängs väggar" - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "Hastighet för bridges/bryggor och hela överhängs väggar" msgid "Brim width" msgstr "Brim bredd" @@ -7022,18 +7176,6 @@ msgstr "" "Detta styr genereringen av brim på modellens yttre och/eller inre sida. Auto " "innebär att brim bredd analyseras och beräknas automatiskt." -msgid "Mouse ear" -msgstr "" - -msgid "Outer brim only" -msgstr "Endast yttre brim" - -msgid "Inner brim only" -msgstr "Endast inre kant" - -msgid "Outer and inner brim" -msgstr "Yttre och inre brim" - msgid "Brim-object gap" msgstr "Avstånd mellan brim och modell" @@ -7044,30 +7186,6 @@ msgstr "" "Mellanrum mellan innersta brim linjen och objektet kan underlätta vid " "borttagande av brim" -msgid "Brim ears" -msgstr "" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "" - -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 "" - -msgid "Brim ear detection radius" -msgstr "" - -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 "" - msgid "Compatible machine" msgstr "Kompatibel maskin" @@ -7202,11 +7320,11 @@ msgid "Internal bridge support thickness" msgstr "Tjocklek på inre bridge support" 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" +"If enabled, Studio will generate support loops 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 "" msgid "Top surface pattern" @@ -7253,10 +7371,8 @@ msgid "" "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 "" +msgid "Line width of outer wall" +msgstr "Linjebredd på yttre vägg" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -7265,23 +7381,6 @@ msgstr "" "Hastigheten på yttre vägg som är mest synlig. Denna bör vara långsammare än " "hastigheten på inner vägg för att uppnå bättre kvalitet." -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "Ordning på inre vägg/yttre vägg/ifyllnad" @@ -7330,6 +7429,16 @@ msgstr "" "Frigångsradie runt extrudern: används för att undvika kollisioner vid " "utskrift av flera objekt." +msgid "Max Radius" +msgstr "Max Radie" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Max frigångsradie runt extrudern. Används för att undvika kollisioner vid " +"utskrift av flera objekt." + msgid "Extruder Color" msgstr "Extruder Färg" @@ -7355,22 +7464,30 @@ msgstr "" "värdet är mellan 0.95 och 1.05. Du kan finjustera detta värde för att få en " "fin flat yta när visst överflöde eller underflöde finns" +msgid "Object flow ratio" +msgstr "Objektflödes förhållande" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "" +"Flödes förhållandet fastställs av objektet; betydelsen är densamma som " +"flödes förhållande." + msgid "Enable pressure advance" msgstr "" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +"enabled. Useless for Bambu Printer" msgstr "" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" msgstr "" +msgid "Default line width if some line width is set to be zero" +msgstr "Standard linjebredd för linjebredder är satt till 0" + msgid "Keep fan always on" msgstr "Behåll alltid fläkten på" @@ -7431,14 +7548,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -7461,18 +7570,6 @@ msgstr "" "Filament diametern används för att beräkna extruderingen i G-kod, viktigt " "att detta är rätt" -msgid "Shrinkage" -msgstr "" - -#, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" - msgid "Density" msgstr "Densitet" @@ -7585,54 +7682,6 @@ msgstr "Kubik Support" msgid "Lightning" msgstr "Blixt" -msgid "Sparse infill anchor length" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" - -msgid "0 (no open anchors)" -msgstr "0 (inga öppna ankare)" - -msgid "1000 (unlimited)" -msgstr "1000 (obegränsat)" - -msgid "Maximum length of the infill anchor" -msgstr "" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should " -"create the same result as with 1000 & 0." -msgstr "" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "" - -msgid "Acceleration of inner walls" -msgstr "" - -msgid "Acceleration of travel moves" -msgstr "" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7643,12 +7692,7 @@ msgstr "" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "Acceleration av yttervägg: ett lägre värde kan förbättra kvaliteten." -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 "" - -msgid "mm/s² or %" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" msgstr "" msgid "" @@ -7656,10 +7700,7 @@ msgid "" "g. 100%), it will be calculated based on the default acceleration." msgstr "" -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." +msgid "mm/s² or %" msgstr "" msgid "" @@ -7682,29 +7723,33 @@ msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "" + msgid "Jerk of outer walls" msgstr "" msgid "Jerk of inner walls" msgstr "" -msgid "Jerk for top surface" +msgid "Jerk of infill" msgstr "" -msgid "Jerk for infill" +msgid "Jerk of top surface" msgstr "" -msgid "Jerk for initial layer" +msgid "First layer" msgstr "" -msgid "Jerk for travel" +msgid "Jerk of first layer" msgstr "" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." +msgid "Jerk of travel" msgstr "" +msgid "Line width of initial layer" +msgstr "Linjebredd för första lager" + msgid "Initial layer height" msgstr "Första lagerhöjd" @@ -7725,20 +7770,6 @@ msgstr "Första lager ifyllnad" msgid "Speed of solid infill part of initial layer" msgstr "Hastigheten för fasta ifyllnadsdelar av det första lagret" -msgid "Initial layer travel speed" -msgstr "" - -msgid "Travel speed of initial layer" -msgstr "" - -msgid "Number of slow layers" -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 "" - msgid "Initial layer nozzle temperature" msgstr "Nozzel temperatur för första lager" @@ -7748,24 +7779,6 @@ msgstr "Nozzel temperatur för första lager med detta filament" msgid "Full fan speed at layer" msgstr "Full fläkthastighet vid lager" -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." -msgstr "" - -msgid "Support interface fan speed" -msgstr "" - -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 overriden by disable_fan_first_layers." -msgstr "" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7809,12 +7822,9 @@ msgstr "" msgid "Filter out tiny gaps" msgstr "" -msgid "Layers and Perimeters" -msgstr "Lager och perimetrar" - msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" +"affact top/bottom layers" msgstr "" msgid "" @@ -7873,83 +7883,21 @@ msgstr "Rostfritt stål" msgid "Brass" msgstr "Mässing" -msgid "Nozzle HRC" -msgstr "Nozzle HRC" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "" -"Nozzelns hårdhet. Noll innebär att ingen kontroll av nozzelns hårdhet görs " -"under beredningen." - -msgid "HRC" -msgstr "HRC" - msgid "Enable this option if machine has auxiliary part cooling fan" msgstr "Aktivera detta val om maskinen har extra kylfläkt" -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 comands 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 "" - -msgid "Only overhangs" -msgstr "" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "" - -msgid "Fan kick-start time" -msgstr "" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" - msgid "G-code flavor" msgstr "G-kod smak" msgid "What kind of gcode the printer is compatible with" msgstr "Vilken typ av G-kod är skrivaren kompatibel med" -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "" - -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." -msgstr "" - msgid "Exclude objects" msgstr "" -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" - -msgid "Verbose G-code" -msgstr "" - 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." +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" msgstr "" msgid "Infill combination" @@ -7963,13 +7911,67 @@ msgstr "" "tillsammans för att minska tiden. Väggar skrivs fortfarande ut med vald " "lagerhöjd." +msgid "Length of sparse infill anchor" +msgstr "Längd på glesa infällda ankare" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"Detta förbinder en gles utfyllnadslinje med en inre perimeter med ett kort " +"segment av en ytterligare perimeter. Om den uttrycks i procent (exempel: " +"15%) beräknas den över den glesa utfyllnadslinjens bredd. Slicern försöker " +"ansluta två nära utfyllnadslinjer till ett kort perimeter segment. Om inget " +"sådant perimeter segment som är kortare än infill_anchor_max hittas, ansluts " +"infyllningslinjen till ett perimeter segment på bara en sida och längden på " +"det perimeter segment som tas är begränsad till denna parameter, men inte " +"längre än anchor_length_max. Sätt denna parameter till noll för att " +"inaktivera förankring av perimetrar som är anslutna till en enda " +"utfyllnadslinje." + +msgid "0 (no open anchors)" +msgstr "0 (inga öppna ankare)" + +msgid "1000 (unlimited)" +msgstr "1000 (obegränsat)" + +msgid "Maximum length of sparse infill anchor" +msgstr "Maximal längd för glesa infällda ankare" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"Detta förbinder en gles utfyllnadslinje med en inre perimeter med ett kort " +"segment av en ytterligare perimeter. Om den uttrycks i procent (exempel: " +"15%) beräknas den över den glesa utfyllnadslinjens bredd. Slicern försöker " +"ansluta två nära utfyllnadslinjer till ett kort perimeter segment. Om inget " +"sådant perimeter segment som är kortare än denna parameter hittas, ansluts " +"utfyllnadslinjen till ett perimeter segment på bara en sida och längden på " +"perimeter segmentet begränsas till infill_anchor, men inte längre än denna " +"parameter. Sätt denna parameter till noll för att inaktivera förankring." + +msgid "0 (not anchored)" +msgstr "0 (ej förankrad)" + msgid "Filament to print internal sparse infill." msgstr "Filamentet är avsett för sparsam ifyllnad." -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "Line width of internal sparse infill" +msgstr "Linjebredd för sparsam ifyllnad" msgid "Infill/Wall overlap" msgstr "Ifyllnad/Vägg överlapp" @@ -7985,15 +7987,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "Hastighet för sparsam ifyllnad" -msgid "Interface shells" -msgstr "" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "Stryknings typ" @@ -8008,12 +8001,6 @@ msgstr "" msgid "No ironing" msgstr "Ingen strykning" -msgid "Top surfaces" -msgstr "Top ytor" - -msgid "Topmost surface" -msgstr "Endast högsta ytan" - msgid "All solid layer" msgstr "Alla solida lager" @@ -8269,48 +8256,16 @@ msgstr "Filnamns format" msgid "User can self-define the project file name when export" msgstr "Användaren kan bestämma projekt namn när den ska exporteras" -msgid "Make overhang printable" -msgstr "" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "" - -msgid "Make overhang printable maximum angle" -msgstr "" - -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." -msgstr "" - -msgid "Make overhang printable hole area" -msgstr "" - -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 "" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "Upptäck överhängs vägg" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"Upptäck överhängs procenten i förhållande till linjebredden och använd olika " -"hastigheter för att skriva ut. Vid 100%% överhäng, bridge/brygg hastighet " -"användas." -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of inner wall" +msgstr "Linjebredd för inre vägg" msgid "Speed of inner wall" msgstr "Hastighet för inre vägg" @@ -8318,13 +8273,19 @@ msgstr "Hastighet för inre vägg" msgid "Number of walls of every layer" msgstr "Antal väggar för varje lager" +msgid "Post-processing Scripts" +msgstr "Skript för efterbehandling" + msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"Om du vill bearbeta G-koden genom anpassade skript anger du bara deras " +"absoluta sökvägar här. Separera flera skript med ett semikolon. Skript " +"kommer att skickas via den absoluta sökvägen till G-kod filen som det första " +"argumentet, och variabler för inställningar kan också läsas" msgid "Raft contact Z distance" msgstr "Raft kontakt Z avstånd" @@ -8423,8 +8384,8 @@ msgstr "" "den förflyttas. Att använda spirallinjer för att lyfta z kan förhindra " "strängning" -msgid "Z hop type" -msgstr "" +msgid "Z Hop Type" +msgstr "Z Hop Typ" msgid "Slope" msgstr "Lutning" @@ -8432,53 +8393,10 @@ msgstr "Lutning" msgid "Spiral" msgstr "Spiral" -msgid "Only lift Z above" +msgid "Direct drive" msgstr "" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "" - -msgid "Top Only" -msgstr "" - -msgid "Bottom Only" -msgstr "" - -msgid "Top and Bottom" -msgstr "" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8498,17 +8416,6 @@ msgstr "" "ställer in detta till 0 betyder det att det blir samma hastighet som " "retraktionen" -msgid "Use firmware retraction" -msgstr "" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "" - msgid "Seam position" msgstr "Söm position" @@ -8527,39 +8434,14 @@ msgstr "Tillbaka" msgid "Random" msgstr "Slumpmässig" -msgid "Staggered inner seams" -msgstr "" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "" - msgid "Seam gap" msgstr "" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" msgid "Wipe speed" @@ -8590,12 +8472,6 @@ msgstr "Skirt varv" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "Antal skirt varv. 0 betyder att skirt är inaktiverad" -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8614,10 +8490,11 @@ msgstr "" "Sparsam ifyllnads ytor som är mindre än detta gränsvärde ersätts med inre " "solid ifyllnad" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "Linjebredd med inre solid ifyllnad" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Hastighet för inre solid ifyllnad, förrutom topp och botten ytorna" @@ -8785,10 +8662,8 @@ msgstr "" "Filament för att skriva ut support och rafts. ”Standard” betyder ingen " "specifik filament för support, och nuvarande filament används" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "" +msgid "Line width of support" +msgstr "Linjebredd för support" msgid "Interface use loop pattern" msgstr "Loop mönstrets gränssnitt" @@ -8945,28 +8820,6 @@ msgid "" msgstr "" "Inställningen bestämmer avståndet mellan närliggande tree support punkter." -msgid "Adaptive layer height" -msgstr "Adaptiv lagerhöjd" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "" - -msgid "Tree support brim width" -msgstr "Tree supportens brim bredd" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "" - msgid "Tree support branch diameter" msgstr "Tree support grenarnas diameter" @@ -8979,15 +8832,11 @@ msgstr "Tree support vägg varv" msgid "This setting specify the count of walls around tree support" msgstr "Inställningen bestämmer antal väggar runt tree support" -msgid "Tree support with infill" -msgstr "Tree support med ifyllnad" +msgid "Tree support brim width" +msgstr "Tree supportens brim bredd" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "" -"Inställningen bestämmer om det ska läggas till ifyllnad i stora hålrum av " -"tree support" +msgid "The brim width around tree support. 0 means auto." +msgstr "Botten bredd runt träd support. 0 betyder automatisk." msgid "Chamber temperature" msgstr "" @@ -9028,10 +8877,8 @@ msgstr "" "G-koden sätts in vid filament byte, inklusive T kommando som aktiverar " "verktygs byte" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "" +msgid "Line width for top surfaces" +msgstr "Linjebredd för topp ytor" msgid "Speed of top surface infill which is solid" msgstr "Hastighet för solida topp ytors ifyllnad" @@ -9069,6 +8916,14 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "Förflyttnings hastighet" +msgid "Use relative E distances" +msgstr "" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" + msgid "Wipe while retracting" msgstr "Avskrapa medans retraktering" @@ -9180,24 +9035,6 @@ msgstr "" "Denna funktion används för att justera storleken något när det finns " "monterings svårigheter" -msgid "G-code thumbnails" -msgstr "" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9468,15 +9305,6 @@ msgid "" "uptodate" msgstr "" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "Mata ut katalog" @@ -9623,140 +9451,399 @@ msgstr "Filen innehåller ett ogiltigt vertex index." msgid "This OBJ file couldn't be read because it's empty." msgstr "Denna OBJ fil kunde inte läsas eftersom den är tom." -msgid "Network lookup" +msgid "Flow Rate Calibration" msgstr "" -msgid "Address" +msgid "Max Volumetric Speed Calibration" msgstr "" -msgid "Hostname" +msgid "Manage Result" msgstr "" -msgid "Service name" +msgid "Manual Calibration" msgstr "" -msgid "OctoPrint version" +msgid "Result can be read by human eyes." msgstr "" -msgid "Searching for devices" +msgid "Auto-Calibration" msgstr "" -msgid "Finished" -msgstr "Färdig" - -msgid "Unable to perform boolean operation on selected parts" +msgid "We would use Lidar to read the calibration result" msgstr "" -msgid "Mesh Boolean" +msgid "Prev" msgstr "" -msgid "Union" +msgid "Recalibration" msgstr "" -msgid "Difference" +msgid "Calibrate" msgstr "" -msgid "Intersection" +msgid "Finish" +msgstr "Slutför" + +msgid "Wiki" msgstr "" -msgid "Source Volume" +msgid "How to use calibration result?" msgstr "" -msgid "Tool Volume" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" -msgid "Subtract from" +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgstr "" -msgid "Subtract with" +msgid "Calibration not supported" msgstr "" -msgid "selected" +msgid "Flow Dynamics" msgstr "" -msgid "Part 1" +msgid "Flow Rate" msgstr "" -msgid "Part 2" +msgid "Max Volumetric Speed" msgstr "" -msgid "Delete input" +msgid "Please enter the name you want to save to printer." msgstr "" -msgid "Send to print" +msgid "The name cannot exceed 40 characters." msgstr "" -msgid "Upload to Printer Host with the following filename:" +msgid "The name cannot be empty." msgstr "" -msgid "Use forward slashes ( / ) as a directory separator if needed." +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "" + +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 "" + +msgid "create new preset failed." +msgstr "" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" + +msgid "No Printer Connected!" +msgstr "" + +msgid "Printer is not connected yet." +msgstr "" + +msgid "Please select filament to calibrate." +msgstr "" + +msgid "Connecting to printer..." +msgstr "" + +msgid "The failed test result has been dropped." +msgstr "" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "" + +msgid "Internal Error" +msgstr "" + +msgid "Please select at least one filament for calibration" +msgstr "" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "" + +msgid "The input value size must be 3." +msgstr "" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "" + +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" +"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." +msgstr "" + +msgid "About this calibration" +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 "" + +msgid "When to use Flow Rate Calibration" +msgstr "" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" + +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 " +"calibration provides a useful reference flow rate." +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." +msgstr "" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "" + +msgid "Over-extrusion or under extrusion" +msgstr "" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "" + +msgid "materials with inaccurate filament diameter" +msgstr "" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" + +msgid "Failed" +msgstr "Misslyckades" + +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 "Upload filename doesn't end with \"%s\". Do you wish to continue?" +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 "" -msgid "Upload" +msgid "Please find the best line on your plate" msgstr "" -msgid "Upload and Print" +msgid "Input Value" msgstr "" -msgid "Simulate" +msgid "Save to Filament Preset" msgstr "" -msgid "Print host upload queue" +msgid "Preset" msgstr "" -msgid "ID" +msgid "Record Factor" msgstr "" -msgid "Progress" +msgid "We found the best flow ratio for you" msgstr "" -msgid "Host" +msgid "Flow Ratio" msgstr "" -msgctxt "OfFile" -msgid "Size" +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" msgstr "" -msgid "Filename" +msgid "Please enter the name of the preset you want to save." msgstr "" -msgid "Error Message" +msgid "Calibration1" msgstr "" -msgid "Cancel selected" +msgid "Calibration2" msgstr "" -msgid "Show error message" +msgid "Please find the best object on your plate" msgstr "" -msgid "Enqueued" +msgid "Fill in the value above the block with smoothest top surface" msgstr "" -msgid "Uploading" -msgstr "Laddar upp" - -msgid "Cancelling" +msgid "Skip Calibration2" msgstr "" -msgid "Error uploading to print host:" +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "" + +msgid "Please choose a block with smoothest top surface" +msgstr "" + +msgid "Please choose a block with smoothest top surface." +msgstr "" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" + +msgid "Calibration Type" +msgstr "" + +msgid "Complete Calibration" +msgstr "" + +msgid "Fine Calibration based on flow ratio" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" + +msgid "Printing Parameters" +msgstr "" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "Typ av byggplatta" + +msgid "filament position" +msgstr "" + +msgid "External Spool" +msgstr "" + +msgid "Filament For Calibration" +msgstr "" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" + +msgid "Error desc" +msgstr "" + +msgid "Extra info" +msgstr "" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "" + +msgid "Connecting to printer" +msgstr "" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "" + +msgid "From Volumetric Speed" +msgstr "" + +msgid "To Volumetric Speed" +msgstr "" + +msgid "Flow Dynamics Calibration Result" +msgstr "" + +msgid "No History Result" +msgstr "" + +msgid "Success to get history result" +msgstr "" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Edit Flow Dynamics Calibration" msgstr "" msgid "PA Calibration" msgstr "" -msgid "DDE" -msgstr "" - -msgid "Bowden" -msgstr "" - -msgid "Extruder type" -msgstr "" - msgid "PA Tower" msgstr "" @@ -9815,7 +9902,7 @@ msgstr "" msgid "Start temp: " msgstr "" -msgid "End end: " +msgid "End temp: " msgstr "" msgid "Temp step: " @@ -9870,47 +9957,120 @@ msgstr "" msgid "mm/mm" msgstr "" -msgid "Physical Printer" +msgid "Network lookup" msgstr "" -msgid "Print Host upload" +msgid "Address" msgstr "" -msgid "Test" +msgid "Hostname" msgstr "" -msgid "Could not get a valid Printer Host reference" +msgid "Service name" msgstr "" -msgid "Success!" +msgid "OctoPrint version" msgstr "" -msgid "Refresh Printers" +msgid "Searching for devices" msgstr "" -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." +msgid "Finished" +msgstr "Färdig" + +msgid "Send to print" msgstr "" -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgid "Upload to Printer Host with the following filename:" msgstr "" -msgid "Open CA certificate file" +msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" #, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." +msgid "Simulate" msgstr "" -msgid "Connection to printers connected via the print host failed." +msgid "Print host upload queue" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Host" +msgstr "" + +msgctxt "OfFile" +msgid "Size" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Error Message" +msgstr "" + +msgid "Cancel selected" +msgstr "" + +msgid "Show error message" +msgstr "" + +msgid "Enqueued" +msgstr "" + +msgid "Uploading" +msgstr "Laddar upp" + +msgid "Cancelling" +msgstr "" + +msgid "Error uploading to print host:" +msgstr "" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "" + +msgid "Mesh Boolean" +msgstr "" + +msgid "Union" +msgstr "" + +msgid "Difference" +msgstr "" + +msgid "Intersection" +msgstr "" + +msgid "Source Volume" +msgstr "" + +msgid "Tool Volume" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "Part 1" +msgstr "" + +msgid "Subtract from" +msgstr "" + +msgid "Part 2" +msgstr "" + +msgid "Subtract with" +msgstr "" + +msgid "Delete input" msgstr "" #: resources/data/hints.ini: [hint:3D Scene Operations] @@ -10028,17 +10188,26 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" +"Subtrahera en del\n" +"Visste du att du kan subtrahera ett mesh från ett annat mesh med hjälp av " +"modifikationen Negativ del? På så sätt kan du till exempel skapa lätt " +"justerbara hål direkt i Bambu Studio. Läs mer i dokumentationen." #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" +"STEG\n" +"Visste du att du kan förbättra utskriftskvaliteten genom att bereda en STEP-" +"fil i stället för en STL-fil?\n" +"Bambu Studio stöder beredningen av STEP-filer, vilket ger jämnare resultat " +"än en STL-fil med lägre upplösning. Prova det!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -10172,598 +10341,137 @@ msgstr "" "för att förbättra modellens styrka?" #~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." -#~ msgstr "Konfigurationen kan skapas av en nyare version av Bambu Studio." +#~ "Use only one wall on flat top surface, to give more space to the top " +#~ "infill pattern" +#~ msgstr "" +#~ "Använd endast en vägg på topp ytan, för att ge mer utrymme till det övre " +#~ "ifyllningsmönstret" -#~ msgid "Internal Version" -#~ msgstr "Intern version" +#~ msgid "Nozzle HRC" +#~ msgstr "Nozzle HRC" #~ msgid "" -#~ "BambuStudio 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." +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." #~ msgstr "" -#~ "Bambu Studio har slut på minne och kommer att stängas. Det kan vara en " -#~ "bug. Rapportera problemet till Bambu Lab Teamet." +#~ "Nozzelns hårdhet. Noll innebär att ingen kontroll av nozzelns hårdhet " +#~ "görs under beredningen." -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "Ett lokaliserings fel uppstod, Bambu Studio stängs ner. Rapportera till " -#~ "Bambu Lab Teamet." - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "Bambu Studio har ett ohanterat undantag: %1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Konfigurationsfilen för Bambu Studio kan vara skadad och går inte att " -#~ "avläsa. Radera filen och försök igen." - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio behöver uppdateras" - -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "Välj en fil (.gcode/.gco/.g/.ngc/ngc):" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "" -#~ "Versionen av Bambu studio är för låg och behöver uppdateras till den " -#~ "senaste versionen innan den kan användas normalt" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Bambu Studio GUI-initiering misslyckades" - -#~ msgid "Check cloud service status" -#~ msgstr "Kontrollera molntjänstens status" - -#~ msgid "code" -#~ msgstr "kod" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "Det gick inte att ansluta till molntjänsten" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "Klicka på hyperlänken ovan för att se molntjänstens status" - -#~ msgid "Connection to printer failed" -#~ msgstr "Anslutning till skrivaren misslyckades" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "Kontrollera nätverksanslutningen för skrivaren och Studio." - -#~ msgid "Push new filament into the extruder" -#~ msgstr "Mata nytt filament till extruder" - -#~ msgid "Grab new filament" -#~ msgstr "Ta ett nytt filament" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "Onormal utskrifts fil data: Vänligen bered igen." - -#~ msgid "Task canceled." -#~ msgstr "Uppgiften avbruten." - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "" -#~ "Uppladdningsuppgiften tog slut. Kontrollera nätverksstatusen och försök " -#~ "igen." - -#~ msgid "Print file not found. please slice again." -#~ msgstr "Det gick inte att hitta utskrifts filen; bered den igen" - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "" -#~ "Utskrifts filen överskrider den högsta tillåtna storleken (1 GB). " -#~ "Förenkla modellen och bered igen" - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "Det gick inte att ladda upp filen till ftp. Vänligen försök igen." - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "" -#~ "Kontrollera den aktuella statusen för Bambu Lab servern genom att klicka " -#~ "på länken ovan." - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "" -#~ "Storleken på utskrifts filen är för stor. Vänligen justera filstorleken " -#~ "och försök igen." - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "" -#~ "Utskrifts filen hittades inte; bered den igen och skicka till utskrift." - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "" -#~ "Det gick inte att ladda upp utskriftsfilen via FTP. Kontrollera " -#~ "nätverksstatusen och försök igen." - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio är licensierad under " - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio är baserad på PrusaSlicer av Prusa Research, som är från " -#~ "Slic3r av Alessandro Ranellucci och RepRap-communityn" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio är baserad på PrusaSlicer av PrusaResearch och SuperSlicer " -#~ "av Merill (supermerill)." - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "Bambu Studio refererar även några idéer från Cura av Ultimaker." - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "Det finns många delar av programvaran som kommer ifrån bidrag av " -#~ "communityn , så vi kan inte lista dem en och en, utan de kommer istället " -#~ "att anges i motsvarande kod kommentarer." - -#~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "" -#~ "För stor lagerhöjd.\n" -#~ "Den har återställts till 0.2" - -#~ msgid "Layer Time (s)" -#~ msgstr "Lagertid (s)" +#~ msgid "HRC" +#~ msgstr "HRC" #, c-format, boost-format #~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." +#~ "Detect the overhang percentage relative to line width and use different " +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "Konflikter i g-kodens banor har hittats i lager %d. Separera de " -#~ "motstridiga objekten ytterligare (%s<->%s)." +#~ "Upptäck överhängs procenten i förhållande till linjebredden och använd " +#~ "olika hastigheter för att skriva ut. Vid 100%% överhäng, bridge/brygg " +#~ "hastighet användas." -#~ msgid "Report issue" -#~ msgstr "Rapportera problem" +#~ msgid "Pause Print" +#~ msgstr "Pausa utskrift" -#~ msgid "Show &Overhang" -#~ msgstr "Visa & Överhäng" +#~ msgid "Edit Pause Print Message" +#~ msgstr "Redigera Paus Print Meddelande" -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "Visa objektets överhäng i 3D-scen" +#~ msgid "Delete Pause Print" +#~ msgstr "Radera Pausa utskrift" -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "Initieringen misslyckades (Enhets anslutningen är inte klar)!" +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "Faktorer för dynamiskt flödeskallibrering" + +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Flow Calibration" +#~ msgstr "Flödes Kalibrering" #~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." #~ msgstr "" -#~ "En annan virtuell kamera körs.\n" -#~ "Bambu Studio stöder endast en virtuell kamera.\n" -#~ "Vill du stoppa den här virtuella kameran?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "Byt till 3mf modell filer." - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "Inga filer [%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "Inläsning misslyckades [%d]" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "Vill du radera filen '%s' från skrivaren?" - -#~ msgid "Delete file" -#~ msgstr "Radera fil" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "Hämtar information om modellen..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "Det gick inte att hämta modell information från skrivaren." - -#~ msgid "Failed to parse model infomations." -#~ msgstr "Det gick inte att analysera modellinformation" - -#~ msgid "Immediately score" -#~ msgstr "Omedelbar resultat" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "Vänligen ge ett betyg till din favorit modell från Bambu Market." - -#~ msgid "Score" -#~ msgstr "Resultat" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "" -#~ "3mf-filen genererades i en gammal version av Bambu Studio laddar endast " -#~ "geometri data." +#~ "\n" +#~ "%1% för tätt inpå den isolerade ytan, utskriften kolliderar." #~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "%1% för tätt inpå den isolerade ytan, utskriften kolliderar." + +#~ msgid "&Edit" +#~ msgstr "&Redigera" + +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "3D Models" +#~ msgstr "3D-modeller" + +#~ msgid "AMSMaterialsSetting" +#~ msgstr "AMS Material Inställning" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS automatisk växling av filament" + +#~ msgid "AMS settings are not supported for external spool" #~ msgstr "" -#~ "Funktionen ”Fix Model” är för närvarande bara på Windows. Reparera " -#~ "modellen i Bambu Studio (Windows) eller CAD-program." +#~ "Aktuell AMS-inställningar stöder inte användning av en extern spole." -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Associerade filer till Bambu Studio" +#~ msgid "AWS PRE host" +#~ msgstr "AWS PRE värd" -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "Associerade .3mf files till Bambu Studio" +#~ msgid "AWS host" +#~ msgstr "AWS värd" + +#~ msgid "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "Faktisk volym = Rensnings Volym* Multiplikator" + +#~ msgid "Adaptive layer height" +#~ msgstr "Adaptiv lagerhöjd" + +#~ msgid "Add Custom Printer" +#~ msgstr "Lägg till anpassad skrivare" + +#~ msgid "Ams filament backup" +#~ msgstr "AMS filament backup" #~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .3mf filer" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "Associerade .stl filer till Bambu Studio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .stl filer" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "Associera .step/.stp-filer till BambuStudio" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .step filer" - -#~ msgid "Online Models" -#~ msgstr "Online modeller" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "Visa personalens utvalda modeller online på startsidan" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "Hoppa över kontrollen av AMS svarta lista" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "Aktivera SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "Aktivera SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "Internt utvecklarläge" - -#~ msgid "Incompatible" -#~ msgstr "Inkompatibel" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "Samma som Global Bed Type" - -#~ msgid "PLA Plate" -#~ msgstr "PLA platta" - -#~ msgid "Can't connect to the printer" -#~ msgstr "Kan inte ansluta till skrivaren" - -#~ msgid "Error code" -#~ msgstr "Felkod" - -#~ msgid "Check the status of current system services" -#~ msgstr "Kontrollera status för aktuella systemtjänster" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "Den lokala anslutningen till skrivaren misslyckades; försök igen." - -#~ msgid "The name length exceeds the limit." -#~ msgstr "Namnlängden överskrider gränsen." - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "Skrivaren måste finnas på samma LAN som Bambu Studio." - -#~ msgid "Failed to create socket" -#~ msgstr "Det gick inte att skapa uttaget" - -#~ msgid "Failed to connect socket" -#~ msgstr "Det gick inte att ansluta uttaget" - -#~ msgid "Failed to publish login request" -#~ msgstr "Det gick inte att publicera inloggningsbegäran" - -#~ msgid "Get ticket from device timeout" -#~ msgstr "Timeout för att hämta ärende från enhet" - -#~ msgid "Get ticket from server timeout" -#~ msgstr "Timeout för att hämta ärende från server" - -#~ msgid "Failed to post ticket to server" -#~ msgstr "Misslyckades med att skicka biljett till server" - -#~ msgid "Failed to parse login report reason" -#~ msgstr "Det gick inte att analysera orsaken till inloggningsrapporten" - -#~ msgid "Receive login report timeout" -#~ msgstr "Timeout för mottagande av inloggnings rapport" - -#~ msgid "Check the reason" -#~ msgstr "Kontrollera orsaken" - -#~ msgid "Read and accept" -#~ msgstr "Läs och acceptera" - -#~ msgid "Terms and Conditions" -#~ msgstr "Villkor och bestämmelser" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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." +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." #~ msgstr "" -#~ "Tack för att du har köpt en Bambu Lab enhet. Innan du använder din Bambu " -#~ "Lab enhet ska du läsa villkoren. Genom att klicka för att godkänna " -#~ "användningen av din Bambu Lab enhet godkänner du att följa " -#~ "sekretesspolicyn och användningsvillkoren (gemensamt kallade \"Villkor" -#~ "\"). Om du inte följer eller samtycker till Bambu Labs integritetspolicy " -#~ "ska du inte använda Bambu Labs utrustning och tjänster." - -#~ msgid "and" -#~ msgstr "och" - -#~ msgid "Privacy Policy" -#~ msgstr "Integritetspolicy" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "Vi ber om din hjälp för att förbättra allas skrivare." - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "Uttalande om programmet för förbättring av användarupplevelsen" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "I 3D-utskrifts gemenskapen lär vi oss av varandras framgångar och " -#~ "misslyckanden för att justera våra egna berednings parametrar och " -#~ "inställningar. %s följer samma princip och använder maskin inlärning för " -#~ "att förbättra sin prestanda från framgångar och misslyckanden i det stora " -#~ "antalet utskrifter av våra användare. Vi tränar %s att bli smartare genom " -#~ "att ge dem data från den verkliga världen. Om du är villig kommer denna " -#~ "tjänst att få tillgång till information från dina fel- och " -#~ "användningsloggar, som kan innehålla information som beskrivs i " -#~ "sekretesspolicyn. Vi kommer inte att samla in några personuppgifter genom " -#~ "vilka en person kan identifieras direkt eller indirekt, inklusive men " -#~ "inte begränsat till namn, adresser, betalningsinformation eller " -#~ "telefonnummer. Genom att aktivera denna tjänst godkänner du dessa villkor " -#~ "och uttalandet om integritetspolicy." - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "Uttalande om plan för förbättring av användarupplevelsen" - -#~ msgid "Post-processing scripts" -#~ msgstr "Skript för efterbehandling" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "Cool Plate / PLA Platta" +#~ "Ett objekt är placerad över byggplattans begränsningar.\n" +#~ "Flytta objektet så det är helt inom eller utom byggplattans begränsningar." #~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" #~ msgstr "" -#~ "Klicka på OK för att uppdatera Nätverks plugin programmet nästa gång " -#~ "Bambu Studio startar." - -#~ msgid "New version of Bambu Studio" -#~ msgstr "Ny version av Bambu Studio" +#~ "Arachne funktionen fungerar bara när ned saktning vid överhäng är " +#~ "inaktiverad.\n" +#~ "Detta kan leda till en minskning av kvaliteten på överhängens yta när du " +#~ "skriver ut snabbt." #~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly\n" #~ msgstr "" -#~ "Steg 1: Bekräfta att Bambu Studio och din skrivare finns på samma LAN." +#~ "Arachne-motorn fungerar bara när ned saktning vid överhäng är " +#~ "inaktiverad.\n" +#~ "Detta kan leda till försämrad kvalitet på överhängytor när du skriver ut " +#~ "snabbt.\n" -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "Kopierar katalog %1% till %2% misslyckade: %3%" +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "Montera den valda delen till en enda del" -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "" -#~ "Följande objekt har ett tomt initiallager och kan inte skrivas ut. " -#~ "Vänligen klipp botten eller aktivera support." - -#~ msgid "Bridge direction" -#~ msgstr "Bridge riktning" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "Använd endast en vägg på det första lagret av modeller" - -#~ msgid "Max Radius" -#~ msgstr "Max Radie" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "" -#~ "Max frigångsradie runt extrudern. Används för att undvika kollisioner vid " -#~ "utskrift av flera objekt." - -#~ msgid "Object flow ratio" -#~ msgstr "Objektflödes förhållande" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "" -#~ "Flödes förhållandet fastställs av objektet; betydelsen är densamma som " -#~ "flödes förhållande." - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "Längd på glesa infällda ankare" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "Detta förbinder en gles utfyllnadslinje med en inre perimeter med ett " -#~ "kort segment av en ytterligare perimeter. Om den uttrycks i procent " -#~ "(exempel: 15%) beräknas den över den glesa utfyllnadslinjens bredd. " -#~ "Slicern försöker ansluta två nära utfyllnadslinjer till ett kort " -#~ "perimeter segment. Om inget sådant perimeter segment som är kortare än " -#~ "infill_anchor_max hittas, ansluts infyllningslinjen till ett perimeter " -#~ "segment på bara en sida och längden på det perimeter segment som tas är " -#~ "begränsad till denna parameter, men inte längre än anchor_length_max. " -#~ "Sätt denna parameter till noll för att inaktivera förankring av " -#~ "perimetrar som är anslutna till en enda utfyllnadslinje." - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "Maximal längd för glesa infällda ankare" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "Detta förbinder en gles utfyllnadslinje med en inre perimeter med ett " -#~ "kort segment av en ytterligare perimeter. Om den uttrycks i procent " -#~ "(exempel: 15%) beräknas den över den glesa utfyllnadslinjens bredd. " -#~ "Slicern försöker ansluta två nära utfyllnadslinjer till ett kort " -#~ "perimeter segment. Om inget sådant perimeter segment som är kortare än " -#~ "denna parameter hittas, ansluts utfyllnadslinjen till ett perimeter " -#~ "segment på bara en sida och längden på perimeter segmentet begränsas till " -#~ "infill_anchor, men inte längre än denna parameter. Sätt denna parameter " -#~ "till noll för att inaktivera förankring." - -#~ msgid "0 (not anchored)" -#~ msgstr "0 (ej förankrad)" - -#~ 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 variables of settings also can be read" -#~ msgstr "" -#~ "Om du vill bearbeta G-koden genom anpassade skript anger du bara deras " -#~ "absoluta sökvägar här. Separera flera skript med ett semikolon. Skript " -#~ "kommer att skickas via den absoluta sökvägen till G-kod filen som det " -#~ "första argumentet, och variabler för inställningar kan också läsas" - -#~ msgid "Z Hop Type" -#~ msgstr "Z Hop Typ" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "Botten bredd runt träd support. 0 betyder automatisk." - -#~ msgid "Plate Type" -#~ msgstr "Typ av byggplatta" - -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "Subtrahera en del\n" -#~ "Visste du att du kan subtrahera ett mesh från ett annat mesh med hjälp av " -#~ "modifikationen Negativ del? På så sätt kan du till exempel skapa lätt " -#~ "justerbara hål direkt i Bambu Studio. Läs mer i dokumentationen." - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEG\n" -#~ "Visste du att du kan förbättra utskriftskvaliteten genom att bereda en " -#~ "STEP-fil i stället för en STL-fil?\n" -#~ "Bambu Studio stöder beredningen av STEP-filer, vilket ger jämnare " -#~ "resultat än en STL-fil med lägre upplösning. Prova det!" - -#~ msgid "Line width of outer wall" -#~ msgstr "Linjebredd på yttre vägg" - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "Standard linjebredd för linjebredder är satt till 0" - -#~ msgid "Line width of initial layer" -#~ msgstr "Linjebredd för första lager" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "Linjebredd för sparsam ifyllnad" - -#~ msgid "Line width of inner wall" -#~ msgstr "Linjebredd för inre vägg" - -#~ msgid "Line width of internal solid infill" -#~ msgstr "Linjebredd med inre solid ifyllnad" - -#~ msgid "Line width of support" -#~ msgstr "Linjebredd för support" - -#~ msgid "Line width for top surfaces" -#~ msgstr "Linjebredd för topp ytor" - -#~ msgid "Keep upper part" -#~ msgstr "Behåll övre del" - -#~ msgid "Keep lower part" -#~ msgstr "Behåll lägre del" - -#~ msgid "Backup" -#~ msgstr "Säkerhetskopiering" - -#~ msgid "Backup interval" -#~ msgstr "Säkerhetskopierings intervall" - -#~ msgid "" -#~ "Print a tower to prime material in nozzle after switching to a new " -#~ "material." -#~ msgstr "" -#~ "Detta alternativ gör det möjligt att skriva ut ett torn för att pressa ut " -#~ "(prime) material i nozzeln efter byte till ett nytt material." +#~ msgid "Auto arrange" +#~ msgstr "Auto arrangera" #~ msgid "" #~ "Auto orientates selected objects or all objects.If there are selected " @@ -10773,12 +10481,32 @@ msgstr "" #~ "Auto placera valda objekt eller alla objekt. Om det finns valda objekt så " #~ "placeras endast dem. Alternativt så placeras alla objekt i projektet." +#~ msgid "Auto refill" +#~ msgstr "Automatisk påfyllning" + #~ msgid "Aux Cooling" #~ msgstr "Extra Kylning" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Undvik väggar vid förflyttning" +#~ msgid "Backup" +#~ msgstr "Säkerhetskopiering" + +#~ msgid "Backup interval" +#~ msgstr "Säkerhetskopierings intervall" + +#~ msgid "" +#~ "Bed exclude area that can't used as printable area in X-Y plane. For " +#~ "example, the bottom left area which is used to cut filament in X1 when " +#~ "printing multi colors with AMS. The area is expressed as polygon by " +#~ "points in following format: \"XxY, XxY, ...\"" +#~ msgstr "" +#~ "Byggytan utesluter område som inte kan användas som utskrivbart område i " +#~ "XY-planet. Till exempel, det nedre vänstra området som används för att " +#~ "skära glödtråden i X1 när du skriver ut flera färger med en AMS. Området " +#~ "uttrycks som polygon med punkter i följande format: ”XxY, XxY,...”" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" @@ -10788,9 +10516,35 @@ msgstr "" #~ "filament.\n" #~ "Detta kan orsaka att nozzeln blockeras och utskriften misslyckas" +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "Minsta Botten Skal Tjocklek" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "Massiva Botten Lager" + +#~ msgid "" +#~ "Calibration completed. Please select the factors according to the left " +#~ "figure and fill them in the input boxes." +#~ msgstr "" +#~ "Kalibreringen klar. Välj faktorerna enligt vänster figur och fyll i dem i " +#~ "inmatningsrutorna." + +#~ msgid "" +#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " +#~ "same LAN?" +#~ msgstr "" +#~ "Kan inte identifiera LAN-IP-adressen för %s. Är %s och Bambu Studio i " +#~ "samma LAN?" + #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" #~ msgstr "Välj en eller flera filer (3mf/step/stl/obj/amf):" +#~ msgid "Choose save directory" +#~ msgstr "Välj spara register" + +#~ msgid "Clean" +#~ msgstr "Rensa" + #~ msgid "Clear all" #~ msgstr "Rensa allt" @@ -10804,12 +10558,24 @@ msgstr "" #~ msgid "Click the pencil icon to edit the filament." #~ msgstr "Tryck på penn ikonen för att editera filament." +#~ msgid "Clipping of view" +#~ msgstr "Klippning av vy" + #~ msgid "Color Print" #~ msgstr "Färg Utskrift" #~ msgid "Comsumption" #~ msgstr "Konsumtion" +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "Bekräfta om filamentet har extruderats" + +#~ msgid "Cool Plate" +#~ msgstr "Cool Plate" + +#~ msgid "Cool plate" +#~ msgstr "Kall platta" + #~ msgid "Creating" #~ msgstr "Skapar" @@ -10822,12 +10588,44 @@ msgstr "" #~ msgid "Debug" #~ msgstr "Felsök" +#~ msgid "" +#~ "Desiccant status lower than two bars indicates that desiccant can be " +#~ "inactive. Please change the desiccant.(Higher the better)" +#~ msgstr "" +#~ "Torkmedels status lägre än två stänger indikerar att torkmedlet kan vara " +#~ "inaktivt. Byt torkmedel. (ju högre, desto bättre)" + #~ msgid "Designer" #~ msgstr "Designer" #~ msgid "Device:" #~ msgstr "Enhet:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Inaktivera överhäng sakta ner automatiskt? \n" +#~ "Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" +#~ "Nej - Använd inte Arachne för denna utskrift" + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." +#~ msgstr "" +#~ "Frånkopplad från skrivaren [%s] på grund av att LAN-läget är inaktiverat. " +#~ "Vänligen återanslut skrivaren genom att logga in med ditt användarkonto." + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." +#~ msgstr "" +#~ "Frånkopplad från skrivaren [%s] på grund av att LAN-läge är aktiverat. " +#~ "Anslut skrivaren igen genom att ange åtkomstkoden som kan hämtas från " +#~ "skrivar skärmen." + #~ msgid "Display printable box" #~ msgstr "Visa utskriftbar box" @@ -10865,7 +10663,12 @@ msgstr "" #~ "1. The Process presets\n" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" -#~ msgstr "\n" +#~ msgstr "" +#~ "Vill du synkronisera dina personuppgifter från Bambu Cloud? \n" +#~ "Den innehåller följande information:\n" +#~ "1. Process inställningar\n" +#~ "2. Inställningar av filament\n" +#~ "3. Inställningar för skrivare\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -10874,6 +10677,15 @@ msgstr "" #~ "Detta inaktiverar retraktion när rörelsen är helt inom ett ifyllnads " #~ "området och det inte kan läcka filament" +#~ msgid "Downloading Bambu Network plug-in" +#~ msgstr "Nedladdning av Bambu Network Plug-in" + +#~ msgid "Dump video" +#~ msgstr "Lämna video" + +#~ msgid "Edit plate setitngs" +#~ msgstr "Redigera byggplattans inställningar" + #~ msgid "" #~ "Enabling this option means the height of every layer except the first " #~ "will be automatically calculated during slicing according to the slope of " @@ -10887,15 +10699,27 @@ msgstr "" #~ "Observera att detta alternativ endast träder i kraft om det inte finns " #~ "något prime torn genererat på den aktuella plattan." +#~ msgid "Engineering plate" +#~ msgstr "Engineering plate" + #~ msgid "Enter a search term" #~ msgstr "Ange ett sökord" +#~ msgid "Entering Seam painting" +#~ msgstr "Inmatning söm målning" + #~ msgid "Erase painting" #~ msgstr "Radera färgläggning" #~ msgid "Error at line %1%:\n" #~ msgstr "Fel i linje %1%:\n" +#~ msgid "Export." +#~ msgstr "Exportera." + +#~ msgid "Export G-Code." +#~ msgstr "Exportera G-kod." + #~ msgid "Export Sliced File" #~ msgstr "Exportera Beredd fil" @@ -10911,589 +10735,6 @@ msgstr "" #~ msgid "Extruder position" #~ msgstr "Extruder position" -#~ msgid "Failed" -#~ msgstr "Misslyckades" - -#~ msgid "Filament 1" -#~ msgstr "Filament 1" - -#~ msgid "Filament N XX" -#~ msgstr "Filament N XX" - -#~ msgid "" -#~ "Filament to print support and skirt. 0 means no specific filament for " -#~ "support and current filament is used" -#~ msgstr "" -#~ "Filament för att skriva ut support och skirt med. 0 betyder inget " -#~ "speciellt filament för support och nuvarande filament används" - -#~ msgid "" -#~ "Filament to print support interface. 0 means no specific filament for " -#~ "support interface and current filament is used" -#~ msgstr "" -#~ "Support filament för utskrift. 0 betyder att inget specifikt filament för " -#~ "support gränssnitt och nuvarande filament används" - -#~ msgid "Filaments Selection" -#~ msgstr "Filament Val" - -#~ msgid "Finish" -#~ msgstr "Slutför" - -#~ msgid "Fix model locally" -#~ msgstr "Åtgärda modellen lokalt" - -#~ msgid "Fix model through cloud" -#~ msgstr "Åtgärda modellen via molnet" - -#~ msgid "Flushed filament" -#~ msgstr "Rensat filament" - -#~ msgid "" -#~ "Force cooling fan to be specific speed when overhang degree of printed " -#~ "part exceeds this value. Expressed as percentage which indicides how much " -#~ "width of the line without support from lower layer" -#~ msgstr "" -#~ "Tvinga kylfläktens hastighet när överhängsgraderna överstiger detta " -#~ "värde. Uttryckt i procent som indikerar linjebredden utan stöd från lägre " -#~ "lager" - -#~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" - -#~ msgid "Fragment area" -#~ msgstr "Fragmentområde" - -#~ msgid "Fragment filter" -#~ msgstr "Fragment filter" - -#~ msgid "" -#~ "Heat the nozzle to target \n" -#~ "temperature" -#~ msgstr "" -#~ "Värm nozzel till vald \n" -#~ "temperatur" - -#~ msgid "Height:" -#~ msgstr "Höjd:" - -#~ msgid "" -#~ "Height of the clearance cylinder around extruder. Used as input of auto-" -#~ "arrange to avoid collision when print object by object" -#~ msgstr "" -#~ "Höjden på fritt cylinder område runt extrudern: Används som input för " -#~ "auto-placering för att undvika kollision när man skriver ut objekt för " -#~ "objekt" - -#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Importera 3MF/STL/STEP/OBJ/AMF" - -#~ msgid "In the calibration of extrusion flow" -#~ msgstr "Vid kalibrering av extruderingsflödet" - -#~ msgid "In the calibration of laser scanner" -#~ msgstr "Vid kalibrering av laserskanner" - -#~ msgid "Initialize failed [%d]!" -#~ msgstr "Start misslyckad [%d]!" - -#~ msgid "Inner wall speed" -#~ msgstr "Inre vägg hastighet" - -#~ msgid "" -#~ "It seems object %s needs support to print. Please enable support " -#~ "generation." -#~ msgstr "" -#~ "Objekt verkar %s behöva support för att skrivas ut. Aktivera support " -#~ "valen." - -#~ msgid "Line type" -#~ msgstr "Linje typ" - -#~ msgid "Management" -#~ msgstr "Handhavande" - -#~ msgid "Max travel detour distance" -#~ msgstr "Max undvikande förflyttnings avstånd" - -#~ msgid "" -#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " -#~ "detour distance is large than this value" -#~ msgstr "" -#~ "Max undvikande förflyttnings avstånd för att undvika väggar. Om avståndet " -#~ "överstiger detta värde, kommer ingen undvikande förflyttning att ske" - -#~ msgid "Module" -#~ msgstr "Modul" - -#~ msgid "Monitoring" -#~ msgstr "Övervakar" - -#~ msgid "Monitoring Recording" -#~ msgstr "Övervaknings Inspelning" - -#~ msgid "Open &PrusaSlicer" -#~ msgstr "Öppna &PrusaSlicer" - -#~ msgid "Open PrusaSlicer" -#~ msgstr "Öppna PrusaSlicer" - -#~ msgid "Output file" -#~ msgstr "Utdatafil" - -#~ msgid "Part Cooling" -#~ msgstr "Del Kylning" - -#~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Paus (temperaturfel i byggplattan)" - -#~ msgid "Pause(hotend temperature error)" -#~ msgstr "Paus (fel på temperaturen i hotend)" - -#~ msgid "Pause(toolhead shell off)" -#~ msgstr "Paus (verktygshuvudets skal är av)" - -#~ msgid "Per object edit" -#~ msgstr "Redigera per objekt" - -#~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "\n" - -#~ msgid "Plate %d: %s does not support filament %s.\n" -#~ msgstr "Plattan %d: %s stöds ej av filament %s.\n" - -#~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:\n" -#~ msgstr "\n" - -#~ msgid "Please fill report first." -#~ msgstr "Fyll i rapporten först." - -#~ msgid "Please upgrade your printer first" -#~ msgstr "Uppgradera din skrivare först" - -#~ msgid "Position:" -#~ msgstr "Position:" - -#~ msgid "" -#~ "Preview only mode:\n" -#~ "The loaded file contains gcode only." -#~ msgstr "" -#~ "Endast förhandsgranskningsläge:\n" -#~ "Den inlästa filen innehåller endast G-kod." - -#~ msgid "Preview only mode for gcode file." -#~ msgstr "Endast förhandsgranskningsläge för G-kod." - -#~ msgid "Printer Selection" -#~ msgstr "Skrivar Val" - -#~ 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 printed with transparent filament, the mixed color infill will be " -#~ "seen outside" -#~ msgstr "" -#~ "Rensning efter filamentbyte kommer att göras inuti objektens fyllningar. " -#~ "Detta kan minska mängden avfall och minska utskriftstiden. Om väggarna är " -#~ "tryckta med transparent filament kommer den blandade färgfyllningen att " -#~ "synas." - -#~ msgid "" -#~ "Purging after filament change will be done inside objects' support. This " -#~ "may lower the amount of waste and decrease the print time" -#~ msgstr "" -#~ "Rensning efter filamentändring kommer att göras inuti objektens support. " -#~ "Detta kan minska mängden avfall och minska utskriftstiden." - -#~ msgid "" -#~ "Push new filament \n" -#~ "into extruder" -#~ msgstr "" -#~ "Mata nytt filament\n" -#~ "till extrudern" - -#~ msgid "" -#~ "Record timelapse video of printing without showing toolhead. In this mode " -#~ "the toolhead docks near the excess chute at each layer change, and then a " -#~ "snapshot is taken with the chamber camera. When printing finishes a " -#~ "timelapse video is composed of all the snapshots." -#~ msgstr "" -#~ "Record timelapse video of printing without showing the toolhead. In this " -#~ "mode the toolhead docks near the excess chute at each layer change, and " -#~ "then a snapshot is taken with the chamber camera. When printing finishes, " -#~ "a timelapse video is created from all the snapshots." - -#~ msgid "Reduce Triangles" -#~ msgstr "Reducera Trianglar" - -#~ msgid "Reload item" -#~ msgstr "Ladda om objektet" - -#~ msgid "Reload items" -#~ msgstr "Ladda om objekten" - -#~ msgid "Repair" -#~ msgstr "Reparera" - -#~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Reparera modellens mesh om den inte är mångfaldig" - -#~ msgid "Report" -#~ msgstr "Rapportera" - -#~ msgid "Rotation:" -#~ msgstr "Rotation:" - -#~ msgid "Save configuration as:" -#~ msgstr "Spara konfigurationen som:" - -#~ msgid "Sending" -#~ msgstr "Skickar" - -#~ msgid "Set pen size" -#~ msgstr "Välj penn storlek" - -#~ msgid "Shift + Any arrow" -#~ msgstr "Skift+valfri pil" - -#~ msgid "Shift + Mouse wheel" -#~ msgstr "Shift+mushjulet" - -#~ msgid "Show Model Mesh(TODO)" -#~ msgstr "Visa Modell Mesh(TODO)" - -#~ msgid "Show Model Shadow(TODO)" -#~ msgstr "Visa Modell Skuggor(TODO)" - -#~ msgid "Show Printable Box(TODO)" -#~ msgstr "Visa Utskriftbar Box(TODO)" - -#~ msgid "Spiral mode" -#~ msgstr "Spiral läge" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, \n" -#~ "support is disabled, top shell layers is 0 and sparse infill density is " -#~ "0\n" -#~ msgstr "" -#~ "Spiral läge fungerar bara när vägg antalet är 1,\n" -#~ "support är inaktiverad, top lager är 0 och låg ifyllnads densitet är 0\n" - -#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" -#~ msgstr "" -#~ "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om " -#~ "%s s" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support custom support gap,but may cause extra filament switches if " -#~ "support is specified as different extruder with object" -#~ msgstr "" -#~ "Support lager använder lagerhöjd oberoende av objekt lager. Detta för att " -#~ "stöda custom support mellanrum, detta kan orsaka extra filament byten om " -#~ "support (materialet) är vald som en annan extruder än objektets" - -#~ msgid "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "Switch to zig-zag pattern?\n" -#~ "Yes - switch to zig-zag pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" -#~ msgstr "" -#~ "Ändra till Zig-Zag mönster?\n" -#~ "JA - Byta till Zig-Zag mönster automatiskt\n" -#~ "NEJ - Återställ densiteten till standard inte 100% värdet automatiskt\n" - -#~ msgid "Swith cloud environment, Please login again!" -#~ msgstr "Byte av moln miljö, Logga in igen!" - -#~ msgid "" -#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " -#~ "unrecognized:\n" -#~ msgstr "" -#~ "3mf's version %s är nyare än %s's version %s, Följande nycklar känns inte " -#~ "igen:\n" - -#~ msgid "" -#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " -#~ "your software.\n" -#~ msgstr "\n" - -#~ msgid "The Config is not compatible and can not be loaded." -#~ msgstr "Ej kompatibel konfiguration; kan inte laddas." - -#~ msgid "" -#~ "The firmware versions of printer and AMS are too low.Please update to the " -#~ "latest version before sending the print job" -#~ msgstr "" -#~ "Programvarans version av skrivare och AMS är för låga. Uppdatera till den " -#~ "senaste versionen innan du skickar utskriftsjobbet" - -#~ msgid "" -#~ "The model has overlapping or self-intersecting facets. I tried to repair " -#~ "it, however you might want to check the results or repair the input file " -#~ "and retry." -#~ msgstr "" -#~ "Modellen har överlappande eller självkorsande aspekter.Reparation utförd, " -#~ "men kontrollera resultaten eller reparera indatafilen och försöka igen." - -#~ msgid "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type.\n" -#~ msgstr "\n" - -#~ 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" -#~ msgstr "" -#~ "Detta objekt kommer att användas för att rensa nozzlen efter ett filament " -#~ "byte för att spara filament och minska utskriftstiden. Objektens färger " -#~ "blandas som ett resultat" - -#~ 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. Zero means no limit" -#~ msgstr "" -#~ "Denna inställning står för volymen av filament som kan smältas och " -#~ "extruderas per sekund. Utskriftshastigheten begränsas av max volymetrisk " -#~ "hastighet vid för hög och orimlig hastighetsinställning. 0 betyder ingen " -#~ "gräns" - -#~ msgid "Timelapse Wipe Tower" -#~ msgstr "Timelapse Wipe Tower" - -#~ msgid "Translation" -#~ msgstr "Översättning" - -#~ msgid "Unable to create zip file" -#~ msgstr "Det gick inte att skapa zip-fil" - -#~ msgid "User pause" -#~ msgstr "Användarpaus" - -#~ msgid "Waiting" -#~ msgstr "Väntar" - -#~ 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\".\n" -#~ msgstr "\n" - -#~ msgid "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings after switching preset?" -#~ msgstr "" -#~ "Förinställningarna har ändrats. \n" -#~ "Behålla dessa ändrade inställningar efter byte av förinställningar?" - -#~ msgid "Zig zag" -#~ msgstr "Zig zag" - -#~ msgid " Object:" -#~ msgstr " Objekt:" - -#~ msgid "" -#~ " is too close to exclusion area, there may be collisions when printing.\n" -#~ msgstr "\n" - -#~ msgid "" -#~ " is too close to exclusion area, there will be collisions when printing.\n" -#~ msgstr " för tätt inpå den isolerade ytan, utskriften kolliderar.\n" - -#~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr "\n" - -#~ msgid " is too close to others, there will be collisions when printing.\n" -#~ msgstr " för tätt inpå andra, utskriften kolliderar.\n" - -#~ msgid "hybrid(auto)" -#~ msgstr "hybrid(auto)" - -#~ msgid "normal" -#~ msgstr "normal" - -#~ msgid "" -#~ "normal(auto) and tree(auto) is used to generate support automatically. If " -#~ "normal or tree is selected, only support enforcers are generated" -#~ msgstr "" -#~ "normal(auto), hybrid(auto) och tree(auto) används för att skapa support " -#~ "automatiskt. Om normal eller tree är vald, kommer endast tvingande " -#~ "support skapas" - -#~ msgid "the 3mf is not compatible, load geometry data only!" -#~ msgstr "3mf ej kompatibel, laddar endast geometrin !" - -#~ msgid "tree" -#~ msgstr "träd" - -#~ msgid "Pause Print" -#~ msgstr "Pausa utskrift" - -#~ msgid "Edit Pause Print Message" -#~ msgstr "Redigera Paus Print Meddelande" - -#~ msgid "Delete Pause Print" -#~ msgstr "Radera Pausa utskrift" - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "\n" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "\n" -#~ "%1% för tätt inpå den isolerade ytan, utskriften kolliderar." - -#~ msgid "" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "%1% för tätt inpå den isolerade ytan, utskriften kolliderar." - -#~ msgid "&Edit" -#~ msgstr "&Redigera" - -#~ msgid "0%" -#~ msgstr "0%" - -#~ msgid "AMSMaterialsSetting" -#~ msgstr "AMS Material Inställning" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS automatisk växling av filament" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "Aktuell AMS-inställningar stöder inte användning av en extern spole." - -#~ msgid "AWS PRE host" -#~ msgstr "AWS PRE värd" - -#~ msgid "AWS host" -#~ msgstr "AWS värd" - -#~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "Faktisk volym = Rensnings Volym* Multiplikator" - -#~ msgid "Add Custom Printer" -#~ msgstr "Lägg till anpassad skrivare" - -#~ msgid "" -#~ "An object is layed over the boundary of plate.\n" -#~ "Please solve the problem by moving it totally inside or outside plate." -#~ msgstr "" -#~ "Ett objekt är placerad över byggplattans begränsningar.\n" -#~ "Flytta objektet så det är helt inom eller utom byggplattans begränsningar." - -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "Arachne funktionen fungerar bara när ned saktning vid överhäng är " -#~ "inaktiverad.\n" -#~ "Detta kan leda till en minskning av kvaliteten på överhängens yta när du " -#~ "skriver ut snabbt." - -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly\n" -#~ msgstr "" -#~ "Arachne-motorn fungerar bara när ned saktning vid överhäng är " -#~ "inaktiverad.\n" -#~ "Detta kan leda till försämrad kvalitet på överhängytor när du skriver ut " -#~ "snabbt.\n" - -#~ msgid "Auto arrange" -#~ msgstr "Auto arrangera" - -#~ msgid "Auto refill" -#~ msgstr "Automatisk påfyllning" - -#~ msgid "" -#~ "Bed exclude area that can't used as printable area in X-Y plane. For " -#~ "example, the bottom left area which is used to cut filament in X1 when " -#~ "printing multi colors with AMS. The area is expressed as polygon by " -#~ "points in following format: \"XxY, XxY, ...\"" -#~ msgstr "" -#~ "Byggytan utesluter område som inte kan användas som utskrivbart område i " -#~ "XY-planet. Till exempel, det nedre vänstra området som används för att " -#~ "skära glödtråden i X1 när du skriver ut flera färger med en AMS. Området " -#~ "uttrycks som polygon med punkter i följande format: ”XxY, XxY,...”" - -#~ msgid "" -#~ "Calibration completed. Please select the factors according to the left " -#~ "figure and fill them in the input boxes." -#~ msgstr "" -#~ "Kalibreringen klar. Välj faktorerna enligt vänster figur och fyll i dem i " -#~ "inmatningsrutorna." - -#~ msgid "" -#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " -#~ "same LAN?" -#~ msgstr "" -#~ "Kan inte identifiera LAN-IP-adressen för %s. Är %s och Bambu Studio i " -#~ "samma LAN?" - -#~ msgid "Choose save directory" -#~ msgstr "Välj spara register" - -#~ msgid "Clean" -#~ msgstr "Rensa" - -#~ msgid "Clipping of view" -#~ msgstr "Klippning av vy" - -#~ msgid "" -#~ "Desiccant status lower than two bars indicates that desiccant can be " -#~ "inactive. Please change the desiccant.(Higher the better)" -#~ msgstr "" -#~ "Torkmedels status lägre än två stänger indikerar att torkmedlet kan vara " -#~ "inaktivt. Byt torkmedel. (ju högre, desto bättre)" - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Inaktivera överhäng sakta ner automatiskt? \n" -#~ "Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" -#~ "Nej - Använd inte Arachne för denna utskrift" - -#~ msgid "Downloading Bambu Network plug-in" -#~ msgstr "Nedladdning av Bambu Network Plug-in" - -#~ msgid "Edit plate setitngs" -#~ msgstr "Redigera byggplattans inställningar" - -#~ msgid "Entering Seam painting" -#~ msgstr "Inmatning söm målning" - -#~ msgid "Export." -#~ msgstr "Exportera." - -#~ msgid "Export G-Code." -#~ msgstr "Exportera G-kod." - #~ msgid "" #~ "Extrusion compensation calibration is not supported when using Textured " #~ "PEI Plate" @@ -11508,12 +10749,33 @@ msgstr "" #~ "Det gick inte att ansluta till skrivaren via LAN. Ange den rätta " #~ "skrivarens IP-adress och åtkomstkod." +#~ msgid "Failed to get ticket" +#~ msgstr "Misslyckades med att få en kvittering" + #~ msgid "Failed to parse login report reason111" #~ msgstr "Det gick inte att analysera orsaken till inloggningsrapporten" +#~ msgid "Failed uploading print file" +#~ msgstr "Uppladdning av utskrifts filen misslyckades" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "Det gick inte att ladda upp utskriftsfilen. Ange IP-adress igen." +#~ msgid "Failure of bind" +#~ msgstr "Fel vid sammankoppling" + +#~ msgid "Failure of printer login" +#~ msgstr "Fel i inloggningen till skrivaren" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "Mata in nytt filament från extern spole" + +#~ msgid "Filament 1" +#~ msgstr "Filament 1" + +#~ msgid "Filament N XX" +#~ msgstr "Filament N XX" + #~ msgid "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." @@ -11549,9 +10811,56 @@ msgstr "" #~ "Filament för att skriva ut support och rafts. ”Standard” betyder inget " #~ "specifikt filament för support och nuvarande filament används" +#~ msgid "" +#~ "Filament to print support and skirt. 0 means no specific filament for " +#~ "support and current filament is used" +#~ msgstr "" +#~ "Filament för att skriva ut support och skirt med. 0 betyder inget " +#~ "speciellt filament för support och nuvarande filament används" + +#~ msgid "" +#~ "Filament to print support interface. 0 means no specific filament for " +#~ "support interface and current filament is used" +#~ msgstr "" +#~ "Support filament för utskrift. 0 betyder att inget specifikt filament för " +#~ "support gränssnitt och nuvarande filament används" + #~ msgid "Filaments Auto refill" #~ msgstr "Filament Auto-refill" +#~ msgid "Filaments Selection" +#~ msgstr "Filament Val" + +#~ msgid "Filaments replace" +#~ msgstr "Reserv filament" + +#~ msgid "Fix model locally" +#~ msgstr "Åtgärda modellen lokalt" + +#~ msgid "Fix model through cloud" +#~ msgstr "Åtgärda modellen via molnet" + +#~ msgid "Flushed filament" +#~ msgstr "Rensat filament" + +#~ msgid "" +#~ "Force cooling fan to be specific speed when overhang degree of printed " +#~ "part exceeds this value. Expressed as percentage which indicides how much " +#~ "width of the line without support from lower layer" +#~ msgstr "" +#~ "Tvinga kylfläktens hastighet när överhängsgraderna överstiger detta " +#~ "värde. Uttryckt i procent som indikerar linjebredden utan stöd från lägre " +#~ "lager" + +#~ msgid "Fragment Filter" +#~ msgstr "Fragment Filter" + +#~ msgid "Fragment area" +#~ msgstr "Fragmentområde" + +#~ msgid "Fragment filter" +#~ msgstr "Fragment filter" + #~ msgid "G-code" #~ msgstr "G-kod" @@ -11562,9 +10871,27 @@ msgstr "" #~ "Grönt representerar att AMS-fuktigheten är normal, och orange och rött " #~ "representerar att luftfuktigheten är för hög. (ju lägre, desto bättre)" +#~ msgid "" +#~ "Heat the nozzle to target \n" +#~ "temperature" +#~ msgstr "" +#~ "Värm nozzel till vald \n" +#~ "temperatur" + #~ msgid "Heat the nozzle to target temperature" #~ msgstr "Värm nozzel till vald temperatur" +#~ msgid "Height:" +#~ msgstr "Höjd:" + +#~ msgid "" +#~ "Height of the clearance cylinder around extruder. Used as input of auto-" +#~ "arrange to avoid collision when print object by object" +#~ msgstr "" +#~ "Höjden på fritt cylinder område runt extrudern: Används som input för " +#~ "auto-placering för att undvika kollision när man skriver ut objekt för " +#~ "objekt" + #~ msgid "" #~ "If enabled, a timelapse video will be generated for each print. After " #~ "each layer is printed, the toolhead will move to the excess chute, and " @@ -11581,12 +10908,33 @@ msgstr "" #~ "processen att ta en ögonblicksbild krävs ett huvudtorn för nozzelns " #~ "priming." +#~ msgid "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importera 3MF/STL/STEP/OBJ/AMF" + #~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." #~ msgstr "Importera geometri data från STL/STEP/3MF/OBJ/AMF filer." +#~ msgid "In the calibration of extrusion flow" +#~ msgstr "Vid kalibrering av extruderingsflödet" + +#~ msgid "In the calibration of laser scanner" +#~ msgstr "Vid kalibrering av laserskanner" + +#~ msgid "Initialize failed [%d]!" +#~ msgstr "Start misslyckad [%d]!" + +#~ msgid "Initialize failed (Not supported by printer)!" +#~ msgstr "Initieringen misslyckades (stöds inte av skrivaren)!" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "Initieringen misslyckades (stöds inte i LAN-läge)!" + #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "Initieringen misslyckades (stöds inte utan fjärrvideo tunnel)!" +#~ msgid "Inner wall speed" +#~ msgstr "Inre vägg hastighet" + #~ msgid "" #~ "It seems object %s has completely floating regions. Please re-orient the " #~ "object or enable support generation." @@ -11600,9 +10948,25 @@ msgstr "" #~ "Det verkar som om objekt %s har stora överhäng. Vänligen aktivera " #~ "supportgenerering." +#~ msgid "" +#~ "It seems object %s needs support to print. Please enable support " +#~ "generation." +#~ msgstr "" +#~ "Objekt verkar %s behöva support för att skrivas ut. Aktivera support " +#~ "valen." + +#~ msgid "Keep lower part" +#~ msgstr "Behåll lägre del" + +#~ msgid "Keep upper part" +#~ msgstr "Behåll övre del" + #~ msgid "Layer Time(log): " #~ msgstr "Lagertid (logg): " +#~ msgid "Layer Time (log)" +#~ msgstr "Lagertid (logg)" + #~ msgid "Layers: %d/%d" #~ msgstr "Lager: %d/%d" @@ -11612,34 +10976,120 @@ msgstr "" #~ msgid "Layers: N/A" #~ msgstr "Lager: N/A" +#~ msgid "Layers and Perimeters" +#~ msgstr "Lager och perimetrar" + #~ msgid "Leaving Seam painting" #~ msgstr "Lämnar söm målning" +#~ msgid "Line type" +#~ msgstr "Linje typ" + #~ msgid "Loading user presets..." #~ msgstr "Laddar användar inställningarna..." +#~ msgid "Management" +#~ msgstr "Handhavande" + +#~ msgid "Manual" +#~ msgstr "Manuell" + +#~ msgid "Max travel detour distance" +#~ msgstr "Max undvikande förflyttnings avstånd" + +#~ msgid "" +#~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " +#~ "detour distance is large than this value" +#~ msgstr "" +#~ "Max undvikande förflyttnings avstånd för att undvika väggar. Om avståndet " +#~ "överstiger detta värde, kommer ingen undvikande förflyttning att ske" + +#~ msgid "Media" +#~ msgstr "Media" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "Saknar skrivarens LAN-IP!" + #~ msgid "Modify" #~ msgstr "Modifiera" +#~ msgid "Module" +#~ msgstr "Modul" + +#~ msgid "Monitoring" +#~ msgstr "Övervakar" + +#~ msgid "Monitoring Recording" +#~ msgstr "Övervaknings Inspelning" + #~ msgid "NO AMS" #~ msgstr "INGEN AMS" +#~ msgid "No files" +#~ msgstr "Inga filer" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "Ej tillgänglig i LAN-läge!" + #~ msgid "Not supported." #~ msgstr "Stöds ej" +#~ msgid "Not supported by this model of printer!" +#~ msgstr "Stöds inte av denna modell av skrivare!" + #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "Obs: Placeringen av IP och åtkomstkod på maskinen är som följer:" +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "" +#~ "Ett objekt har ett tomt första lager och kan inte skrivas ut.Skär ut " +#~ "botten eller aktivera support." + +#~ msgid "Open &PrusaSlicer" +#~ msgstr "Öppna &PrusaSlicer" + +#~ msgid "Open PrusaSlicer" +#~ msgstr "Öppna PrusaSlicer" + +#~ msgid "Output file" +#~ msgstr "Utdatafil" + #~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" #~ msgstr "P1P Allmänna inställningar - WLAN i sidofältet på huvudskärmen" #~ msgid "Paint-on seam editing" #~ msgstr "Redigering av måla på sömmen" +#~ msgid "Part Cooling" +#~ msgstr "Del Kylning" + +#~ msgid "Pause(heated bed temperature error)" +#~ msgstr "Paus (temperaturfel i byggplattan)" + +#~ msgid "Pause(hotend temperature error)" +#~ msgstr "Paus (fel på temperaturen i hotend)" + +#~ msgid "Pause(toolhead shell off)" +#~ msgstr "Paus (verktygshuvudets skal är av)" + +#~ msgid "Per object edit" +#~ msgstr "Redigera per objekt" + +#~ msgid "Plate %d: %s does not support filament %s\n" +#~ msgstr "Plattan %d: %s stöder ej filamentet %s.\n" + +#~ msgid "Plate %d: %s does not support filament %s.\n" +#~ msgstr "Plattan %d: %s stöds ej av filament %s.\n" + #~ msgid "Plate %d: %s does not support filament %s (%s)." #~ msgstr "Plattan %d: %s stöder inte filamentet %s (%s)." +#~ msgid "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "Plattan %d: %s stöder inte filamentet %s (%s).\n" + #~ msgid "Plate type" #~ msgstr "Typ av byggplatta" @@ -11656,6 +11106,35 @@ msgstr "" #~ "Kontrollera följande information och klicka på Bekräfta för att fortsätta " #~ "skicka utskriften:" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:\n" +#~ msgstr "" +#~ "Kontrollera följande information och klicka på Bekräfta för att fortsätta " +#~ "skicka utskrift:\n" + +#~ msgid "Please fill report first." +#~ msgstr "Fyll i rapporten först." + +#~ msgid "Please log out and login to the printer again." +#~ msgstr "Logga ut och logga in på skrivaren igen." + +#~ msgid "Please upgrade your printer first" +#~ msgstr "Uppgradera din skrivare först" + +#~ msgid "Position:" +#~ msgstr "Position:" + +#~ msgid "" +#~ "Preview only mode:\n" +#~ "The loaded file contains gcode only." +#~ msgstr "" +#~ "Endast förhandsgranskningsläge:\n" +#~ "Den inlästa filen innehåller endast G-kod." + +#~ msgid "Preview only mode for gcode file." +#~ msgstr "Endast förhandsgranskningsläge för G-kod." + #~ msgid "" #~ "Prime tower is required by timelapse. Do you want to enable both of them?" #~ msgstr "Prime tower krävs av timelapse. Vill du aktivera dem båda?" @@ -11667,22 +11146,142 @@ msgstr "" #~ "Prime tower krävs av timeplase. Är du säker på att du vill inaktivera dem " #~ "båda?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Detta alternativ gör det möjligt att skriva ut ett torn för att pressa ut " +#~ "(prime) material i nozzeln efter byte till ett nytt material." + +#~ msgid "Print file not found, please slice again" +#~ msgstr "Det gick inte att hitta utskrifts filen; bered den igen" + +#~ msgid "Printer Selection" +#~ msgstr "Skrivar Val" + #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "" #~ "Skrivarens programvara stöder inte materialet = > AMS-fackens mappning." +#~ msgid "Printing List" +#~ msgstr "Utskrifts Lista" + +#~ 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 printed with transparent filament, the mixed color infill will be " +#~ "seen outside" +#~ msgstr "" +#~ "Rensning efter filamentbyte kommer att göras inuti objektens fyllningar. " +#~ "Detta kan minska mängden avfall och minska utskriftstiden. Om väggarna är " +#~ "tryckta med transparent filament kommer den blandade färgfyllningen att " +#~ "synas." + +#~ msgid "" +#~ "Purging after filament change will be done inside objects' support. This " +#~ "may lower the amount of waste and decrease the print time" +#~ msgstr "" +#~ "Rensning efter filamentändring kommer att göras inuti objektens support. " +#~ "Detta kan minska mängden avfall och minska utskriftstiden." + +#~ msgid "" +#~ "Push new filament \n" +#~ "into extruder" +#~ msgstr "" +#~ "Mata nytt filament\n" +#~ "till extrudern" + +#~ msgid "" +#~ "Record timelapse video of printing without showing toolhead. In this mode " +#~ "the toolhead docks near the excess chute at each layer change, and then a " +#~ "snapshot is taken with the chamber camera. When printing finishes a " +#~ "timelapse video is composed of all the snapshots." +#~ msgstr "" +#~ "Spela in timelapse video av utskrift utan att visa verktygshuvudet. I det " +#~ "här läget dockar verktygshuvudet nära utloppsrännan vid varje lagerbyte, " +#~ "och sedan tas en ögonblicksbild med kammar kameran. När utskriften är " +#~ "klar skapas en timelapse video från alla ögonblicksbilder." + +#~ msgid "Reduce Triangles" +#~ msgstr "Reducera Trianglar" + +#~ msgid "Reload item" +#~ msgstr "Ladda om objektet" + +#~ msgid "Reload items" +#~ msgstr "Ladda om objekten" + +#~ msgid "Repair" +#~ msgstr "Reparera" + +#~ msgid "Repair the model's meshes if it is non-manifold mesh" +#~ msgstr "Reparera modellens mesh om den inte är mångfaldig" + +#~ msgid "Report" +#~ msgstr "Rapportera" + +#~ msgid "Rotation:" +#~ msgstr "Rotation:" + +#~ msgid "Save configuration as:" +#~ msgstr "Spara konfigurationen som:" + #~ msgid "Select Bed Type" #~ msgstr "Välj typ av byggplatta" +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "Det gick inte att skicka till skrivaren. Var god försök igen." + +#~ msgid "Sending" +#~ msgstr "Skickar" + +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "Skickar G-kod filen via molntjänsten" + +#~ msgid "Set Printable" +#~ msgstr "Ange utskrivbar" + +#~ msgid "Set Unprintable" +#~ msgstr "Ange ej utskrivbar" + +#~ msgid "Set pen size" +#~ msgstr "Välj penn storlek" + +#~ msgid "Shift + Any arrow" +#~ msgstr "Skift+valfri pil" + +#~ msgid "Shift + Mouse wheel" +#~ msgstr "Shift+mushjulet" + #~ msgid "Show Log" #~ msgstr "Visa Logg" +#~ msgid "Show Model Mesh(TODO)" +#~ msgstr "Visa Modell Mesh(TODO)" + +#~ msgid "Show Model Shadow(TODO)" +#~ msgstr "Visa Modell Skuggor(TODO)" + +#~ msgid "Show Printable Box(TODO)" +#~ msgstr "Visa Utskriftbar Box(TODO)" + #~ msgid "Spaghetti Detection" #~ msgstr "Spaghetti Detektion" #~ msgid "Spaghetti and Excess Chute Pileup Detection" #~ msgstr "Detektion av spaghetti och avfallsränna" +#~ msgid "Spiral mode" +#~ msgstr "Spiral läge" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, \n" +#~ "support is disabled, top shell layers is 0 and sparse infill density is " +#~ "0\n" +#~ msgstr "" +#~ "Spiral läge fungerar bara när vägg antalet är 1,\n" +#~ "support är inaktiverad, top lager är 0 och låg ifyllnads densitet är 0\n" + #~ 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 " @@ -11702,6 +11301,11 @@ msgstr "" #~ msgid "Stop printing when spaghetti detected" #~ msgstr "Stoppa utskriften när spaghetti fenomen upptäcks" +#~ msgid "Successfully sent.Will automatically jump to the device page in %s s" +#~ msgstr "" +#~ "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om " +#~ "%s s" + #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" @@ -11714,6 +11318,15 @@ msgstr "" #~ msgid "Support base" #~ msgstr "Support bas" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support custom support gap,but may cause extra filament switches if " +#~ "support is specified as different extruder with object" +#~ msgstr "" +#~ "Support lager använder lagerhöjd oberoende av objekt lager. Detta för att " +#~ "stöda custom support mellanrum, detta kan orsaka extra filament byten om " +#~ "support (materialet) är vald som en annan extruder än objektets" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support customizing z-gap and save print time." @@ -11721,15 +11334,54 @@ msgstr "" #~ "Supportens lager använder lagerhöjd oberoende med objektlager. Detta är " #~ "för att stödja anpassning av z-gap och spara utskriftstid." +#~ msgid "" +#~ "Switch to rectilinear pattern?\n" +#~ "Yes - switch to rectilinear pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Byta till rätlinjigt mönster?\n" +#~ "Ja - växlar automatiskt till rätlinjigt mönster\n" +#~ "Nej - återställ automatiskt tätheten till standardvärdet som inte är 100 " +#~ "%\n" + +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Ändra till Zig-Zag mönster?\n" +#~ "JA - Byta till Zig-Zag mönster automatiskt\n" +#~ "NEJ - Återställ densiteten till standard inte 100% värdet automatiskt\n" + +#~ msgid "Swith cloud environment, Please login again!" +#~ msgstr "Byte av moln miljö, Logga in igen!" + #~ msgid "Sync material list from AMS" #~ msgstr "Synkronisera materiallista från AMS" #~ msgid "The %s filament is too soft to be used with the AMS" #~ msgstr "Filament %s är för mjukt för att kunna användas med AMS" +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Found following keys " +#~ "unrecognized:\n" +#~ msgstr "" +#~ "3mf's version %s är nyare än %s's version %s, Följande nycklar känns inte " +#~ "igen:\n" + +#~ msgid "" +#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " +#~ "your software.\n" +#~ msgstr "" +#~ "3mf:s version %s är nyare än %s version %s; föreslår att du uppdaterar " +#~ "din programvara.\n" + #~ msgid "The 3mf is not from Bambu lab, load geometry data only." #~ msgstr "3mf kommer inte från Bambu Lab, laddar endast geometri data." +#~ msgid "The Config is not compatible and can not be loaded." +#~ msgstr "Ej kompatibel konfiguration; kan inte laddas." + #~ msgid "" #~ "The P1P printer does not support smooth timelapse, use traditional " #~ "timelapse instead." @@ -11737,6 +11389,13 @@ msgstr "" #~ "P1P-skrivaren stöder inte smooth timelapse, använd traditionell timelapse " #~ "istället." +#~ msgid "" +#~ "The firmware versions of printer and AMS are too low.Please update to the " +#~ "latest version before sending the print job" +#~ msgstr "" +#~ "Programvarans version av skrivare och AMS är för låga. Uppdatera till den " +#~ "senaste versionen innan du skickar utskriftsjobbet" + #~ msgid "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." @@ -11744,6 +11403,21 @@ msgstr "" #~ "Rensnings volymen är mindre än minimivärdet och kommer automatiskt att " #~ "ställas in till minimivärdet." +#~ msgid "" +#~ "The model has overlapping or self-intersecting facets. I tried to repair " +#~ "it, however you might want to check the results or repair the input file " +#~ "and retry." +#~ msgstr "" +#~ "Modellen har överlappande eller självkorsande aspekter.Reparation utförd, " +#~ "men kontrollera resultaten eller reparera indatafilen och försöka igen." + +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "" +#~ "Utskrifts filen överskrider den högsta tillåtna storleken (1 GB). " +#~ "Förenkla modellen och bered igen" + #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " @@ -11753,6 +11427,18 @@ msgstr "" #~ "den för närvarande valda fysiska skrivaren. Det rekommenderas att du " #~ "bereder om efter att ha valt rätt skrivartyp." +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type.\n" +#~ msgstr "" +#~ "Skrivar typen som används för att generera G-kod är inte samma typ som " +#~ "den för närvarande valda fysiska skrivaren. Det är rekommenderat att göra " +#~ "en ny beredning genom att välja samma skrivartyp.\n" + +#~ msgid "The region parameter is incorrrect" +#~ msgstr "Region parametern är felaktig." + #~ msgid "" #~ "There are some unknown filaments mapped to generic preset. Please update " #~ "Bambu Studio or restart Bambu Studio to check if there is an update to " @@ -11771,12 +11457,82 @@ msgstr "" #~ "insidan av hål eller bägge. Auto betyder att brim positionen och brim " #~ "bredden är analyserad och beräknas automatiskt" +#~ 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" +#~ msgstr "" +#~ "Detta objekt kommer att användas för att rensa nozzlen efter ett filament " +#~ "byte för att spara filament och minska utskriftstiden. Objektens färger " +#~ "blandas som ett resultat" + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "" +#~ "Inställningen bestämmer om det ska läggas till ifyllnad i stora hålrum av " +#~ "tree support" + +#~ 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. Zero means no limit" +#~ msgstr "" +#~ "Denna inställning står för volymen av filament som kan smältas och " +#~ "extruderas per sekund. Utskriftshastigheten begränsas av max volymetrisk " +#~ "hastighet vid för hög och orimlig hastighetsinställning. 0 betyder ingen " +#~ "gräns" + +#~ msgid "Timelapse Wipe Tower" +#~ msgstr "Timelapse Wipe Tower" + #~ msgid "Timelapse without toolhead" #~ msgstr "Timelapse utan verktygshuvud" +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "Minsta Top Skal Tjocklek" + +#~ msgid "Top Solid Layers" +#~ msgstr "Massiva Top Lager" + +#~ msgid "Translation" +#~ msgstr "Översättning" + +#~ msgid "Tree support with infill" +#~ msgstr "Tree support med ifyllnad" + #~ msgid "Unable to connect printer" #~ msgstr "Det går inte att ansluta skrivaren" +#~ msgid "Unable to create zip file" +#~ msgstr "Det gick inte att skapa zip-fil" + +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "" +#~ "Uppladdningsuppgiften tog timeout. Kontrollera nätverksproblemet och " +#~ "försök igen" + +#~ msgid "User authorization timeout" +#~ msgstr "Timeout för användarauktorisering" + +#~ msgid "User pause" +#~ msgstr "Användarpaus" + +#~ msgid "Waiting" +#~ msgstr "Väntar" + +#~ 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\".\n" +#~ msgstr "" +#~ "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " +#~ "till ett \"Timelapse Wipe Tower\".\n" +#~ "genom att högerklicka på den tomma positionen på byggplattan och välja " +#~ "\"Lägg till Primitiv\"->\"Timelapse Wipe Tower\".\n" + #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " #~ "bridge may have no archor at the end of line. This cause falling and bad " @@ -11809,6 +11565,9 @@ msgstr "" #~ "följande inställningar:\n" #~ "0 topp z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster." +#~ msgid "Wrong Access code" +#~ msgstr "Fel åtkomstkod" + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" @@ -11821,9 +11580,41 @@ msgstr "" #~ "Du kommer att radera %u filer från skrivaren. Är du säker på att du vill " #~ "fortsätta?" +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings after switching preset?" +#~ msgstr "" +#~ "Förinställningarna har ändrats. \n" +#~ "Behålla dessa ändrade inställningar efter byte av förinställningar?" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "(Sort)" #~ msgstr "(Sortera)" +#~ msgid " Object:" +#~ msgstr " Objekt:" + +#~ msgid "" +#~ " is too close to exclusion area, there may be collisions when printing.\n" +#~ msgstr "" +#~ " är för nära undantagsområdet; det kan förekomma kollisioner vid " +#~ "utskrift.\n" + +#~ msgid "" +#~ " is too close to exclusion area, there will be collisions when printing.\n" +#~ msgstr " för tätt inpå den isolerade ytan, utskriften kolliderar.\n" + +#~ msgid " is too close to others, there may be collisions when printing.\n" +#~ msgstr " är för nära andra; det kan uppstå kollisioner vid utskrift.\n" + +#~ msgid " is too close to others, there will be collisions when printing.\n" +#~ msgstr " för tätt inpå andra, utskriften kolliderar.\n" + +#~ msgid " plate %1%:" +#~ msgstr " platta %1%:" + #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" #~ msgstr " avslutas innan en ny modell skapas. Vill du fortsätta?" @@ -11831,5 +11622,25 @@ msgstr "" #~ msgid "default value" #~ msgstr "Standardvärde" +#~ msgid "hybrid(auto)" +#~ msgstr "hybrid(auto)" + +#~ msgid "normal" +#~ msgstr "normal" + +#~ msgid "" +#~ "normal(auto) and tree(auto) is used to generate support automatically. If " +#~ "normal or tree is selected, only support enforcers are generated" +#~ msgstr "" +#~ "normal(auto), hybrid(auto) och tree(auto) används för att skapa support " +#~ "automatiskt. Om normal eller tree är vald, kommer endast tvingande " +#~ "support skapas" + #~ msgid "preparing, export 3mf failed!" #~ msgstr "förberedelse; export av 3mf misslyckades!" + +#~ msgid "the 3mf is not compatible, load geometry data only!" +#~ msgstr "3mf ej kompatibel, laddar endast geometrin !" + +#~ msgid "tree" +#~ msgstr "träd" diff --git a/localization/i18n/zh_cn/OrcaSlicer_zh_CN.po b/localization/i18n/zh_cn/OrcaSlicer_zh_CN.po index 07493dc10..376f9229e 100644 --- a/localization/i18n/zh_cn/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_cn/OrcaSlicer_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-22 19:19+0800\n" -"PO-Revision-Date: 2023-04-01 13:21+0800\n" +"POT-Creation-Date: 2023-08-16 20:22+0800\n" +"PO-Revision-Date: 2023-07-07 09:45+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.3.1\n" msgid "Supports Painting" msgstr "支撑绘制" @@ -536,8 +536,8 @@ msgstr "未定义" msgid "%1% was replaced with %2%" msgstr "%1%已被%2%替换" -msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "此配置可能由新版本的逆戟鲸生成" +msgid "The configuration may be generated by a newer version of BambuStudio." +msgstr "此配置可能由新版本的Bambu Studio生成。" msgid "Some values have been replaced. Please check them:" msgstr "部分数值已被替换,请检查:" @@ -562,33 +562,45 @@ msgstr "配置文件“%1%”已被加载,但部分数值未被识别。" msgid "V" msgstr "V" +msgid "Internal Version" +msgstr "内部版本" + +msgid "Version" +msgstr "版本" + msgid "" -"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"BambuStudio 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 即将终止运行。这可能是个缺陷,希望您可以报告此问题," -"我们将非常感激。" +"系统内存耗尽,Bambu Studio即将终止运行。这可能是个缺陷,希望您可以报告此问" +"题,我们将非常感激。" msgid "Fatal error" msgstr "致命错误" msgid "" -"OrcaSlicer will terminate because of a localization error. It will be " +"BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." msgstr "" -"遇到本地化错误,OrcaSlicer 即将终止运行。希望您可以报告发生此问题的具体场景," -"我们将非常感激。" +"遇到本地化错误,Bambu Studio即将终止运行。希望您可以报告发生此问题的具体场" +"景,我们将非常感激。" msgid "Critical error" msgstr "严重错误" #, boost-format -msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "OrcaSlicer 捕捉到一个未处理的异常:%1%" +msgid "BambuStudio got an unhandled exception: %1%" +msgstr "Bambu Studio捕捉到一个未处理的异常:%1%" + +msgid "Untitled" +msgstr "未命名" msgid "Downloading Bambu Network Plug-in" msgstr "正在下载Bambu网络插件" +msgid "Login information expired. Please login again." +msgstr "登录信息过期。请重新登录。" + msgid "Incorrect password" msgstr "访问码不正确" @@ -597,10 +609,10 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "连接 %s 失败。[SN:%s, code=%s]" msgid "" -"OrcaSlicer configuration file may be corrupted and is not abled to be parsed." -"Please delete the file and try again." +"BambuStudio configuration file may be corrupted and is not abled to be " +"parsed.Please delete the file and try again." msgstr "" -"OrcaSlicer 配置文件可能已损坏而无法解析。请删除此文件并重新启动OrcaSlicer。" +"Bambu Studio配置文件可能已损坏而无法解析。请删除此文件并重新启动BambuStudio。" #, c-format, boost-format msgid "" @@ -618,8 +630,8 @@ msgstr "正在加载配置" msgid "Click to download new version in default browser: %s" msgstr "在默认浏览器中点击下载最新版本: %s" -msgid "The Orca Slicer needs an upgrade" -msgstr "逆戟鲸需要进行升级" +msgid "The Bambu Studio needs an upgrade" +msgstr "Bambu Studio需要进行升级" msgid "This is the newest version." msgstr "已经是最新版本。" @@ -642,8 +654,8 @@ msgstr "选择一个文件(3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "选择一个或多个文件(3mf/step/stl/svg/obj/amf):" -msgid "Choose one file (gcode/3mf):" -msgstr "" +msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" +msgstr "选择一个文件(gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." msgstr "预设已被修改。" @@ -663,12 +675,9 @@ msgid "Open Project" msgstr "打开项目" msgid "" -"The version of Orca Slicer is too low and needs to be updated to the latest " +"The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" -msgstr "逆戟鲸版本过低,需要更新到最新版本方可正常使用" - -msgid "Login information expired. Please login again." -msgstr "登录信息过期。请重新登录。" +msgstr "Bambu Studio版本过低,需要更新到最新版本方可正常使用" msgid "Privacy Policy Update" msgstr "隐私协议更新" @@ -721,8 +730,8 @@ msgstr "打开" msgid "Rename" msgstr "重命名" -msgid "Orca Slicer GUI initialization failed" -msgstr "逆戟鲸图形界面初始化失败" +msgid "Bambu Studio GUI initialization failed" +msgstr "Bambu Studio图形界面初始化失败" #, boost-format msgid "Fatal error, exception catched: %1%" @@ -749,18 +758,6 @@ msgstr "速度" msgid "Strength" msgstr "强度" -msgid "Top Solid Layers" -msgstr "顶部实心层" - -msgid "Top Minimum Shell Thickness" -msgstr "顶部外壳最小厚度" - -msgid "Bottom Solid Layers" -msgstr "底部实心层" - -msgid "Bottom Minimum Shell Thickness" -msgstr "底部外壳最小厚度" - msgid "Ironing" msgstr "熨烫" @@ -818,18 +815,6 @@ msgstr "编辑文字" msgid "Load..." msgstr "加载..." -msgid "Orca Cube" -msgstr "Orca逆方块" - -msgid "3DBenchy" -msgstr "小船" - -msgid "Autodesk FDM Test" -msgstr "欧特克FDM测试" - -msgid "Voron Cube" -msgstr "Voron方块" - msgid "Cube" msgstr "立方体" @@ -839,6 +824,18 @@ msgstr "圆柱体" msgid "Cone" msgstr "锥体" +msgid "Bambu Cube" +msgstr "Bambu方块" + +msgid "Bambu Cube V2" +msgstr "Bambu方块 V2" + +msgid "3DBenchy" +msgstr "小船" + +msgid "ksr FDMTest" +msgstr "欧特克FDM测试" + msgid "Height range Modifier" msgstr "高度范围修改器" @@ -854,12 +851,6 @@ msgstr "设置为独立对象" msgid "Set as individual objects" msgstr "设置为独立对象" -msgid "Fill bed with copies" -msgstr "铺满打印板" - -msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "用选定对象的副本填充床的剩余区域" - msgid "Printable" msgstr "可打印的" @@ -939,8 +930,11 @@ msgstr "组合所选对象为一个多零件对象" msgid "Assemble the selected objects to an object with single part" msgstr "组合所选对象为一个单零件对象" -msgid "Assemble the selected parts to a single part" -msgstr "组合所选零件为单个零件" +msgid "Mesh boolean" +msgstr "网格布尔操作" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "包括并集和差集的网格布尔运算" msgid "Along X axis" msgstr "沿 X 轴" @@ -1059,18 +1053,21 @@ msgstr "设置所选项的耗材丝" msgid "current" msgstr "当前" -msgid "Set Unprintable" -msgstr "设置不可打印" - -msgid "Set Printable" -msgstr "设置可打印" - msgid "Unlock" msgstr "解锁" msgid "Lock" msgstr "锁定" +msgid "Fill bed with copies" +msgstr "铺满打印板" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "用选定对象的副本填充床的剩余区域" + +msgid "Edit Plate Name" +msgstr "编辑盘名" + msgid "Name" msgstr "名称" @@ -1125,6 +1122,9 @@ msgstr "载入文件中" msgid "Error!" msgstr "错误!" +msgid "Failed to get the model data in the current file." +msgstr "无法获取当前文件中的模型数据。" + msgid "Generic" msgstr "通用" @@ -1295,15 +1295,6 @@ msgstr "不支持多个单元格的复制" msgid "Outside" msgstr "盘外" -msgid "Auto" -msgstr "自动" - -msgid "Manual" -msgstr "手动" - -msgid "No-brim" -msgstr "无brim" - msgid " " msgstr " " @@ -1319,6 +1310,21 @@ msgstr "填充密度(%)" msgid "Auto Brim" msgstr "自动Brim" +msgid "Auto" +msgstr "自动" + +msgid "Outer brim only" +msgstr "仅外侧" + +msgid "Inner brim only" +msgstr "仅内侧" + +msgid "Outer and inner brim" +msgstr "内侧和外侧" + +msgid "No-brim" +msgstr "无brim" + msgid "Outer wall speed" msgstr "外墙速度" @@ -1404,7 +1410,7 @@ msgid "Change filament at the beginning of this layer." msgstr "在该层的起始位置更换耗材丝。" msgid "Delete Pause" -msgstr "删除暂停打印" +msgstr "删除暂停" msgid "Delete Custom Template" msgstr "删除自定义模板" @@ -1424,6 +1430,33 @@ msgstr "无打印机" msgid "..." msgstr "" +msgid "Failed to connect to the server" +msgstr "无法连接服务器" + +msgid "Check cloud service status" +msgstr "检查云服务状态" + +msgid "code" +msgstr "" + +msgid "Failed to connect to cloud service" +msgstr "无法连接到云服务" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "请点击上方的超链接以查看云服务状态" + +msgid "Failed to connect to the printer" +msgstr "无法连接打印机" + +msgid "Connection to printer failed" +msgstr "连接打印机失败" + +msgid "Please check the network connection of the printer and Studio." +msgstr "请检查打印机和工作室的网络连接" + +msgid "Connecting..." +msgstr "连接中..." + msgid "?" msgstr "?" @@ -1433,17 +1466,17 @@ msgstr "空" msgid "AMS" msgstr "AMS" -msgid "Ams filament backup" -msgstr "AMS耗材丝备份" +msgid "Auto Refill" +msgstr "自动补给" msgid "AMS not connected" -msgstr "AMS 未连接" +msgstr "AMS未连接" msgid "Cali" -msgstr "标定" +msgstr "校准" msgid "Calibration of extrusion" -msgstr "挤出标定" +msgstr "挤出校准" msgid "Load Filament" msgstr "进料" @@ -1485,16 +1518,16 @@ msgid "Pull back current filament" msgstr "抽回耗材丝" msgid "Push new filament into extruder" -msgstr "送出新的耗材丝到挤出机" +msgstr "送出耗材丝" msgid "Purge old filament" msgstr "冲刷旧耗材丝" -msgid "Feed new filament from external spool" +msgid "Push new filament into the extruder" msgstr "将新的耗材丝推入挤出机" -msgid "Confirm whether the filament has been extruded" -msgstr "确认耗材丝是否已被挤出" +msgid "Grab new filament" +msgstr "咬入耗材丝" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " @@ -1589,52 +1622,51 @@ msgstr "登录中" msgid "Login failed" msgstr "登录失败" -msgid "The region parameter is incorrrect" -msgstr "区域设置不正确" - -msgid "Failure of printer login" -msgstr "登录设备失败" - -msgid "Failed to get ticket" -msgstr "获取Ticket失败" - -msgid "User authorization timeout" -msgstr "用户鉴权超时" - -msgid "Failure of bind" -msgstr "设备登录失败" - -msgid "Unknown Failure" -msgstr "发生错误" - msgid "Please check the printer network connection." msgstr "请检查打印机的网络连接。" -msgid "Abnormal print file data. Please slice again" +msgid "Abnormal print file data. Please slice again." msgstr "打印文件数据异常,请重新切片" -msgid "Task canceled" -msgstr "任务已取消" +msgid "Task canceled." +msgstr "任务已取消。" -msgid "Upload task timed out. Please check the network problem and try again" -msgstr "上传任务超时,请排查网络问题后重试" +msgid "Upload task timed out. Please check the network status and try again." +msgstr "上传任务超时,请排查网络状态后重试。" msgid "Cloud service connection failed. Please try again." msgstr "云服务连接失败,请重试" -msgid "Print file not found, please slice again" -msgstr "未找到打印文件,请重新切片" +msgid "Print file not found. please slice again." +msgstr "未找到打印文件,请重新切片。" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" -msgstr "打印文件超过最大允许大小(1GB),请简化模型后重新切片" +"model and slice again." +msgstr "打印文件超过最大允许大小(1GB),请简化模型后重新切片。" -msgid "Failed uploading print file" -msgstr "打印任务上传失败" +msgid "Failed to send the print job. Please try again." +msgstr "无法发送打印任务,请重试。" -msgid "Wrong Access code" -msgstr "访问码错误" +msgid "Failed to upload file to ftp. Please try again." +msgstr "上传文件至FTP失败,请重试。" + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "点击上方的链接检查Bambu服务器的当前状态。" + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "打印文件的大小过大,请调整文件大小后重试。" + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "未找到打印文件,请重新切片后再发送打印。" + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "无法将打印文件上传至FTP。请检查网络状态并重试。" msgid "Sending print job over LAN" msgstr "正在通过局域网发送打印任务" @@ -1655,24 +1687,16 @@ msgstr "正在发送打印配置" msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "已发送完成,即将自动跳转到设备页面(%s秒)" +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "已成功发送。将自动跳转到%ss中的下一页。" + msgid "An SD card needs to be inserted before printing via LAN." msgstr "需要插入SD卡后方可发送局域网打印" -msgid "Failed to send the print job. Please try again." -msgstr "无法发送打印任务,请重试。" - -msgid "Send to Printer failed. Please try again." -msgstr "发送到打印机失败。请重试。" - -msgid "No space left on Printer SD card" -msgstr "打印机SD卡上没有剩余空间" - msgid "Sending gcode file over LAN" msgstr "通过局域网发送gcode文件" -msgid "Sending gcode file through cloud service" -msgstr "通过云服务发送gcode文件" - msgid "Sending gcode file to sdcard" msgstr "发送gcode文件到sd卡" @@ -1683,9 +1707,6 @@ msgstr "成功发送。即将关闭当前页面(%s秒)" msgid "An SD card needs to be inserted before sending to printer." msgstr "需要插入SD卡后方可发送到打印机。" -msgid "Please log out and login to the printer again." -msgstr "请先退出登录然后再重新登录打印机。" - msgid "Choose SLA archive:" msgstr "选择SLA存档:" @@ -1766,17 +1787,18 @@ msgstr "版权" msgid "License" msgstr "许可证" -msgid "Orca Slicer is licensed under " -msgstr "逆戟鲸是在" +msgid "Bambu Studio is licensed under " +msgstr "Bambu Studio是在" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero 通用公共许可证,版本 3下授权的" 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" +"Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " +"by Alessandro Ranellucci and the RepRap community" msgstr "" +"Bambu Studio是基于Prusa Research的PrusaSlicer开发的,而PrusaSlicer是基于来自" +"Alessandro Ranellucci和RepRap社区的Slic3r开发的" msgid "Libraries" msgstr "库" @@ -1790,14 +1812,12 @@ msgstr "本软件使用开源组件,其版权和其他所有权属于各自的 msgid "About %s" msgstr "关于 %s" -msgid "Orca Slicer " -msgstr "" - -msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" - -msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgid "" +"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " +"Merill(supermerill)." msgstr "" +"Bambu Studio是以PrusaResearch的PrusaSlicer和Merill(supermerill)的SuperSlicer" +"为基础的。" msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "PrusaSlicer最初是基于Alessandro Ranellucci的Slic3r。" @@ -1807,8 +1827,16 @@ msgid "" "contributors." msgstr "Slic3r由Alessandro Ranellucci在其他众多贡献者的帮助下创建。" -msgid "Version" -msgstr "版本" +msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "Bambu Studio还参考了Ultimaker的Cura中的一些想法。" + +msgid "" +"There many parts of the software that come from community contributions, so " +"we're unable to list them one-by-one, and instead, they'll be attributed in " +"the corresponding code comments." +msgstr "" +"软件中有很多部分来自于社区贡献,因此我们不便逐一列出他们,作为替代,他们将在" +"相应的代码注释中被介绍。" msgid "AMS Materials Setting" msgstr "AMS 材料设置" @@ -1841,10 +1869,13 @@ msgid "SN" msgstr "序列号" msgid "Setting AMS slot information while printing is not supported" -msgstr "不支持在打印时修改AMS槽位信息" +msgstr "不支持在打印时设置AMS槽位信息" -msgid "Factors of dynamic flow cali" -msgstr "动态流量标定系数" +msgid "Factors of Flow Dynamics Calibration" +msgstr "动态流量校准系数" + +msgid "PA Profile" +msgstr "PA 配置文件" msgid "Factor K" msgstr "系数K" @@ -1858,15 +1889,15 @@ msgstr "不支持在打印时设置虚拟槽位信息" msgid "Are you sure you want to clear the filament information?" msgstr "您确定要清除耗材丝信息吗?" +msgid "You need to select the material type and color first." +msgstr "您需要先选择材料类型和颜色。" + msgid "Please input a valid value (K in 0~0.5)" -msgstr "请输入有效的数值(K的范围为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 "You need to select the material type and color first." -msgstr "您需要先选择材料类型和颜色。" - msgid "Other Color" msgstr "其他颜色" @@ -1874,21 +1905,21 @@ msgid "Custom Color" msgstr "自定义颜色" msgid "Dynamic flow calibration" -msgstr "动态流量标定" +msgstr "动态流量校准" 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." msgstr "" -"喷嘴温度和最大体积速度会影响到标定结果,请填写与实际打印相同的数值。可通过选" +"喷嘴温度和最大体积速度会影响到校准结果,请填写与实际打印相同的数值。可通过选" "择已有的材料预设来自动填写。" msgid "Nozzle Diameter" msgstr "喷嘴直径" msgid "Bed Type" -msgstr "热床类型" +msgstr "打印板类型" msgid "Nozzle temperature" msgstr "喷嘴温度" @@ -1919,8 +1950,8 @@ 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 "保存" @@ -1933,17 +1964,17 @@ msgstr "示例" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "标定中... %d%%" +msgstr "校准中... %d%%" msgid "Calibration completed" -msgstr "标定已完成" +msgstr "校准已完成" #, c-format, boost-format msgid "%s does not support %s" msgstr "%s 不支持 %s" msgid "Dynamic flow Calibration" -msgstr "动态流量标定" +msgstr "动态流量校准" msgid "Step" msgstr "步骤" @@ -2018,12 +2049,23 @@ msgstr "采用AMS里的材料打印" msgid "Print with filaments mounted on the back of the chassis" msgstr "采用挂载在机箱背部的材料打印" -msgid "Filaments replace" -msgstr "" +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "当前材料耗尽时,打印机将按照以下顺序继续打印。" msgid "Group" 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 "AMS Settings" msgstr "AMS 设置" @@ -2295,6 +2337,11 @@ msgid "" "Reset to 0.2" msgstr "层高过小。将重置为0.2" +msgid "" +"Too large layer height.\n" +"Reset to 0.2" +msgstr "层高过大。将重置为0.2" + msgid "" "Too small ironing spacing.\n" "Reset to 0.1" @@ -2425,7 +2472,7 @@ msgid "Heating hotend" msgstr "加热热端" msgid "Calibrating extrusion" -msgstr "标定挤出补偿" +msgstr "校准挤出补偿" msgid "Scanning bed surface" msgstr "扫描热床" @@ -2437,7 +2484,7 @@ msgid "Identifying build plate type" msgstr "识别打印板类型" msgid "Calibrating Micro Lidar" -msgstr "标定轮廓仪外参" +msgstr "校准轮廓仪外参" msgid "Homing toolhead" msgstr "工具头回到起始点" @@ -2455,10 +2502,10 @@ msgid "Pause of front cover falling" msgstr "工具头前盖掉落暂停" msgid "Calibrating the micro lida" -msgstr "轮廓仪激光标定" +msgstr "轮廓仪激光校准" msgid "Calibrating extrusion flow" -msgstr "挤出绝对流量标定" +msgstr "挤出绝对流量校准" msgid "Paused due to nozzle temperature malfunction" msgstr "热端温控异常暂停" @@ -2505,6 +2552,28 @@ msgstr "更新失败。" msgid "Failed to start printing job" msgstr "发起打印任务失败" +msgid "Invalid nozzle diameter" +msgstr "非法喷嘴口径" + +msgid "Calibration error" +msgstr "校准错误" + +msgid "TPU is not supported by AMS." +msgstr "AMS不支持TPU。" + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +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内,请在使用前注意干燥。" + +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中很容易断裂或卡住,请谨慎使用。" + msgid "default" msgstr "缺省" @@ -2563,9 +2632,6 @@ msgstr "工具" msgid "Layer Time" msgstr "层时间" -msgid "Layer Time (log)" -msgstr "层时间(对数)" - msgid "Height: " msgstr "层高: " @@ -2579,7 +2645,7 @@ msgid "Flow: " msgstr "挤出流量: " msgid "Layer Time: " -msgstr "层时间: " +msgstr "层时间" msgid "Fan Speed: " msgstr "风扇速度: " @@ -2650,6 +2716,9 @@ msgstr "温度(℃)" msgid "Volumetric flow rate (mm³/s)" msgstr "体积流量速度(mm³/s)" +msgid "Layer Time (s)" +msgstr "层时间(s)" + msgid "Used filament" msgstr "使用的耗材丝" @@ -2811,7 +2880,7 @@ msgid "Allow multiple materials on same plate" msgstr "允许同一盘中包含多种材料" msgid "Avoid extrusion calibration region" -msgstr "避开挤出标定区域" +msgstr "避开挤出校准区域" msgid "Add" msgstr "添加" @@ -2872,11 +2941,9 @@ msgstr "尺寸:" #, c-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)." -msgstr "" -"发现gcode路径在层%d,高为%.2lf mm处的冲突。请将有冲突的对象分离得更远(%s <-> " -"%s)。" +"Conflicts of gcode paths have been found at layer %d. Please separate the " +"conflicted objects farther (%s <-> %s)." +msgstr "发现gcode路径在层%d处的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" msgid "An object is layed over the boundary of plate." msgstr "检测到有对象放在盘的边界上。" @@ -2895,8 +2962,8 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"对象被放置在构建板的边界上或超过高度限制。\n" -"请通过将其完全移动到构建板内或构建板外,并确认高度在构建空间以内来解决问题。" +"对象被放置在打印板的边界上或超过高度限制。\n" +"请通过将其完全移动到打印板内或打印板外,并确认高度在构建空间以内来解决问题。" msgid "Calibration step selection" msgstr "校准步骤选择" @@ -3003,6 +3070,9 @@ msgstr "否" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "将会被关闭以创建新模型,是否继续?" +msgid "Upload" +msgstr "上传" + msgid "Slice plate" msgstr "切片单盘" @@ -3045,6 +3115,9 @@ msgstr "打开配置文件夹" msgid "Show Tip of the Day" msgstr "展示每日小贴士" +msgid "Report issue" +msgstr "报告问题" + msgid "Check for Update" msgstr "检查新版本" @@ -3243,6 +3316,12 @@ msgstr "显示名称" msgid "Show object labels in 3D scene" msgstr "在3D场景中显示对象名称" +msgid "Show &Overhang" +msgstr "显示悬空高亮" + +msgid "Show object overhang highlight in 3D scene" +msgstr "在3D场景中显示悬空高亮" + msgid "Preferences" msgstr "偏好设置" @@ -3256,38 +3335,34 @@ msgid "Temperature Calibration" msgstr "温度校准" msgid "Pass 1" -msgstr "粗调" +msgstr "通过 1" msgid "Flow rate test - Pass 1" msgstr "流量测试 - 通过 1" msgid "Pass 2" -msgstr "细调" +msgstr "通过2" msgid "Flow rate test - Pass 2" msgstr "流量测试 - 通过 2" msgid "Flow rate" -msgstr "流量" +msgstr "流量比例" msgid "Pressure advance" -msgstr "压力提前" +msgstr "压力提升" msgid "Retraction test" msgstr "回抽测试" -msgid "Orca Tolerance Test" -msgstr "Orca误差测试" - msgid "Max flowrate" -msgstr "最大体积流量" +msgstr "最大流速" msgid "VFA" msgstr "" -# SoftFever msgid "More..." -msgstr "进阶校准" +msgstr "更多..." msgid "Tutorial" msgstr "教程" @@ -3298,9 +3373,6 @@ msgstr "校准帮助" msgid "More calibrations" msgstr "更多校准" -msgid "3D Models" -msgstr "3D模型" - msgid "&Open G-code" msgstr "打开G-code" @@ -3323,7 +3395,7 @@ msgid "Open &Studio" msgstr "" msgid "Open Studio" -msgstr "打开 Studio" +msgstr "打开Studio" msgid "&Quit" msgstr "" @@ -3397,7 +3469,7 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"想从Bambu 云同步你的个人数据吗?\n" +"想从Bambu云同步你的个人数据吗?\n" "包含如下信息:\n" "1. 工艺预设\n" "2. 打印丝预设\n" @@ -3409,29 +3481,29 @@ msgstr "同步" msgid "Initialize failed (No Device)!" msgstr "初始化失败(没有设备)!" +msgid "Initialize failed (Device connection not ready)!" +msgstr "初始化失败(设备未连接)" + msgid "Initialize failed (No Camera Device)!" msgstr "初始化失败(没有摄像头)" -msgid "Initializing..." -msgstr "正在初始化……" +msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgstr "打印机正在下载,请等待下载结束。" msgid "Loading..." msgstr "正在加载视频……" -msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "初始化失败(不支持局域网模式的视频连接)" +msgid "Initialize failed (Not supported on the current printer version)!" +msgstr "初始化失败(当前打印机的版本不支持)!" msgid "Initialize failed (Not accessible in LAN-only mode)!" msgstr "初始化失败(在局域网模式中不可访问)!" -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "打印机正忙于下载,请等待下载完成。" - msgid "Initialize failed (Missing LAN ip of printer)!" msgstr "初始化失败(未找到打印机的局域网地址)!" -msgid "Initialize failed (Not supported by printer)!" -msgstr "初始化失败(打印机不支持该功能)!" +msgid "Initializing..." +msgstr "正在初始化……" #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -3460,9 +3532,12 @@ msgstr "正在下载“虚拟摄像头工具包”" msgid "" "Another virtual camera is running.\n" -"Orca Slicer supports only a single virtual camera.\n" +"Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"另一个虚拟摄像头正在工作。\n" +"Bambu Studio 同时只能支持一个虚拟摄像头。\n" +"是否停止前一个虚拟摄像头?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" @@ -3508,6 +3583,9 @@ msgstr "录像" msgid "Switch to video files." msgstr "切换到视频文件列表" +msgid "Switch to 3mf model files." +msgstr "切换到3MF模型文件。" + msgid "Delete selected files from printer." msgstr "从打印机中删除选中的文件" @@ -3526,12 +3604,6 @@ msgstr "批量管理文件" msgid "No printers." msgstr "未选择打印机" -msgid "Not supported by this model of printer!" -msgstr "该型号的打印机不支持该功能!" - -msgid "Connecting..." -msgstr "连接中..." - #, c-format, boost-format msgid "Connect failed [%d]!" msgstr "连接失败 [%d]!" @@ -3539,22 +3611,46 @@ msgstr "连接失败 [%d]!" msgid "Loading file list..." msgstr "加载文件列表..." -msgid "No files" -msgstr "文件列表为空" - -msgid "Not accessible in LAN-only mode!" -msgstr "在局域网模式中不可访问!" - -msgid "Missing LAN ip of printer!" -msgstr "未找到打印机的局域网地址!" +#, c-format, boost-format +msgid "No files [%d]" +msgstr "文件列表为空[%d]" #, c-format, boost-format -msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "你正在删除%u个文件,你确定吗?" +msgid "Load failed [%d]" +msgstr "加载失败 [%d]" + +#, c-format, 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?" +msgstr[0] "您将从打印机中删除%u个文件。确定要继续吗?" msgid "Delete files" msgstr "删除文件" +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "你确定要从打印机中删除文件'%s'吗?" + +msgid "Delete file" +msgstr "删除文件" + +msgid "Fetching model infomations ..." +msgstr "正在获取模型信息..." + +msgid "Failed to fetching model infomations from printer." +msgstr "无法从打印机获取模型信息。" + +msgid "Failed to parse model infomations." +msgstr "解析模型信息失败。" + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it whthBambu Studio " +"and export a new .gcode.3mf file." +msgstr "" +".gcode.3mf文件中不包含G-code数据。请使用Bambu Studio进行切片并导出新的." +"gcode.3mf文件。" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "文件%s丢失,请重新下载。" @@ -3575,6 +3671,12 @@ msgstr "下载完成" msgid "Downloading %d%%..." msgstr "下载中 %d%%..." +msgid "Not supported on the current printer version." +msgstr "当前打印机的版本不支持。" + +msgid "Storage unavailable, insert SD card." +msgstr "存储不可用,请插入SD卡。" + msgid "Speed:" msgstr "速度:" @@ -3596,15 +3698,6 @@ msgstr "3Dconnexion设置" msgid "Swap Y/Z axes" msgstr "交换Y/Z轴" -msgid "Camera" -msgstr "摄像机" - -msgid "SD Card" -msgstr "SD卡" - -msgid "Camera Setting" -msgstr "相机设置" - msgid "Printing Progress" msgstr "打印进度" @@ -3620,9 +3713,21 @@ msgstr "" msgid "Layer: N/A" msgstr "层: N/A" +msgid "Immediately score" +msgstr "立即打分" + msgid "Clear" msgstr "清除" +msgid "Camera" +msgstr "摄像机" + +msgid "SD Card" +msgstr "SD卡" + +msgid "Camera Setting" +msgstr "相机设置" + msgid "Control" msgstr "控制" @@ -3656,30 +3761,14 @@ msgstr "无SD卡" msgid "SD Card Abnormal" msgstr "SD卡异常" -msgid "Printing List" -msgstr "项目切片" - msgid "Cancel print" msgstr "取消打印" msgid "Are you sure you want to cancel this print?" msgstr "你确定要取消这次打印吗?" -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " -"printer by logging in with your user account." -msgstr "" -"由于LAN模式被禁用,已与打印机[%s]断开连接。请使用您的用户帐户登录以重新连接打" -"印机。" - -#, c-format, boost-format -msgid "" -"Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " -"printer by inputting Access Code which can be gotten from printer screen." -msgstr "" -"由于启用了LAN模式,已与打印机[%s]断开连接。请通过输入访问码重新连接打印机,访" -"问码可从打印机屏幕上获取。" +msgid "Done" +msgstr "完成" msgid "Downloading..." msgstr "下载中..." @@ -3695,6 +3784,12 @@ msgstr "前面还有%s个任务在云端切片队列中" msgid "Layer: %s" msgstr "层: %s" +msgid "Please give a score for your favorite Bambu Market model." +msgstr "请为您喜欢的 Bambu 商城模型打分。" + +msgid "Score" +msgstr "打分" + #, c-format, boost-format msgid "Layer: %d/%d" msgstr "层: %d/%d" @@ -3709,7 +3804,7 @@ msgid "Still load" msgstr "继续进料" msgid "Please select an AMS slot before calibration" -msgstr "请先选择一个AMS槽位后进行标定" +msgstr "请先选择一个AMS槽位后进行校准" msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " @@ -3734,24 +3829,15 @@ msgstr "狂暴" msgid "Can't start this without SD card." msgstr "没有SD卡无法开始任务" -msgid "Failed to connect to the server" -msgstr "无法连接服务器" - msgid "Status" msgstr "设备状态" -msgid "Media" -msgstr "视频文件" - msgid "Update" msgstr "固件更新" msgid "HMS" msgstr "" -msgid "Failed to connect to the printer" -msgstr "无法连接打印机" - msgid "Don't show again" msgstr "不再显示" @@ -3864,7 +3950,7 @@ msgid "Warning:" msgstr "警告:" msgid "Export successfully." -msgstr "导出成功." +msgstr "发送成功。" msgid "Serious warning:" msgstr "严重警告:" @@ -3934,12 +4020,12 @@ msgid "Sensitivity of pausing is" msgstr "暂停的灵敏度为" msgid "Enable detection of build plate position" -msgstr "启用构建板位置检测" +msgstr "启用打印板位置检测" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." -msgstr "检测构建板的定位标记,如果标记不在预定义范围内时暂停打印。" +msgstr "检测打印板的定位标记,如果标记不在预定义范围内时暂停打印。" msgid "First Layer Inspection" msgstr "首层扫描" @@ -3968,12 +4054,9 @@ msgstr "耗材丝设置" msgid "Printer settings" msgstr "打印机设置" -msgid "Untitled" -msgstr "未命名" - #, boost-format -msgid " plate %1%:" -msgstr "盘%1%:" +msgid " plate %1%: " +msgstr " 盘 %1%: " msgid "Invalid name, the following characters are not allowed:" msgstr "无效名称,不允许使用以下字符:" @@ -4006,7 +4089,7 @@ msgid "Connection" msgstr "连接" msgid "Bed type" -msgstr "热床类型" +msgstr "打印板类型" msgid "Flushing volumes" msgstr "冲刷体积" @@ -4050,12 +4133,12 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "没有如任何兼容的材料,同步操作未执行。" 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 or uncompatible filaments mapped to generic preset. " +"Please update Bambu Studio or restart Bambu Studio to check if there is an " +"update to system presets." msgstr "" -"有一些未知型号的材料,映射到通用预设。请更新或者重启 Orca Slicer,以检查系统" -"预设有没有更新。" +"有一些未知或不兼容的填料映射到通用预设中。请更新Bambu Studio或重新启动Bambu " +"Studio,以检查是否有系统预设的更新。" #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -4103,8 +4186,8 @@ msgstr "加载3mf" msgid "The Config can not be loaded." msgstr "配置无法加载。" -msgid "The 3mf is generated by old Orca Slicer, load geometry data only." -msgstr "该3mf文件来自旧版本的Bambu Lab,将只加载几何数据。" +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "该3mf文件来自旧版本的Bambu Studio,将只加载几何数据。" #, c-format, boost-format msgid "" @@ -4158,7 +4241,7 @@ msgid "" " Do you want to scale to millimeters?" msgstr "" "文件 %s 中对象的尺寸似乎是以米或者英寸为单位定义的。\n" -"逆戟鲸的内部单位为毫米。是否要转换成毫米?" +"BambuStudio的内部单位为毫米。是否要转换成毫米?" msgid "Object too small" msgstr "对象尺寸过小" @@ -4421,9 +4504,10 @@ msgstr "提示:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " -"on Orca Slicer(windows) or CAD softwares." +"on Bambu Studio(windows) or CAD softwares." msgstr "" -"\"修复模型\"功能目前仅适用于Windows。请在逆戟鲸(windows)或CAD软件上修复模型。" +"\"修复模型\"功能目前仅适用于Windows。请在Bambu Studio(windows)或CAD软件上修复" +"模型。" #, c-format, boost-format msgid "" @@ -4485,9 +4569,6 @@ msgstr "其他" msgid "Login Region" msgstr "登录区域" -msgid "Stealth Mode" -msgstr "局域网模式" - msgid "Metric" msgstr "公制" @@ -4511,12 +4592,6 @@ msgstr "启动后显示“每日小贴士”通知" msgid "If enabled, useful hints are displayed at startup." msgstr "如果启用,将在启动时显示有用的提示。" -msgid "Show g-code window" -msgstr "显示g-code窗口" - -msgid "If enabled, g-code window will be displayed." -msgstr "如果启用,将显示g-code窗口。" - msgid "Presets" msgstr "预设" @@ -4535,26 +4610,32 @@ msgstr "系统同步" msgid "Clear my choice on the unsaved presets." msgstr "清除我对未保存的预置的选择。" -msgid "Associate files to OrcaSlicer" -msgstr "逆戟鲸文件关联" +msgid "Associate files to BambuStudio" +msgstr "Bambu Studio文件关联" -msgid "Associate .3mf files to OrcaSlicer" -msgstr "使用逆戟鲸打开.3mf文件" +msgid "Associate .3mf files to BambuStudio" +msgstr "使用Bambu Studio打开.3mf文件" -msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" -msgstr "开启后,将缺省使用逆戟鲸打开.3mf文件" +msgid "If enabled, sets BambuStudio as default application to open .3mf files" +msgstr "开启后,将缺省使用Bambu Studio打开.3mf文件" -msgid "Associate .stl files to OrcaSlicer" -msgstr "使用逆戟鲸打开.stl文件" +msgid "Associate .stl files to BambuStudio" +msgstr "使用Bambu Studio打开.stl文件" -msgid "If enabled, sets OrcaSlicer as default application to open .stl files" -msgstr "开启后,将缺省使用逆戟鲸打开.stl文件" +msgid "If enabled, sets BambuStudio as default application to open .stl files" +msgstr "开启后,将缺省使用Bambu Studio打开.stl文件" -msgid "Associate .step/.stp files to OrcaSlicer" -msgstr "使用逆戟鲸打开.step/.stp文件" +msgid "Associate .step/.stp files to BambuStudio" +msgstr "使用Bambu Studio打开.step/.stp文件" -msgid "If enabled, sets OrcaSlicer as default application to open .step files" -msgstr "开启后,将缺省使用逆戟鲸打开.step文件" +msgid "If enabled, sets BambuStudio as default application to open .step files" +msgstr "开启后,将缺省使用Bambu Studio打开.step文件" + +msgid "Online Models" +msgstr "在线模型" + +msgid "Show online staff-picked models on the home page" +msgstr "在主页上显示工作人员挑选的在线模型" msgid "Maximum recent projects" msgstr "近期项目的最大数量" @@ -4587,6 +4668,12 @@ msgstr "深色模式" msgid "Enable Dark mode" msgstr "启用深色模式" +msgid "Develop mode" +msgstr "开发者模式" + +msgid "Skip AMS blacklist check" +msgstr "跳过AMS黑名单检查" + msgid "Home page and daily tips" msgstr "首页和每日小贴士" @@ -4623,11 +4710,14 @@ msgstr "其他" msgid "Mouse wheel reverses when zooming" msgstr "缩放时鼠标滚轮反转" -msgid "Develop mode" -msgstr "开发者模式" +msgid "Enable SSL(MQTT)" +msgstr "启用SSL(MQTT)" -msgid "Dump video" -msgstr "下载视频" +msgid "Enable SSL(FTP)" +msgstr "启用SSL(FTP)" + +msgid "Internal developer mode" +msgstr "内部开发者模式" msgid "Log Level" msgstr "日志级别" @@ -4713,35 +4803,29 @@ msgstr "添加/删除材料" msgid "Add/Remove printers" msgstr "添加/删除打印机" +msgid "Incompatible" +msgstr "不兼容的预设" + +msgid "The selected preset is null!" +msgstr "选择的预设为空!" + msgid "Same as Global Print Sequence" msgstr "跟随全局打印顺序" msgid "Print sequence" msgstr "打印顺序" -msgid "Plate name" -msgstr "盘名称" - msgid "Customize" msgstr "自定义" -msgid "First Layer print sequence" -msgstr "" +msgid "First layer filament sequence" +msgstr "首层耗材打印顺序" + +msgid "Same as Global Plate Type" +msgstr "跟随全局打印板类型" msgid "Same as Global Bed Type" -msgstr "跟随全局热床类型" - -msgid "Cool Plate" -msgstr "低温打印热床" - -msgid "Engineering Plate" -msgstr "工程材料热床" - -msgid "High Temp Plate" -msgstr "高温打印热床" - -msgid "Textured PEI Plate" -msgstr "纹理PEI热床" +msgstr "跟随全局打印板类型" msgid "By Layer" msgstr "逐层" @@ -4749,6 +4833,9 @@ msgstr "逐层" msgid "By Object" msgstr "逐件" +msgid "Plate name" +msgstr "盘名称" + msgid "Accept" msgstr "接受" @@ -4860,11 +4947,8 @@ msgstr "为“%1%”,添加“%2%”为一个新预设" msgid "Simply switch to \"%1%\"" msgstr "直接切换到“%1%”" -msgid "Online" -msgstr "在线" - -msgid "Offline" -msgstr "离线" +msgid "Task canceled" +msgstr "任务已取消" msgid "(LAN)" msgstr "(局域网)" @@ -4875,6 +4959,9 @@ msgstr "我的设备" msgid "Other Device" msgstr "其他设备" +msgid "Online" +msgstr "在线" + msgid "Input access code" msgstr "输入访问码" @@ -4884,17 +4971,23 @@ msgstr "无法找到我的设备?" msgid "Log out successful." msgstr "登出成功。" +msgid "Offline" +msgstr "离线" + msgid "Busy" msgstr "忙碌" msgid "Bambu Cool Plate" -msgstr "低温打印热床" +msgstr "低温打印板" + +msgid "PLA Plate" +msgstr "PLA打印板" msgid "Bamabu Engineering Plate" -msgstr "工程打印热床" +msgstr "工程材料打印板" msgid "Bamabu High Temperature Plate" -msgstr "高温打印热床" +msgstr "高温打印板" msgid "Send print job to" msgstr "发送打印任务至" @@ -4905,12 +4998,24 @@ msgstr "刷新" msgid "Bed Leveling" msgstr "热床调平" -msgid "Flow Calibration" -msgstr "流量校准" +msgid "Flow Dynamics Calibration" +msgstr "动态流量校准" + +msgid "Can't connect to the printer" +msgstr "无法连接打印机" msgid "send completed" msgstr "发送完成" +msgid "Error code" +msgstr "错误代码" + +msgid "Check the status of current system services" +msgstr "请检查当前系统服务状态" + +msgid "Printer local connection failed, please try again." +msgstr "打印机局域网连接失败,请重试。" + msgid "No login account, only printers in LAN mode are displayed" msgstr "未登录账号,仅显示局域网模式的打印机" @@ -4980,6 +5085,9 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "请在发起打印前插入SD卡" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "所选打印机与选择的打印机预设不兼容。" + msgid "An SD card needs to be inserted to record timelapse." msgstr "开启延迟摄影功能需要插入SD卡" @@ -4992,7 +5100,7 @@ msgid "Cannot send the print job for empty plate" msgstr "无法为空盘发送打印任务" msgid "This printer does not support printing all plates" -msgstr "此打印机类型不支持打印所有盘" +msgstr "该打印机不支持打印所有盘" msgid "Errors" msgstr "错误" @@ -5024,9 +5132,27 @@ msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "如果您仍然想继续打印,请单击“确定”按钮。" +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "正在连接打印机。连接过程中无法取消。" + msgid "Preparing print job" msgstr "正在准备打印任务" +msgid "Abnormal print file data. Please slice again" +msgstr "打印文件数据异常,请重新切片" + +msgid "The name length exceeds the limit." +msgstr "名称长度超过限制。" + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "小心使用!纹理PEI板上的流量校准可能会因表面散射而失败。" + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "使用微型激光雷达进行自动流量校准" + msgid "Modifying the device name" msgstr "修改打印机名称" @@ -5039,18 +5165,101 @@ msgstr "设备升级中,无法发送打印任务" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "发送到打印机需要插入SD卡" -msgid "The printer is required to be in the same LAN as Orca Slicer." -msgstr "打印机需要与逆戟鲸在同一个局域网内。" +msgid "The printer is required to be in the same LAN as Bambu Studio." +msgstr "打印机需要与Bambu Studio在同一个局域网内。" msgid "The printer does not support sending to printer SD card." msgstr "该打印机不支持发送到打印机SD卡。" +msgid "Failed to create socket" +msgstr "" + +msgid "Failed to connect socket" +msgstr "" + +msgid "Failed to publish login request" +msgstr "" + +msgid "Get ticket from device timeout" +msgstr "" + +msgid "Get ticket from server timeout" +msgstr "" + +msgid "Failed to post ticket to server" +msgstr "" + +msgid "Failed to parse login report reason" +msgstr "" + +msgid "Receive login report timeout" +msgstr "" + +msgid "Unknown Failure" +msgstr "发生错误" + msgid "Log in printer" msgstr "登录打印机" msgid "Would you like to log in this printer with current account?" msgstr "你想使用当前账号登录这台打印机吗?" +msgid "Check the reason" +msgstr "查看原因" + +msgid "Read and accept" +msgstr "我已阅读并接受" + +msgid "Terms and Conditions" +msgstr "用户使用协议" + +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" +"感谢您购买Bambu Lab设备,使用Bambu Lab设备前,请阅读一下条款,单击同意使用您" +"的Bambu Lab设备即表示您同意遵守隐私政策以及使用条款(统称为“条款”)。如果您不" +"符合或不同意Bambu Lab隐私政策,请不要使用Bambu Lab设备和服务。" + +msgid "and" +msgstr "和" + +msgid "Privacy Policy" +msgstr "隐私协议" + +msgid "We ask for your help to improve everyone's printer" +msgstr "我们请求您的帮助来改善大家的打印机" + +msgid "Statement about User Experience Improvement Program" +msgstr "关于用户体验改善计划的声明" + +#, c-format, 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 " +"same principle and uses machine learning to improve its performance from the " +"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." +msgstr "" +"在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。%s遵循同" +"样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改善打" +"印性能。我们正在通过向%s提供真实世界的数据来训练他们变得更聪明。如果您愿意," +"此服务将访问您的错误日志和使用日志中的信息,其中可能包括隐私政策中描述的信" +"息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓名、地" +"址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策的声明。" + +msgid "Statement on User Experience Improvement Plan" +msgstr "关于用户体验改善计划的声明" + msgid "Log in successful." msgstr "登录成功。" @@ -5157,6 +5366,9 @@ msgstr "墙" msgid "Top/bottom shells" msgstr "顶部/底部外壳" +msgid "Sparse infill" +msgstr "稀疏填充" + msgid "Initial layer speed" msgstr "首层速度" @@ -5174,12 +5386,6 @@ msgstr "" "不同悬垂程度的打印速度。悬垂程度使用相对于线宽的百分表示。速度为0代表这个悬垂" "程度范围内不降速,直接使用墙的速度" -msgid "Bridge" -msgstr "桥接" - -msgid "Set speed for external and internal bridges" -msgstr "" - msgid "Travel speed" msgstr "空驶速度" @@ -5204,7 +5410,7 @@ msgstr "特殊模式" msgid "G-code output" msgstr "G-code 输出" -msgid "Post-processing Scripts" +msgid "Post-processing scripts" msgstr "后处理脚本" msgid "Frequent" @@ -5253,27 +5459,33 @@ msgstr "喷嘴" msgid "Nozzle temperature when printing" msgstr "打印时的喷嘴温度" -msgid "Cool plate" -msgstr "低温打印热床" +msgid "Cool Plate / PLA Plate" +msgstr "低温打印板 / PLA打印板" 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 "Engineering plate" -msgstr "工程材料热床" +msgid "Engineering Plate" +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值表示这个耗材丝不支持工程材料热床" +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 "Textured PEI Plate" +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" @@ -5323,12 +5535,6 @@ msgstr "耗材丝结束G-code" msgid "Printable space" msgstr "可打印区域" -msgid "Cooling Fan" -msgstr "冷却风扇" - -msgid "Fan speed-up time" -msgstr "风扇响应时间" - msgid "Extruder Clearance" msgstr "挤出机避让空间" @@ -5377,21 +5583,9 @@ msgstr "抖动限制" msgid "Layer height limits" msgstr "层高限制" -msgid "Lift Z Enforcement" -msgstr "强化抬Z策略" - msgid "Retraction when switching material" msgstr "切换材料时的回抽量" -msgid "" -"The Wipe option is not available when using the Firmware Retraction mode.\n" -"\n" -"Shall I disable it in order to enable Firmware Retraction?" -msgstr "" - -msgid "Firmware Retraction" -msgstr "固件回抽" - msgid "Detached" msgstr "分离的" @@ -5822,9 +6016,6 @@ msgstr "SLA支撑点" msgid "Gizmo FDM paint-on seam" msgstr "FDM涂装接缝" -msgid "Swtich between Prepare/Prewview" -msgstr "" - msgid "Plater" msgstr "准备" @@ -5888,9 +6079,6 @@ msgstr "水平滑动条 - 向右移动一步" msgid "On/Off one layer mode of the vertical slider" msgstr "开启/关闭垂直滑动条的单层模式" -msgid "On/Off g-code window" -msgstr "" - msgid "Move slider 5x faster" msgstr "5倍速移动滑动条" @@ -5908,33 +6096,30 @@ msgid "Network plug-in update" msgstr "网络插件升级" msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." -msgstr "点击OK将在逆戟鲸下次启动之后自动升级网络插件" +"Click OK to update the Network plug-in when Bambu Studio launches next time." +msgstr "点击\"确定\",将在Bambu Studio下次启动之后自动升级网络插件" #, 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 "新版本的逆戟鲸" +msgid "New version of Bambu Studio" +msgstr "新版本的Bambu Studio" msgid "Don't remind me of this version again" msgstr "此版本不再提示" -msgid "Done" -msgstr "完成" - msgid "LAN Connection Failed (Sending print file)" -msgstr "LAN连接失败 (发送打印文件)" +msgstr "LAN连接失败(发送打印文件)" msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "步骤1, 请确认逆戟鲸和您的打印机在同一局域网中。" +"Step 1, please confirm Bambu Studio and your printer are in the same LAN." +msgstr "第1步,请确认Bambu Studio和您的打印机在同一个LAN上。" msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." -msgstr "步骤2, 如果下面的IP和访问码与打印机上的实际值不同,请输入正确的值。" +msgstr "第2步,如果下方的IP和访问代码与打印机上的实际值不同,请更正。" msgid "IP" msgstr "" @@ -5943,10 +6128,10 @@ msgid "Access Code" msgstr "访问码" msgid "Where to find your printer's IP and Access Code?" -msgstr "在哪里可以找到打印机的IP和访问码?" +msgstr "在哪里可以找到打印机的IP和访问代码?" msgid "Error: IP or Access Code are not correct" -msgstr "错误:IP或访问码不正确" +msgstr "错误:IP或访问代码不正确" msgid "Model:" msgstr "型号:" @@ -6054,6 +6239,10 @@ msgstr "修复被取消" msgid "Copying of file %1% to %2% failed: %3%" msgstr "从%1%拷贝文件到%2%失败:%3%" +#, boost-format +msgid "Copying directory %1% to %2% failed: %3%" +msgstr "从%1%拷贝目录到%2%失败:%3%" + msgid "Need to check the unsaved changes before configuration updates." msgstr "需要在配置更新之前检查没有保存的参数修改。" @@ -6064,8 +6253,8 @@ msgid "Open G-code file:" msgstr "打开G-code文件:" msgid "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"The following object(s) have empty initial layer and can't be printed. " +"Please Cut the bottom or enable supports." msgstr "模型出现空层无法打印。请切掉底部或打开支撑。" #, boost-format @@ -6107,9 +6296,6 @@ msgstr "外墙" msgid "Overhang wall" msgstr "悬空墙" -msgid "Sparse infill" -msgstr "稀疏填充" - msgid "Internal solid infill" msgstr "内部实心填充" @@ -6119,15 +6305,12 @@ msgstr "顶面" msgid "Bottom surface" msgstr "底面" -msgid "Internal Bridge" -msgstr "内部搭桥" +msgid "Bridge" +msgstr "桥接" msgid "Gap infill" msgstr "填缝" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "支撑面" @@ -6248,10 +6431,10 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1%太高,会发生碰撞。" msgid " is too close to others, there may be collisions when printing." -msgstr "离其它对象太近,打印时可能会发生碰撞。" +msgstr "太靠近其他物体,打印时可能会有碰撞。" msgid " is too close to exclusion area, there may be collisions when printing." -msgstr "离不可打印区域太近,打印时可能会发生碰撞。" +msgstr "太靠近屏蔽区域,打印时可能会发生碰撞。" msgid "Prime Tower" msgstr "擦拭塔" @@ -6333,25 +6516,9 @@ msgstr "使用了支撑添加器但没有打开支撑。请打开支撑。" msgid "Layer height cannot exceed nozzle diameter" msgstr "层高不能超过喷嘴直径" -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 "" - -msgid "" -"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " -"absolute extruder addressing." -msgstr "" - -msgid "" -"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " -"extruder addressing." -msgstr "" - #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "盘 %d: %s 不支持耗材丝 %s" +msgstr "盘%d:%s不支持耗材丝 %s" msgid "Generating skirt & brim" msgstr "正在生成skirt和brim" @@ -6408,7 +6575,7 @@ msgid "Printer preset names" msgstr "打印机预设名" msgid "Hostname, IP or URL" -msgstr "主机名,IP或者URL" +msgstr "" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6422,11 +6589,11 @@ msgstr "" "URL中来访问:https://username:password@your-octopi-address/" msgid "Device UI" -msgstr "设备用户界面" +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 "" @@ -6555,7 +6722,7 @@ msgid "" msgstr "首层热床温度。0值表示这个耗材丝不支持纹理PEI热床" msgid "Bed types supported by the printer" -msgstr "打印机所支持的热床类型" +msgstr "打印机所支持的打印板类型" msgid "First layer print sequence" msgstr "" @@ -6621,8 +6788,8 @@ msgstr "" "有下层支撑的线的宽度是多少。0%%意味着无论悬垂程度如何,都要对所有外壁强制冷" "却。" -msgid "Bridge infill direction" -msgstr "拉桥填充方向" +msgid "Bridge direction" +msgstr "桥接方向" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " @@ -6632,12 +6799,6 @@ msgstr "" "搭桥角度覆盖。如果设置为零,该角度将自动计算。否则外部的桥接将用提供的值。" "180°表示0度。" -msgid "Bridge density" -msgstr "搭桥密度" - -msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "" - msgid "Bridge flow" msgstr "桥接流量" @@ -6652,58 +6813,39 @@ msgstr "顶部表面流量比例" 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)可以来改善顶面的光滑程度。" +msgstr "" +"这个因素影响着顶部实心填充的材料用量。您可以略微减小它,以获得光滑的表面质感" -msgid "Bottom surface flow ratio" -msgstr "底部表面流量比例" +msgid "Initial layer flow ratio" +msgstr "首层流量比" -msgid "This factor affects the amount of material for bottom solid infill" -msgstr "首层流量调整系数,默认为1.0" - -msgid "Precise wall(experimental)" -msgstr "精准外墙尺寸(试验)" - -msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves " -"layer consistency." -msgstr "优化外墙刀路以提高外墙精度。这个优化同时减少层纹" +msgid "This factor affects the amount of material for the initial layer" +msgstr "该因素影响首层的材料用量" msgid "Only one wall on top surfaces" msgstr "顶面单层墙" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " -"pattern" -msgstr "顶面只使用单层墙,从而更多的空间能够使用顶部填充图案" - -msgid "One wall threshold" +"pattern. Could be applyed on topmost surface or all top surface." msgstr "" +"顶面只使用单层墙,从而更多的空间能够使用顶部填充图案。可以应用于最顶部表面或" +"所有顶部表面。" -#, c-format, boost-format -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" -"Warning: If enabled, artifacts can be created is you have some thin features " -"on the next layer, like letters. Set this setting to 0 to remove these " -"artifacts." -msgstr "" +msgid "Not apply" +msgstr "不使用" + +msgid "Top surfaces" +msgstr "顶面" + +msgid "Topmost surface" +msgstr "最顶面" msgid "Only one wall on first layer" msgstr "首层仅单层墙" -msgid "" -"Use only one wall on first layer, to give more space to the bottom infill " -"pattern" -msgstr "首层只使用单层墙,从而更多的空间能够使用底部填充图案" - -msgid "Classic mode" -msgstr "经典模式" - -msgid "Enable this option to use classic mode" -msgstr "" +msgid "Use only one wall on the first layer of model" +msgstr "在模型的首层仅生成单层墙" msgid "Slow down for overhang" msgstr "悬垂降速" @@ -6711,25 +6853,11 @@ msgstr "悬垂降速" msgid "Enable this option to slow printing down for different overhang degree" msgstr "打开这个选项将降低不同悬垂程度的走线的打印速度" -msgid "mm/s or %" -msgstr "mm/s 或 %" - -msgid "External" -msgstr "" - -msgid "Speed of bridge and completely overhang wall" -msgstr "桥接和完全悬空的外墙的打印速度" - msgid "mm/s" msgstr "mm/s" -msgid "Internal" -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 "" +msgid "Speed of bridge and completely overhang wall" +msgstr "桥接和完全悬空的外墙的打印速度" msgid "Brim width" msgstr "Brim宽度" @@ -6746,18 +6874,6 @@ msgid "" msgstr "" "该参数控制在模型的外侧和/或内侧生成brim。自动是指自动分析和计算边框的宽度。" -msgid "Mouse ear" -msgstr "圆盘" - -msgid "Outer brim only" -msgstr "仅外侧" - -msgid "Inner brim only" -msgstr "仅内侧" - -msgid "Outer and inner brim" -msgstr "内侧和外侧" - msgid "Brim-object gap" msgstr "Brim与模型的间隙" @@ -6766,35 +6882,6 @@ msgid "" "easily" msgstr "在brim和模型之间设置间隙,能够让brim更容易剥离" -msgid "Brim ears" -msgstr "圆盘" - -msgid "Only draw brim over the sharp edges of the model." -msgstr "" - -msgid "Brim ear max angle" -msgstr "圆盘最大角度" - -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,除直线部分外,其他部分都会创建圆盘。" - -msgid "Brim ear detection radius" -msgstr "圆盘检测半径" - -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以停用" - msgid "Compatible machine" msgstr "兼容的机器" @@ -6920,15 +7007,15 @@ 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" +"If enabled, Studio will generate support loops 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 "" -"如果开启,逆戟鲸切片会沿着内部桥接的边沿在其下方生成支撑轮廓。这些支撑轮廓可" -"以防止悬空地打印内部桥接并提高顶面质量,特别是在填充密度较低的情况下。这个设" -"置用于调整支撑轮廓的厚度,0表示关闭此特性。" +"如果开启,Studio会沿着内部桥接的边沿在其下方生成支撑轮廓。这些支撑轮廓可以防" +"止悬空地打印内部桥接并提高顶面质量,特别是在填充密度较低的情况下。这个设置用" +"于调整支撑轮廓的厚度,0表示关闭此特性。" msgid "Top surface pattern" msgstr "顶面图案" @@ -6976,33 +7063,14 @@ msgstr "" "内部实心填充的线型图案。如果启用了检测狭窄的内部实心填充,将使用同心圆图案来" "填充小区域。" -msgid "" -"Line width of outer wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "外墙的线宽。如果以%表示,它将基于喷嘴直径来计算" +msgid "Line width of outer wall" +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 "外墙的打印速度。它通常使用比内壁速度慢的速度,以获得更好的质量。" -msgid "Small perimeters" -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. " -"Set to zero for auto." -msgstr "" - -msgid "Small perimeters threshold" -msgstr "微小部位周长阈值" - -msgid "" -"This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "" - msgid "Order of inner wall/outer wall/infil" msgstr "内墙/外墙/填充的顺序" @@ -7045,6 +7113,14 @@ msgid "" "printing." msgstr "挤出机四周的避让半径。用于在逐件打印中避免碰撞。" +msgid "Max Radius" +msgstr "最大半径" + +msgid "" +"Max clearance radius around extruder. Used for collision avoidance in by-" +"object printing." +msgstr "挤出机四周的最大避让半径。用于在逐件打印中避免碰撞。" + msgid "Extruder Color" msgstr "挤出机颜色" @@ -7068,21 +7144,29 @@ msgstr "" "量。推荐的范围为0.95到1.05。发现大平层模型的顶面有轻微的缺料或多料时,或许可" "以尝试微调这个参数。" +msgid "Object flow ratio" +msgstr "对象流量比率" + +msgid "The flow ratio set by object, the meaning is the same as flow ratio." +msgstr "由对象设置的流量比率,其含义与流量比率相同。" + msgid "Enable pressure advance" -msgstr "启用压力提前" +msgstr "启用压力提前补偿" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " -"enabled." -msgstr "启用压力提前,一旦启用会覆盖自动检测的结果" - -msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "压力提前(Klipper)或者线性提前(Marlin)" +"enabled. Useless for Bambu Printer" +msgstr "启用压力提前补偿,启用后自动校准结果将被覆盖。对于Bambu打印机无效。" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." -msgstr "当线宽设置为0时走线的默认线宽。如果以%表示,它将基于喷嘴直径来计算。" +"Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " +"Bambu Printer" +msgstr "" +"压力提前补偿(Klipper)也称为线性提前补偿因子(Marlin)。对于Bambu打印机无" +"效。" + +msgid "Default line width if some line width is set to be zero" +msgstr "当线宽设置为0时走线的默认线宽" msgid "Keep fan always on" msgstr "保持风扇常开" @@ -7139,14 +7223,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" -msgid "" -"After a tool change, the exact position of the newly loaded filament inside " -"the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Slic3r will always prime this amount of material into the wipe tower " -"to produce successive infill or sacrificial object extrusions reliably." -msgstr "" - msgid "Filament load time" msgstr "加载耗材丝的时间" @@ -7164,22 +7240,6 @@ msgid "" "and should be accurate" msgstr "耗材丝直径被用于计算G-code文件中的挤出量。因此很重要,应尽可能精确。" -msgid "Shrinkage" -msgstr "耗材收缩率" - -#, fuzzy, c-format, boost-format -msgid "" -"Enter the shrinkage percentage that the filament will get after cooling " -"(94% if you measure 94mm instead of 100mm). The part will be scaled in xy to " -"compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done " -"after the checks." -msgstr "" -"冷却后耗材会收缩的百分比(如果测量的长度是94mm而不是100mm,则为是收缩率为" -"94%)\n" -"补偿将按比例缩放xy轴该补偿仅考虑墙壁所使用的耗材\n" -"请确保物体之间有足够的间距,因为补偿是在边界检查之后进行" - msgid "Density" msgstr "密度" @@ -7283,63 +7343,6 @@ msgstr "支撑立方体" msgid "Lightning" msgstr "闪电" -msgid "Sparse infill anchor length" -msgstr "稀疏填充锚线长度" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than infill_anchor_max is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a " -"single infill line." -msgstr "" -"用附加周长的一小段将填充线连接到内部周长。如果以百分比(例如:15%)表示,则计" -"算填充拉伸宽度。OrcaSlicer 试图将两条紧密的填充线连接到一个短的周长段。如果找" -"不到短于“填充”和“锚点”最大值的周长线段,则填充线仅在一侧连接到周长线段,并且" -"所取周长线段的长度仅限于此参数,但不超过“锚点长度”最大值。将此参数设置为零," -"以禁用连接到单个填充线的锚点周长。" - -msgid "0 (no open anchors)" -msgstr "0 (无锚线)" - -msgid "1000 (unlimited)" -msgstr "1000(无限制)" - -msgid "Maximum length of the infill anchor" -msgstr "填充锚线的最大长度" - -msgid "" -"Connect an infill line to an internal perimeter with a short segment of an " -"additional perimeter. If expressed as percentage (example: 15%) it is " -"calculated over infill extrusion width. Slic3r tries to connect two close " -"infill lines to a short perimeter segment. If no such perimeter segment " -"shorter than this parameter is found, the infill line is connected to a " -"perimeter segment at just one side and the length of the perimeter segment " -"taken is limited to infill_anchor, but no longer than this parameter. \n" -"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%)表示,则计" -"算填充拉伸宽度。OrcaSlicer 试图将两条紧密的填充线连接到一个短的周长段。如果找" -"不到比此参数短的周长线段,则填充线仅在一侧连接到周长线段,并且所采用的周长线" -"段的长度仅限于 infl_anchor,但不超过此参数。将此参数设置为零以禁用锚点。" - -msgid "0 (Simple connect)" -msgstr "" - -msgid "Acceleration of outer walls" -msgstr "外墙的加速度。它通常使用比内壁速度慢的加速度,以获得更好的质量" - -msgid "Acceleration of inner walls" -msgstr "内圈墙加速度,使用较低值可以改善质量。" - -msgid "Acceleration of travel moves" -msgstr "空驶加速度" - msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" @@ -7348,13 +7351,8 @@ msgstr "顶面填充的加速度。使用较低值可能会改善顶面质量" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "外墙加速度。使用较小的值可以提高质量。" -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 "" - -msgid "mm/s² or %" -msgstr "" +msgid "Acceleration of inner walls. 0 means using normal printing acceleration" +msgstr "内部壁的加速度。0表示使用正常的打印加速度。" msgid "" "Acceleration of sparse infill. If the value is expressed as a percentage (e." @@ -7363,52 +7361,53 @@ msgstr "" "稀疏填充的加速度。如果该值表示为百分比(例如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." +msgid "mm/s² or %" msgstr "" msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " "adhensive" -msgstr "首层加速度。使用较低值可以改善和构建板的粘接。" +msgstr "首层加速度。使用较低值可以改善和打印板的粘接。" msgid "Enable accel_to_decel" -msgstr "启用制动速度" +msgstr "" msgid "Klipper's max_accel_to_decel will be adjusted automatically" msgstr "" msgid "accel_to_decel" -msgstr "制动速度" +msgstr "" #, c-format, boost-format msgid "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" msgstr "" +msgid "Default jerk" +msgstr "默认抖动" + msgid "Jerk of outer walls" -msgstr "外墙抖动值" +msgstr "外墙抖动" msgid "Jerk of inner walls" -msgstr "内墙抖动值" +msgstr "内墙抖动" -msgid "Jerk for top surface" -msgstr "顶面抖动值" - -msgid "Jerk for infill" +msgid "Jerk of infill" msgstr "填充抖动" -msgid "Jerk for initial layer" -msgstr "首层抖动值" +msgid "Jerk of top surface" +msgstr "顶层表面抖动" -msgid "Jerk for travel" -msgstr "空驶抖动值" +msgid "First layer" +msgstr "首层" -msgid "" -"Line width of initial layer. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "首层的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "Jerk of first layer" +msgstr "首层抖动" + +msgid "Jerk of travel" +msgstr "行程抖动" + +msgid "Line width of initial layer" +msgstr "首层的线宽" msgid "Initial layer height" msgstr "首层层高" @@ -7427,20 +7426,6 @@ msgstr "首层填充" msgid "Speed of solid infill part of initial layer" msgstr "首层实心填充的打印速度" -msgid "Initial layer travel speed" -msgstr "首层空驶速度" - -msgid "Travel speed of initial layer" -msgstr "首层空驶速度" - -msgid "Number of slow layers" -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 "减慢前几层的打印速度。打印速度会逐渐加速到满速" - msgid "Initial layer nozzle temperature" msgstr "首层打印温度" @@ -7450,27 +7435,6 @@ msgstr "打印首层时的喷嘴温度" msgid "Full fan speed at layer" msgstr "满速风扇在" -msgid "" -"Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." -msgstr "" -"风扇速度将从“禁用第一层”的零线性上升到“全风扇速度层”的最大。如果低于“禁用风扇" -"第一层”,则“全风扇速度第一层”将被忽略,在这种情况下,风扇将在“禁用风扇第一" -"层”+1层以最大允许速度运行。" - -msgid "Support interface fan speed" -msgstr "支撐接触面风扇" - -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 overriden by disable_fan_first_layers." -msgstr "此风扇速度在所有支撑接触层打印期间强制执行" - msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" @@ -7505,15 +7469,12 @@ msgid "" msgstr "产生绒毛表面时,插入的随机点之间的平均距离" msgid "Filter out tiny gaps" -msgstr "忽略微小间隙" - -msgid "Layers and Perimeters" -msgstr "层和墙" +msgstr "过滤掉微小间隙" msgid "" "Filter out gaps smaller than the threshold specified. This setting won't " -"affect top/bottom layers" -msgstr "小于指定阈值的微小间隙不填充。本设置不会对顶/底层起作用" +"affact top/bottom layers" +msgstr "过滤掉小于指定阈值的间隙。此设置不会影响顶部/底部图层。" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " @@ -7563,86 +7524,22 @@ msgstr "不锈钢" msgid "Brass" msgstr "黄铜" -msgid "Nozzle HRC" -msgstr "喷嘴洛氏硬度" - -msgid "" -"The nozzle's hardness. Zero means no checking for nozzle's hardness during " -"slicing." -msgstr "喷嘴硬度。零值表示在切片时不检查喷嘴硬度。" - -msgid "HRC" -msgstr "洛氏硬度" - msgid "Enable this option if machine has auxiliary part cooling fan" 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" -"It won't move fan comands 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 "Only overhangs" -msgstr "仅悬垂" - -msgid "Will only take into account the delay for the cooling of overhangs." -msgstr "仅对悬垂有效" - -msgid "Fan kick-start time" -msgstr "风扇" - -msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to " -"target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the " -"fan started spinning from a stop, or to get the fan up to speed faster.\n" -"Set to 0 to deactivate." -msgstr "" -"让风扇满速运行指定时间以帮助风扇顺利启动\n" -"设为0禁用此选项" - msgid "G-code flavor" msgstr "G-code风格" msgid "What kind of gcode the printer is compatible with" msgstr "打印机兼容的G-code风格'" -msgid "Klipper" -msgstr "" - -msgid "Label objects" -msgstr "标注模型" - -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." -msgstr "" - msgid "Exclude objects" -msgstr "对象排除" - -msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "开启此选项以支持对象排除" - -msgid "Verbose G-code" -msgstr "注释G-code" +msgstr "排除对象" msgid "" -"Enable this to get a commented G-code file, with each line explained by a " -"descriptive text. If you print from SD card, the additional weight of the " -"file could make your firmware slow down." -msgstr "" +"Enable this option to add EXCLUDE OBJECT command in g-code for klipper " +"firmware printer" +msgstr "启用此选项以在Klipper固件打印机的G代码中添加“EXCLUDE OBJECT”命令。" msgid "Infill combination" msgstr "合并填充" @@ -7653,13 +7550,59 @@ msgid "" msgstr "" "自动合并若干层稀疏填充一起打印以可缩短时间。内外墙依然保持原始层高打印。" +msgid "Length of sparse infill anchor" +msgstr "稀疏填充铆线长度" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. " +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"使用一小段额外的走线将稀疏填充和内墙连接在一起。如果表示为百分比(例如:15%)," +"则数值表示相对于稀疏填充的线宽。切片软件尝试将两条紧密的填充线连接到一个短的" +"轮廓线段上。如果找不到短于“填充锚点最大值”的轮廓线段,则填充线只在一侧连接到" +"轮廓线段,并且所选取的轮廓线段的长度仅限于此参数,但不超过“锚点长度最大值”。" +"将此参数设置为零以禁用连接到单个填充线的锚点轮廓。" + +msgid "0 (no open anchors)" +msgstr "0 (无锚线)" + +msgid "1000 (unlimited)" +msgstr "1000(无限制)" + +msgid "Maximum length of sparse infill anchor" +msgstr "稀疏填充铆线最大长度" + +msgid "" +"Connect a sparse infill line to an internal perimeter with a short segment " +"of an additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over sparse infill line width. 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. Set " +"this parameter to zero to disable anchoring." +msgstr "" +"使用一小段额外的走线将稀疏填充和内墙连接在一起。如果表示为百分比(例如:15%)," +"则数值表示相对于稀疏填充的线宽。切片软件尝试将两条紧密的填充线连接到一个短的" +"轮廓线段上。如果找不到短于该参数的轮廓线段,则填充线只在一侧连接到轮廓线段," +"并且所选取的轮廓线段的长度仅限于“填充锚点”,但不超过此参数。将此参数设置为零" +"以禁用锚点。" + +msgid "0 (not anchored)" +msgstr "0(无)" + msgid "Filament to print internal sparse infill." msgstr "打印内部稀疏填充的耗材丝" -msgid "" -"Line width of internal sparse infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "内部稀疏填充的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "Line width of internal sparse infill" +msgstr "内部稀疏填充的线宽" msgid "Infill/Wall overlap" msgstr "填充/墙 重叠" @@ -7674,15 +7617,6 @@ msgstr "" msgid "Speed of internal sparse infill" msgstr "内部稀疏填充的打印速度" -msgid "Interface shells" -msgstr "接触面外壳" - -msgid "" -"Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" -msgstr "" - msgid "Ironing Type" msgstr "熨烫类型" @@ -7690,18 +7624,12 @@ msgid "" "Ironing is using small flow to print on same height of surface again to make " "flat surface more smooth. This setting controls which layer being ironed" msgstr "" -"熨烫指的是使用小流量在表面的同高度打印,进而是的平面更加光滑。这个设置用于设" -"置哪些层进行熨烫。" +"熨烫指的是使用小流量在表面的同高度打印,从而使平面更加光滑。这个设置用于设置" +"哪些层进行熨烫。" msgid "No ironing" msgstr "不熨烫" -msgid "Top surfaces" -msgstr "顶面" - -msgid "Topmost surface" -msgstr "最顶面" - msgid "All solid layer" msgstr "所有实心层" @@ -7940,64 +7868,36 @@ msgstr "文件名格式" msgid "User can self-define the project file name when export" msgstr "用户可以自定义导出项目文件的名称。" -msgid "Make overhang printable" -msgstr "悬垂可打印化" - -msgid "Modify the geometry to print overhangs without support material." -msgstr "修改几何形状使得悬垂部分无需支撑材料或者搭桥打印。" - -msgid "Make overhang printable maximum angle" -msgstr "悬垂可打印化的最大角度" - -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." -msgstr "" -"在使悬垂可打印化后,允许的悬垂最大角度。90°将完全不改变模型并允许任何悬垂,而" -"0°将用圆锥形材料替换所有悬垂部分。" - -msgid "Make overhang printable hole area" -msgstr "最大孔洞面积" - -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将填充模型底部的所有" -"孔洞。" - -msgid "mm²" -msgstr "mm²" - msgid "Detect overhang wall" msgstr "识别悬空外墙" -#, 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." +"speed to print. For 100 percent overhang, bridge speed is used." msgstr "" -"检测悬空相对于线宽的百分比,并应用不同的速度打印。100%%的悬空将使用桥接速度。" +"检测悬空相对于线宽的百分比,并应用不同的速度打印。100%的悬空将使用桥接速度。" -msgid "" -"Line width of inner wall. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "内墙的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "Line width of inner wall" +msgstr "内墙的线宽" msgid "Speed of inner wall" msgstr "内圈墙打印速度" msgid "Number of walls of every layer" -msgstr "每一层的外墙" +msgstr "每一层的墙层数" + +msgid "Post-processing Scripts" +msgstr "后处理脚本" msgid "" "If you want to process the output G-code through custom scripts, just list " "their absolute paths here. Separate multiple scripts with a semicolon. " "Scripts will be passed the absolute path to the G-code file as the first " -"argument, and they can access the Slic3r config settings by reading " -"environment variables." +"argument, and variables of settings also can be read" msgstr "" +"如果你想通过自定义脚本来处理输出的G代码,只需在这里列出它们的绝对路径。用分号" +"来分隔多个脚本。脚本将被传递给G代码文件的绝对路径作为第一个参数,设置的变量也" +"可以被读取。" msgid "Raft contact Z distance" msgstr "筏层Z间距" @@ -8085,62 +7985,19 @@ msgstr "" "回抽完成之后,喷嘴轻微抬升,和打印件之间产生一定间隙。这能够避免空驶时喷嘴和" "打印件剐蹭和碰撞。使用螺旋线抬升z能够减少拉丝。" -msgid "Z hop type" -msgstr "抬Z类型" +msgid "Z Hop Type" +msgstr "Z抬升方式" msgid "Slope" -msgstr "梯形" +msgstr "斜向" msgid "Spiral" msgstr "螺旋" -msgid "Only lift Z above" -msgstr "仅在高度以上抬Z" +msgid "Direct drive" +msgstr "直接驱动" -msgid "" -"If you set this to a positive value, Z lift will only take place above the " -"specified absolute Z." -msgstr "" - -msgid "Only lift Z below" -msgstr "仅在高度以下抬Z" - -msgid "" -"If you set this to a positive value, Z lift will only take place below the " -"specified absolute Z." -msgstr "" - -msgid "On surfaces" -msgstr "仅表面抬Z" - -msgid "" -"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " -"lift Z above/below)." -msgstr "" - -msgid "All Surfaces" -msgstr "所有表面" - -msgid "Top Only" -msgstr "仅顶面" - -msgid "Bottom Only" -msgstr "仅底面" - -msgid "Top and Bottom" -msgstr "顶面和地面" - -msgid "Extra length on restart" -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 "" - -msgid "" -"When the retraction is compensated after changing tool, the extruder will " -"push this additional amount of filament." +msgid "Bowden" msgstr "" msgid "Retraction Speed" @@ -8157,17 +8014,6 @@ msgid "" "retraction" msgstr "耗材丝装填的速度,0表示和回抽速度一致。" -msgid "Use firmware retraction" -msgstr "使用固件回抽" - -msgid "" -"This experimental setting uses G10 and G11 commands to have the firmware " -"handle the retraction. This is only supported in recent Marlin." -msgstr "" - -msgid "Show auto-calibration marks" -msgstr "显示雷达标定线" - msgid "Seam position" msgstr "接缝位置" @@ -8186,40 +8032,17 @@ msgstr "背面" msgid "Random" msgstr "随机" -msgid "Staggered inner seams" -msgstr "交错的内墙接缝" - -msgid "" -"This option causes the inner seams to be shifted backwards based on their " -"depth, forming a zigzag pattern." -msgstr "此选项会根据内墙深度使接缝向后移动,形成锯齿形模式。" - msgid "Seam gap" msgstr "接缝间隔" 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%." -msgstr "" - -msgid "Role base wipe speed" -msgstr "自动擦拭速度" - -msgid "" -"The wipe speed is determined by the speed of the current extrusion role.e.g. " -"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 "闭环擦拭" - -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." +"This amount as a percentage of the current extruder diameter. The default " +"value for this parameter is 15" msgstr "" +"为了减少闭环挤出中接缝的可见性,循环会被中断并缩短指定的长度。\n" +"这个长度是当前挤出器直径的百分比。该参数的默认值为15。" msgid "Wipe speed" msgstr "擦拭速度" @@ -8251,12 +8074,6 @@ msgstr "Skirt圈数" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "skirt的圈数。0表示关闭skirt。" -msgid "Skirt speed" -msgstr "" - -msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "" - 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" @@ -8271,10 +8088,11 @@ msgid "" "internal solid infill" msgstr "小于这个阈值的稀疏填充区域将会被内部实心填充替代。" -msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." -msgstr "内部实心填充的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "mm²" +msgstr "mm²" + +msgid "Line width of internal solid infill" +msgstr "内部实心填充的线宽" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "内部实心填充的速度,不是顶面和底面。" @@ -8388,7 +8206,7 @@ msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "设置支撑图案在水平面的旋转角度。" msgid "On build plate only" -msgstr "仅在构建板生成" +msgstr "仅在打印板生成" msgid "Don't create support on model surface, only on build plate" msgstr "不在模型表面上生成支撑,只在热床上生成。" @@ -8428,10 +8246,8 @@ msgid "" msgstr "" "打印支撑主体和筏层的耗材丝。\"缺省\"代表不指定特定的耗材丝,并使用当前耗材" -msgid "" -"Line width of support. If expressed as a %, it will be computed over the " -"nozzle diameter." -msgstr "支撑的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "Line width of support" +msgstr "支撑的线宽" msgid "Interface use loop pattern" msgstr "接触面采用圈形走线。" @@ -8575,28 +8391,6 @@ msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "此设置确定了树状支撑的相邻节点之间的距离。" -msgid "Adaptive layer height" -msgstr "自适应层高" - -msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " -msgstr "" - -msgid "Auto brim width" -msgstr "自动裙边宽度" - -msgid "" -"Enabling this option means the width of the brim for tree support will be " -"automatically calculated" -msgstr "启用此选项意味着树状支撑的裙边宽度将自动计算自动计算" - -msgid "Tree support brim width" -msgstr "树状支撑裙边宽度" - -msgid "Distance from tree branch to the outermost brim line" -msgstr "从树状支撑分支到最外层裙边线的距离" - msgid "Tree support branch diameter" msgstr "树状支撑分支直径" @@ -8609,16 +8403,14 @@ msgstr "树状支撑外墙层数" msgid "This setting specify the count of walls around tree support" msgstr "树状支撑外墙层数" -msgid "Tree support with infill" -msgstr "树状支撑生成填充" +msgid "Tree support brim width" +msgstr "树状支撑裙边宽度" -msgid "" -"This setting specifies whether to add infill inside large hollows of tree " -"support" -msgstr "这个设置决定是否为树状支撑内部的空腔生成填充。" +msgid "The brim width around tree support. 0 means auto." +msgstr "围绕树状支撑的裙边宽度。0表示自动。" msgid "Chamber temperature" -msgstr "机箱温度" +msgstr "腔体温度" msgid "Target chamber temperature" msgstr "目标腔体温度" @@ -8652,10 +8444,8 @@ msgid "" "tool change" msgstr "换料时插入的G-code,包括T命令。" -msgid "" -"Line width for top surfaces. If expressed as a %, it will be computed over " -"the nozzle diameter." -msgstr "顶面的线宽。如果以%表示,它将基于喷嘴直径来计算。" +msgid "Line width for top surfaces" +msgstr "顶面的线宽" msgid "Speed of top surface infill which is solid" msgstr "顶面实心填充的速度" @@ -8691,6 +8481,16 @@ msgstr "" msgid "Speed of travel which is faster and without extrusion" msgstr "空驶的速度。空驶是无挤出量的快速移动。" +msgid "Use relative E distances" +msgstr "使用相对E距离" + +msgid "" +"If your firmware requires relative E values, check this, otherwise leave it " +"unchecked. Must use relative e distance for Bambu printer" +msgstr "" +"如果您的固件要求使用相对E值,请勾选此项;否则,请不要勾选。对于Bambu打印机," +"必须使用相对E距离。" + msgid "Wipe while retracting" msgstr "回抽时擦拭" @@ -8788,24 +8588,6 @@ msgstr "" "模型外轮廓的尺寸将在X-Y方向收缩或拓展特定值。正值代表扩大。负值代表缩小。这个" "功能通常在模型有装配问题时微调尺寸" -msgid "G-code thumbnails" -msgstr "G-code缩略图尺寸" - -msgid "" -"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " -"following format: \"XxY, XxY, ...\"" -msgstr "" - -msgid "Use relative E distances" -msgstr "使用相对E距离" - -msgid "" -"Relative extrusion is recommended when using \"label_objects\" option.Some " -"extruders work better with this option unckecked (absolute extrusion mode). " -"Wipe tower is only compatible with relative mode. It is always enabled on " -"BambuLab printers. Default is checked" -msgstr "" - msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " @@ -9060,15 +8842,6 @@ msgid "" "uptodate" msgstr "在使用最新设置时,从指定的文件中加载最新的进程/机器设置。" -msgid "Data directory" -msgstr "" - -msgid "" -"Load and store settings at the given directory. This is useful for " -"maintaining different profiles or including configurations from a network " -"storage." -msgstr "" - msgid "Output directory" msgstr "输出路径" @@ -9209,6 +8982,559 @@ msgstr "文件包含无效的顶点索引。" msgid "This OBJ file couldn't be read because it's empty." msgstr "无法读取此OBJ文件,因为它是空的。" +msgid "Flow Rate Calibration" +msgstr "流量比例校准" + +msgid "Max Volumetric Speed Calibration" +msgstr "最大体积速度校准" + +msgid "Manage Result" +msgstr "管理结果" + +msgid "Manual Calibration" +msgstr "手动校准" + +msgid "Result can be read by human eyes." +msgstr "结果可由人眼读取。" + +msgid "Auto-Calibration" +msgstr "自动校准" + +msgid "We would use Lidar to read the calibration result" +msgstr "我们将使用激光雷达来读取校准结果。" + +msgid "Prev" +msgstr "上一个" + +msgid "Recalibration" +msgstr "重新校准" + +msgid "Calibrate" +msgstr "校准" + +msgid "Finish" +msgstr "完成" + +msgid "Wiki" +msgstr "Wiki" + +msgid "How to use calibration result?" +msgstr "如何使用校准结果?" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "您可以在材料编辑中更改流量动态校准因子。" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" +"打印机当前的固件版本不支持校准。\n" +"请升级打印机固件。" + +msgid "Calibration not supported" +msgstr "不支持校准" + +msgid "Flow Dynamics" +msgstr "动态流量" + +msgid "Flow Rate" +msgstr "流量比例" + +msgid "Max Volumetric Speed" +msgstr "最大容积速度" + +msgid "Please enter the name you want to save to printer." +msgstr "请输入要保存到打印机的名称。" + +msgid "The name cannot exceed 40 characters." +msgstr "名称不能超过40个字符。" + +msgid "The name cannot be empty." +msgstr "名称不能为空。" + +#, boost-format +msgid "The selected preset: %1% is not found." +msgstr "未找到选定的预设:%1%。" + +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 "该名称与另一个现有预设名称相同。" + +msgid "create new preset failed." +msgstr "创建新预设失败" + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "您确定要取消当前的校准并返回主页吗?" + +msgid "No Printer Connected!" +msgstr "没有连接打印机!" + +msgid "Printer is not connected yet." +msgstr "打印机尚未连接。" + +msgid "Please select filament to calibrate." +msgstr "请选择要校准的耗材丝。" + +msgid "Connecting to printer..." +msgstr "正在连接打印机..." + +msgid "The failed test result has been dropped." +msgstr "测试失败的结果已被删除。" + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "动态流量校准的结果已保存至打印机。" + +msgid "Internal Error" +msgstr "内部错误" + +msgid "Please select at least one filament for calibration" +msgstr "请至少选择一种材料进行校准。" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "流量比例校准结果已保存到预设" + +msgid "The input value size must be 3." +msgstr "输入值大小必须为3。" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "最大体积速度校准结果已保存到预设值" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "在什么情况下需要进行动态流量校准" + +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" +"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." +msgstr "" +"我们现在已经为不同的打印材料添加了自动校准功能,该功能是完全自动化的,并且结" +"果将保存在打印机中以供将来使用。您只需要在以下有限情况下进行校准:\n" +"1. 如果您引入了不同品牌/型号的新打印材料,或者打印材料受潮;\n" +"2. 如果喷嘴磨损或更换了新的喷嘴;\n" +"3. 如果您在打印材料设置中更改了最大体积速度或打印温度。" + +msgid "About this calibration" +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 "When to use Flow Rate Calibration" +msgstr "何时使用流量率校准" + +msgid "" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"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" +"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." +msgstr "" +"使用流量动态校准后,仍可能出现一些挤出问题,例如:\n" +"1. 过度挤出:打印物体上有过多的材料,形成凸起或小球,或者层次看起来比预期的厚" +"而且不均匀。\n" +"2. 不足挤出:层次非常薄,填充强度不足,或者在缓慢打印时模型顶层有缺陷。\n" +"3. 表面质量差:打印的表面看起来粗糙或不均匀。\n" +"4. 结构稳固性差:打印件容易断裂,或者没有应有的稳固性。" + +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 " +"calibration provides a useful reference flow rate." +msgstr "" +"此外,对于像用于遥控飞机的轻质发泡PLA(LW-PLA)这样的发泡材料,流量率校准非常" +"重要。这些材料在加热时会大幅膨胀,而校准提供了有用的流量率参考。" + +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." +msgstr "" +"流量率校准测量预期挤出体积与实际挤出体积之间的比率。默认设置在Bambu Lab打印机" +"和官方材料上表现良好,因为它们已经进行了预先校准和微调。对于普通的材料,通常" +"情况下,您不需要执行流量率校准,除非在完成其他校准后仍然看到上述列出的缺陷。" +"如需更多详细信息,请查阅wiki文章。" + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"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" +"\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." +msgstr "" +"自动流量率校准采用Bambu Lab的微型激光雷达技术,直接测量校准图案。然而,请注" +"意,这种方法的功效和准确性可能会因特定类型的材料而受影响。特别是透明或半透" +"明、带有闪光颗粒或具有高反射表面的材料可能不适合这种校准,并可能产生不理想的" +"结果。\n" +"\n" +"校准结果可能因每次校准或材料的不同而有所不同。我们仍在通过固件更新不断提高这" +"种校准的准确性和兼容性。\n" +"\n" +"注意:流量率校准是一项高级的过程,只有完全理解其目的和影响的人才应尝试。错误" +"的使用可能导致打印质量不佳或损坏打印机。请确保在执行之前仔细阅读和理解此过" +"程。" + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "当您需要最大体积速度校准时" + +msgid "Over-extrusion or under extrusion" +msgstr "过度挤压或挤压不足" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "使用以下选项打印时,建议进行最大体积速度校准:" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "具有显著热收缩/膨胀的材料,例如..." + +msgid "materials with inaccurate filament diameter" +msgstr "耗材直径不准确的材料" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "我们找到了最佳的流量动态校准因子。" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be droped." +msgstr "部分校准失败!您可以清洁打印平台并重试。未通过的测试结果将被丢弃。" + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "*我们建议您在名称中添加品牌、材料、类型,甚至湿度水平。" + +msgid "Failed" +msgstr "失败" + +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 best line on your plate" +msgstr "请在您的打印板上找到最佳线条" + +msgid "Input Value" +msgstr "输入值" + +msgid "Save to Filament Preset" +msgstr "保存到材料预设" + +msgid "Preset" +msgstr "预设" + +msgid "Record Factor" +msgstr "记录系数" + +msgid "We found the best flow ratio for you" +msgstr "我们为您找到了最佳流量比" + +msgid "Flow Ratio" +msgstr "流量比" + +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "请输入一个有效值(0.0<流量比<2.0)" + +msgid "Please enter the name of the preset you want to save." +msgstr "请输入要保存的预设的名称。" + +msgid "Calibration1" +msgstr "校准1" + +msgid "Calibration2" +msgstr "校准2" + +msgid "Please find the best object on your plate" +msgstr "请在你的盘里找到最好的对象" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "用最光滑的顶面填充块上方的值" + +msgid "Skip Calibration2" +msgstr "跳过校准2" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "流量比:%s " + +msgid "Please choose a block with smoothest top surface" +msgstr "请选择顶部表面最光滑的块" + +msgid "Please choose a block with smoothest top surface." +msgstr "请选择顶部表面最光滑的块。" + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "请输入一个有效值(0<=最大容积速度<=60)" + +msgid "Calibration Type" +msgstr "校准类型" + +msgid "Complete Calibration" +msgstr "完整校准" + +msgid "Fine Calibration based on flow ratio" +msgstr "基于流量比的精细校准" + +msgid "Title" +msgstr "标题" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "将打印一份测试模型。在校准之前,请清理打印平台并将其放回热床上。" + +msgid "Printing Parameters" +msgstr "打印参数" + +msgid "- ℃" +msgstr "" + +msgid " ℃" +msgstr "" + +msgid "Plate Type" +msgstr "热床类型" + +msgid "filament position" +msgstr "耗材丝位置" + +msgid "External Spool" +msgstr "外部线轴" + +msgid "Filament For Calibration" +msgstr "校准用耗材" + +msgid "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" +msgstr "" +"校准材料提示:\n" +"-可以共享相同热床温度的材料\n" +"-不同的耗材品牌和系列(Brand = Bambu, Family = Basic, Matte)" + +msgid "Error desc" +msgstr "错误描述" + +msgid "Extra info" +msgstr "额外信息" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "%s 与 %s 不兼容" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "不支持TPU进行流量动态自动校准。" + +msgid "Connecting to printer" +msgstr "正在连接打印机" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "喷嘴直径已从打印机设置同步" + +msgid "From Volumetric Speed" +msgstr "从体积速度" + +msgid "To Volumetric Speed" +msgstr "至体积速度" + +msgid "Flow Dynamics Calibration Result" +msgstr "动态流量校准结果" + +msgid "No History Result" +msgstr "无历史结果" + +msgid "Success to get history result" +msgstr "成功获取历史结果" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "刷新历史流量动态校准记录" + +msgid "Action" +msgstr "操作" + +msgid "Edit Flow Dynamics Calibration" +msgstr "编辑动态流量校准" + +msgid "PA Calibration" +msgstr "" + +msgid "PA Tower" +msgstr "" + +msgid "PA Line" +msgstr "" + +msgid "PA Pattern" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Start PA: " +msgstr "" + +msgid "End PA: " +msgstr "" + +msgid "PA step: " +msgstr "" + +msgid "Print numbers" +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" +msgstr "" + +msgid "Temperature calibration" +msgstr "" + +msgid "PLA" +msgstr "" + +msgid "ABS/ASA" +msgstr "" + +msgid "PETG" +msgstr "" + +msgid "TPU" +msgstr "" + +msgid "PA-CF" +msgstr "" + +msgid "PET-CF" +msgstr "" + +msgid "Filament type" +msgstr "" + +msgid "Start temp: " +msgstr "" + +msgid "End temp: " +msgstr "" + +msgid "Temp step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"Start temp: <= 350\n" +"End temp: >= 180\n" +"Start temp > End temp + 5)" +msgstr "" + +msgid "Max volumetric speed test" +msgstr "" + +msgid "Start volumetric speed: " +msgstr "" + +msgid "End volumetric speed: " +msgstr "" + +msgid "step: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 0 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "VFA test" +msgstr "" + +msgid "Start speed: " +msgstr "" + +msgid "End speed: " +msgstr "" + +msgid "" +"Please input valid values:\n" +"start > 10 step >= 0\n" +"end > start + step)" +msgstr "" + +msgid "Start retraction length: " +msgstr "" + +msgid "End retraction length: " +msgstr "" + +msgid "mm/mm" +msgstr "" + msgid "Network lookup" msgstr "" @@ -9230,45 +9556,6 @@ msgstr "" msgid "Finished" msgstr "完成" -msgid "Unable to perform boolean operation on selected parts" -msgstr "无法对所选部件执行布尔运算" - -msgid "Mesh Boolean" -msgstr "布尔运算" - -msgid "Union" -msgstr "并集" - -msgid "Difference" -msgstr "差集" - -msgid "Intersection" -msgstr "交集" - -msgid "Source Volume" -msgstr "" - -msgid "Tool Volume" -msgstr "" - -msgid "Subtract from" -msgstr "从中减去" - -msgid "Subtract with" -msgstr "与之相减" - -msgid "selected" -msgstr "已选中" - -msgid "Part 1" -msgstr "零件 1" - -msgid "Part 2" -msgstr "零件 2" - -msgid "Delete input" -msgstr "删除输入" - msgid "Send to print" msgstr "" @@ -9282,12 +9569,6 @@ msgstr "" msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" -msgid "Upload" -msgstr "上传" - -msgid "Upload and Print" -msgstr "" - msgid "Simulate" msgstr "" @@ -9331,173 +9612,44 @@ msgstr "取消中" msgid "Error uploading to print host:" msgstr "上传到打印主机时出错:" -msgid "PA Calibration" -msgstr "PA校准" +msgid "Unable to perform boolean operation on selected parts" +msgstr "无法对所选部件执行布尔运算" -msgid "DDE" -msgstr "近程挤出机" +msgid "Mesh Boolean" +msgstr "布尔运算" -msgid "Bowden" -msgstr "远程挤出机" +msgid "Union" +msgstr "并集" -msgid "Extruder type" -msgstr "挤出机类型" +msgid "Difference" +msgstr "差集" -msgid "PA Tower" -msgstr "PA塔" +msgid "Intersection" +msgstr "交集" -msgid "PA Line" -msgstr "划线模式" - -msgid "PA Pattern" -msgstr "V形模式" - -msgid "Method" -msgstr "方法" - -msgid "Start PA: " -msgstr "起始值" - -msgid "End PA: " -msgstr "结束值" - -msgid "PA step: " -msgstr "步距" - -msgid "Print numbers" -msgstr "打印数字" - -msgid "" -"Please input valid values:\n" -"Start PA: >= 0.0\n" -"End PA: > Start PA\n" -"PA step: >= 0.001)" +msgid "Source Volume" msgstr "" -msgid "Temperature calibration" +msgid "Tool Volume" msgstr "" -msgid "PLA" -msgstr "" +msgid "selected" +msgstr "已选中" -msgid "ABS/ASA" -msgstr "" +msgid "Part 1" +msgstr "零件 1" -msgid "PETG" -msgstr "" +msgid "Subtract from" +msgstr "从中减去" -msgid "TPU" -msgstr "" +msgid "Part 2" +msgstr "零件 2" -msgid "PA-CF" -msgstr "" +msgid "Subtract with" +msgstr "与之相减" -msgid "PET-CF" -msgstr "" - -msgid "Filament type" -msgstr "耗材类型" - -msgid "Start temp: " -msgstr "起始温度: " - -msgid "End end: " -msgstr "结束温度" - -msgid "Temp step: " -msgstr "温度步距" - -msgid "" -"Please input valid values:\n" -"Start temp: <= 350\n" -"End temp: >= 180\n" -"Start temp > End temp + 5)" -msgstr "" - -msgid "Max volumetric speed test" -msgstr "最大体积流量速度测试" - -msgid "Start volumetric speed: " -msgstr "起始流量" - -msgid "End volumetric speed: " -msgstr "结束流量" - -msgid "step: " -msgstr "步距" - -msgid "" -"Please input valid values:\n" -"start > 0 step >= 0\n" -"end > start + step)" -msgstr "" - -msgid "VFA test" -msgstr "VFA震纹测试" - -msgid "Start speed: " -msgstr "起始速度" - -msgid "End speed: " -msgstr "结束速度" - -msgid "" -"Please input valid values:\n" -"start > 10 step >= 0\n" -"end > start + step)" -msgstr "" - -msgid "Start retraction length: " -msgstr "起始回抽长度" - -msgid "End retraction length: " -msgstr "结束回抽长度" - -msgid "mm/mm" -msgstr "" - -msgid "Physical Printer" -msgstr "物理打印机" - -msgid "Print Host upload" -msgstr "" - -msgid "Test" -msgstr "" - -msgid "Could not get a valid Printer Host reference" -msgstr "" - -msgid "Success!" -msgstr "" - -msgid "Refresh Printers" -msgstr "" - -msgid "" -"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" -"signed certificate." -msgstr "" - -msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" - -msgid "Open CA certificate file" -msgstr "" - -#, c-format, boost-format -msgid "" -"On this system, %s uses HTTPS certificates from the system Certificate Store " -"or Keychain." -msgstr "" - -msgid "" -"To use a custom CA file, please import your CA file into Certificate Store / " -"Keychain." -msgstr "" - -msgid "Connection to printers connected via the print host failed." -msgstr "" +msgid "Delete input" +msgstr "删除输入" #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -9606,23 +9758,23 @@ 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." +"directly in Bambu Studio. Read more in the documentation." msgstr "" "减去部分几何体\n" "您知道吗,您可以使用负零件从另一个几何体中减去另一个几何体。例如,可以直接在" -"逆戟鲸中创建可轻松调整大小的孔。" +"Bambu Studio中创建可轻松调整大小的孔。" #: 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 " +"Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" "STEP文件\n" "您知道吗,通过切片STEP文件而不是STL文件可以提高打印质量。\n" -"逆戟鲸支持切片STEP文件,提供比低分辨率STL更平滑的结果。试试看!" +"Bambu Studio支持切片STEP文件,提供比低分辨率STL更平滑的结果。试试看!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -9744,1154 +9896,450 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" -#~ msgid "First layer filament sequence" -#~ msgstr "首层耗材打印顺序" - -#~ msgid "The failed test result has been dropped." -#~ msgstr "测试失败的结果已被删除。" - -#~ msgid "" -#~ "The configuration may be generated by a newer version of BambuStudio." -#~ msgstr "此配置可能由新版本的Bambu Studio生成。" - -#~ msgid "" -#~ "BambuStudio 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 "" -#~ "系统内存耗尽,Bambu Studio即将终止运行。这可能是个缺陷,希望您可以报告此问" -#~ "题,我们将非常感激。" - -#~ msgid "" -#~ "BambuStudio will terminate because of a localization error. It will be " -#~ "appreciated if you report the specific scenario this issue happened." -#~ msgstr "" -#~ "遇到本地化错误,Bambu Studio即将终止运行。希望您可以报告发生此问题的具体场" -#~ "景,我们将非常感激。" - -#, boost-format -#~ msgid "BambuStudio got an unhandled exception: %1%" -#~ msgstr "Bambu Studio捕捉到一个未处理的异常:%1%" - -#~ msgid "" -#~ "BambuStudio configuration file may be corrupted and is not abled to be " -#~ "parsed.Please delete the file and try again." -#~ msgstr "" -#~ "Bambu Studio配置文件可能已损坏而无法解析。请删除此文件并重新启动" -#~ "BambuStudio。" - -#~ msgid "The Bambu Studio needs an upgrade" -#~ msgstr "Bambu Studio需要进行升级" - -#~ msgid "" -#~ "The version of Bambu studio is too low and needs to be updated to the " -#~ "latest version before it can be used normally" -#~ msgstr "Bambu Studio版本过低,需要更新到最新版本方可正常使用" - -#~ msgid "Bambu Studio GUI initialization failed" -#~ msgstr "Bambu Studio图形界面初始化失败" - -#~ msgid "Bambu Cube" -#~ msgstr "Bambu方块" - -#~ msgid "Bambu Cube V2" -#~ msgstr "Bambu方块 V2" - -#~ msgid "ksr FDMTest" -#~ msgstr "欧特克FDM测试" - -#~ msgid "Mesh boolean" -#~ msgstr "网格布尔操作" - -#~ msgid "Mesh boolean operations including union and subtraction" -#~ msgstr "包括并集和差集的网格布尔运算" - -#~ msgid "Edit Plate Name" -#~ msgstr "编辑盘名" - -#~ msgid "Failed to get the model data in the current file." -#~ msgstr "无法获取当前文件中的模型数据。" - -#~ msgid "Check cloud service status" -#~ msgstr "检查云服务状态" - -#~ msgid "Failed to connect to cloud service" -#~ msgstr "无法连接到云服务" - -#~ msgid "Please click on the hyperlink above to view the cloud service status" -#~ msgstr "请点击上方的超链接以查看云服务状态" - -#~ msgid "Connection to printer failed" -#~ msgstr "连接打印机失败" - -#~ msgid "Please check the network connection of the printer and Studio." -#~ msgstr "请检查打印机和工作室的网络连接" - -#~ msgid "Auto Refill" -#~ msgstr "自动补给" - -#~ msgid "Push new filament into the extruder" -#~ msgstr "将新的耗材丝推入挤出机" - -#~ msgid "Grab new filament" -#~ msgstr "咬入耗材丝" - -#~ msgid "Abnormal print file data. Please slice again." -#~ msgstr "打印文件数据异常,请重新切片" - -#~ msgid "Task canceled." -#~ msgstr "任务已取消。" - -#~ msgid "" -#~ "Upload task timed out. Please check the network status and try again." -#~ msgstr "上传任务超时,请排查网络状态后重试。" - -#~ msgid "Print file not found. please slice again." -#~ msgstr "未找到打印文件,请重新切片。" - -#~ msgid "" -#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " -#~ "the model and slice again." -#~ msgstr "打印文件超过最大允许大小(1GB),请简化模型后重新切片。" - -#~ msgid "Failed to upload file to ftp. Please try again." -#~ msgstr "上传文件至FTP失败,请重试。" - -#~ msgid "" -#~ "Check the current status of the bambu server by clicking on the link " -#~ "above." -#~ msgstr "点击上方的链接检查Bambu服务器的当前状态。" - -#~ msgid "" -#~ "The size of the print file is too large. Please adjust the file size and " -#~ "try again." -#~ msgstr "打印文件的大小过大,请调整文件大小后重试。" - -#~ msgid "" -#~ "Print file not found, Please slice it again and send it for printing." -#~ msgstr "未找到打印文件,请重新切片后再发送打印。" - -#~ msgid "" -#~ "Failed to upload print file to FTP. Please check the network status and " -#~ "try again." -#~ msgstr "无法将打印文件上传至FTP。请检查网络状态并重试。" - -#, c-format, boost-format -#~ msgid "Successfully sent. Will automatically jump to the next page in %ss" -#~ msgstr "已成功发送。将自动跳转到%ss中的下一页。" - -#~ msgid "Bambu Studio is licensed under " -#~ msgstr "Bambu Studio是在" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from " -#~ "Slic3r by Alessandro Ranellucci and the RepRap community" -#~ msgstr "" -#~ "Bambu Studio是基于Prusa Research的PrusaSlicer开发的,而PrusaSlicer是基于来" -#~ "自Alessandro Ranellucci和RepRap社区的Slic3r开发的" - -#~ msgid "" -#~ "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -#~ "Merill(supermerill)." -#~ msgstr "" -#~ "Bambu Studio是以PrusaResearch的PrusaSlicer和Merill(supermerill)的" -#~ "SuperSlicer为基础的。" - -#~ msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -#~ msgstr "Bambu Studio还参考了Ultimaker的Cura中的一些想法。" - -#~ msgid "" -#~ "There many parts of the software that come from community contributions, " -#~ "so we're unable to list them one-by-one, and instead, they'll be " -#~ "attributed in the corresponding code comments." -#~ msgstr "" -#~ "软件中有很多部分来自于社区贡献,因此我们不便逐一列出他们,作为替代,他们将" -#~ "在相应的代码注释中被介绍。" - -#~ msgid "Factors of Flow Dynamics Calibration" -#~ msgstr "动态流量校准系数" - -#~ msgid "PA Profile" -#~ msgstr "PA 配置文件" - -#~ msgid "" -#~ "When the current material run out, the printer will continue to print in " -#~ "the following order." -#~ 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 "Calibration error" -#~ msgstr "校准错误" - -#~ msgid "TPU is not supported by AMS." -#~ msgstr "AMS不支持TPU。" - -#~ msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -#~ 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内,请在使用前注意干燥。" - -#~ 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中很容易断裂或卡住,请谨慎使用。" - -#~ msgid "Layer Time (s)" -#~ msgstr "层时间(s)" - -#, c-format, boost-format -#~ msgid "" -#~ "Conflicts of gcode paths have been found at layer %d. Please separate the " -#~ "conflicted objects farther (%s <-> %s)." -#~ msgstr "" -#~ "发现gcode路径在层%d处的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" - -#~ msgid "Report issue" -#~ msgstr "报告问题" - -#~ msgid "Show &Overhang" -#~ msgstr "显示悬空高亮" - -#~ msgid "Show object overhang highlight in 3D scene" -#~ msgstr "在3D场景中显示悬空高亮" - -#~ msgid "Initialize failed (Device connection not ready)!" -#~ msgstr "初始化失败(设备未连接)" - -#~ msgid "Initialize failed (Not supported on the current printer version)!" -#~ msgstr "初始化失败(当前打印机的版本不支持)!" - -#~ msgid "" -#~ "Another virtual camera is running.\n" -#~ "Bambu Studio supports only a single virtual camera.\n" -#~ "Do you want to stop this virtual camera?" -#~ msgstr "" -#~ "另一个虚拟摄像头正在工作。\n" -#~ "Bambu Studio 同时只能支持一个虚拟摄像头。\n" -#~ "是否停止前一个虚拟摄像头?" - -#~ msgid "Switch to 3mf model files." -#~ msgstr "切换到3MF模型文件。" - -#, c-format, boost-format -#~ msgid "No files [%d]" -#~ msgstr "文件列表为空[%d]" - -#, c-format, boost-format -#~ msgid "Load failed [%d]" -#~ msgstr "加载失败 [%d]" - -#, c-format, 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?" -#~ msgstr[0] "您将从打印机中删除%u个文件。确定要继续吗?" - -#, c-format, boost-format -#~ msgid "Do you want to delete the file '%s' from printer?" -#~ msgstr "你确定要从打印机中删除文件'%s'吗?" - -#~ msgid "Delete file" -#~ msgstr "删除文件" - -#~ msgid "Fetching model infomations ..." -#~ msgstr "正在获取模型信息..." - -#~ msgid "Failed to fetching model infomations from printer." -#~ msgstr "无法从打印机获取模型信息。" - -#~ msgid "Failed to parse model infomations." -#~ msgstr "解析模型信息失败。" - -#~ msgid "" -#~ "The .gcode.3mf file contains no G-code data.Please slice it whthBambu " -#~ "Studio and export a new .gcode.3mf file." -#~ msgstr "" -#~ ".gcode.3mf文件中不包含G-code数据。请使用Bambu Studio进行切片并导出新的." -#~ "gcode.3mf文件。" - -#~ msgid "Not supported on the current printer version." -#~ msgstr "当前打印机的版本不支持。" - -#~ msgid "Storage unavailable, insert SD card." -#~ msgstr "存储不可用,请插入SD卡。" - -#~ msgid "Immediately score" -#~ msgstr "立即打分" - -#~ msgid "Please give a score for your favorite Bambu Market model." -#~ msgstr "请为您喜欢的 Bambu 商城模型打分。" - -#~ msgid "Score" -#~ msgstr "打分" - -#, boost-format -#~ msgid " plate %1%: " -#~ msgstr " 盘 %1%: " - -#~ msgid "" -#~ "There are some unknown or uncompatible filaments mapped to generic " -#~ "preset. Please update Bambu Studio or restart Bambu Studio to check if " -#~ "there is an update to system presets." -#~ msgstr "" -#~ "有一些未知或不兼容的填料映射到通用预设中。请更新Bambu Studio或重新启动" -#~ "Bambu Studio,以检查是否有系统预设的更新。" - -#~ msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -#~ msgstr "该3mf文件来自旧版本的Bambu Studio,将只加载几何数据。" - -#~ msgid "" -#~ "\"Fix Model\" feature is currently only on Windows. Please repair the " -#~ "model on Bambu Studio(windows) or CAD softwares." -#~ msgstr "" -#~ "\"修复模型\"功能目前仅适用于Windows。请在Bambu Studio(windows)或CAD软件上" -#~ "修复模型。" - -#~ msgid "Associate files to BambuStudio" -#~ msgstr "Bambu Studio文件关联" - -#~ msgid "Associate .3mf files to BambuStudio" -#~ msgstr "使用Bambu Studio打开.3mf文件" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .3mf files" -#~ msgstr "开启后,将缺省使用Bambu Studio打开.3mf文件" - -#~ msgid "Associate .stl files to BambuStudio" -#~ msgstr "使用Bambu Studio打开.stl文件" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .stl files" -#~ msgstr "开启后,将缺省使用Bambu Studio打开.stl文件" - -#~ msgid "Associate .step/.stp files to BambuStudio" -#~ msgstr "使用Bambu Studio打开.step/.stp文件" - -#~ msgid "" -#~ "If enabled, sets BambuStudio as default application to open .step files" -#~ msgstr "开启后,将缺省使用Bambu Studio打开.step文件" - -#~ msgid "Online Models" -#~ msgstr "在线模型" - -#~ msgid "Show online staff-picked models on the home page" -#~ msgstr "在主页上显示工作人员挑选的在线模型" - -#~ msgid "Skip AMS blacklist check" -#~ msgstr "跳过AMS黑名单检查" - -#~ msgid "Enable SSL(MQTT)" -#~ msgstr "启用SSL(MQTT)" - -#~ msgid "Enable SSL(FTP)" -#~ msgstr "启用SSL(FTP)" - -#~ msgid "Internal developer mode" -#~ msgstr "内部开发者模式" - -#~ msgid "Incompatible" -#~ msgstr "不兼容的预设" - -#~ msgid "The selected preset is null!" -#~ msgstr "选择的预设为空!" - -#~ msgid "Same as Global Plate Type" -#~ msgstr "跟随全局打印板类型" - -#~ msgid "PLA Plate" -#~ msgstr "PLA打印板" - -#~ msgid "Flow Dynamics Calibration" -#~ msgstr "动态流量校准" - -#~ msgid "Error code" -#~ msgstr "错误代码" - -#~ msgid "Check the status of current system services" -#~ msgstr "请检查当前系统服务状态" - -#~ msgid "Printer local connection failed, please try again." -#~ msgstr "打印机局域网连接失败,请重试。" - -#~ msgid "" -#~ "The selected printer is incompatible with the chosen printer presets." -#~ msgstr "所选打印机与选择的打印机预设不兼容。" - -#~ msgid "" -#~ "Connecting to the printer. Unable to cancel during the connection process." -#~ msgstr "正在连接打印机。连接过程中无法取消。" - -#~ msgid "The name length exceeds the limit." -#~ msgstr "名称长度超过限制。" - -#~ msgid "" -#~ "Caution to use! Flow calibration on Textured PEI Plate may fail due to " -#~ "the scattered surface." -#~ msgstr "小心使用!纹理PEI板上的流量校准可能会因表面散射而失败。" - -#~ msgid "Automatic flow calibration using Micro Lidar" -#~ msgstr "使用微型激光雷达进行自动流量校准" - -#~ msgid "The printer is required to be in the same LAN as Bambu Studio." -#~ msgstr "打印机需要与Bambu Studio在同一个局域网内。" - -#~ msgid "Check the reason" -#~ msgstr "查看原因" - -#~ msgid "Read and accept" -#~ msgstr "我已阅读并接受" - -#~ msgid "Terms and Conditions" -#~ msgstr "用户使用协议" - -#~ msgid "" -#~ "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " -#~ "device, please read the termsand conditions.By clicking to agree to use " -#~ "your Bambu Lab device, you agree to abide by the Privacy Policyand 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 "" -#~ "感谢您购买Bambu Lab设备,使用Bambu Lab设备前,请阅读一下条款,单击同意使用" -#~ "您的Bambu Lab设备即表示您同意遵守隐私政策以及使用条款(统称为“条款”)。如" -#~ "果您不符合或不同意Bambu Lab隐私政策,请不要使用Bambu Lab设备和服务。" - -#~ msgid "and" -#~ msgstr "和" - -#~ msgid "Privacy Policy" -#~ msgstr "隐私协议" - -#~ msgid "We ask for your help to improve everyone's printer" -#~ msgstr "我们请求您的帮助来改善大家的打印机" - -#~ msgid "Statement about User Experience Improvement Program" -#~ msgstr "关于用户体验改善计划的声明" - -#, c-format, 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 same principle and uses machine learning to improve its performance " -#~ "from the 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." -#~ msgstr "" -#~ "在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。%s遵循" -#~ "同样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改" -#~ "善打印性能。我们正在通过向%s提供真实世界的数据来训练他们变得更聪明。如果您" -#~ "愿意,此服务将访问您的错误日志和使用日志中的信息,其中可能包括隐私政策中描" -#~ "述的信息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓" -#~ "名、地址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策" -#~ "的声明。" - -#~ msgid "Statement on User Experience Improvement Plan" -#~ msgstr "关于用户体验改善计划的声明" - -#~ msgid "Post-processing scripts" -#~ msgstr "后处理脚本" - -#~ msgid "Cool Plate / PLA Plate" -#~ msgstr "低温打印板 / PLA打印板" - -#~ msgid "" -#~ "Click OK to update the Network plug-in when Bambu Studio launches next " -#~ "time." -#~ msgstr "点击\"确定\",将在Bambu Studio下次启动之后自动升级网络插件" - -#~ msgid "New version of Bambu Studio" -#~ msgstr "新版本的Bambu Studio" - -#~ msgid "" -#~ "Step 1, please confirm Bambu Studio and your printer are in the same LAN." -#~ msgstr "第1步,请确认Bambu Studio和您的打印机在同一个LAN上。" - -#~ msgid "" -#~ "The following object(s) have empty initial layer and can't be printed. " -#~ "Please Cut the bottom or enable supports." -#~ msgstr "模型出现空层无法打印。请切掉底部或打开支撑。" - -#~ msgid "Initial layer flow ratio" -#~ msgstr "首层流量比" - -#~ msgid "This factor affects the amount of material for the initial layer" -#~ msgstr "该因素影响首层的材料用量" +#~ msgid "Only one wall type" +#~ msgstr "顶面单层墙" #~ msgid "" #~ "Use only one wall on flat top surface, to give more space to the top " -#~ "infill pattern. Could be applyed on topmost surface or all top surface." -#~ msgstr "" -#~ "顶面只使用单层墙,从而更多的空间能够使用顶部填充图案。可以应用于最顶部表面" -#~ "或所有顶部表面。" +#~ "infill pattern" +#~ msgstr "顶面只使用单层墙,从而更多的空间能够使用顶部填充图案" -#~ msgid "Not apply" -#~ msgstr "不使用" - -#~ msgid "Use only one wall on the first layer of model" -#~ msgstr "在模型的首层仅生成单层墙" +#~ msgid "Nozzle HRC" +#~ msgstr "喷嘴洛氏硬度" #~ msgid "" -#~ "If enabled, Studio will generate support loops 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 "" -#~ "如果开启,Studio会沿着内部桥接的边沿在其下方生成支撑轮廓。这些支撑轮廓可以" -#~ "防止悬空地打印内部桥接并提高顶面质量,特别是在填充密度较低的情况下。这个设" -#~ "置用于调整支撑轮廓的厚度,0表示关闭此特性。" +#~ "The nozzle's hardness. Zero means no checking for nozzle's hardness " +#~ "during slicing." +#~ msgstr "喷嘴硬度。零值表示在切片时不检查喷嘴硬度。" -#~ msgid "Line width of outer wall" -#~ msgstr "外墙的线宽" - -#~ msgid "Object flow ratio" -#~ msgstr "对象流量比率" - -#~ msgid "The flow ratio set by object, the meaning is the same as flow ratio." -#~ msgstr "由对象设置的流量比率,其含义与流量比率相同。" - -#~ msgid "" -#~ "Enable pressure advance, auto calibration result will be overwriten once " -#~ "enabled. Useless for Bambu Printer" -#~ msgstr "启用压力提前补偿,启用后自动校准结果将被覆盖。对于Bambu打印机无效。" - -#~ msgid "" -#~ "Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for " -#~ "Bambu Printer" -#~ msgstr "" -#~ "压力提前补偿(Klipper)也称为线性提前补偿因子(Marlin)。对于Bambu打印机无" -#~ "效。" - -#~ msgid "Default line width if some line width is set to be zero" -#~ msgstr "当线宽设置为0时走线的默认线宽" - -#~ msgid "" -#~ "Acceleration of inner walls. 0 means using normal printing acceleration" -#~ msgstr "内部壁的加速度。0表示使用正常的打印加速度。" - -#~ msgid "Default jerk" -#~ msgstr "默认抖动" - -#~ msgid "Jerk of infill" -#~ msgstr "填充抖动" - -#~ msgid "Jerk of top surface" -#~ msgstr "顶层表面抖动" - -#~ msgid "Jerk of first layer" -#~ msgstr "首层抖动" - -#~ msgid "Jerk of travel" -#~ msgstr "行程抖动" - -#~ msgid "Line width of initial layer" -#~ msgstr "首层的线宽" - -#~ msgid "" -#~ "Filter out gaps smaller than the threshold specified. This setting won't " -#~ "affact top/bottom layers" -#~ msgstr "过滤掉小于指定阈值的间隙。此设置不会影响顶部/底部图层。" - -#~ msgid "" -#~ "Enable this option to add EXCLUDE OBJECT command in g-code for klipper " -#~ "firmware printer" -#~ msgstr "启用此选项以在Klipper固件打印机的G代码中添加“EXCLUDE OBJECT”命令。" - -#~ msgid "Length of sparse infill anchor" -#~ msgstr "稀疏填充铆线长度" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable " -#~ "anchoring perimeters connected to a single infill line." -#~ msgstr "" -#~ "使用一小段额外的走线将稀疏填充和内墙连接在一起。如果表示为百分比(例" -#~ "如:15%),则数值表示相对于稀疏填充的线宽。切片软件尝试将两条紧密的填充线连" -#~ "接到一个短的轮廓线段上。如果找不到短于“填充锚点最大值”的轮廓线段,则填充线" -#~ "只在一侧连接到轮廓线段,并且所选取的轮廓线段的长度仅限于此参数,但不超" -#~ "过“锚点长度最大值”。将此参数设置为零以禁用连接到单个填充线的锚点轮廓。" - -#~ msgid "Maximum length of sparse infill anchor" -#~ msgstr "稀疏填充铆线最大长度" - -#~ msgid "" -#~ "Connect a sparse infill line to an internal perimeter with a short " -#~ "segment of an additional perimeter. If expressed as percentage (example: " -#~ "15%) it is calculated over sparse infill line width. 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. Set this parameter to zero to disable anchoring." -#~ msgstr "" -#~ "使用一小段额外的走线将稀疏填充和内墙连接在一起。如果表示为百分比(例" -#~ "如:15%),则数值表示相对于稀疏填充的线宽。切片软件尝试将两条紧密的填充线连" -#~ "接到一个短的轮廓线段上。如果找不到短于该参数的轮廓线段,则填充线只在一侧连" -#~ "接到轮廓线段,并且所选取的轮廓线段的长度仅限于“填充锚点”,但不超过此参数。" -#~ "将此参数设置为零以禁用锚点。" - -#~ msgid "Line width of internal sparse infill" -#~ msgstr "内部稀疏填充的线宽" +#~ msgid "HRC" +#~ msgstr "洛氏硬度" +#, c-format, boost-format #~ msgid "" #~ "Detect the overhang percentage relative to line width and use different " -#~ "speed to print. For 100 percent overhang, bridge speed is used." +#~ "speed to print. For 100%% overhang, bridge speed is used." #~ msgstr "" -#~ "检测悬空相对于线宽的百分比,并应用不同的速度打印。100%的悬空将使用桥接速" +#~ "检测悬空相对于线宽的百分比,并应用不同的速度打印。100%%的悬空将使用桥接速" #~ "度。" -#~ msgid "Line width of inner wall" -#~ msgstr "内墙的线宽" +#~ msgid "Bottom surface flow ratio" +#~ msgstr "底部表面流量比例" + +#~ msgid "This factor affects the amount of material for bottom solid infill" +#~ msgstr "这个因素影响底部实心填充的材料用量" + +#~ msgid "When you need to use Flow Rate Calibration" +#~ msgstr "在什么情况下需要进行流量比例校准" + +#~ msgid "Record" +#~ msgstr "记录" + +#~ msgid "Please select the nozzle diameter of your printer" +#~ msgstr "请选择打印机的喷嘴直径" + +#~ msgid "Please select the plate type of your printer" +#~ msgstr "请选择打印机的印版类型" + +#~ msgid "Pause Print" +#~ msgstr "暂停打印" + +#~ msgid "Edit Pause Print Message" +#~ msgstr "编辑暂停打印信息" + +#~ msgid "Delete Pause Print" +#~ msgstr "删除暂停打印" + +#~ msgid "The selected preset has been deleted." +#~ msgstr "所选预设已被删除。" + +#~ msgid "Factors of dynamic flow cali" +#~ msgstr "动态流量标定系数" + +#~ msgid "Flow Calibration" +#~ msgstr "流量校准" + +#~ msgid "uneven extrusion" +#~ msgstr "不均匀挤出" #~ msgid "" -#~ "If you want to process the output G-code through custom scripts, just " -#~ "list their absolute paths here. Separate multiple scripts with a " -#~ "semicolon. Scripts will be passed the absolute path to the G-code file as " -#~ "the first argument, and variables of settings also can be read" +#~ "After calibration, the linear compensation factor(K) will be recorded and " +#~ "applied to printing. This factor would be different if device, degree of " +#~ "usage, material, and material family type are different" #~ msgstr "" -#~ "如果你想通过自定义脚本来处理输出的G代码,只需在这里列出它们的绝对路径。用" -#~ "分号来分隔多个脚本。脚本将被传递给G代码文件的绝对路径作为第一个参数,设置" -#~ "的变量也可以被读取。" +#~ "校准完成后,线性补偿系数(K) 将被记录并应用于打印中。如果设备、使用程度、材" +#~ "料和材料类型不同,这个系数也会有所不同。" -#~ msgid "Z Hop Type" -#~ msgstr "Z抬升方式" +#~ msgid "When you need Flow Rate Calibration" +#~ msgstr "当您需要流量比例校准时" -#~ msgid "Direct drive" -#~ msgstr "直接驱动" +#~ msgid "Flow Rate calibration is recommended when you print with:" +#~ msgstr "当使用以下内容打印时,建议进行流速校准:" -#~ 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 as a percentage of the current extruder diameter. The default " -#~ "value for this parameter is 15" -#~ msgstr "" -#~ "为了减少闭环挤出中接缝的可见性,循环会被中断并缩短指定的长度。\n" -#~ "这个长度是当前挤出器直径的百分比。该参数的默认值为15。" +#~ msgid "Dynamic Pressure Control Calibration" +#~ msgstr "动态压力控制校准" -#~ msgid "Line width of internal solid infill" -#~ msgstr "内部实心填充的线宽" - -#~ msgid "Line width of support" -#~ msgstr "支撑的线宽" - -#~ msgid "The brim width around tree support. 0 means auto." -#~ msgstr "围绕树状支撑的裙边宽度。0表示自动。" - -#~ msgid "Line width for top surfaces" -#~ msgstr "顶面的线宽" - -#~ msgid "" -#~ "If your firmware requires relative E values, check this, otherwise leave " -#~ "it unchecked. Must use relative e distance for Bambu printer" -#~ msgstr "" -#~ "如果您的固件要求使用相对E值,请勾选此项;否则,请不要勾选。对于Bambu打印" -#~ "机,必须使用相对E距离。" - -#~ msgid "Flow Rate Calibration" -#~ msgstr "流量比例校准" - -#~ msgid "Max Volumetric Speed Calibration" -#~ msgstr "最大体积速度校准" - -#~ msgid "Manage Result" -#~ msgstr "管理结果" - -#~ msgid "Manual Calibration" +#~ msgid "Maual Calibration" #~ msgstr "手动校准" -#~ msgid "Result can be read by human eyes." -#~ msgstr "结果可由人眼读取。" +#~ msgid "Dynamic Pressure Control" +#~ msgstr "动态压力控制" -#~ msgid "Auto-Calibration" -#~ msgstr "自动校准" +#~ msgid "" +#~ "Dynamic Pressure Control calibration result has been saved to the printer" +#~ msgstr "动态压力控制校准结果已保存到打印机。" -#~ msgid "We would use Lidar to read the calibration result" -#~ msgstr "我们将使用激光雷达来读取校准结果。" +#~ msgid "When you need Dynamic Pressure Control Calibration" +#~ msgstr "当您需要动态压力控制校准时" -#~ msgid "Prev" -#~ msgstr "上一个" +#~ msgid "We found the best Dynamic Pressure Control Factor" +#~ msgstr "我们找到了最佳的动态压力控制系数" -#~ msgid "Recalibration" +#~ msgid "Brand Name" +#~ msgstr "品牌名称" + +#~ msgid "The name cannot exceed 20 characters." +#~ msgstr "名称不能超过20个字符。" + +#~ msgid "Printing List" +#~ msgstr "项目切片" + +#~ msgid "Pressure Adavance" +#~ msgstr "压力提升" + +#~ msgid "Filament From" +#~ msgstr "耗材丝来源" + +#~ msgid "" +#~ "Please select same type of material, because plate temperature might not " +#~ "be compatible with different type of material" +#~ msgstr "请选择相同类型的材料,因为热床温度可能与不同类型的材料不兼容。" + +#~ msgid "Restart" +#~ msgstr "重新开始" + +#~ msgid "Re-Calibrate" #~ msgstr "重新校准" -#~ msgid "Calibrate" -#~ msgstr "校准" +#~ msgid "Is in printing. Please wait for printing to complete" +#~ msgstr "正在打印中,请等待打印完成。" -#~ msgid "Wiki" -#~ msgstr "Wiki" +#~ msgid "It will restart to get the results. Do you confirm to re-calibrate?" +#~ msgstr "将重新启动以获取结果。您确定要重新校准吗?" -#~ msgid "How to use calibration result?" -#~ msgstr "如何使用校准结果?" +#~ msgid "It will restart to get the results. Do you confirm to restart?" +#~ msgstr "将重新启动以获取结果。您确定要重新启动吗?" + +#~ msgid "Please select a printer and nozzle for calibration." +#~ msgstr "请选择用于校准的打印机和喷嘴。" + +#~ msgid "No print preset" +#~ msgstr "没有打印预设。" + +#~ msgid "Please select filament for calibration." +#~ msgstr "请选择用于校准的打印材料。" #~ msgid "" -#~ "You could change the Flow Dynamics Calibration Factor in material editing" -#~ msgstr "您可以在材料编辑中更改流量动态校准因子。" +#~ "The printing parameters is empty, please reselect nozzle and plate type." +#~ msgstr "打印参数为空,请重新选择喷嘴和打印板类型。" + +#~ msgid "Saved success." +#~ msgstr "保存成功" #~ msgid "" -#~ "The current firmware version of the printer does not support " -#~ "calibration.\n" -#~ "Please upgrade the printer firmware." +#~ "Are you sure you want to cancel this calibration? It will return to start " +#~ "page" +#~ msgstr "您确定要取消此次校准吗?这将返回到开始页面。" + +#~ msgid "" +#~ "Unable to print %s and %s together. Filaments have large bed temperature " +#~ "difference" +#~ msgstr "无法同时打印 %s 和 %s。打印材料的打印床温度差异较大。" + +#~ msgid "No AMS filaments. Please select a printer to load AMS info." +#~ msgstr "没有 AMS 材料。请先选择一个打印机以加载 AMS 信息。" + +#~ msgid "We found the best Pressure Advance Factor" +#~ msgstr "我们找到了最佳的压力提升因子" + +#~ msgid "When you need Pressure Advance Calibration" +#~ msgstr "当您需要进行压力提升校准时" + +#~ msgid "Start" +#~ msgstr "首层" + +#~ msgid "Pressure Advance" +#~ msgstr "压力提升" + +#~ msgid "Material" +#~ msgstr "材料" + +#~ msgid "Edit plate settings" +#~ msgstr "编辑盘设置" + +#~ msgid "Ams filament backup" +#~ msgstr "AMS耗材丝备份" + +#~ msgid "Filaments Auto refill" +#~ msgstr "耗材丝自动补给" + +#~ msgid "Auto refill" +#~ msgstr "自动补给" + +#~ msgid "3D Models" +#~ msgstr "3D模型" + +#~ msgid "Number of currently selected: %1%\n" +#~ msgstr "当前选择的零件数量: %1%\n" + +#~ msgid "Assemble the selected parts to a single part" +#~ msgstr "组合所选零件为单个零件" + +#~ msgid "Initialize failed (Not supported with LAN-only mode)!" +#~ msgstr "初始化失败(不支持局域网模式的视频连接)" + +#~ msgid "" +#~ "Damp %s will become flexible and get stuck inside AMS,please take care to " +#~ "dry it before use." +#~ msgstr "潮湿的%s会变软并卡在AMS内,请在使用前保持干燥。" + +#~ msgid "" +#~ "%s filaments are hard and brittle, It's easy to break or get stuck in " +#~ "AMS, please use with caution." +#~ msgstr "%s耗材丝又硬又脆,很容易断裂或卡在AMS中,请谨慎使用。" + +#~ msgid "Top Solid Layers" +#~ msgstr "顶部实心层" + +#~ msgid "Top Minimum Shell Thickness" +#~ msgstr "顶部外壳最小厚度" + +#~ msgid "Bottom Solid Layers" +#~ msgstr "底部实心层" + +#~ msgid "Bottom Minimum Shell Thickness" +#~ msgstr "底部外壳最小厚度" + +#~ msgid "Not supported by this model of printer!" +#~ msgstr "该型号的打印机不支持该功能!" + +#~ msgid "" +#~ "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect " +#~ "the printer by logging in with your user account." #~ msgstr "" -#~ "打印机当前的固件版本不支持校准。\n" -#~ "请升级打印机固件。" - -#~ msgid "Calibration not supported" -#~ msgstr "不支持校准" - -#~ msgid "Flow Dynamics" -#~ msgstr "动态流量" - -#~ msgid "Flow Rate" -#~ msgstr "流量比例" - -#~ msgid "Max Volumetric Speed" -#~ msgstr "最大容积速度" - -#~ msgid "Please enter the name you want to save to printer." -#~ msgstr "请输入要保存到打印机的名称。" - -#~ msgid "The name cannot exceed 40 characters." -#~ msgstr "名称不能超过40个字符。" - -#, boost-format -#~ msgid "The selected preset: %1% is not found." -#~ msgstr "未找到选定的预设:%1%。" - -#~ 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 "该名称与另一个现有预设名称相同。" - -#~ msgid "create new preset failed." -#~ msgstr "创建新预设失败" +#~ "由于LAN模式被禁用,已与打印机[%s]断开连接。请使用您的用户帐户登录以重新连" +#~ "接打印机。" #~ msgid "" -#~ "Are you sure to cancel the current calibration and return to the home " -#~ "page?" -#~ msgstr "您确定要取消当前的校准并返回主页吗?" - -#~ msgid "No Printer Connected!" -#~ msgstr "没有连接打印机!" - -#~ msgid "Printer is not connected yet." -#~ msgstr "打印机尚未连接。" - -#~ msgid "Please select filament to calibrate." -#~ msgstr "请选择要校准的耗材丝。" - -#~ msgid "Connecting to printer..." -#~ msgstr "正在连接打印机..." - -#~ msgid "The failed test result has been droped." -#~ msgstr "测试失败的结果已被删除。" - -#~ msgid "Flow Dynamics Calibration result has been saved to the printer" -#~ msgstr "动态流量校准的结果已保存至打印机。" - -#~ msgid "Internal Error" -#~ msgstr "内部错误" - -#~ msgid "Please select at least one filament for calibration" -#~ msgstr "请至少选择一种材料进行校准。" - -#~ msgid "Flow rate calibration result has been saved to preset" -#~ msgstr "流量比例校准结果已保存到预设" - -#~ msgid "The input value size must be 3." -#~ msgstr "输入值大小必须为3。" - -#~ msgid "Max volumetric speed calibration result has been saved to preset" -#~ msgstr "最大体积速度校准结果已保存到预设值" - -#~ msgid "When do you need Flow Dynamics Calibration" -#~ msgstr "在什么情况下需要进行动态流量校准" - -#~ 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" -#~ "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." +#~ "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect " +#~ "the printer by inputting Access Code which can be gotten from printer " +#~ "screen." #~ msgstr "" -#~ "我们现在已经为不同的打印材料添加了自动校准功能,该功能是完全自动化的,并且" -#~ "结果将保存在打印机中以供将来使用。您只需要在以下有限情况下进行校准:\n" -#~ "1. 如果您引入了不同品牌/型号的新打印材料,或者打印材料受潮;\n" -#~ "2. 如果喷嘴磨损或更换了新的喷嘴;\n" -#~ "3. 如果您在打印材料设置中更改了最大体积速度或打印温度。" +#~ "由于启用了LAN模式,已与打印机[%s]断开连接。请通过输入访问码重新连接打印" +#~ "机,访问码可从打印机屏幕上获取。" -#~ msgid "About this calibration" -#~ msgstr "关于此校准" +#~ msgid " plate %1%:" +#~ msgstr "盘%1%:" + +#~ msgid "Set Unprintable" +#~ msgstr "设置不可打印" + +#~ msgid "Set Printable" +#~ msgstr "设置可打印" + +#~ msgid "Edit plate setitngs" +#~ msgstr "编辑盘设置" + +#~ msgid "Manual" +#~ msgstr "手动" + +#~ msgid "Feed new filament from external spool" +#~ msgstr "从外部料盘送入新的耗材丝" + +#~ msgid "Confirm whether the filament has been extruded" +#~ msgstr "确认耗材丝是否已被挤出" + +#~ msgid "Initialize failed (Not supported by printer)!" +#~ 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." +#~ "There are some unknown filaments mapped to generic preset. Please update " +#~ "Bambu Studio or restart Bambu Studio to check if there is an update to " +#~ "system presets." #~ msgstr "" -#~ "请从我们的wiki中找到流量动态校准的详细信息。\n" -#~ "\n" -#~ "通常情况下,校准是不必要的。当您开始单色/单材料打印,并在打印开始菜单中勾" -#~ "选了“流量动态校准”选项时,打印机将按照旧的方式,在打印前校准丝料;当您开始" -#~ "多色/多材料打印时,打印机将在每次换丝料时使用默认的补偿参数,这在大多数情" -#~ "况下会产生良好的效果。\n" -#~ "\n" -#~ "请注意,有几种情况会导致校准结果不可靠:使用纹理板进行校准;建模平台粘附效" -#~ "果不好(请清洗建模平台或涂抹胶棒)... 您可以在我们的wiki中找到更多信息。\n" -#~ "\n" -#~ "在我们的测试中,校准结果有约10%的波动,这可能导致每次校准的结果略有不同。" -#~ "我们仍在调查根本原因,并通过新的更新进行改进。" +#~ "有一些未知型号的材料,映射到通用预设。请更新或者重启 Bambu Studio,以检查" +#~ "系统预设有没有更新。" -#~ msgid "When to use Flow Rate Calibration" -#~ msgstr "何时使用流量率校准" +#~ msgid "Cool Plate" +#~ msgstr "低温打印板" #~ msgid "" -#~ "After using Flow Dynamics Calibration, there might still be some " -#~ "extrusion 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" -#~ "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." +#~ "Extrusion compensation calibration is not supported when using Textured " +#~ "PEI Plate" +#~ msgstr "使用带纹理的PEI板时不支持挤出补偿校准" + +#~ msgid "The region parameter is incorrrect" +#~ msgstr "区域设置不正确" + +#~ msgid "Failure of printer login" +#~ msgstr "登录设备失败" + +#~ msgid "Failed to get ticket" +#~ msgstr "获取Ticket失败" + +#~ msgid "User authorization timeout" +#~ msgstr "用户鉴权超时" + +#~ msgid "Failure of bind" +#~ msgstr "设备登录失败" + +#~ msgid "" +#~ "Upload task timed out. Please check the network problem and try again" +#~ msgstr "上传任务超时,请排查网络问题后重试" + +#~ msgid "Print file not found, please slice again" +#~ msgstr "未找到打印文件,请重新切片" + +#~ msgid "" +#~ "The print file exceeds the maximum allowable size (1GB). Please simplify " +#~ "the model and slice again" +#~ msgstr "打印文件超过最大允许大小(1GB),请简化模型后重新切片" + +#~ msgid "Failed uploading print file" +#~ msgstr "打印任务上传失败" + +#~ msgid "Wrong Access code" +#~ msgstr "访问码错误" + +#~ msgid "Send to Printer failed. Please try again." +#~ msgstr "发送到打印机失败。请重试。" + +#~ msgid "No space left on Printer SD card" +#~ msgstr "打印机SD卡上没有剩余空间" + +#~ msgid "Sending gcode file through cloud service" +#~ msgstr "通过云服务发送gcode文件" + +#~ msgid "Please log out and login to the printer again." +#~ msgstr "请先退出登录然后再重新登录打印机。" + +#~ msgid "Other color" +#~ msgstr "其他颜色" + +#~ msgid "No files" +#~ msgstr "文件列表为空" + +#~ msgid "Not accessible in LAN-only mode!" +#~ msgstr "在局域网模式中不可访问!" + +#~ msgid "Missing LAN ip of printer!" +#~ msgstr "未找到打印机的局域网地址!" + +#~ msgid "You are going to delete %u files. Are you sure to continue?" +#~ msgstr "你正在删除%u个文件,你确定吗?" + +#~ msgid "Media" +#~ msgstr "视频文件" + +#~ msgid "Dump video" +#~ msgstr "下载视频" + +#~ msgid "Cool plate" +#~ msgstr "低温打印板 / PLA打印板" + +#~ msgid "Engineering plate" +#~ msgstr "工程材料打印板" + +#~ msgid "" +#~ "One object has empty initial layer and can't be printed. Please Cut the " +#~ "bottom or enable supports." +#~ msgstr "模型出现空层无法打印。请切掉底部或打开支撑。" + +#~ msgid "" +#~ "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. " +#~ "Please separate the conflicted objects farther (%s <-> %s)." #~ msgstr "" -#~ "使用流量动态校准后,仍可能出现一些挤出问题,例如:\n" -#~ "1. 过度挤出:打印物体上有过多的材料,形成凸起或小球,或者层次看起来比预期" -#~ "的厚而且不均匀。\n" -#~ "2. 不足挤出:层次非常薄,填充强度不足,或者在缓慢打印时模型顶层有缺陷。\n" -#~ "3. 表面质量差:打印的表面看起来粗糙或不均匀。\n" -#~ "4. 结构稳固性差:打印件容易断裂,或者没有应有的稳固性。" - -#~ 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 " -#~ "calibration provides a useful reference flow rate." -#~ msgstr "" -#~ "此外,对于像用于遥控飞机的轻质发泡PLA(LW-PLA)这样的发泡材料,流量率校准" -#~ "非常重要。这些材料在加热时会大幅膨胀,而校准提供了有用的流量率参考。" - -#~ 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." -#~ msgstr "" -#~ "流量率校准测量预期挤出体积与实际挤出体积之间的比率。默认设置在Bambu Lab打" -#~ "印机和官方材料上表现良好,因为它们已经进行了预先校准和微调。对于普通的材" -#~ "料,通常情况下,您不需要执行流量率校准,除非在完成其他校准后仍然看到上述列" -#~ "出的缺陷。如需更多详细信息,请查阅wiki文章。" - -#~ msgid "" -#~ "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " -#~ "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" -#~ "\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." -#~ msgstr "" -#~ "自动流量率校准采用Bambu Lab的微型激光雷达技术,直接测量校准图案。然而,请" -#~ "注意,这种方法的功效和准确性可能会因特定类型的材料而受影响。特别是透明或半" -#~ "透明、带有闪光颗粒或具有高反射表面的材料可能不适合这种校准,并可能产生不理" -#~ "想的结果。\n" -#~ "\n" -#~ "校准结果可能因每次校准或材料的不同而有所不同。我们仍在通过固件更新不断提高" -#~ "这种校准的准确性和兼容性。\n" -#~ "\n" -#~ "注意:流量率校准是一项高级的过程,只有完全理解其目的和影响的人才应尝试。错" -#~ "误的使用可能导致打印质量不佳或损坏打印机。请确保在执行之前仔细阅读和理解此" -#~ "过程。" - -#~ msgid "When you need Max Volumetric Speed Calibration" -#~ msgstr "当您需要最大体积速度校准时" - -#~ msgid "Over-extrusion or under extrusion" -#~ msgstr "过度挤压或挤压不足" - -#~ msgid "Max Volumetric Speed calibration is recommended when you print with:" -#~ msgstr "使用以下选项打印时,建议进行最大体积速度校准:" - -#~ msgid "material with significant thermal shrinkage/expansion, such as..." -#~ msgstr "具有显著热收缩/膨胀的材料,例如..." - -#~ msgid "materials with inaccurate filament diameter" -#~ msgstr "耗材直径不准确的材料" - -#~ msgid "We found the best Flow Dynamics Calibration Factor" -#~ msgstr "我们找到了最佳的流量动态校准因子。" - -#~ msgid "" -#~ "Part of the calibration failed! You may clean the plate and retry. The " -#~ "failed test result would be droped." -#~ msgstr "部分校准失败!您可以清洁打印平台并重试。未通过的测试结果将被丢弃。" - -#~ msgid "" -#~ "*We recommend you to add brand, materia, type, and even humidity level in " -#~ "the Name" -#~ msgstr "*我们建议您在名称中添加品牌、材料、类型,甚至湿度水平。" - -#~ 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 best line on your plate" -#~ msgstr "请在您的打印板上找到最佳线条" - -#~ msgid "Input Value" -#~ msgstr "输入值" - -#~ msgid "Save to Filament Preset" -#~ msgstr "保存到材料预设" - -#~ msgid "Preset" -#~ msgstr "预设" - -#~ msgid "Record Factor" -#~ msgstr "记录系数" - -#~ msgid "We found the best flow ratio for you" -#~ msgstr "我们为您找到了最佳流量比" - -#~ msgid "Flow Ratio" -#~ msgstr "流量比" - -#~ msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -#~ msgstr "请输入一个有效值(0.0<流量比<2.0)" - -#~ msgid "Please enter the name of the preset you want to save." -#~ msgstr "请输入要保存的预设的名称。" - -#~ msgid "Calibration1" -#~ msgstr "校准1" - -#~ msgid "Calibration2" -#~ msgstr "校准2" - -#~ msgid "Please find the best object on your plate" -#~ msgstr "请在你的盘里找到最好的对象" - -#~ msgid "Fill in the value above the block with smoothest top surface" -#~ msgstr "用最光滑的顶面填充块上方的值" - -#~ msgid "Skip Calibration2" -#~ msgstr "跳过校准2" - -#, c-format, boost-format -#~ msgid "flow ratio : %s " -#~ msgstr "流量比:%s " - -#~ msgid "Please choose a block with smoothest top surface" -#~ msgstr "请选择顶部表面最光滑的块" - -#~ msgid "Please choose a block with smoothest top surface." -#~ msgstr "请选择顶部表面最光滑的块。" - -#~ msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" -#~ msgstr "请输入一个有效值(0<=最大容积速度<=60)" - -#~ msgid "Calibration Type" -#~ msgstr "校准类型" - -#~ msgid "Complete Calibration" -#~ msgstr "完整校准" - -#~ msgid "Fine Calibration based on flow ratio" -#~ msgstr "基于流量比的精细校准" - -#~ msgid "Title" -#~ msgstr "标题" - -#~ msgid "" -#~ "A test model will be printed. Please clear the build plate and place it " -#~ "back to the hot bed before calibration." -#~ msgstr "将打印一份测试模型。在校准之前,请清理打印平台并将其放回热床上。" - -#~ msgid "Printing Parameters" -#~ msgstr "打印参数" - -#~ msgid "Plate Type" -#~ msgstr "热床类型" - -#~ msgid "filament position" -#~ msgstr "耗材丝位置" - -#~ msgid "External Spool" -#~ msgstr "外部线轴" - -#~ msgid "Filament For Calibration" -#~ msgstr "校准用耗材" - -#~ msgid "" -#~ "Tips for calibration material: \n" -#~ "- Materials that can share same hot bed temperature\n" -#~ "- Different filament brand and family(Brand = Bambu, Family = Basic, " -#~ "Matte)" -#~ msgstr "" -#~ "校准材料提示:\n" -#~ "-可以共享相同热床温度的材料\n" -#~ "-不同的耗材品牌和系列(Brand = Bambu, Family = Basic, Matte)" - -#~ msgid "Error desc" -#~ msgstr "错误描述" - -#~ msgid "Extra info" -#~ msgstr "额外信息" - -#, c-format, boost-format -#~ msgid "%s is not compatible with %s" -#~ msgstr "%s 与 %s 不兼容" - -#~ msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -#~ msgstr "不支持TPU进行流量动态自动校准。" - -#~ msgid "Connecting to printer" -#~ msgstr "正在连接打印机" - -#~ msgid "The nozzle diameter has been synchronized from the printer Settings" -#~ msgstr "喷嘴直径已从打印机设置同步" - -#~ msgid "From Volumetric Speed" -#~ msgstr "从体积速度" - -#~ msgid "To Volumetric Speed" -#~ msgstr "至体积速度" - -#~ msgid "Flow Dynamics Calibration Result" -#~ msgstr "动态流量校准结果" - -#~ msgid "No History Result" -#~ msgstr "无历史结果" - -#~ msgid "Success to get history result" -#~ msgstr "成功获取历史结果" - -#~ msgid "Refreshing the historical Flow Dynamics Calibration records" -#~ msgstr "刷新历史流量动态校准记录" - -#~ msgid "Action" -#~ msgstr "操作" - -#~ msgid "Edit Flow Dynamics Calibration" -#~ 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 Bambu Studio. Read more in the documentation." -#~ msgstr "" -#~ "减去部分几何体\n" -#~ "您知道吗,您可以使用负零件从另一个几何体中减去另一个几何体。例如,可以直接" -#~ "在Bambu Studio中创建可轻松调整大小的孔。" - -#~ msgid "" -#~ "STEP\n" -#~ "Did you know that you can improve your print quality by slicing a STEP " -#~ "file instead of an STL?\n" -#~ "Bambu Studio supports slicing STEP files, providing smoother results than " -#~ "a lower resolution STL. Give it a try!" -#~ msgstr "" -#~ "STEP文件\n" -#~ "您知道吗,通过切片STEP文件而不是STL文件可以提高打印质量。\n" -#~ "Bambu Studio支持切片STEP文件,提供比低分辨率STL更平滑的结果。试试看!" +#~ "发现gcode路径在层%d,高为%.2lf mm处的冲突。请将有冲突的对象分离得更远(%s " +#~ "<-> %s)。" #~ msgid "ERROR:" #~ 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" +#~ "Conflicts of gcode paths have been found. Please separate the conflicted " +#~ "objects farther (%s <-> %s)." +#~ msgstr "发现gcode路径的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" + +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "请检查以下信息,点击确认后继续发送打印:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." #~ msgstr "" -#~ "如果开启,Studio会沿着内部桥接的边沿在其下方生成支撑轮廓。这些支撑轮廓可以" -#~ "防止悬空地打印内部桥接并提高顶面质量,特别是在填充密度较低的情况下。这个设" -#~ "置用于调整支撑轮廓的厚度,0表示关闭此特性。" - -#~ msgid "Bridge direction" -#~ msgstr "桥接方向" - -#~ msgid "Keep upper part" -#~ msgstr "保留上半部分" - -#~ msgid "Keep lower part" -#~ msgstr "保留下半部分" - -#~ msgid "Start" -#~ msgstr "首层" +#~ "生成该G-code的打印机类型与当前选中的打印机类型不同。建议选择相同的打印机类" +#~ "型后重新切片。" #~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "上传打印文件失败。请重新输入IP地址。" +#~ msgstr "上传打印文件失败,请重新输入IP地址。" -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS自动续料" +#~ msgid "Search" +#~ msgstr "搜索" + +#~ msgid "" +#~ "This controls the generation of the brim at outer side of models. Auto " +#~ "means the brim width is analysed and calculated automatically." +#~ msgstr "设置外墙brim的生成方式,选择自动意味着brim的宽度会被自动分析计算。" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "AMS设置对外置料盘无效" + +#~ msgid "Auto sync system presets(Printer/Filament/Process)" +#~ msgstr "自动同步预设(打印机/耗材丝/工艺)" + +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachne引擎只在关闭悬垂降速时起作用。\n" +#~ "这可能会导致高速打印时悬垂表面质量的下降。" + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "自动关闭悬垂降速?\n" +#~ "是 - 使用arachne并关闭悬垂降速\n" +#~ "否 - 此次放弃使用arachne" + +#~ msgid "Add/Edit connectors" +#~ msgstr "添加/编辑连接件" + +#~ msgid "Shortcut key %1%" +#~ msgstr "快捷键 %1%" + +#~ msgid "Backup" +#~ msgstr "备份" + +#~ msgid "Backup interval" +#~ msgstr "备份间隔时长" + +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "%s耗材太软,无法与AMS一起使用" + +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "似乎对象%s有完全浮空的区域。请调整朝向或打开支撑生成。" + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "似乎对象%s有很大面积的悬垂面。请打开支撑生成。" #~ msgid "" #~ "Spiral mode only works when wall loops is 1, support is disabled, top " @@ -10901,35 +10349,25 @@ msgstr "" #~ "旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延" #~ "时摄影时有效" -#~ msgid "Arachne engine doesn't work with classic overhang speed mode.\n" -#~ msgstr "Arachne墙壁生成器和旧版悬垂降速冲突\n" +#~ msgid "Keep upper part" +#~ msgstr "保留上半部分" + +#~ msgid "Keep lower part" +#~ msgstr "保留下半部分" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS自动续料" + +#~ msgid "All Plates" +#~ msgstr "所有盘" #~ msgid "" -#~ "Turn off classic mode automatically? \n" -#~ "Yes - Enable arachne with classic mode off\n" -#~ "No - Give up using arachne this time" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." #~ msgstr "" -#~ "自动切换到新版悬垂降速?\n" -#~ "确认 - 启动Arachne和新版悬垂降速\n" -#~ "取消 - 取消本次操作" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "外挂料卷不支持AMS 设置" - -#~ msgid "Backup" -#~ msgstr "备份" - -#~ msgid "Backup interval" -#~ msgstr "备份间隔时长" - -#~ msgid "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:" -#~ msgstr "请检查以下信息,并点击确认继续发送打印:" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "%s耗材太软,无法与AMS一起使用" +#~ "当使用支撑材料的支撑界面时,我们推荐以下设置。\n" +#~ "0顶层z距离,0界面层间距,同心图案。" #~ msgid "" #~ "The P1P printer does not support smooth timelapse, use traditional " @@ -10945,70 +10383,6 @@ msgstr "" #~ msgstr "" #~ "支撑使用不同于对象的层高。这样可以支持自定义Z方向间隙并节省打印时间。" -#~ msgid "" -#~ "Print a tower to prime material in nozzle after switching to a new " -#~ "material." -#~ msgstr "切换耗材丝时,打印擦拭塔来让准配好喷嘴里材料。" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "似乎对象%s有完全浮空的区域。请调整朝向或打开支撑生成。" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "似乎对象%s有很大面积的悬垂面。请打开支撑生成。" - -#~ msgid "Max Radius" -#~ msgstr "最大半径" - -#~ msgid "" -#~ "Max clearance radius around extruder. Used for collision avoidance in by-" -#~ "object printing." -#~ msgstr "挤出机四周的最大避让半径。用于在逐件打印中避免碰撞。" - -#~ msgid "NormalLift" -#~ msgstr "直接抬Z" - -#~ msgid "SpiralLift" -#~ msgstr "螺旋抬Z" - -#~ msgid "" -#~ " will be closed before creating a new model. Do you want to continue?" -#~ msgstr "将会被关闭以创建新模型。是否继续?" - -#~ msgid "Clean" -#~ msgstr "清除" - -#~ msgid "Export G-Code." -#~ msgstr "导出G-Code." - -#~ msgid "Export." -#~ msgstr "导出。" - -#~ msgid "Select Bed Type" -#~ msgstr "选择热床类型" - -#, c-format, boost-format -#~ msgid "Plate %d: %s does not support filament %s (%s)." -#~ msgstr "盘 %d: %s 不支持耗材丝 %s(%s)." - -#~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "实际冲刷量 = 冲刷体积 * 乘数" - -#, c-format, boost-format -#~ msgid "Suggestion: Actual Volume in range [%d, %d]" -#~ msgstr "建议:实际冲刷量设置在[%d, %d]范围内" - -#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." -#~ msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" - -#, boost-format -#~ msgid "Copying directory %1% to %2% failed: %3%" -#~ msgstr "从%1%拷贝目录到%2%失败:%3%" - #~ msgid "" #~ "This controls brim position including outer side of models, inner side of " #~ "holes or both. Auto means both the brim position and brim width is " @@ -11017,60 +10391,36 @@ msgstr "" #~ "设置brim生成位置,包括模型往外的外侧,模型的孔的内侧和内外侧都生成。选择自" #~ "动意味着brim的位置和宽度都会自动分析计算生成。" -#~ msgid "Internal Version" -#~ msgstr "内部版本" +#~ msgid "Export G-Code." +#~ msgstr "导出G-Code." -#~ msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -#~ msgstr "选择一个文件(gcode/.gco/.g/.ngc/ngc):" +#~ msgid "Export." +#~ msgstr "导出。" + +#~ msgid "Modify" +#~ msgstr "修改" #~ msgid "" -#~ "Too large layer height.\n" -#~ "Reset to 0.2" -#~ msgstr "层高过大。将重置为0.2" +#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr "将会被关闭以创建新模型。是否继续?" -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "自动关闭悬垂降速?\n" -#~ "是 - 使用arachne并关闭悬垂降速\n" -#~ "否 - 此次放弃使用arachne" +#~ msgid "Layer Time (log)" +#~ msgstr "层时间(log)" -#~ msgid "Line method - DDE" -#~ msgstr "划线方法 - 近程" +#~ msgid "Layer Time(log): " +#~ msgstr "层时间(log):" -#~ msgid "Line method - Bowden" -#~ msgstr "划线方法 - 远程" +#~ msgid "Layer Time (log) (s)" +#~ msgstr "层时间(log)(s)" -#~ msgid "Tower method - DDE" -#~ msgstr "打印塔方法 - 近程" +#~ msgid "Select Bed Type" +#~ msgstr "选择热床类型" -#~ msgid "Tower method - Bowden" -#~ msgstr "打印塔方法 - 远程" +#~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +#~ msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" -#~ msgid "Pressure/Linear Advance" -#~ msgstr "压力提前" - -#~ msgid "Step 1. please confirm Orca Slicer and your printer are in same LAN." -#~ msgstr "步骤1. 请确认逆戟鲸和您的打印机在同一局域网中。" - -#~ msgid "" -#~ "Step 2. if the IP and Access Code below are different from the actual " -#~ "values on your printer,please correct them." -#~ msgstr "步骤2. 如果下面的IP和访问码与打印机上的实际值不同,请更正它们。" - -#~ msgid "Unable to connect printer" -#~ msgstr "无法连接打印机" - -#~ msgid "" -#~ "Failed to connect to the printer through LAN. Please enter the correct " -#~ "printer IP address and access code." -#~ msgstr "无法通过局域网连接打印机,请输入正确的IP地址和访问码。" - -#~ msgid "" -#~ "Note : The location of IP and access code on the machine is as follows :" -#~ msgstr "提示: IP地址和访问码在机器上的位置如下:" +#~ msgid "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "盘%d:%s不支持耗材丝%s(%s)。" #~ msgid "NO AMS" #~ msgstr "无AMS" @@ -11080,11 +10430,17 @@ msgstr "" #~ "figure and fill them in the input boxes." #~ msgstr "标定完成。请按照左图展示的方式选择流量补偿系数,并填写到输入框中。" -#~ msgid "" -#~ "Cannot detect the LAN IP address of %s. Are %s and Orca Slicer in the " -#~ "same LAN?" -#~ msgstr "" -#~ "无法检测到打印机%s 在局域网中的的IP地址。%s 和 逆戟鲸在同一个局域网内吗?" +#~ msgid "Clean" +#~ msgstr "清除" + +#~ msgid "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "实际冲刷量 = 冲刷体积 * 乘数" + +#~ msgid "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "建议:实际冲刷量设置在[%d, %d]范围内" + +#~ msgid "Loading user presets..." +#~ msgstr "正在加载用户预设..." #~ msgid "Click the pencil icon to edit the filament." #~ msgstr "点击铅笔图标编辑耗材丝。" @@ -11145,6 +10501,25 @@ msgstr "" #~ "用于生成G-code的打印机类型与当前选定的物理打印机类型不同,建议选择相同的打" #~ "印机类型重新切片。\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\".\n" +#~ msgstr "" +#~ "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" +#~ "右键单击打印板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" + +#~ msgid " is too close to others, there may be collisions when printing.\n" +#~ msgstr "到其他对象的距离太近了,可能在打印过程中发生碰撞。\n" + +#~ msgid "" +#~ " is too close to exclusion area, there may be collisions when printing.\n" +#~ msgstr "到屏蔽区域的距离太近了,可能在打印过程中发生碰撞。\n" + +#~ msgid "Plate %d: %s does not support filament %s\n" +#~ msgstr "盘%d: %s 不支持耗材丝 %s\n" + #~ msgid "" #~ "We have added an experimental style \"Tree Slim\" that features smaller " #~ "support volume but weaker strength.\n" @@ -11162,32 +10537,13 @@ msgstr "" #~ "当使用支撑材料作为支撑面,我们推荐以下设置:\n" #~ "顶部Z距离为0, 支撑面线距为0,接触面图案为同。" -#~ 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\".\n" -#~ msgstr "" -#~ "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" -#~ "右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" - -#~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr "到其他对象的距离太近了,可能在打印过程中发生碰撞。\n" - -#~ msgid "" -#~ " is too close to exclusion area, there may be collisions when printing.\n" -#~ msgstr "到屏蔽区域的距离太近了,可能在打印过程中发生碰撞。\n" - -#~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "盘%d: %s 不支持耗材丝 %s\n" - #~ msgid "" #~ "Do not recommand 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 "" #~ "normal(auto) and tree(auto) is used to generate support automatically. If " @@ -11226,8 +10582,8 @@ msgstr "" #~ "中打印指定厚度的环形走线,为内部桥接提供更好的铆接。0值代表关闭该功能。" #~ msgid "" -#~ "If enabled, support loops will be generated under the contours of " -#~ "internal bridges. These support loops could prevent internal bridges from " +#~ "If enabled, Studio will generate support loops under the contours of " +#~ "internal bridges.These support loops could prevent internal bridges from " #~ "extruding over the air and improve the top surface quality, expecially " #~ "with a low infill density.This value determins the thickness of the " #~ "support loops." @@ -11239,9 +10595,6 @@ msgstr "" #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" #~ msgstr "选择一个或多个文件(3mf/step/stl/obj/amf):" -#~ msgid "Finish" -#~ msgstr "完成" - #~ msgid "Import 3MF/STL/STEP/OBJ/AMF" #~ msgstr "导入 3MF/STL/STEP/OBJ/AMF" @@ -11288,6 +10641,9 @@ msgstr "" #~ "filament runs out." #~ msgstr "AMS料材耗尽后将自动切换相同类型的料材。" +#~ msgid "Tower" +#~ msgstr "擦料塔" + #~ msgid "Monitoring Recording" #~ msgstr "监控录像" @@ -11321,6 +10677,9 @@ msgstr "" #~ msgid "Perimeter distribution count" #~ msgstr "墙分布计数" +#~ msgid "Layers and Perimeters" +#~ msgstr "层和墙" + #~ msgid "Send to Printer" #~ msgstr "发送到打印机" @@ -11332,6 +10691,14 @@ msgstr "" #~ "虚拟摄像头已经启动。点击“确认”打开相关帮助页面:'Streaming video of Bambu " #~ "Printer'。" +#~ msgid "Tree support with infill" +#~ msgstr "树状支撑生成填充" + +#~ msgid "" +#~ "This setting specifies whether to add infill inside large hollows of tree " +#~ "support" +#~ msgstr "这个设置决定是否为树状支撑内部的空腔生成填充。" + #~ msgid "Entering Seam painting" #~ msgstr "进入Z缝绘制" @@ -11377,6 +10744,9 @@ msgstr "" #~ msgid "Initialize failed (Not supported without remote video tunnel)!" #~ msgstr "初始化失败(不支持远程视频连接)" +#~ msgid "Adaptive layer height" +#~ msgstr "自适应层高" + #~ msgid "" #~ "Enabling this option means the height of every layer except the first " #~ "will be automatically calculated during slicing according to the slope of " @@ -11451,9 +10821,6 @@ msgstr "" #~ msgid "Send and Print" #~ msgstr "发送并打印" -#~ msgid "Can't connect to the printer" -#~ msgstr "无法连接打印机" - #~ msgid "Upgrade firmware" #~ msgstr "升级固件" @@ -11585,9 +10952,6 @@ msgstr "" #~ msgid "Waiting" #~ msgstr "等待中" -#~ msgid "Failed" -#~ msgstr "失败" - #~ msgid "Home" #~ msgstr "首页" @@ -11917,8 +11281,8 @@ msgstr "" #~ msgid "Show Edges" #~ msgstr "显示模型边缘" -#~ msgid "Associate .step files to OrcaSlicer" -#~ msgstr "使用逆戟鲸打开.step文件" +#~ msgid "Associate .step files to BambuStudio" +#~ msgstr "使用Bambu Studio打开.step文件" #~ msgid "Vibration Calibration" #~ msgstr "振动校准" @@ -12138,8 +11502,8 @@ msgstr "" #~ msgid "Current printer is busy. Please select another one." #~ msgstr "当前打印机正忙,请选择另一台打印机。" -#~ msgid "Orca Slicer initialization failed" -#~ msgstr "逆戟鲸初始化失败" +#~ msgid "Bambu Studio initialization failed" +#~ msgstr "Bambu Studio初始化失败" #~ msgid "Object %s has zero size and can't be arranged." #~ msgstr "对象%s的尺寸为0,无法被自动摆放。" @@ -12284,9 +11648,6 @@ msgstr "" #~ msgid "Nozzle cleaning..." #~ msgstr "挤出头端面清理中..." -#~ msgid "First layer" -#~ msgstr "首层" - #~ msgid "Material for support" #~ msgstr "支撑材料" @@ -12303,7 +11664,7 @@ msgstr "" #~ msgstr "全局" #~ msgid "Build plate" -#~ msgstr "构建板" +#~ msgstr "打印板" #~ msgid "Object list" #~ msgstr "对象列表" @@ -12848,7 +12209,7 @@ msgstr "" #~ "Please check the bed temperature and make sure whether to use the value" #~ msgstr "" #~ "其它层热床温度比首层热床温度低太多。\n" -#~ "这可能导致打印中模型从构建板脱落。\n" +#~ "这可能导致打印中模型从打印板脱落。\n" #~ "请检查热床温度并确认是否用相应数值" #~ msgid "Nozzle temperature range" @@ -12977,8 +12338,8 @@ msgstr "" #~ msgid "click download new version in default browser: %s" #~ msgstr "在浏览器中下载最新版本: %s" -#~ msgid "New Version of OrcaSlicer" -#~ msgstr "新版本的逆戟鲸" +#~ msgid "New Version of BambuStudio" +#~ msgstr "新版本的BambuStudio" #~ msgid "Switching Presets: Unsaved Changes" #~ msgstr "切换预设:未保存的更改" @@ -13124,6 +12485,9 @@ msgstr "" #~ msgid "Small walls" #~ msgstr "细小外墙" +#~ msgid "mm/s or %" +#~ msgstr "mm/s 或 %" + #~ msgid "Wall around the support" #~ msgstr "支撑外壁" @@ -13285,8 +12649,8 @@ msgstr "" #~ msgid "System Information" #~ msgstr "系统信息" -#~ msgid "Blacklisted libraries loaded into OrcaSlicer process:" -#~ msgstr "已加载黑名单库到逆戟鲸进程中:" +#~ msgid "Blacklisted libraries loaded into BambuStudio process:" +#~ msgstr "已加载黑名单库到BambuStudio进程中:" #~ msgid "Feature vectorization is supported:" #~ msgstr "支持特征向量化:" @@ -13653,11 +13017,8 @@ msgstr "" #~ msgid "(Re)slice" #~ msgstr "重新切片" -#~ msgid "Search" -#~ msgstr "搜索" - #~ msgid "Select Plater Tab" -#~ msgstr "选择 构建板 选项卡" +#~ msgstr "选择 打印板 选项卡" #~ msgid "Select Print Settings Tab" #~ msgstr "选择 打印设置 选项卡" @@ -13692,11 +13053,11 @@ msgstr "" #~ msgid "Report Bug(TODO)" #~ msgstr "Bug报告" -#~ msgid "Report a bug of OrcaSlicer" -#~ msgstr "报告逆戟鲸的Bug" +#~ msgid "Report a bug of BambuStudio" +#~ msgstr "报告BambuStudio的Bug" -#~ msgid "Open OrcaSlicer" -#~ msgstr "打开逆戟鲸" +#~ msgid "Open BambuStudio" +#~ msgstr "打开BambuStudio" #~ msgid "Export AMF file:" #~ msgstr "导出 AMF 文件:" @@ -13748,11 +13109,11 @@ msgstr "" #~ msgid "Open G-code Viewer" #~ msgstr "打开G-code Viewer" -#~ msgid "Open a new OrcaSlicer" -#~ msgstr "打开逆戟鲸" +#~ msgid "Open a new BambuStudio" +#~ msgstr "打开BambuStudio" #~ msgid "Open new G-code Viewer" -#~ msgstr "打开逆戟鲸" +#~ msgstr "打开BambuStudio" #~ msgid "Goto Download page." #~ msgstr "前往下载页面。" @@ -13781,18 +13142,27 @@ msgstr "" #~ msgid "Bridges" #~ msgstr "桥接" +#~ msgid "Label objects" +#~ msgstr "标注模型" + +#~ msgid "Sparse infill anchor length" +#~ msgstr "稀疏填充锚线长度" + #~ msgid "5 mm" #~ msgstr "5 mm" #~ msgid "10 mm" #~ msgstr "10 mm" -#~ msgid "0 (not anchored)" -#~ msgstr "0(无)" +#~ msgid "Maximum length of the infill anchor" +#~ msgstr "填充锚线的最大长度" #~ msgid "Name of parent profile" #~ msgstr "父配置名称" +#~ msgid "Interface shells" +#~ msgstr "接触面外壳" + #~ msgid "After layer change G-code" #~ msgstr "换层后G-code" @@ -13817,6 +13187,9 @@ msgstr "" #~ msgid "Retraction Length (Toolchange)" #~ msgstr "回抽长度(更换工具头)" +#~ msgid "Extra length on restart" +#~ msgstr "启动时额外长度" + #~ msgid "Disabled" #~ msgstr "关闭" @@ -14220,6 +13593,9 @@ msgstr "" #~ msgid "Do you want to proceed?" #~ msgstr "是否继续?" +#~ msgid "Physical Printer" +#~ msgstr "物理打印机" + #~ msgid "Convert from imperial units" #~ msgstr "从英制转换" @@ -14301,9 +13677,6 @@ msgstr "" #~ msgid "Note: This preset will be replaced after saving" #~ msgstr "注意:这个预设会在保存后被替换" -#~ msgid "The name cannot be empty." -#~ msgstr "名称不能为空。" - #~ msgid "The name cannot start with space character." #~ msgstr "名称不能以空格开头。" @@ -14503,8 +13876,8 @@ msgstr "" #~ msgid "" #~ "Most likely the configuration was produced by a newer version of " -#~ "BambuStudio or by some OrcaSlicer fork." -#~ msgstr "这个配置很可能是从更新的逆戟鲸版本生成的。" +#~ "BambuStudio or by some BambuStudio fork." +#~ msgstr "这个配置很可能是从更新的BambuStudio版本生成的。" #~ msgid "The following values were substituted:" #~ msgstr "以下数值被替换了:" @@ -14544,8 +13917,8 @@ msgstr "" #~ "\n" #~ "The application will now terminate." #~ msgstr "" -#~ "逆戟鲸遇到一个翻译错误。请报告给BmbuStudio团队,正在激活的是什么语言以及在" -#~ "什么场景下发生的这个问题。谢谢。\n" +#~ "BambuStudio遇到一个翻译错误。请报告给BmbuStudio团队,正在激活的是什么语言" +#~ "以及在什么场景下发生的这个问题。谢谢。\n" #~ "\n" #~ "应用程序将会终止。" @@ -14553,7 +13926,7 @@ msgstr "" #~ msgstr "内部错误:%1%" #~ msgid "" -#~ "Error parsing OrcaSlicer config file, it is probably corrupted. Try to " +#~ "Error parsing BambuStudio config file, it is probably corrupted. Try to " #~ "manually delete the file to recover from the error. Your user profiles " #~ "will not be affected." #~ msgstr "" @@ -14601,16 +13974,16 @@ msgstr "" #~ msgstr "不导入" #~ msgid "" -#~ "You are running a 32 bit build of OrcaSlicer on 64-bit Windows.\n" -#~ "32 bit build of OrcaSlicer will likely not be able to utilize all the RAM " -#~ "available in the system.\n" -#~ "Please download and install a 64 bit build of OrcaSlicer from https://www." -#~ "Bambu3d.cz/Bambuslicer/.\n" +#~ "You are running a 32 bit build of BambuStudio on 64-bit Windows.\n" +#~ "32 bit build of BambuStudio will likely not be able to utilize all the " +#~ "RAM available in the system.\n" +#~ "Please download and install a 64 bit build of BambuStudio from https://" +#~ "www.Bambu3d.cz/Bambuslicer/.\n" #~ "Do you wish to continue?" #~ msgstr "" -#~ "您正在64位Windows上运行32位版本的逆戟鲸。\n" -#~ "32位版本的逆戟鲸可能无法使用系统中的全部内存。\n" -#~ "请从https://www.Bambu3d.cz/Bambuslicer下载并安装64位版本的逆戟鲸。\n" +#~ "您正在64位Windows上运行32位版本的BambuStudio。\n" +#~ "32位版本的BambuStudio可能无法使用系统中的全部内存。\n" +#~ "请从https://www.Bambu3d.cz/Bambuslicer下载并安装64位版本的BambuStudio。\n" #~ "是否继续?" #~ msgid "Preparing settings tabs" @@ -14622,11 +13995,11 @@ msgstr "" #~ msgstr "您的以下预设中包含未保存的选项“打印主机上传”" #~ msgid "" -#~ "But since this version of OrcaSlicer we don't show this information in " +#~ "But since this version of BambuStudio we don't show this information in " #~ "Printer Settings anymore.\n" #~ "Settings will be available in physical printers settings." #~ msgstr "" -#~ "但是从这个逆戟鲸版本开始,我们不再在打印机设置中显示这个信息了。\n" +#~ "但是从这个BambuStudio版本开始,我们不再在打印机设置中显示这个信息了。\n" #~ "设置会被放置于物理打印机设置中。" #~ msgid "" @@ -15075,307 +14448,3 @@ msgstr "" #~ msgid "Start the application" #~ msgstr "启动应用程序" - -#~ msgid "Only one wall type" -#~ msgstr "顶面单层墙" - -#~ msgid "When you need to use Flow Rate Calibration" -#~ msgstr "在什么情况下需要进行流量比例校准" - -#~ msgid "Record" -#~ msgstr "记录" - -#~ msgid "Please select the nozzle diameter of your printer" -#~ msgstr "请选择打印机的喷嘴直径" - -#~ msgid "Please select the plate type of your printer" -#~ msgstr "请选择打印机的印版类型" - -#~ msgid "Pause Print" -#~ msgstr "暂停打印" - -#~ msgid "Edit Pause Print Message" -#~ msgstr "编辑暂停打印信息" - -#~ msgid "Delete Pause Print" -#~ msgstr "删除暂停打印" - -#~ msgid "The selected preset has been deleted." -#~ msgstr "所选预设已被删除。" - -#~ msgid "uneven extrusion" -#~ msgstr "不均匀挤出" - -#~ msgid "" -#~ "After calibration, the linear compensation factor(K) will be recorded and " -#~ "applied to printing. This factor would be different if device, degree of " -#~ "usage, material, and material family type are different" -#~ msgstr "" -#~ "校准完成后,线性补偿系数(K) 将被记录并应用于打印中。如果设备、使用程度、材" -#~ "料和材料类型不同,这个系数也会有所不同。" - -#~ msgid "When you need Flow Rate Calibration" -#~ msgstr "当您需要流量比例校准时" - -#~ msgid "Flow Rate calibration is recommended when you print with:" -#~ msgstr "当使用以下内容打印时,建议进行流速校准:" - -#~ msgid "Dynamic Pressure Control Calibration" -#~ msgstr "动态压力控制校准" - -#~ msgid "Maual Calibration" -#~ msgstr "手动校准" - -#~ msgid "Dynamic Pressure Control" -#~ msgstr "动态压力控制" - -#~ msgid "" -#~ "Dynamic Pressure Control calibration result has been saved to the printer" -#~ msgstr "动态压力控制校准结果已保存到打印机。" - -#~ msgid "When you need Dynamic Pressure Control Calibration" -#~ msgstr "当您需要动态压力控制校准时" - -#~ msgid "We found the best Dynamic Pressure Control Factor" -#~ msgstr "我们找到了最佳的动态压力控制系数" - -#~ msgid "Brand Name" -#~ msgstr "品牌名称" - -#~ msgid "The name cannot exceed 20 characters." -#~ msgstr "名称不能超过20个字符。" - -#~ msgid "Pressure Adavance" -#~ msgstr "压力提升" - -#~ msgid "Filament From" -#~ msgstr "耗材丝来源" - -#~ msgid "" -#~ "Please select same type of material, because plate temperature might not " -#~ "be compatible with different type of material" -#~ msgstr "请选择相同类型的材料,因为热床温度可能与不同类型的材料不兼容。" - -#~ msgid "Restart" -#~ msgstr "重新开始" - -#~ msgid "Re-Calibrate" -#~ msgstr "重新校准" - -#~ msgid "Is in printing. Please wait for printing to complete" -#~ msgstr "正在打印中,请等待打印完成。" - -#~ msgid "It will restart to get the results. Do you confirm to re-calibrate?" -#~ msgstr "将重新启动以获取结果。您确定要重新校准吗?" - -#~ msgid "It will restart to get the results. Do you confirm to restart?" -#~ msgstr "将重新启动以获取结果。您确定要重新启动吗?" - -#~ msgid "Please select a printer and nozzle for calibration." -#~ msgstr "请选择用于校准的打印机和喷嘴。" - -#~ msgid "No print preset" -#~ msgstr "没有打印预设。" - -#~ msgid "Please select filament for calibration." -#~ msgstr "请选择用于校准的打印材料。" - -#~ msgid "" -#~ "The printing parameters is empty, please reselect nozzle and plate type." -#~ msgstr "打印参数为空,请重新选择喷嘴和打印板类型。" - -#~ msgid "Saved success." -#~ msgstr "保存成功" - -#~ msgid "" -#~ "Are you sure you want to cancel this calibration? It will return to start " -#~ "page" -#~ msgstr "您确定要取消此次校准吗?这将返回到开始页面。" - -#~ msgid "" -#~ "Unable to print %s and %s together. Filaments have large bed temperature " -#~ "difference" -#~ msgstr "无法同时打印 %s 和 %s。打印材料的打印床温度差异较大。" - -#~ msgid "No AMS filaments. Please select a printer to load AMS info." -#~ msgstr "没有 AMS 材料。请先选择一个打印机以加载 AMS 信息。" - -#~ msgid "We found the best Pressure Advance Factor" -#~ msgstr "我们找到了最佳的压力提升因子" - -#~ msgid "When you need Pressure Advance Calibration" -#~ msgstr "当您需要进行压力提升校准时" - -#~ msgid "Pressure Advance" -#~ msgstr "压力提升" - -#~ msgid "Material" -#~ msgstr "材料" - -#~ msgid "Edit plate settings" -#~ msgstr "编辑盘设置" - -#~ msgid "Filaments Auto refill" -#~ msgstr "耗材丝自动补给" - -#~ msgid "Auto refill" -#~ msgstr "自动补给" - -#~ msgid "Number of currently selected: %1%\n" -#~ msgstr "当前选择的零件数量: %1%\n" - -#~ msgid "" -#~ "Damp %s will become flexible and get stuck inside AMS,please take care to " -#~ "dry it before use." -#~ msgstr "潮湿的%s会变软并卡在AMS内,请在使用前保持干燥。" - -#~ msgid "" -#~ "%s filaments are hard and brittle, It's easy to break or get stuck in " -#~ "AMS, please use with caution." -#~ msgstr "%s耗材丝又硬又脆,很容易断裂或卡在AMS中,请谨慎使用。" - -#~ msgid "Edit plate setitngs" -#~ msgstr "编辑盘设置" - -#~ msgid "" -#~ "There are some unknown filaments mapped to generic preset. Please update " -#~ "Bambu Studio or restart Bambu Studio to check if there is an update to " -#~ "system presets." -#~ msgstr "" -#~ "有一些未知型号的材料,映射到通用预设。请更新或者重启 Bambu Studio,以检查" -#~ "系统预设有没有更新。" - -#~ msgid "" -#~ "Extrusion compensation calibration is not supported when using Textured " -#~ "PEI Plate" -#~ msgstr "使用带纹理的PEI板时不支持挤出补偿校准" - -#~ msgid "Other color" -#~ msgstr "其他颜色" - -#~ msgid "" -#~ "Conflicts of gcode paths have been found. Please separate the conflicted " -#~ "objects farther (%s <-> %s)." -#~ msgstr "发现gcode路径的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" - -#~ msgid "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type." -#~ msgstr "" -#~ "生成该G-code的打印机类型与当前选中的打印机类型不同。建议选择相同的打印机类" -#~ "型后重新切片。" - -#~ msgid "" -#~ "This controls the generation of the brim at outer side of models. Auto " -#~ "means the brim width is analysed and calculated automatically." -#~ msgstr "设置外墙brim的生成方式,选择自动意味着brim的宽度会被自动分析计算。" - -#~ msgid "Auto sync system presets(Printer/Filament/Process)" -#~ msgstr "自动同步预设(打印机/耗材丝/工艺)" - -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "Arachne引擎只在关闭悬垂降速时起作用。\n" -#~ "这可能会导致高速打印时悬垂表面质量的下降。" - -#~ msgid "Add/Edit connectors" -#~ msgstr "添加/编辑连接件" - -#~ msgid "Shortcut key %1%" -#~ msgstr "快捷键 %1%" - -#~ msgid "All Plates" -#~ msgstr "所有盘" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "当使用支撑材料的支撑界面时,我们推荐以下设置。\n" -#~ "0顶层z距离,0界面层间距,同心图案。" - -#~ msgid "Modify" -#~ msgstr "修改" - -#~ msgid "Layer Time(log): " -#~ msgstr "层时间(log):" - -#~ msgid "Layer Time (log) (s)" -#~ msgstr "层时间(log)(s)" - -#~ msgid "Loading user presets..." -#~ msgstr "正在加载用户预设..." - -#~ msgid "" -#~ "If enabled, Studio will generate support loops under the contours of " -#~ "internal bridges.These support loops could prevent internal bridges from " -#~ "extruding over the air and improve the top surface quality, expecially " -#~ "with a low infill density.This value determins the thickness of the " -#~ "support loops." -#~ msgstr "" -#~ "如果开启,Studio沿着内部桥接的边缘在其下方生成支撑轮廓。这些支撑轮廓可以防" -#~ "止悬空打印内部桥接并提高顶面质量,特别是在填充密度较低的情况下。这个设置用" -#~ "于调整支撑轮廓的厚度。" - -#~ msgid "Tower" -#~ msgstr "擦料塔" - -#~ msgid "Associate .step files to BambuStudio" -#~ msgstr "使用Bambu Studio打开.step文件" - -#~ msgid "Bambu Studio initialization failed" -#~ msgstr "Bambu Studio初始化失败" - -#~ msgid "New Version of BambuStudio" -#~ msgstr "新版本的BambuStudio" - -#~ msgid "Blacklisted libraries loaded into BambuStudio process:" -#~ msgstr "已加载黑名单库到BambuStudio进程中:" - -#~ msgid "Report a bug of BambuStudio" -#~ msgstr "报告BambuStudio的Bug" - -#~ msgid "Open BambuStudio" -#~ msgstr "打开BambuStudio" - -#~ msgid "Open a new BambuStudio" -#~ msgstr "打开BambuStudio" - -#~ msgid "" -#~ "Most likely the configuration was produced by a newer version of " -#~ "BambuStudio or by some BambuStudio fork." -#~ msgstr "这个配置很可能是从更新的BambuStudio版本生成的。" - -#~ msgid "" -#~ "Error parsing BambuStudio config file, it is probably corrupted. Try to " -#~ "manually delete the file to recover from the error. Your user profiles " -#~ "will not be affected." -#~ msgstr "" -#~ "解析BambStudio配置文件时遇到错误,它可能已损坏。请尝试手动删除此文件以便从" -#~ "错误中恢复。你的用户配置不会收到影响。" - -#~ msgid "" -#~ "You are running a 32 bit build of BambuStudio on 64-bit Windows.\n" -#~ "32 bit build of BambuStudio will likely not be able to utilize all the " -#~ "RAM available in the system.\n" -#~ "Please download and install a 64 bit build of BambuStudio from https://" -#~ "www.Bambu3d.cz/Bambuslicer/.\n" -#~ "Do you wish to continue?" -#~ msgstr "" -#~ "您正在64位Windows上运行32位版本的BambuStudio。\n" -#~ "32位版本的BambuStudio可能无法使用系统中的全部内存。\n" -#~ "请从https://www.Bambu3d.cz/Bambuslicer下载并安装64位版本的BambuStudio。\n" -#~ "是否继续?" - -#~ msgid "" -#~ "But since this version of BambuStudio we don't show this information in " -#~ "Printer Settings anymore.\n" -#~ "Settings will be available in physical printers settings." -#~ msgstr "" -#~ "但是从这个BambuStudio版本开始,我们不再在打印机设置中显示这个信息了。\n" -#~ "设置会被放置于物理打印机设置中。" diff --git a/resources/calib/pressure_advance/pressure_advance_test.stl b/resources/calib/pressure_advance/pressure_advance_test.stl new file mode 100644 index 000000000..0df26de76 Binary files /dev/null and b/resources/calib/pressure_advance/pressure_advance_test.stl differ diff --git a/resources/calib/pressure_advance/tower.stl b/resources/calib/pressure_advance/tower.stl new file mode 100644 index 000000000..efe8db857 Binary files /dev/null and b/resources/calib/pressure_advance/tower.stl differ diff --git a/resources/calib/pressure_advance/tower_with_seam.stl b/resources/calib/pressure_advance/tower_with_seam.stl new file mode 100644 index 000000000..325ffb1d7 Binary files /dev/null and b/resources/calib/pressure_advance/tower_with_seam.stl differ diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo new file mode 100644 index 000000000..f81fe56c0 Binary files /dev/null and b/resources/i18n/de/BambuStudio.mo differ diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo new file mode 100644 index 000000000..10db09e21 Binary files /dev/null and b/resources/i18n/en/BambuStudio.mo differ diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo new file mode 100644 index 000000000..f13cad289 Binary files /dev/null and b/resources/i18n/es/BambuStudio.mo differ diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo new file mode 100644 index 000000000..cc82d9b93 Binary files /dev/null and b/resources/i18n/fr/BambuStudio.mo differ diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo new file mode 100644 index 000000000..dcb613e78 Binary files /dev/null and b/resources/i18n/hu/BambuStudio.mo differ diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo new file mode 100644 index 000000000..1789e22dd Binary files /dev/null and b/resources/i18n/it/BambuStudio.mo differ diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo new file mode 100644 index 000000000..6757bcf43 Binary files /dev/null and b/resources/i18n/ja/BambuStudio.mo differ diff --git a/resources/i18n/ko/BambuStudio.mo b/resources/i18n/ko/BambuStudio.mo new file mode 100644 index 000000000..a9a69536b Binary files /dev/null and b/resources/i18n/ko/BambuStudio.mo differ diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo new file mode 100644 index 000000000..3145a8355 Binary files /dev/null and b/resources/i18n/nl/BambuStudio.mo differ diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo new file mode 100644 index 000000000..fc8c2f45d Binary files /dev/null and b/resources/i18n/sv/BambuStudio.mo differ diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo new file mode 100644 index 000000000..82384d5ce Binary files /dev/null and b/resources/i18n/zh_cn/BambuStudio.mo differ diff --git a/resources/images/cali_fdc_editing_diagram.png b/resources/images/cali_fdc_editing_diagram.png new file mode 100644 index 000000000..8b29fe468 Binary files /dev/null and b/resources/images/cali_fdc_editing_diagram.png differ diff --git a/resources/images/cali_fdc_editing_diagram_CN.png b/resources/images/cali_fdc_editing_diagram_CN.png new file mode 100644 index 000000000..3a7d57cf7 Binary files /dev/null and b/resources/images/cali_fdc_editing_diagram_CN.png differ diff --git a/resources/images/cali_page_after_pa.png b/resources/images/cali_page_after_pa.png new file mode 100644 index 000000000..88bdf9f51 Binary files /dev/null and b/resources/images/cali_page_after_pa.png differ diff --git a/resources/images/cali_page_after_pa_CN.png b/resources/images/cali_page_after_pa_CN.png new file mode 100644 index 000000000..cecdbd17f Binary files /dev/null and b/resources/images/cali_page_after_pa_CN.png differ diff --git a/resources/images/cali_page_before_pa.png b/resources/images/cali_page_before_pa.png new file mode 100644 index 000000000..761ce3f4f Binary files /dev/null and b/resources/images/cali_page_before_pa.png differ diff --git a/resources/images/cali_page_before_pa_CN.png b/resources/images/cali_page_before_pa_CN.png new file mode 100644 index 000000000..549c2eb24 Binary files /dev/null and b/resources/images/cali_page_before_pa_CN.png differ diff --git a/resources/images/cali_page_caption_help.svg b/resources/images/cali_page_caption_help.svg new file mode 100644 index 000000000..70babeb01 --- /dev/null +++ b/resources/images/cali_page_caption_help.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/cali_page_caption_help_hover.svg b/resources/images/cali_page_caption_help_hover.svg new file mode 100644 index 000000000..70babeb01 --- /dev/null +++ b/resources/images/cali_page_caption_help_hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/cali_page_caption_prev.svg b/resources/images/cali_page_caption_prev.svg new file mode 100644 index 000000000..0c23897c8 --- /dev/null +++ b/resources/images/cali_page_caption_prev.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/cali_page_caption_prev_hover.svg b/resources/images/cali_page_caption_prev_hover.svg new file mode 100644 index 000000000..0c23897c8 --- /dev/null +++ b/resources/images/cali_page_caption_prev_hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/cali_page_flow_introduction.png b/resources/images/cali_page_flow_introduction.png new file mode 100644 index 000000000..26214758f Binary files /dev/null and b/resources/images/cali_page_flow_introduction.png differ diff --git a/resources/images/cali_page_flow_introduction_CN.png b/resources/images/cali_page_flow_introduction_CN.png new file mode 100644 index 000000000..6f8a1c486 Binary files /dev/null and b/resources/images/cali_page_flow_introduction_CN.png differ diff --git a/resources/images/fd_calibration_auto.png b/resources/images/fd_calibration_auto.png new file mode 100644 index 000000000..fe4538ec3 Binary files /dev/null and b/resources/images/fd_calibration_auto.png differ diff --git a/resources/images/fd_calibration_manual.png b/resources/images/fd_calibration_manual.png new file mode 100644 index 000000000..e27ac5647 Binary files /dev/null and b/resources/images/fd_calibration_manual.png differ diff --git a/resources/images/fd_calibration_manual_result.png b/resources/images/fd_calibration_manual_result.png new file mode 100644 index 000000000..efdaff12d Binary files /dev/null and b/resources/images/fd_calibration_manual_result.png differ diff --git a/resources/images/fd_calibration_manual_result_CN.png b/resources/images/fd_calibration_manual_result_CN.png new file mode 100644 index 000000000..43fb54678 Binary files /dev/null and b/resources/images/fd_calibration_manual_result_CN.png differ diff --git a/resources/images/flow_rate_calibration_auto.png b/resources/images/flow_rate_calibration_auto.png new file mode 100644 index 000000000..41b5b99be Binary files /dev/null and b/resources/images/flow_rate_calibration_auto.png differ diff --git a/resources/images/flow_rate_calibration_coarse.png b/resources/images/flow_rate_calibration_coarse.png new file mode 100644 index 000000000..c74b34e06 Binary files /dev/null and b/resources/images/flow_rate_calibration_coarse.png differ diff --git a/resources/images/flow_rate_calibration_coarse_result.png b/resources/images/flow_rate_calibration_coarse_result.png new file mode 100644 index 000000000..274059294 Binary files /dev/null and b/resources/images/flow_rate_calibration_coarse_result.png differ diff --git a/resources/images/flow_rate_calibration_coarse_result_CN.png b/resources/images/flow_rate_calibration_coarse_result_CN.png new file mode 100644 index 000000000..2a5cef310 Binary files /dev/null and b/resources/images/flow_rate_calibration_coarse_result_CN.png differ diff --git a/resources/images/flow_rate_calibration_fine.png b/resources/images/flow_rate_calibration_fine.png new file mode 100644 index 000000000..8af6e04d0 Binary files /dev/null and b/resources/images/flow_rate_calibration_fine.png differ diff --git a/resources/images/flow_rate_calibration_fine_result.png b/resources/images/flow_rate_calibration_fine_result.png new file mode 100644 index 000000000..a8dd84e3b Binary files /dev/null and b/resources/images/flow_rate_calibration_fine_result.png differ diff --git a/resources/images/flow_rate_calibration_fine_result_CN.png b/resources/images/flow_rate_calibration_fine_result_CN.png new file mode 100644 index 000000000..f750e0568 Binary files /dev/null and b/resources/images/flow_rate_calibration_fine_result_CN.png differ diff --git a/resources/images/im_all_plates_stats.svg b/resources/images/im_all_plates_stats.svg index 26d7f97c2..07fba0b7f 100644 --- a/resources/images/im_all_plates_stats.svg +++ b/resources/images/im_all_plates_stats.svg @@ -1,8 +1,8 @@ - - - - - - + + + + + + diff --git a/resources/images/im_all_plates_stats_transparent.svg b/resources/images/im_all_plates_stats_transparent.svg index c52a4cb07..80e911335 100644 --- a/resources/images/im_all_plates_stats_transparent.svg +++ b/resources/images/im_all_plates_stats_transparent.svg @@ -1,5 +1,5 @@ - + diff --git a/resources/images/max_volumetric_speed_calibration.png b/resources/images/max_volumetric_speed_calibration.png new file mode 100644 index 000000000..156903b58 Binary files /dev/null and b/resources/images/max_volumetric_speed_calibration.png differ diff --git a/resources/images/temperature_calibration.png b/resources/images/temperature_calibration.png new file mode 100644 index 000000000..349db841f Binary files /dev/null and b/resources/images/temperature_calibration.png differ diff --git a/resources/images/temperature_record.png b/resources/images/temperature_record.png new file mode 100644 index 000000000..1be3510dd Binary files /dev/null and b/resources/images/temperature_record.png differ diff --git a/resources/model/3DBenchy.stl b/resources/model/3DBenchy.stl new file mode 100644 index 000000000..17977bfff Binary files /dev/null and b/resources/model/3DBenchy.stl differ diff --git a/resources/model/Bambu_Cube.stl b/resources/model/Bambu_Cube.stl new file mode 100644 index 000000000..521fbb6ee Binary files /dev/null and b/resources/model/Bambu_Cube.stl differ diff --git a/resources/model/Bambu_Cube_V2.stl b/resources/model/Bambu_Cube_V2.stl new file mode 100644 index 000000000..9987e7a82 Binary files /dev/null and b/resources/model/Bambu_Cube_V2.stl differ diff --git a/resources/model/ksr_FDMTest.stl b/resources/model/ksr_FDMTest.stl new file mode 100644 index 000000000..b93919ca3 Binary files /dev/null and b/resources/model/ksr_FDMTest.stl differ diff --git a/resources/printers/filaments_blacklist.json b/resources/printers/filaments_blacklist.json index 685f3cb53..375b3c05b 100644 --- a/resources/printers/filaments_blacklist.json +++ b/resources/printers/filaments_blacklist.json @@ -6,55 +6,55 @@ "vendor": "Third Party", "type": "TPU", "action": "prohibition", - "description": "TPU is not supported by AMS." + "description": "TPU: not supported" }, - { + { "vendor": "Bambulab", "type": "TPU", "action": "prohibition", - "description": "TPU is not supported by AMS." + "description": "TPU: not supported" }, { "vendor": "Third Party", "type": "PVA", - "action": "warning", - "description": "Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use." + "action": "warning", + "description": "PVA: flexible" }, - { + { "vendor": "Third Party", "type": "PLA-CF", "action": "warning", - "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + "description": "CF/GF: hard and brittle" }, - { + { "vendor": "Third Party", "type": "PETG-CF", "action": "warning", - "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + "description": "CF/GF: hard and brittle" }, { "vendor": "Third Party", "type": "PA-CF", "action": "warning", - "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + "description": "CF/GF: hard and brittle" }, - { + { "vendor": "Third Party", "type": "PAHT-CF", "action": "warning", - "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + "description": "CF/GF: hard and brittle" }, - { + { "vendor": "Bambulab", "type": "PET-CF", "action": "prohibition", - "description": "Bambu PET-CF/PA6-CF is not supported by AMS." + "description": "Bambu PET-CF/PA6-CF: not supported" }, - { + { "vendor": "Bambulab", "type": "PA6-CF", "action": "prohibition", - "description": "Bambu PET-CF/PA6-CF is not supported by AMS." + "description": "Bambu PET-CF/PA6-CF: not supported" } ] } diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index 38904a3bc..f23017941 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "01.06.04.00", + "version": "01.07.00.02", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ @@ -60,77 +60,77 @@ "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": "Anker Generic PLA", - "sub_path": "filament/Anker Generic PLA.json" + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" }, { - "name": "Anker Generic PLA-CF", - "sub_path": "filament/Anker Generic PLA-CF.json" + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" }, { - "name": "Anker Generic PETG", - "sub_path": "filament/Anker Generic PETG.json" + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Anker Generic ABS", - "sub_path": "filament/Anker Generic ABS.json" + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" }, { - "name": "Anker Generic TPU", - "sub_path": "filament/Anker Generic TPU.json" + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Anker Generic ASA", - "sub_path": "filament/Anker Generic ASA.json" + "name": "Generic ABS @Anker", + "sub_path": "filament/Generic ABS @Anker.json" }, { - "name": "Anker Generic PC", - "sub_path": "filament/Anker Generic PC.json" + "name": "Generic ASA @Anker", + "sub_path": "filament/Generic ASA @Anker.json" }, { - "name": "Anker Generic PVA", - "sub_path": "filament/Anker Generic PVA.json" + "name": "Generic PA @Anker", + "sub_path": "filament/Generic PA @Anker.json" }, { - "name": "Anker Generic PA", - "sub_path": "filament/Anker Generic PA.json" + "name": "Generic PA-CF @Anker", + "sub_path": "filament/Generic PA-CF @Anker.json" }, { - "name": "Anker Generic PA-CF", - "sub_path": "filament/Anker Generic PA-CF.json" + "name": "Generic PC @Anker", + "sub_path": "filament/Generic PC @Anker.json" + }, + { + "name": "Generic PETG @Anker", + "sub_path": "filament/Generic PETG @Anker.json" + }, + { + "name": "Generic PLA @Anker", + "sub_path": "filament/Generic PLA @Anker.json" + }, + { + "name": "Generic PLA-CF @Anker", + "sub_path": "filament/Generic PLA-CF @Anker.json" + }, + { + "name": "Generic PVA @Anker", + "sub_path": "filament/Generic PVA @Anker.json" + }, + { + "name": "Generic TPU @Anker", + "sub_path": "filament/Generic TPU @Anker.json" } ], "machine_list": [ diff --git a/resources/profiles/Anker/filament/Generic ABS @Anker.json b/resources/profiles/Anker/filament/Generic ABS @Anker.json new file mode 100644 index 000000000..c4015f85d --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ABS @Anker.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_Anker_00", + "name": "Generic ABS @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ASA @Anker.json b/resources/profiles/Anker/filament/Generic ASA @Anker.json new file mode 100644 index 000000000..cddd9cd1b --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ASA @Anker.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSB98_Anker_00", + "name": "Generic ASA @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA @Anker.json b/resources/profiles/Anker/filament/Generic PA @Anker.json new file mode 100644 index 000000000..9077edc19 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA @Anker.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSN99_Anker_00", + "name": "Generic PA @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA-CF @Anker.json b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json new file mode 100644 index 000000000..2fac226eb --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSN98_Anker_00", + "name": "Generic PA-CF @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "compatible_printers": [ + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PC @Anker.json b/resources/profiles/Anker/filament/Generic PC @Anker.json new file mode 100644 index 000000000..e170d4304 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PC @Anker.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99_Anker_00", + "name": "Generic PC @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Voron/filament/Voron Generic PETG.json b/resources/profiles/Anker/filament/Generic PETG @Anker.json similarity index 66% rename from resources/profiles/Voron/filament/Voron Generic PETG.json rename to resources/profiles/Anker/filament/Generic PETG @Anker.json index d0b51b2f5..7486a9c38 100644 --- a/resources/profiles/Voron/filament/Voron Generic PETG.json +++ b/resources/profiles/Anker/filament/Generic PETG @Anker.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "Voron Generic PETG", + "setting_id": "GFSG99_Anker_00", + "name": "Generic PETG @Anker", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", @@ -39,16 +39,8 @@ "filament_max_volumetric_speed": [ "10" ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" ] } diff --git a/resources/profiles/Anker/filament/Generic PLA @Anker.json b/resources/profiles/Anker/filament/Generic PLA @Anker.json new file mode 100644 index 000000000..de93df3fb --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA @Anker.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_Anker_00", + "name": "Generic PLA @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1.00" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json similarity index 52% rename from resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json rename to resources/profiles/Anker/filament/Generic PLA-CF @Anker.json index a1aa29cb4..0963444a6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json +++ b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFL98", - "setting_id": "GFSA04", - "name": "Anycubic Generic PLA-CF", + "setting_id": "GFSL98_Anker_00", + "name": "Generic PLA-CF @Anker", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", @@ -19,13 +19,7 @@ "7" ], "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Voron/filament/Voron Generic PVA.json b/resources/profiles/Anker/filament/Generic PVA @Anker.json similarity index 55% rename from resources/profiles/Voron/filament/Voron Generic PVA.json rename to resources/profiles/Anker/filament/Generic PVA @Anker.json index c29c77163..ea8d8d2b0 100644 --- a/resources/profiles/Voron/filament/Voron Generic PVA.json +++ b/resources/profiles/Anker/filament/Generic PVA @Anker.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFS99", - "setting_id": "GFSA04", - "name": "Voron Generic PVA", + "setting_id": "GFSS99_Anker_00", + "name": "Generic PVA @Anker", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pva", @@ -19,12 +19,7 @@ "10" ], "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" ] } diff --git a/resources/profiles/Anker/filament/Generic TPU @Anker.json b/resources/profiles/Anker/filament/Generic TPU @Anker.json new file mode 100644 index 000000000..24c62cfb1 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic TPU @Anker.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSU99_Anker_00", + "name": "Generic TPU @Anker", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json index 12896d98d..161d56d31 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "setting_id": "GM003", + "setting_id": "GM_Anker_000", "name": "Anker M5 0.4 nozzle", "from": "system", "instantiation": "true", @@ -8,7 +8,7 @@ "printer_model": "Anker M5", "default_print_profile": "0.20mm Standard @Anker", "default_filament_profile": [ - "Anker Generic PLA" + "Generic PLA @Anker.json" ], "nozzle_diameter": [ "0.4" diff --git a/resources/profiles/Anker/machine/Anker M5.json b/resources/profiles/Anker/machine/Anker M5.json index 399b8c75a..1d7904d08 100644 --- a/resources/profiles/Anker/machine/Anker M5.json +++ b/resources/profiles/Anker/machine/Anker M5.json @@ -8,5 +8,5 @@ "bed_model": "M5-CE-bed.stl", "bed_texture": "M5-CE-texture.svg", "hotend_model": "", - "default_materials": "Anker Generic ABS;Anker Generic PLA;Anker Generic PLA-CF;Anker Generic PETG;Anker Generic TPU;Anker Generic ASA;Anker Generic PVA" + "default_materials": "Generic ABS @Anker;Generic PLA @Anker;Generic PLA-CF @Anker;Generic PETG @Anker;Generic TPU @Anker;Generic ASA @Anker;Generic PC @Anker;Generic PVA @Anker;" } diff --git a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json index f604d3c65..d7bb33740 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Anker M5C", "default_print_profile": "0.20mm Standard @Anker", "default_filament_profile": [ - "Anker Generic PLA" + "Generic PLA @Anker.json" ], "nozzle_diameter": [ "0.4" diff --git a/resources/profiles/Anker/machine/Anker M5C.json b/resources/profiles/Anker/machine/Anker M5C.json index bb15d1968..088769127 100644 --- a/resources/profiles/Anker/machine/Anker M5C.json +++ b/resources/profiles/Anker/machine/Anker M5C.json @@ -8,5 +8,5 @@ "bed_model": "M5C-CE-bed.stl", "bed_texture": "M5-CE-texture.svg", "hotend_model": "", - "default_materials": "Anker Generic ABS;Anker Generic PLA;Anker Generic PLA-CF;Anker Generic PETG;Anker Generic TPU;Anker Generic ASA;Anker Generic PVA;Anker Generic PC;Anker Generic PA;Anker Generic PA-CF" + "default_materials": "Generic ABS @Anker;Generic PLA @Anker;Generic PLA-CF @Anker;Generic PETG @Anker;Generic TPU @Anker;Generic ASA @Anker;Generic PC @Anker;Generic PVA @Anker;Generic PA @Anker;Generic PA-CF @Anker" } diff --git a/resources/profiles/Anker/machine/fdm_machine_common.json b/resources/profiles/Anker/machine/fdm_machine_common.json index ab862da58..c9a58da69 100644 --- a/resources/profiles/Anker/machine/fdm_machine_common.json +++ b/resources/profiles/Anker/machine/fdm_machine_common.json @@ -4,11 +4,12 @@ "from": "system", "instantiation": "false", "gcode_flavor": "marlin", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n", - "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 Sfirst_layer_temperature[0] ; Set hotend temp\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", + "machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S{first_layer_temperature[0]-30} ; Anti-ooze - Set hotend temp to 30 degrees less than target\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M601", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "change_filament_gcode": ";FILAMENT CHANGE (by Lukagra)\nG91\nG1 Z10 F600\nG90\nM600\nG91\nG1 E-3 F1200\nG1 Z-10 F600\nG90", + "machine_pause_gcode": "G91\nG1 Z5 F600\nG90\nM601\nG91\nG1 E-3 F1200\nG1 Z-5 F600\nG90", "extruder_colour": [ "#018001" ], @@ -109,7 +110,7 @@ ], "silent_mode": "0", "single_extruder_multi_material": "1", - "use_relative_e_distances": "1", + "use_relative_e_distances": "0", "wipe_distance": [ "0" ], diff --git a/resources/profiles/Anker/process/0.05mm Ultradetail @Anker.json b/resources/profiles/Anker/process/0.05mm Ultradetail @Anker.json index 74e834a73..776589c1d 100644 --- a/resources/profiles/Anker/process/0.05mm Ultradetail @Anker.json +++ b/resources/profiles/Anker/process/0.05mm Ultradetail @Anker.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP_Anker_000", + "setting_id": "GP_Anker_005", "name": "0.05mm Ultradetail @Anker", "from": "system", "instantiation": "true", diff --git a/resources/profiles/Anker/process/0.15mm Fast @Anker.json b/resources/profiles/Anker/process/0.15mm Fast @Anker.json index 9b9bbd16b..0c0cb7318 100644 --- a/resources/profiles/Anker/process/0.15mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.15mm Fast @Anker.json @@ -14,8 +14,8 @@ "top_shell_layers": "6", "support_bottom_z_distance": "0.15", "support_top_z_distance": "0.15", - "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", + "top_surface_pattern": "zig-zag", + "bottom_surface_pattern": "zig-zag", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", diff --git a/resources/profiles/Anker/process/0.20mm Fast @Anker.json b/resources/profiles/Anker/process/0.20mm Fast @Anker.json index fee20b385..8a0cb1033 100644 --- a/resources/profiles/Anker/process/0.20mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.20mm Fast @Anker.json @@ -13,8 +13,8 @@ "top_shell_layers": "5", "support_bottom_z_distance": "0.20", "support_top_z_distance": "0.20", - "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", + "top_surface_pattern": "zig-zag", + "bottom_surface_pattern": "zig-zag", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", diff --git a/resources/profiles/Anker/process/0.20mm Standard @Anker.json b/resources/profiles/Anker/process/0.20mm Standard @Anker.json index ae6b22830..d9a08f094 100644 --- a/resources/profiles/Anker/process/0.20mm Standard @Anker.json +++ b/resources/profiles/Anker/process/0.20mm Standard @Anker.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anker_000", "name": "0.20mm Standard @Anker", "from": "system", "instantiation": "true", diff --git a/resources/profiles/Anker/process/0.25mm Fast @Anker.json b/resources/profiles/Anker/process/0.25mm Fast @Anker.json index cb397c228..b190f6b49 100644 --- a/resources/profiles/Anker/process/0.25mm Fast @Anker.json +++ b/resources/profiles/Anker/process/0.25mm Fast @Anker.json @@ -13,8 +13,8 @@ "top_shell_layers": "3", "support_bottom_z_distance": "0.25", "support_top_z_distance": "0.25", - "top_surface_pattern": "monotonic", - "bottom_surface_pattern": "monotonic", + "top_surface_pattern": "zig-zag", + "bottom_surface_pattern": "zig-zag", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", diff --git a/resources/profiles/Anker/process/fdm_process_common.json b/resources/profiles/Anker/process/fdm_process_common.json index 7bf242ddb..5488e2b48 100644 --- a/resources/profiles/Anker/process/fdm_process_common.json +++ b/resources/profiles/Anker/process/fdm_process_common.json @@ -59,7 +59,7 @@ "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", - "resolution": "0.012", + "resolution": "0.008", "support_type": "normal(auto)", "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", @@ -71,7 +71,7 @@ "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", "support_interface_speed": "80", - "support_base_pattern": "zig-zag", + "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "125", "support_threshold_angle": "40", diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index 410576d4e..1b0c2b1ce 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,34 +1,30 @@ { "name": "Anycubic", - "version": "01.06.00.00", + "version": "01.07.00.02", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ - { + { "name": "Anycubic i3 Mega S", "sub_path": "machine/Anycubic i3 Mega S.json" }, - { + { "name": "Anycubic Chiron", "sub_path": "machine/Anycubic Chiron.json" }, - { + { "name": "Anycubic Vyper", "sub_path": "machine/Anycubic Vyper.json" }, - { + { "name": "Anycubic Kobra Max", "sub_path": "machine/Anycubic Kobra Max.json" }, - { - "name": "Anycubic Kobra Plus", - "sub_path": "machine/Anycubic Kobra Plus.json" - }, { "name": "Anycubic 4Max Pro", "sub_path": "machine/Anycubic 4Max Pro.json" }, - { + { "name": "Anycubic 4Max Pro 2", "sub_path": "machine/Anycubic 4Max Pro 2.json" }, @@ -42,27 +38,23 @@ "name": "fdm_process_common", "sub_path": "process/fdm_process_common.json" }, - { + { "name": "0.15mm Optimal @Anycubic i3MegaS", "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.json" }, - { + { "name": "0.15mm Optimal @Anycubic Chiron", "sub_path": "process/0.15mm Optimal @Anycubic Chiron.json" }, - { + { "name": "0.15mm Optimal @Anycubic Vyper", "sub_path": "process/0.15mm Optimal @Anycubic Vyper.json" }, - { + { "name": "0.15mm Optimal @Anycubic KobraMax", "sub_path": "process/0.15mm Optimal @Anycubic KobraMax.json" }, { - "name": "0.15mm Optimal @Anycubic KobraPlus", - "sub_path": "process/0.15mm Optimal @Anycubic KobraPlus.json" - }, - { "name": "0.15mm Optimal @Anycubic 4MaxPro2", "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" }, @@ -70,31 +62,27 @@ "name": "0.15mm Optimal @Anycubic Kobra2", "sub_path": "process/0.15mm Optimal @Anycubic Kobra2.json" }, - { + { "name": "0.20mm Standard @Anycubic i3MegaS", "sub_path": "process/0.20mm Standard @Anycubic i3MegaS.json" }, - { + { "name": "0.20mm Standard @Anycubic Chiron", "sub_path": "process/0.20mm Standard @Anycubic Chiron.json" }, - { + { "name": "0.20mm Standard @Anycubic Vyper", "sub_path": "process/0.20mm Standard @Anycubic Vyper.json" }, - { + { "name": "0.20mm Standard @Anycubic KobraMax", "sub_path": "process/0.20mm Standard @Anycubic KobraMax.json" }, - { - "name": "0.20mm Standard @Anycubic KobraPlus", - "sub_path": "process/0.20mm Standard @Anycubic KobraPlus.json" - }, { "name": "0.20mm Standard @Anycubic 4MaxPro", "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro.json" }, - { + { "name": "0.20mm Standard @Anycubic 4MaxPro2", "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro2.json" }, @@ -102,27 +90,23 @@ "name": "0.20mm Standard @Anycubic Kobra2", "sub_path": "process/0.20mm Standard @Anycubic Kobra2.json" }, - { + { "name": "0.30mm Draft @Anycubic i3MegaS", "sub_path": "process/0.30mm Draft @Anycubic i3MegaS.json" }, - { + { "name": "0.30mm Draft @Anycubic Chiron", "sub_path": "process/0.30mm Draft @Anycubic Chiron.json" }, - { + { "name": "0.30mm Draft @Anycubic Vyper", "sub_path": "process/0.30mm Draft @Anycubic Vyper.json" }, - { + { "name": "0.30mm Draft @Anycubic KobraMax", "sub_path": "process/0.30mm Draft @Anycubic KobraMax.json" }, { - "name": "0.30mm Draft @Anycubic KobraPlus", - "sub_path": "process/0.30mm Draft @Anycubic KobraPlus.json" - }, - { "name": "0.30mm Draft @Anycubic 4MaxPro2", "sub_path": "process/0.30mm Draft @Anycubic 4MaxPro2.json" }, @@ -136,77 +120,78 @@ "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_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.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_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" }, { "name": "fdm_filament_pva", "sub_path": "filament/fdm_filament_pva.json" }, { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Anycubic Generic PLA", - "sub_path": "filament/Anycubic Generic PLA.json" + "name": "Generic ABS @Anycubic", + "sub_path": "filament/Generic ABS @Anycubic.json" }, { - "name": "Anycubic Generic PLA-CF", - "sub_path": "filament/Anycubic Generic PLA-CF.json" + "name": "Generic ASA @Anycubic", + "sub_path": "filament/Generic ASA @Anycubic.json" }, { - "name": "Anycubic Generic PETG", - "sub_path": "filament/Anycubic Generic PETG.json" + "name": "Generic PA @Anycubic", + "sub_path": "filament/Generic PA @Anycubic.json" }, { - "name": "Anycubic Generic ABS", - "sub_path": "filament/Anycubic Generic ABS.json" + "name": "Generic PA-CF @Anycubic", + "sub_path": "filament/Generic PA-CF @Anycubic.json" }, { - "name": "Anycubic Generic TPU", - "sub_path": "filament/Anycubic Generic TPU.json" + "name": "Generic PC @Anycubic", + "sub_path": "filament/Generic PC @Anycubic.json" }, { - "name": "Anycubic Generic ASA", - "sub_path": "filament/Anycubic Generic ASA.json" + "name": "Generic PETG @Anycubic", + "sub_path": "filament/Generic PETG @Anycubic.json" }, { - "name": "Anycubic Generic PC", - "sub_path": "filament/Anycubic Generic PC.json" + "name": "Generic PLA @Anycubic", + "sub_path": "filament/Generic PLA @Anycubic.json" }, { - "name": "Anycubic Generic PVA", - "sub_path": "filament/Anycubic Generic PVA.json" + "name": "Generic PLA-CF @Anycubic", + "sub_path": "filament/Generic PLA-CF @Anycubic.json" }, { - "name": "Anycubic Generic PA", - "sub_path": "filament/Anycubic Generic PA.json" + "name": "Generic PVA @Anycubic", + "sub_path": "filament/Generic PVA @Anycubic.json" }, { - "name": "Anycubic Generic PA-CF", - "sub_path": "filament/Anycubic Generic PA-CF.json" + "name": "Generic TPU @Anycubic", + "sub_path": "filament/Generic TPU @Anycubic.json" } ], "machine_list": [ @@ -214,31 +199,27 @@ "name": "fdm_machine_common", "sub_path": "machine/fdm_machine_common.json" }, - { + { "name": "Anycubic i3 Mega S 0.4 nozzle", "sub_path": "machine/Anycubic i3 Mega S 0.4 nozzle.json" }, - { + { "name": "Anycubic Chiron 0.4 nozzle", "sub_path": "machine/Anycubic Chiron 0.4 nozzle.json" }, - { + { "name": "Anycubic Vyper 0.4 nozzle", "sub_path": "machine/Anycubic Vyper 0.4 nozzle.json" }, - { + { "name": "Anycubic Kobra Max 0.4 nozzle", "sub_path": "machine/Anycubic Kobra Max 0.4 nozzle.json" }, - { - "name": "Anycubic Kobra Plus 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Plus 0.4 nozzle.json" - }, { "name": "Anycubic 4Max Pro 0.4 nozzle", "sub_path": "machine/Anycubic 4Max Pro 0.4 nozzle.json" }, - { + { "name": "Anycubic 4Max Pro 2 0.4 nozzle", "sub_path": "machine/Anycubic 4Max Pro 2 0.4 nozzle.json" }, diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json b/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json deleted file mode 100644 index 7f769d0da..000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "GFSA04", - "name": "Anycubic Generic ABS", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json b/resources/profiles/Anycubic/filament/Anycubic Generic PC.json deleted file mode 100644 index f2871f718..000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFC99", - "setting_id": "GFSA04", - "name": "Anycubic Generic PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json b/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json deleted file mode 100644 index 3420f3f9a..000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "Anycubic 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" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json deleted file mode 100644 index c0228e59d..000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "Anycubic Generic PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json b/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json deleted file mode 100644 index 49c1ac774..000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFU99", - "setting_id": "GFSA04", - "name": "Anycubic Generic TPU", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json new file mode 100644 index 000000000..39522ac4b --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_ANYCUBIC_00", + "name": "Generic ABS @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json similarity index 50% rename from resources/profiles/Anycubic/filament/Anycubic Generic ASA.json rename to resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json index 257eaae40..2f3011830 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json +++ b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFB98", - "setting_id": "GFSA04", - "name": "Anycubic Generic ASA", + "setting_id": "GFSB98_ANYCUBIC_00", + "name": "Generic ASA @Anycubic", "from": "system", "instantiation": "true", "inherits": "fdm_filament_asa", @@ -13,13 +13,12 @@ "12" ], "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json similarity index 55% rename from resources/profiles/Anycubic/filament/Anycubic Generic PA.json rename to resources/profiles/Anycubic/filament/Generic PA @Anycubic.json index d6ffeee38..2e908d660 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json +++ b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFN99", - "setting_id": "GFSA04", - "name": "Anycubic Generic PA", + "setting_id": "GFSN99_ANYCUBIC_00", + "name": "Generic PA @Anycubic", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pa", @@ -16,13 +16,12 @@ "12" ], "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json similarity index 50% rename from resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json rename to resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json index d04deb69c..007bcaf8a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json +++ b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFN98", - "setting_id": "GFSA04", - "name": "Anycubic Generic PA-CF", + "setting_id": "GFSN98_ANYCUBIC_00", + "name": "Generic PA-CF @Anycubic", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pa", @@ -15,17 +15,13 @@ "nozzle_temperature": [ "280" ], - "filament_max_volumetric_speed": [ - "8" - ], "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json new file mode 100644 index 000000000..4a615eb74 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99_ANYCUBIC_00", + "name": "Generic PC @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json new file mode 100644 index 000000000..1159116bc --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json @@ -0,0 +1,39 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_ANYCUBIC_00", + "name": "Generic PETG @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json new file mode 100644 index 000000000..aa92a801d --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_ANYCUBIC_00", + "name": "Generic PLA @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json new file mode 100644 index 000000000..2285e7afa --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98_ANYCUBIC_00", + "name": "Generic PLA-CF @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json similarity index 50% rename from resources/profiles/Anycubic/filament/Anycubic Generic PVA.json rename to resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json index 9e148de4a..e68bc5efd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json +++ b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFS99", - "setting_id": "GFSA04", - "name": "Anycubic Generic PVA", + "setting_id": "GFSS99_ANYCUBIC_00", + "name": "Generic PVA @Anycubic", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pva", @@ -15,17 +15,13 @@ "slow_down_layer_time": [ "7" ], - "slow_down_min_speed": [ - "10" - ], "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json new file mode 100644 index 000000000..3a091317c --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSU99_ANYCUBIC_00", + "name": "Generic TPU @Anycubic", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Anycubic/filament/fdm_filament_common.json b/resources/profiles/Anycubic/filament/fdm_filament_common.json index f1e09f49d..fe983433d 100644 --- a/resources/profiles/Anycubic/filament/fdm_filament_common.json +++ b/resources/profiles/Anycubic/filament/fdm_filament_common.json @@ -105,9 +105,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 0.4 nozzle.json index 87965146c..5e40d9e29 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM003", + "setting_id": "GM_Anycubic_000", "name": "Anycubic 4Max Pro 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic 4Max Pro", "default_print_profile": "0.20mm Standard @Anycubic 4MaxPro", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -19,6 +22,9 @@ "270x205", "0x205" ], + "default_filament_profile": [ + "Generic PLA @Anycubic" + ], "printable_height": "200", "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n; You can use following code instead if your PRINT_START macro support Chamber and print area bedmesh\n; PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single] Chamber=[chamber_temperature] PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]}", "machine_end_gcode": "PRINT_END", diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json index 144ca30f6..03217606e 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_001", "name": "Anycubic 4Max Pro 2 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic 4Max Pro 2", "default_print_profile": "0.20mm Standard @Anycubic 4MaxPro2", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -104,7 +107,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 X0 Y0 ; home X and Y\nG28 Z0 ; home Z\nG1 Z30 F{machine_max_speed_z[0]*60} ; move Z a bit down to not blow on the bed edge while heating\nG1 X10 F3900 ; let some space on x to prevent the filament cooling exhaust from beeing blocked by the servo motor\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM106 S80 ; turn on fan to prevent air nozzle melt while heating up\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nM107 ; start with the fan off\nG28 X0 ; goto X home again\nG92 E0 ; zero the extruded length\nG1 Z0.2 F360 ; move plattform upwards\n; extrude material next to the plattform (comment or remove following lines to disable)\nG1 F180 E20 ; extrude some material next to the plattform\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG92 E0 ; zero the extruded length again\nG1 X5 F3900 ; move sideways to get rid of that string\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\nG92 E0 ; zero the extruded length again\n; draw intro line (comment or remove following lines to disable)\nG1 X30 E5 F700 ; draw intro line\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG1 X40 Z2.0 ; move away from the introline\nG92 E0 ; zero the extruded length again\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\n; end of intro line code\nM117 Printing...\nG5", "machine_end_gcode": "M104 S0 ; turn off extruder heating\nM140 S0 ; turn off bed heating\nM107 ; turn off fans\nG91 ; relative positioning\nG0 Z+0.5 ; move Z up a tiny bit\nG90 ; absolute positioning\nG0 X135 Y105 F{machine_max_speed_x[0]*60} ; move extruder to center position\nG0 Z190.5 F{machine_max_speed_z[0]*60} ; lower the plattform to Z min\nM84 ; steppers off\nG90 ; absolute positioning\n", diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json index 81c1bb887..9af42cd67 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro2_buildplate_model.stl", "bed_texture": "anycubic_4maxpro2_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json index a88850c2e..b89183abb 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro_buildplate_model.stl", "bed_texture": "anycubic_4maxpro_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json index 0f437d53f..3f969ecba 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_002", "name": "Anycubic Chiron 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic Chiron", "default_print_profile": "0.20mm Standard @Anycubic Chiron", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -108,7 +111,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107 ;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single]; set wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z15.0 F3600 ;move the platform down 15mm\nG92 E0;zero the extruded length\nG1 F200 E40;extrude 40mm of feed stock\nG92 E0;zero the extruded length again\nG1 F3600", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91;relative positioning\nG1 E-4 F300;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X-10 F3000; get the head off the bed\nG1 F3000 Y400;kick the bed out\nM84;steppers off", diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron.json b/resources/profiles/Anycubic/machine/Anycubic Chiron.json index 31dfe260a..21c6798f4 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_chiron_buildplate_model.stl", "bed_texture": "anycubic_chiron_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index 454f3b49f..28efe438b 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_006", "name": "Anycubic Kobra 2 0.4 nozzle", "from": "system", "instantiation": "true", @@ -17,7 +17,7 @@ "0x220" ], "printable_height": "250", - "nozzle_type": "undefined", + "nozzle_type": "undefine", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ "2500", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json index e1c2fa6f2..414518515 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_004", "name": "Anycubic Kobra Max 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic Kobra Max", "default_print_profile": "0.20mm Standard @Anycubic KobraMax", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -108,7 +111,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single] ; set wait for bed temp\nM355 S1;turn on the case light\nM109 S[nozzle_temperature_initial_layer]; wait for extruder temp\nG1 Z15.0 F1000 ;move the nozzle up 15mm\nG92 E0;zero the extruded length\nG1 F100 E60;extrude 60mm of feed stock\nG92 E0;zero the extruded length again", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0;heated bed heater off (if you have it)\nG91;relative positioning\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X10 F3000; get the head off the bed\nG1 F3000 Y400 ;kick the bed out\nM84;steppers off\nM355 S0;turn off the case light", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json index f5a897af8..2f17f63f1 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobramax_buildplate_model.stl", "bed_texture": "anycubic_kobramax_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json index 781dc9f95..153b93622 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_005", "name": "Anycubic Vyper 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic Vyper", "default_print_profile": "0.20mm Standard @Anycubic Vyper", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -104,7 +107,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG0 Z0.2 F1800 ; move nozzle to print position\nG92 E0 ; specify current extruder position as zero\nG1 Y10 X180 E50 F1200 ; extrude a line in front of the printer\nG92 E0 ; specify current extruder position as zero\nG0 Z20 F6000 ; move head up\nG1 E-7 F2400 ; retract\nG04 S2 ; wait 2s\nG0 X0 F6000 ; wipe from oozed filament\nG1 E-1 F2400 ; undo some of the retraction to avoid oozing\nG1 F6000 ; set travel speed to move to start printing point\nM117", "machine_end_gcode": "G4 ; wait\nG92 E0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} ; move print head up\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper.json b/resources/profiles/Anycubic/machine/Anycubic Vyper.json index 15e5cc12a..229269df9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_vyper_buildplate_model.stl", "bed_texture": "anycubic_vyper_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json index 2281ae72e..ba3394dc2 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json @@ -1,12 +1,15 @@ { "type": "machine", - "setting_id": "GM001", + "setting_id": "GM_Anycubic_003", "name": "Anycubic i3 Mega S 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Anycubic i3 Mega S", "default_print_profile": "0.20mm Standard @Anycubic i3MegaS", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], @@ -108,7 +111,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json index cad44fd0d..2cd941e28 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_i3megas_buildplate_model.stl", "bed_texture": "anycubic_i3megas_buildplate_texture.png", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/fdm_machine_common.json b/resources/profiles/Anycubic/machine/fdm_machine_common.json index 89cad3141..235e52428 100644 --- a/resources/profiles/Anycubic/machine/fdm_machine_common.json +++ b/resources/profiles/Anycubic/machine/fdm_machine_common.json @@ -131,7 +131,7 @@ "change_filament_gcode": "", "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": "M400 U1\n", + "machine_pause_gcode": "M601", "wipe": [ "1" ], diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json index 6babe744c..8c9ee0597 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_000", "name": "0.15mm Optimal @Anycubic 4MaxPro2", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json index 543e0d2d9..2d4cfc25c 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_001", "name": "0.15mm Optimal @Anycubic Chiron", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json index 5ec4bb391..817eda50e 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_017", "name": "0.15mm Optimal @Anycubic Kobra2", "from": "system", "inherits": "fdm_process_common", @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "rectilinear", + "sparse_infill_pattern": "zig-zag", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json index ea9ef8669..552026530 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_003", "name": "0.15mm Optimal @Anycubic KobraMax", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json index f50094c38..95987bbdf 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_005", "name": "0.15mm Optimal @Anycubic Vyper", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json index 026d45d1c..ebd449a35 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_002", "name": "0.15mm Optimal @Anycubic i3MegaS", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro.json index 4af709783..9788f5441 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_006", "name": "0.20mm Standard @Anycubic 4MaxPro", "from": "system", "instantiation": "true", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json index ca160587c..4045fd9e2 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_007", "name": "0.20mm Standard @Anycubic 4MaxPro2", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json index d0b6f45e8..68e2a4446 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_008", "name": "0.20mm Standard @Anycubic Chiron", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json index b756a74fe..2f928c551 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_018", "name": "0.20mm Standard @Anycubic Kobra2", "from": "system", "inherits": "fdm_process_common", @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "rectilinear", + "sparse_infill_pattern": "zig-zag", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json index 8efba928a..813b9666f 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_010", "name": "0.20mm Standard @Anycubic KobraMax", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json index f8b80f8a9..06aff1d7a 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_011", "name": "0.20mm Standard @Anycubic Vyper", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json index 4dfe316fa..a52b52e07 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_009", "name": "0.20mm Standard @Anycubic i3MegaS", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json index 7c9608044..a00cd5d72 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_012", "name": "0.30mm Draft @Anycubic 4MaxPro2", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json index c7dba4627..133b4c9c2 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_013", "name": "0.30mm Draft @Anycubic Chiron", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json index 5663d6a3c..8aea7dbeb 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_019", "name": "0.30mm Draft @Anycubic Kobra2", "from": "system", "inherits": "fdm_process_common", @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "rectilinear", + "sparse_infill_pattern": "zig-zag", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json index 5dcc5385f..c96bbfd81 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_015", "name": "0.30mm Draft @Anycubic KobraMax", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json index 9cbf32870..58a19c4cd 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_016", "name": "0.30mm Draft @Anycubic Vyper", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json index c0ea8cc91..da36f6d73 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_Anycubic_014", "name": "0.30mm Draft @Anycubic i3MegaS", "from": "system", "inherits": "fdm_process_common", @@ -44,7 +44,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "filename_format": "[input_filename_base].gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Anycubic/process/fdm_process_common.json b/resources/profiles/Anycubic/process/fdm_process_common.json index fd05875b1..877f08b9f 100644 --- a/resources/profiles/Anycubic/process/fdm_process_common.json +++ b/resources/profiles/Anycubic/process/fdm_process_common.json @@ -23,7 +23,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.4", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index ef63d15ef..d78ac1464 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.07.00.10", + "version": "01.07.00.12", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/process/fdm_process_bbl_common.json b/resources/profiles/BBL/process/fdm_process_bbl_common.json index 43e5a02b8..99c86b59a 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_common.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_common.json @@ -25,7 +25,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", - "inner_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", "infill_direction": "45", @@ -107,6 +106,5 @@ "prime_tower_width": "35", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "wall_generator": "arachne", - "gcode_label_objects": "0" + "wall_generator": "classic" } diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 2503af2b4..ad55d4bd7 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,14 +1,14 @@ { "name": "Creality", - "version": "01.06.02.00", + "version": "01.07.00.02", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ - { + { "name": "Creality CR-10 V2", "sub_path": "machine/Creality CR-10 V2.json" }, - { + { "name": "Creality CR-10 Max", "sub_path": "machine/Creality CR-10 Max.json" }, @@ -16,37 +16,41 @@ "name": "Creality Ender-3 V2", "sub_path": "machine/Creality Ender-3 V2.json" }, - { + { "name": "Creality Ender-3 S1", "sub_path": "machine/Creality Ender-3 S1.json" }, - { + { "name": "Creality Ender-3 S1 Pro", "sub_path": "machine/Creality Ender-3 S1 Pro.json" }, - { + { "name": "Creality Ender-5", "sub_path": "machine/Creality Ender-5.json" }, - { + { "name": "Creality Ender-5 Plus", "sub_path": "machine/Creality Ender-5 Plus.json" }, { - "name": "Creality Ender-5 Pro (2019)", - "sub_path": "machine/Creality Ender-5 Pro (2019).json" - }, - { "name": "Creality Ender-5S", "sub_path": "machine/Creality Ender-5S.json" }, - { + { "name": "Creality Ender-5 S1", "sub_path": "machine/Creality Ender-5 S1.json" }, - { + { "name": "Creality Ender-6", "sub_path": "machine/Creality Ender-6.json" + }, + { + "name": "Creality CR-6 SE", + "sub_path": "machine/Creality CR-6 SE.json" + }, + { + "name": "Creality CR-6 Max", + "sub_path": "machine/Creality CR-6 Max.json" } ], "process_list": [ @@ -58,19 +62,43 @@ "name": "fdm_process_creality_common", "sub_path": "process/fdm_process_creality_common.json" }, + { + "name": "0.10mm HighDetail @Creality CR-6", + "sub_path": "process/0.10mm HighDetail @Creality CR-6.json" + }, + { + "name": "0.12mm Detail @Creality CR-6", + "sub_path": "process/0.12mm Detail @Creality CR-6.json" + }, + { + "name": "0.16mm Opitmal @Creality CR-6", + "sub_path": "process/0.16mm Opitmal @Creality CR-6.json" + }, + { + "name": "0.16mm Optimal @Creality CR-6 0.2", + "sub_path": "process/0.16mm Optimal @Creality CR-6 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality CR-6 0.4", + "sub_path": "process/0.16mm Optimal @Creality CR-6 0.4.json" + }, + { + "name": "0.24mm Draft @Creality CR-6", + "sub_path": "process/0.24mm Draft @Creality CR-6.json" + }, + { + "name": "0.28mm SuperDraft @Creality CR-6", + "sub_path": "process/0.28mm SuperDraft @Creality CR-6.json" + }, { "name": "0.12mm Fine @Creality CR10Max", "sub_path": "process/0.12mm Fine @Creality CR10Max.json" }, - { + { "name": "0.12mm Fine @Creality Ender3V2", "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" }, - { - "name": "0.12mm Fine @Creality Ender5Pro (2019)", - "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" - }, - { + { "name": "0.16mm Optimal @Creality CR10V2", "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" }, @@ -78,43 +106,43 @@ "name": "0.15mm Optimal @Creality CR10Max", "sub_path": "process/0.15mm Optimal @Creality CR10Max.json" }, - { + { "name": "0.15mm Optimal @Creality Ender3V2", "sub_path": "process/0.15mm Optimal @Creality Ender3V2.json" }, - { + { "name": "0.16mm Optimal @Creality Ender3S1", "sub_path": "process/0.16mm Optimal @Creality Ender3S1.json" }, - { + { "name": "0.16mm Optimal @Creality Ender3S1Pro", "sub_path": "process/0.16mm Optimal @Creality Ender3S1Pro.json" }, - { + { "name": "0.16mm Optimal @Creality Ender5", "sub_path": "process/0.16mm Optimal @Creality Ender5.json" }, - { + { "name": "0.16mm Optimal @Creality Ender5Plus", "sub_path": "process/0.16mm Optimal @Creality Ender5Plus.json" }, - { - "name": "0.15mm Optimal @Creality Ender5Pro (2019)", - "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" - }, - { + { "name": "0.16mm Optimal @Creality Ender5S", "sub_path": "process/0.16mm Optimal @Creality Ender5S.json" }, - { + { "name": "0.16mm Optimal @Creality Ender5S1", "sub_path": "process/0.16mm Optimal @Creality Ender5S1.json" }, - { + { "name": "0.16mm Optimal @Creality Ender6", "sub_path": "process/0.16mm Optimal @Creality Ender6.json" }, - { + { + "name": "0.20mm Normal @Creality CR-6", + "sub_path": "process/0.20mm Normal @Creality CR-6.json" + }, + { "name": "0.20mm Standard @Creality CR10V2", "sub_path": "process/0.20mm Standard @Creality CR10V2.json" }, @@ -122,39 +150,35 @@ "name": "0.20mm Standard @Creality CR10Max", "sub_path": "process/0.20mm Standard @Creality CR10Max.json" }, - { + { "name": "0.20mm Standard @Creality Ender3V2", "sub_path": "process/0.20mm Standard @Creality Ender3V2.json" }, - { + { "name": "0.20mm Standard @Creality Ender3S1", "sub_path": "process/0.20mm Standard @Creality Ender3S1.json" }, - { + { "name": "0.20mm Standard @Creality Ender3S1Pro", "sub_path": "process/0.20mm Standard @Creality Ender3S1Pro.json" }, - { + { "name": "0.20mm Standard @Creality Ender5", "sub_path": "process/0.20mm Standard @Creality Ender5.json" }, - { + { "name": "0.20mm Standard @Creality Ender5Plus", "sub_path": "process/0.20mm Standard @Creality Ender5Plus.json" }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019)", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019).json" - }, - { + { "name": "0.20mm Standard @Creality Ender5S", "sub_path": "process/0.20mm Standard @Creality Ender5S.json" }, - { + { "name": "0.20mm Standard @Creality Ender5S1", "sub_path": "process/0.20mm Standard @Creality Ender5S1.json" }, - { + { "name": "0.20mm Standard @Creality Ender6", "sub_path": "process/0.20mm Standard @Creality Ender6.json" }, @@ -162,13 +186,69 @@ "name": "0.24mm Draft @Creality CR10Max", "sub_path": "process/0.24mm Draft @Creality CR10Max.json" }, - { + { "name": "0.24mm Draft @Creality Ender3V2", "sub_path": "process/0.24mm Draft @Creality Ender3V2.json" }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019)", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" + { + "name": "0.08mm SuperDetail @Creality CR-6 0.2", + "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" + }, + { + "name": "0.32mm Chunky @Creality CR-6 0.6", + "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" + }, + { + "name": "0.36mm SuperChunky @Creality CR-6", + "sub_path": "process/0.36mm SuperChunky @Creality CR-6.json" + }, + { + "name": "0.44mm SuperExtraChunky @Creality CR-6", + "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6.json" + }, + { + "name": "0.24mm Optimal @Creality CR-6", + "sub_path": "process/0.24mm Optimal @Creality CR-6.json" + }, + { + "name": "0.32mm Normal @Creality CR-6 0.8", + "sub_path": "process/0.32mm Normal @Creality CR-6 0.8.json" + }, + { + "name": "0.40mm Draft @Creality CR-6", + "sub_path": "process/0.40mm Draft @Creality CR-6.json" + }, + { + "name": "0.48mm Chunky @Creality CR-6", + "sub_path": "process/0.48mm Chunky @Creality CR-6.json" + }, + { + "name": "0.48mm Draft @Creality CR-6", + "sub_path": "process/0.48mm Draft @Creality CR-6.json" + }, + { + "name": "0.56mm SuperChunky @Creality CR-6", + "sub_path": "process/0.56mm SuperChunky @Creality CR-6.json" + }, + { + "name": "0.12mm Detail @Creality 0.2 CR-6", + "sub_path": "process/0.12mm Detail @Creality 0.2 CR-6.json" + }, + { + "name": "0.12mm Detail @Creality 0.4 CR-6", + "sub_path": "process/0.12mm Detail @Creality 0.4 CR-6.json" + }, + { + "name": "0.24mm Draft @Creality 0.6 CR-6", + "sub_path": "process/0.24mm Draft @Creality 0.6 CR-6.json" + }, + { + "name": "0.28mm SuperDraft @Creality 0.6 CR-6", + "sub_path": "process/0.28mm SuperDraft @Creality 0.6 CR-6.json" + }, + { + "name": "0.20mm Normal @Creality CR-6 0.6", + "sub_path": "process/0.20mm Normal @Creality CR-6 0.6.json" } ], "filament_list": [ @@ -177,28 +257,40 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.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_abs", - "sub_path": "filament/fdm_filament_abs.json" + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Creality Generic PLA", - "sub_path": "filament/Creality Generic PLA.json" + "name": "Generic ABS @Creality", + "sub_path": "filament/Generic ABS @Creality.json" }, { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" + "name": "Generic PETG @Creality", + "sub_path": "filament/Generic PETG @Creality.json" }, { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" + "name": "Generic PLA @Creality", + "sub_path": "filament/Generic PLA @Creality.json" + }, + { + "name": "Generic PETG @Creality CR-6", + "sub_path": "filament/Generic PETG @Creality CR-6.json" + }, + { + "name": "Generic ABS @Creality CR-6", + "sub_path": "filament/Generic ABS @Creality CR-6.json" + }, + { + "name": "Generic PLA @Creality CR-6", + "sub_path": "filament/Generic PLA @Creality CR-6.json" } ], "machine_list": [ @@ -210,11 +302,11 @@ "name": "fdm_creality_common", "sub_path": "machine/fdm_creality_common.json" }, - { + { "name": "Creality CR-10 V2 0.4 nozzle", "sub_path": "machine/Creality CR-10 V2 0.4 nozzle.json" }, - { + { "name": "Creality CR-10 Max 0.4 nozzle", "sub_path": "machine/Creality CR-10 Max 0.4 nozzle.json" }, @@ -222,37 +314,65 @@ "name": "Creality Ender-3 V2 0.4 nozzle", "sub_path": "machine/Creality Ender-3 V2 0.4 nozzle.json" }, - { + { "name": "Creality Ender-3 S1 0.4 nozzle", "sub_path": "machine/Creality Ender-3 S1 0.4 nozzle.json" }, - { + { "name": "Creality Ender-3 S1 Pro 0.4 nozzle", "sub_path": "machine/Creality Ender-3 S1 Pro 0.4 nozzle.json" }, - { + { "name": "Creality Ender-5 0.4 nozzle", "sub_path": "machine/Creality Ender-5 0.4 nozzle.json" }, - { + { "name": "Creality Ender-5 Plus 0.4 nozzle", "sub_path": "machine/Creality Ender-5 Plus 0.4 nozzle.json" }, { - "name": "Creality Ender-5 Pro (2019) 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json" - }, - { "name": "Creality Ender-5S 0.4 nozzle", "sub_path": "machine/Creality Ender-5S 0.4 nozzle.json" }, - { + { "name": "Creality Ender-5 S1 0.4 nozzle", "sub_path": "machine/Creality Ender-5 S1 0.4 nozzle.json" }, - { + { "name": "Creality Ender-6 0.4 nozzle", "sub_path": "machine/Creality Ender-6 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.2 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.2 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.4 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.6 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.6 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.8 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.8 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.2 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.2 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.4 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.6 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.6 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.8 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.8 nozzle.json" } ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/Creality CR-6 Max_cover.png b/resources/profiles/Creality/Creality CR-6 Max_cover.png new file mode 100644 index 000000000..a0aa2d272 Binary files /dev/null and b/resources/profiles/Creality/Creality CR-6 Max_cover.png differ diff --git a/resources/profiles/Creality/Creality CR-6 SE_cover.png b/resources/profiles/Creality/Creality CR-6 SE_cover.png new file mode 100644 index 000000000..35c6e318c Binary files /dev/null and b/resources/profiles/Creality/Creality CR-6 SE_cover.png differ diff --git a/resources/profiles/Creality/creality_CR_6_SE_buildplate_model.stl b/resources/profiles/Creality/creality_CR_6_SE_buildplate_model.stl new file mode 100644 index 000000000..5fa9d7a32 Binary files /dev/null and b/resources/profiles/Creality/creality_CR_6_SE_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_cr6se_buildplate_texture.png b/resources/profiles/Creality/creality_cr6se_buildplate_texture.png new file mode 100644 index 000000000..31775044c Binary files /dev/null and b/resources/profiles/Creality/creality_cr6se_buildplate_texture.png differ diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality CR-6.json b/resources/profiles/Creality/filament/Generic ABS @Creality CR-6.json new file mode 100644 index 000000000..87456a047 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality CR-6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "CRB99", + "setting_id": "CRSB99_CREALITY_00", + "name": "Generic ABS @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality CR-6.json b/resources/profiles/Creality/filament/Generic PETG @Creality CR-6.json new file mode 100644 index 000000000..adb48c13f --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality CR-6.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "filament_id": "CRG99", + "setting_id": "CRSG99_CREALITY_00", + "name": "Generic PETG @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality CR-6.json b/resources/profiles/Creality/filament/Generic PLA @Creality CR-6.json new file mode 100644 index 000000000..8ca5b1453 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality CR-6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "CRL99", + "setting_id": "CRSL99_CREALITY_00", + "name": "Generic PLA @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/fdm_filament_abs.json b/resources/profiles/Creality/filament/fdm_filament_abs.json index b9d4eeda3..4bb2f6fed 100644 --- a/resources/profiles/Creality/filament/fdm_filament_abs.json +++ b/resources/profiles/Creality/filament/fdm_filament_abs.json @@ -4,36 +4,30 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ + "cool_plate_temp": [ "105" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "105" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "105" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "105" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "105" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "105" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "105" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "105" ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], "fan_cooling_layer_time": [ "30" ], @@ -79,10 +73,7 @@ "nozzle_temperature_range_high": [ "270" ], - "slow_down_min_speed": [ - "10" - ], "slow_down_layer_time": [ "3" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/fdm_filament_common.json b/resources/profiles/Creality/filament/fdm_filament_common.json index 9f7797511..cc8379827 100644 --- a/resources/profiles/Creality/filament/fdm_filament_common.json +++ b/resources/profiles/Creality/filament/fdm_filament_common.json @@ -3,54 +3,30 @@ "name": "fdm_filament_common", "from": "system", "instantiation": "false", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "60" - ], - "hot_plate_temp" : [ - "60" - ], - "textured_plate_temp" : [ - "60" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "60" - ], - "hot_plate_temp_initial_layer" : [ - "60" - ], - "textured_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" + "cool_plate_temp": [ + "60" ], - "filament_flow_ratio": [ - "1" + "cool_plate_temp_initial_layer": [ + "60" ], - "reduce_fan_stop_start_freq": [ - "0" + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" ], "fan_cooling_layer_time": [ "60" ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], "filament_cost": [ "0" ], @@ -63,16 +39,19 @@ "filament_diameter": [ "1.75" ], + "filament_flow_ratio": [ + "1" + ], "filament_max_volumetric_speed": [ "0" ], "filament_minimal_purge_on_wipe_tower": [ "15" ], - "filament_retraction_minimum_travel": [ + "filament_retract_before_wipe": [ "nil" ], - "filament_retract_before_wipe": [ + "filament_retract_restart_extra": [ "nil" ], "filament_retract_when_changing_layer": [ @@ -81,13 +60,7 @@ "filament_retraction_length": [ "nil" ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "filament_retract_restart_extra": [ + "filament_retraction_minimum_travel": [ "nil" ], "filament_retraction_speed": [ @@ -111,34 +84,58 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" + "filament_z_hop": [ + "nil" ], - "nozzle_temperature_initial_layer": [ - "200" + "filament_z_hop_types": [ + "nil" ], "full_fan_speed_layer": [ "0" ], - "fan_max_speed": [ - "100" + "hot_plate_temp": [ + "60" ], - "fan_min_speed": [ - "35" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament gcode\n" + "hot_plate_temp_initial_layer": [ + "60" ], "nozzle_temperature": [ "200" ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "95%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], "temperature_vitrification": [ "100" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/fdm_filament_pet.json b/resources/profiles/Creality/filament/fdm_filament_pet.json index bb2323e9c..86daa453d 100644 --- a/resources/profiles/Creality/filament/fdm_filament_pet.json +++ b/resources/profiles/Creality/filament/fdm_filament_pet.json @@ -4,36 +4,24 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "0" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "80" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "80" ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "0" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "80" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "80" ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], "fan_cooling_layer_time": [ "20" ], @@ -55,15 +43,9 @@ "reduce_fan_stop_start_freq": [ "1" ], - "fan_max_speed": [ - "100" - ], "fan_min_speed": [ "20" ], - "overhang_fan_speed": [ - "100" - ], "nozzle_temperature": [ "255" ], @@ -79,4 +61,4 @@ "filament_start_gcode": [ "; filament start gcode\n" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/fdm_filament_pla.json b/resources/profiles/Creality/filament/fdm_filament_pla.json index 82c6772f3..6dc0f9c6c 100644 --- a/resources/profiles/Creality/filament/fdm_filament_pla.json +++ b/resources/profiles/Creality/filament/fdm_filament_pla.json @@ -10,57 +10,21 @@ "filament_max_volumetric_speed": [ "12" ], - "filament_type": [ - "PLA" - ], "filament_density": [ "1.24" ], "filament_cost": [ "20" ], - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "60" - ], - "hot_plate_temp" : [ - "60" - ], - "textured_plate_temp" : [ - "60" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "60" - ], - "hot_plate_temp_initial_layer" : [ - "60" - ], - "textured_plate_temp_initial_layer" : [ - "60" - ], "nozzle_temperature_initial_layer": [ "220" ], "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%" ], @@ -79,9 +43,6 @@ "nozzle_temperature_range_high": [ "230" ], - "slow_down_min_speed": [ - "10" - ], "slow_down_layer_time": [ "4" ], @@ -91,4 +52,4 @@ "filament_start_gcode": [ "; filament start gcode\n" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json index 83463b045..79f572e03 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json @@ -1,25 +1,23 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality CR-10 Max 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality CR-10 Max", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "default_print_profile": "0.20mm Standard @Creality CR10Max", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "450x0", - "450x450", - "0x450" - ], - "printable_height": "470", - "nozzle_type": "undefine", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM_CREALITY_001", + "name": "Creality CR-10 Max 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality CR-10 Max", + "default_print_profile": "0.20mm Standard @Creality CR10Max", + "extruder_type": [ + "Bowden" + ], + "printable_area": [ + "0x0", + "450x0", + "450x450", + "0x450" + ], + "printable_height": "470" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max.json b/resources/profiles/Creality/machine/Creality CR-10 Max.json index 1a49a81c8..0ce791287 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10max_buildplate_model.stl", "bed_texture": "creality_cr10max_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json index ded563e91..083f7658c 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json @@ -1,109 +1,42 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality CR-10 V2 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality CR-10 V2", - "default_print_profile": "0.20mm Standard @Creality CR10V2", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "300x0", - "300x300", - "0x300" - ], - "printable_height": "400", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.36" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "1" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 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{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_000", + "name": "Creality CR-10 V2 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality CR-10 V2", + "default_print_profile": "0.20mm Standard @Creality CR10V2", + "extruder_type": [ + "Bowden" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "400", + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "max_layer_height": [ + "0.36" + ], + "printer_settings_id": "Creality", + "retraction_length": [ + "1" + ], + "retract_length_toolchange": [ + "1" + ], + "single_extruder_multi_material": "0", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 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{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2.json b/resources/profiles/Creality/machine/Creality CR-10 V2.json index 1fde24369..1007e20c9 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10v2_buildplate_model.stl", "bed_texture": "creality_cr10v2_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json new file mode 100644 index 000000000..6d3e0b6a2 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 Max 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 Max", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.2", + "default_print_profile": "0.16mm Opitmal @Creality CR-6 0.2", + "nozzle_diameter": [ + "0.2" + ], + "printable_area": [ + "5x5", + "395x5", + "395x395", + "5x395" + ], + "printable_height": "400", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json new file mode 100644 index 000000000..bcaaccc55 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "machine", + "name": "Creality CR-6 Max 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 Max", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "default_print_profile": "0.20mm Normal @Creality CR-6", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "5x5", + "395x5", + "395x395", + "5x395" + ], + "printable_height": "400", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json new file mode 100644 index 000000000..716a2bd07 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 Max 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 Max", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.6", + "default_print_profile": "0.20mm Normal @Creality CR-6 0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "5x5", + "395x5", + "395x395", + "5x395" + ], + "printable_height": "400", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json new file mode 100644 index 000000000..ce27d0b55 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 Max 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 Max", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.8", + "default_print_profile": "0.32mm Normal @Creality CR-6 0.8", + "nozzle_diameter": [ + "0.8" + ], + "printable_area": [ + "5x5", + "395x5", + "395x395", + "5x395" + ], + "printable_height": "400", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max.json b/resources/profiles/Creality/machine/Creality CR-6 Max.json new file mode 100644 index 000000000..2f9ec6c3c --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 Max.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "Creality CR-6 Max", + "nozzle_diameter": "0.2;0.4;0.6;0.8", + "bed_texture": "creality_cr6se_buildplate_texture.png", + "family": "Creality", + "hotend_model": "", + "machine_tech": "FFF", + "model_id": "Creality_CR_6_Max", + "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json new file mode 100644 index 000000000..c2bb19d11 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 SE 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 SE", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.2", + "default_print_profile": "0.16mm Opitmal @Creality CR-6 0.2", + "nozzle_diameter": [ + "0.2" + ], + "printable_area": [ + "5x0", + "230x0", + "230x235", + "5x235" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json new file mode 100644 index 000000000..66ff95c7b --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "machine", + "name": "Creality CR-6 SE 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 SE", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "default_print_profile": "0.20mm Normal @Creality CR-6", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "5x0", + "230x0", + "230x235", + "5x235" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json new file mode 100644 index 000000000..55298c2d4 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 SE 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 SE", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.6", + "default_print_profile": "0.20mm Normal @Creality CR-6 0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "5x0", + "230x0", + "230x235", + "5x235" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json new file mode 100644 index 000000000..21ef3ffeb --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "name": "Creality CR-6 SE 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality CR-6 SE", + "default_filament_profile": [ + "Generic PLA @Creality CR-6" + ], + "printer_variant": "0.8", + "default_print_profile": "0.32mm Normal @Creality CR-6 0.8", + "nozzle_diameter": [ + "0.8" + ], + "printable_area": [ + "5x0", + "230x0", + "230x235", + "5x235" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE.json b/resources/profiles/Creality/machine/Creality CR-6 SE.json new file mode 100644 index 000000000..a87633ebd --- /dev/null +++ b/resources/profiles/Creality/machine/Creality CR-6 SE.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality CR-6 SE", + "nozzle_diameter": "0.2;0.4;0.6;0.8", + "bed_model": "creality_CR_6_SE_buildplate_model.stl", + "bed_texture": "creality_cr6se_buildplate_texture.png", + "family": "Creality", + "hotend_model": "", + "machine_tech": "FFF", + "model_id": "Creality_CR_6_SE", + "default_materials": "Generic PLA @Creality CR-6;Generic PETG @Creality CR-6;Generic ABS @Creality CR-6" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json index 783367e78..c35773e67 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json @@ -1,109 +1,39 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-3 S1 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-3 S1", - "default_print_profile": "0.20mm Standard @Creality Ender3S1", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "270", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.36" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "1" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M25", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_003", + "name": "Creality Ender-3 S1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality Ender-3 S1", + "default_print_profile": "0.20mm Standard @Creality Ender3S1", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "270", + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "max_layer_height": [ + "0.36" + ], + "printer_settings_id": "Creality", + "retraction_length": [ + "1" + ], + "retract_length_toolchange": [ + "1" + ], + "single_extruder_multi_material": "0", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M25" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json index dedb887c0..fb32b280b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json @@ -1,112 +1,51 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-3 S1 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-3 S1 Pro", - "default_print_profile": "0.20mm Standard @Creality Ender3S1Pro", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "270", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1000", - "1000" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.36" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "30" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M25", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_004", + "name": "Creality Ender-3 S1 Pro 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality Ender-3 S1 Pro", + "default_print_profile": "0.20mm Standard @Creality Ender3S1Pro", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "270", + "machine_max_acceleration_travel": [ + "1000", + "1000" + ], + "max_layer_height": [ + "0.36" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.8" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "single_extruder_multi_material": "0", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M25" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json index d536c1672..ba764bf4e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1pro_buildplate_model.stl", "bed_texture": "creality_ender3s1pro_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1.json b/resources/profiles/Creality/machine/Creality Ender-3 S1.json index 9b928a55a..a215290fc 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1_buildplate_model.stl", "bed_texture": "creality_ender3s1_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json index e36e3bf6f..2fa046a70 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json @@ -1,25 +1,21 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-3 V2 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-3 V2", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "default_print_profile": "0.20mm Standard @Creality Ender3V2", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "undefine", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM_CREALITY_002", + "name": "Creality Ender-3 V2 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality Ender-3 V2", + "extruder_type": [ + "Bowden" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2.json b/resources/profiles/Creality/machine/Creality Ender-3 V2.json index d16e301b5..12ed786c6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json index 5bf2ad400..2accbdc17 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json @@ -1,109 +1,109 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-5 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-5", - "default_print_profile": "0.20mm Standard @Creality Ender5", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "300", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "5", - "5" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "6" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_005", + "name": "Creality Ender-5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-5", + "default_print_profile": "0.20mm Standard @Creality Ender5", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "300", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "5", + "5" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "6" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json index f8542c6a7..f8f42f708 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json @@ -1,112 +1,110 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-5 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-5 Plus", - "default_print_profile": "0.20mm Standard @Creality Ender5Plus", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "350x0", - "350x350", - "0x350" - ], - "printable_height": "400", - "nozzle_type": "undefine", - "auxiliary_fan": "0", + "type": "machine", + "setting_id": "GM_CREALITY_006", + "name": "Creality Ender-5 Plus 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "nozzle_diameter": [ + "0.4" + ], + "printer_model": "Creality Ender-5 Plus", + "default_print_profile": "0.20mm Standard @Creality Ender5Plus", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "400", "machine_max_acceleration_e": [ "1000" ], - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "300", - "300" - ], - "machine_max_speed_y": [ - "300", - "300" - ], - "machine_max_speed_z": [ - "5", - "5" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "1" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", - "scan_first_layer": "0" + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "300", + "300" + ], + "machine_max_speed_y": [ + "300", + "300" + ], + "machine_max_speed_z": [ + "5", + "5" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "1" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json index dc9b34393..fb4943f07 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5plus_buildplate_model.stl", "bed_texture": "creality_ender5plus_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json index b9a4d1027..1978290cc 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json @@ -1,109 +1,109 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-5 S1 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-5 S1", - "default_print_profile": "0.20mm Standard @Creality Ender5S1", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "300", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "5", - "5" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "30" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M25", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_008", + "name": "Creality Ender-5 S1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-5 S1", + "default_print_profile": "0.20mm Standard @Creality Ender5S1", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "300", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "5", + "5" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "30" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M25", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1.json b/resources/profiles/Creality/machine/Creality Ender-5 S1.json index 32df7c281..82c9fe5c2 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s1_buildplate_model.stl", "bed_texture": "creality_ender5s1_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5.json b/resources/profiles/Creality/machine/Creality Ender-5.json index 3d8f1457c..5c1b3ee17 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5.json +++ b/resources/profiles/Creality/machine/Creality Ender-5.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5_buildplate_model.stl", "bed_texture": "creality_ender5_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json index 69a8e150b..dba4c49d3 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json @@ -1,109 +1,109 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-5S 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-5S", - "default_print_profile": "0.20mm Standard @Creality Ender5S", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "300", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "5", - "5" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_007", + "name": "Creality Ender-5S 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-5S", + "default_print_profile": "0.20mm Standard @Creality Ender5S", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "300", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "5", + "5" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-5S.json b/resources/profiles/Creality/machine/Creality Ender-5S.json index a11831493..28567c4a6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s_buildplate_model.stl", "bed_texture": "creality_ender5s_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json index 938f7ad0a..2059c8e22 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json @@ -1,109 +1,112 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality Ender-6 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality Ender-6", - "default_print_profile": "0.20mm Standard @Creality Ender6", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "250x0", - "250x250", - "0x250" - ], - "printable_height": "400", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Creality", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Creality Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_CREALITY_009", + "name": "Creality Ender-6 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-6", + "default_print_profile": "0.20mm Standard @Creality Ender6", + "nozzle_diameter": [ + "0.4" + ], + "extruder_type": [ + "Bowden" + ], + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "400", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-6.json b/resources/profiles/Creality/machine/Creality Ender-6.json index 73a56372d..b68ca46f8 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6.json +++ b/resources/profiles/Creality/machine/Creality Ender-6.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender6_buildplate_model.stl", "bed_texture": "creality_ender6_buildplate_texture.png", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/fdm_creality_common.json b/resources/profiles/Creality/machine/fdm_creality_common.json index 0e6f81814..e5f7ecdc4 100644 --- a/resources/profiles/Creality/machine/fdm_creality_common.json +++ b/resources/profiles/Creality/machine/fdm_creality_common.json @@ -1,139 +1,103 @@ { - "type": "machine", - "name": "fdm_creality_common", - "from": "system", - "instantiation": "false", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "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": "47", - "extruder_clearance_height_to_rod": "34", - "extruder_clearance_height_to_lid": "34", - "printer_settings_id": "", - "printer_technology": "FFF", - "printer_variant": "0.4", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retraction_speed": [ - "60" - ], - "deretraction_speed": [ - "40" - ], - "silent_mode": "0", - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "machine_pause_gcode": "M25 ;pause print", - "wipe": [ - "1" - ], - "default_filament_profile": [ - "Generic PLA @Creality" - ], - "default_print_profile": "0.20mm Standard @Creality", - "bed_exclude_area": [ - "0x0" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{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{min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_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", - "layer_change_gcode": "", - "scan_first_layer": "0", - "nozzle_type": "undefine", - "auxiliary_fan": "0" -} + "type": "machine", + "name": "fdm_creality_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "printer_variant": "0.4", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "max_layer_height": [ + "0.32" + ], + "extruder_clearance_radius": "47", + "extruder_clearance_height_to_rod": "34", + "extruder_clearance_height_to_lid": "34", + "retract_length_toolchange": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "single_extruder_multi_material": "1", + "default_filament_profile": [ + "Generic PLA @Creality" + ], + "default_print_profile": "0.20mm Standard @Creality Ender3V2", + "bed_exclude_area": [ + "0x0" + ], + "scan_first_layer": "0", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{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{min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_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", + "layer_change_gcode": "", + "machine_pause_gcode": "M25 ;pause print" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/fdm_machine_common.json b/resources/profiles/Creality/machine/fdm_machine_common.json index 96af9a809..2ca0db9e5 100644 --- a/resources/profiles/Creality/machine/fdm_machine_common.json +++ b/resources/profiles/Creality/machine/fdm_machine_common.json @@ -3,6 +3,10 @@ "name": "fdm_machine_common", "from": "system", "instantiation": "false", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", "printer_technology": "FFF", "deretraction_speed": [ "40" @@ -73,11 +77,7 @@ "extruder_clearance_radius": "65", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", - "nozzle_diameter": [ - "0.4" - ], "printer_settings_id": "", - "printer_variant": "0.4", "retraction_minimum_travel": [ "2" ], @@ -106,13 +106,12 @@ "60" ], "single_extruder_multi_material": "0", - "change_filament_gcode": "", "wipe": [ "1" ], "z_hop_types": "Normal Lift", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", - "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" -} + "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end", + "change_filament_gcode": "" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality CR-6 0.2.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality CR-6 0.2.json new file mode 100644 index 000000000..f33b2e8df --- /dev/null +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality CR-6 0.2.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_034", + "name": "0.08mm SuperDetail @Creality CR-6 0.2", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "bottom_shell_layers": "5", + "initial_layer_line_width": "0.2", + "initial_layer_print_height": "0.12", + "inner_wall_line_width": "0.2", + "internal_solid_infill_line_width": "0.2", + "layer_height": "0.08", + "line_width": "0.2", + "outer_wall_line_width": "0.2", + "sparse_infill_line_width": "0.2", + "support_line_width": "0.2", + "top_shell_layers": "6", + "top_surface_line_width": "0.2", + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 Max 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality CR-6.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality CR-6.json new file mode 100644 index 000000000..0a5ae6390 --- /dev/null +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality CR-6.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_000", + "name": "0.10mm HighDetail @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.3", + "inner_wall_line_width": "0.3", + "internal_solid_infill_line_width": "0.3", + "layer_height": "0.1", + "line_width": "0.3", + "outer_wall_line_width": "0.3", + "sparse_infill_line_width": "0.3", + "support_line_width": "0.3", + "top_shell_layers": "4", + "top_surface_line_width": "0.3", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality 0.2 CR-6.json b/resources/profiles/Creality/process/0.12mm Detail @Creality 0.2 CR-6.json new file mode 100644 index 000000000..fc4857122 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality 0.2 CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_048", + "name": "0.12mm Detail @Creality 0.2 CR-6", + "from": "system", + "instantiation": "true", + "inherits": "0.12mm Detail @Creality CR-6", + "bottom_shell_layers": "5", + "initial_layer_line_width": "0.2", + "initial_layer_print_height": "0.12", + "inner_wall_line_width": "0.2", + "internal_solid_infill_line_width": "0.2", + "line_width": "0.2", + "outer_wall_line_width": "0.2", + "sparse_infill_line_width": "0.2", + "support_line_width": "0.2", + "top_shell_layers": "6", + "top_surface_line_width": "0.2", + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 Max 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality 0.4 CR-6.json b/resources/profiles/Creality/process/0.12mm Detail @Creality 0.4 CR-6.json new file mode 100644 index 000000000..c71796bb7 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality 0.4 CR-6.json @@ -0,0 +1,8 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_050", + "name": "0.12mm Detail @Creality 0.4 CR-6", + "from": "system", + "instantiation": "true", + "inherits": "0.12mm Detail @Creality CR-6" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality CR-6.json b/resources/profiles/Creality/process/0.12mm Detail @Creality CR-6.json new file mode 100644 index 000000000..cd322f0e8 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality CR-6.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_001", + "name": "0.12mm Detail @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.4", + "layer_height": "0.12", + "sparse_infill_line_width": "0.4", + "top_shell_layers": "4", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json index 8e0a80a14..aeae9bc7f 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json @@ -1,108 +1,14 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_005", "name": "0.12mm Fine @Creality CR10Max", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", + "inherits": "fdm_process_creality_common", "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", "layer_height": "0.12", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", "top_shell_layers": "6", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 Max 0.4 nozzle" + "compatible_printers": [ + "Creality CR-10 Max 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json index 7fda78501..f51018af3 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json @@ -1,108 +1,14 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_006", "name": "0.12mm Fine @Creality Ender3V2", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", + "inherits": "fdm_process_creality_common", "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", "layer_height": "0.12", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", "top_shell_layers": "6", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 V2 0.4 nozzle" + "compatible_printers": [ + "Creality Ender-3 V2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json index f901ff890..c25f34b38 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json @@ -1,108 +1,14 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_008", "name": "0.15mm Optimal @Creality CR10Max", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", + "inherits": "fdm_process_creality_common", "bottom_shell_layers": "4", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", "layer_height": "0.15", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 Max 0.4 nozzle" + "compatible_printers": [ + "Creality CR-10 Max 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json index 7f26e1d90..6d07fa1d0 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json @@ -1,108 +1,14 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_009", "name": "0.15mm Optimal @Creality Ender3V2", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", + "inherits": "fdm_process_creality_common", "bottom_shell_layers": "4", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", "layer_height": "0.15", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 V2 0.4 nozzle" + "compatible_printers": [ + "Creality Ender-3 V2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Opitmal @Creality CR-6.json b/resources/profiles/Creality/process/0.16mm Opitmal @Creality CR-6.json new file mode 100644 index 000000000..3d2977a47 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Opitmal @Creality CR-6.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_002", + "name": "0.16mm Opitmal @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "bottom_shell_layers": "5", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_height": "0.16", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_shell_layers": "7", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.2.json new file mode 100644 index 000000000..fdc558076 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.2.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_052", + "name": "0.16mm Opitmal @Creality CR6 0.2 ", + "from": "system", + "instantiation": "true", + "inherits": "0.16mm Opitmal @Creality CR-6", + "bottom_shell_layers": "6", + "initial_layer_line_width": "0.2", + "initial_layer_print_height": "0.16", + "inner_wall_line_width": "0.2", + "internal_solid_infill_line_width": "0.2", + "line_width": "0.2", + "outer_wall_line_width": "0.2", + "sparse_infill_line_width": "0.2", + "support_line_width": "0.2", + "top_surface_line_width": "0.2", + "compatible_printers": [ + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 Max 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json new file mode 100644 index 000000000..e500c129a --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json @@ -0,0 +1,51 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_054", + "name": "0.16mm Optimal @Creality CR-6 0.4", + "from": "system", + "instantiation": "true", + "inherits": "0.16mm Opitmal @Creality CR-6", + "adaptive_layer_height": "1", + "brim_object_gap": "0", + "brim_width": "0", + "default_acceleration": "0", + "detect_thin_wall": "1", + "elefant_foot_compensation": "0.1", + "filename_format": "[input_filename_base].gcode", + "infill_wall_overlap": "25%", + "initial_layer_acceleration": "0", + "initial_layer_infill_speed": "35%", + "initial_layer_line_width": "0.42", + "initial_layer_speed": "35%", + "inner_wall_acceleration": "0", + "internal_solid_infill_line_width": "0", + "internal_solid_infill_speed": "50", + "ironing_type": "no ironing", + "line_width": "0.45", + "minimum_sparse_infill_area": "10", + "outer_wall_line_width": "0.45", + "outer_wall_speed": "40", + "prime_tower_width": "60", + "skirt_height": "2", + "skirt_loops": "2", + "sparse_infill_speed": "60", + "support_base_pattern_spacing": "0.2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_interface_top_layers": "3", + "support_line_width": "0.38", + "support_object_xy_distance": "60%", + "support_speed": "40", + "support_style": "grid", + "support_threshold_angle": "45", + "support_top_z_distance": "0.15", + "top_surface_acceleration": "0", + "travel_acceleration": "0", + "tree_support_branch_angle": "40", + "wall_loops": "2", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json index bf21389e5..3f0b3b66d 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality CR10V2", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_007", + "name": "0.16mm Optimal @Creality CR10V2", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json index 13a985f13..51c392f4e 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender3S1", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 S1 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_010", + "name": "0.16mm Optimal @Creality Ender3S1", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-3 S1 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json index 0a1336b9c..270e81e53 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender3S1Pro", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 S1 Pro 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_011", + "name": "0.16mm Optimal @Creality Ender3S1Pro", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-3 S1 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json index fe5711c03..8deeb7ae8 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender5", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_012", + "name": "0.16mm Optimal @Creality Ender5", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json index b6ab429ba..a1150ac0b 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender5Plus", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 Plus 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_013", + "name": "0.16mm Optimal @Creality Ender5Plus", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json index b26cb9d89..585cf8439 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender5S", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5S 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_014", + "name": "0.16mm Optimal @Creality Ender5S", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json index 9a3b288d7..29c96a6a5 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender5S1", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 S1 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_015", + "name": "0.16mm Optimal @Creality Ender5S1", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 S1 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json index 39c8022f1..7faa6972d 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender6", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-6 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_016", + "name": "0.16mm Optimal @Creality Ender6", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-6 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6 0.6.json b/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6 0.6.json new file mode 100644 index 000000000..dfcef2e15 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6 0.6.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_020", + "name": "0.20mm Normal @Creality CR-6 0.6", + "from": "system", + "instantiation": "true", + "inherits": "0.20mm Normal @Creality CR-6", + "initial_layer_line_width": "0.63", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.66", + "internal_solid_infill_line_width": "0.66", + "line_width": "0.66", + "outer_wall_line_width": "0.66", + "sparse_infill_line_width": "0.66", + "support_line_width": "0.54", + "top_surface_line_width": "0.66", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6.json b/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6.json new file mode 100644 index 000000000..6bdb91031 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Normal @Creality CR-6.json @@ -0,0 +1,13 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_017", + "name": "0.20mm Normal @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "top_shell_layers": "4", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json index 70b82a7b8..46ac8983b 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json @@ -1,108 +1,12 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_023", "name": "0.20mm Standard @Creality CR10Max", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "layer_height": "0.2", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "inherits": "fdm_process_creality_common", "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 Max 0.4 nozzle" + "compatible_printers": [ + "Creality CR-10 Max 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json index 077eeee6a..2b548aeb9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality CR10V2", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_022", + "name": "0.20mm Standard @Creality CR10V2", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json index 9a692a5f8..7c0d8d0b0 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender3S1", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 S1 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_025", + "name": "0.20mm Standard @Creality Ender3S1", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-3 S1 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json index df406a4dd..7ca6b1116 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender3S1Pro", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 S1 Pro 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_026", + "name": "0.20mm Standard @Creality Ender3S1Pro", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-3 S1 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json index b1e5c0375..baad01ed2 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json @@ -1,108 +1,12 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_024", "name": "0.20mm Standard @Creality Ender3V2", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "layer_height": "0.2", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "inherits": "fdm_process_creality_common", "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 V2 0.4 nozzle" + "compatible_printers": [ + "Creality Ender-3 V2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json index cdf7af7fc..642448d09 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender5", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_027", + "name": "0.20mm Standard @Creality Ender5", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json index 4db9d64c9..4fa820d98 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender5Plus", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 Plus 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_028", + "name": "0.20mm Standard @Creality Ender5Plus", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json index 1ed5693f0..cb723c32e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender5S", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5S 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_029", + "name": "0.20mm Standard @Creality Ender5S", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json index 801be3e54..20ca82298 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender5S1", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-5 S1 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_030", + "name": "0.20mm Standard @Creality Ender5S1", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-5 S1 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json index ce6a67330..3595f55c2 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json @@ -1,108 +1,108 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender6", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "2", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "45", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "50", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-6 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_CREALITY_031", + "name": "0.20mm Standard @Creality Ender6", + "from": "system", + "inherits": "fdm_process_creality_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "45", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "50", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Creality Ender-6 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality 0.6 CR-6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality 0.6 CR-6.json new file mode 100644 index 000000000..6328e2918 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality 0.6 CR-6.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_057", + "name": "0.24mm Draft @Creality 0.6 CR-6", + "from": "system", + "instantiation": "true", + "inherits": "0.24mm Draft @Creality CR-6", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR-6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR-6.json new file mode 100644 index 000000000..224798230 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR-6.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_003", + "name": "0.24mm Draft @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.4", + "internal_solid_infill_line_width": "0.5", + "layer_height": "0.24", + "line_width": "0.5", + "outer_wall_line_width": "0.5", + "sparse_infill_line_width": "0.4", + "support_line_width": "0.5", + "top_shell_layers": "4", + "top_surface_line_width": "0.5", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json index bd675a7ca..80541a3e7 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json @@ -1,108 +1,19 @@ { "type": "process", - "setting_id": "GP004", +<<<<<<<< HEAD:resources/profiles/Tronxy/process/0.24mm Draft @Tronxy.json + "setting_id": "GP005", + "name": "0.24mm Draft @Tronxy", +======== + "setting_id": "GP_CREALITY_032", "name": "0.24mm Draft @Creality CR10Max", +>>>>>>>> BS/v1.7.2:resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", + "inherits": "fdm_process_common", "layer_height": "0.24", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", "top_surface_line_width": "0.45", "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality CR-10 Max 0.4 nozzle" + "compatible_printers": [ + "Creality CR-10 Max 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json index dfc051573..6066c20da 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json @@ -1,108 +1,14 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_CREALITY_033", "name": "0.24mm Draft @Creality Ender3V2", "from": "system", - "inherits": "fdm_process_creality_common", "instantiation": "true", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", + "inherits": "fdm_process_creality_common", "layer_height": "0.24", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", "top_surface_line_width": "0.45", "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Creality Ender-3 V2 0.4 nozzle" + "compatible_printers": [ + "Creality Ender-3 V2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality CR-6.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality CR-6.json new file mode 100644 index 000000000..f6e74897b --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_040", + "name": "0.24mm Optimal @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.24", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality 0.6 CR-6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality 0.6 CR-6.json new file mode 100644 index 000000000..61ead03f9 --- /dev/null +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality 0.6 CR-6.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_059", + "name": "0.28mm SuperDraft @Creality 0.6 CR-6", + "from": "system", + "instantiation": "true", + "inherits": "0.28mm SuperDraft @Creality CR-6", + "initial_layer_line_width": "0.6", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality CR-6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality CR-6.json new file mode 100644 index 000000000..aeebe3880 --- /dev/null +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality CR-6.json @@ -0,0 +1,18 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_004", + "name": "0.28mm SuperDraft @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.28", + "inner_wall_line_width": "0.4", + "layer_height": "0.28", + "sparse_infill_line_width": "0.4", + "top_shell_layers": "4", + "compatible_printers": [ + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Chunky @Creality CR-6 0.6.json b/resources/profiles/Creality/process/0.32mm Chunky @Creality CR-6 0.6.json new file mode 100644 index 000000000..c21634049 --- /dev/null +++ b/resources/profiles/Creality/process/0.32mm Chunky @Creality CR-6 0.6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_037", + "name": "0.32mm Chunky @Creality CR-6 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.32", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_height": "0.32", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_shell_layers": "4", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Normal @Creality CR-6 0.8.json b/resources/profiles/Creality/process/0.32mm Normal @Creality CR-6 0.8.json new file mode 100644 index 000000000..d23f85132 --- /dev/null +++ b/resources/profiles/Creality/process/0.32mm Normal @Creality CR-6 0.8.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_041", + "name": "0.32mm Normal @Creality CR-6 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.32", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.32", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm SuperChunky @Creality CR-6.json b/resources/profiles/Creality/process/0.36mm SuperChunky @Creality CR-6.json new file mode 100644 index 000000000..805f5d824 --- /dev/null +++ b/resources/profiles/Creality/process/0.36mm SuperChunky @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_038", + "name": "0.36mm SuperChunky @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_height": "0.36", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_shell_layers": "4", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.40mm Draft @Creality CR-6.json b/resources/profiles/Creality/process/0.40mm Draft @Creality CR-6.json new file mode 100644 index 000000000..d4985e26c --- /dev/null +++ b/resources/profiles/Creality/process/0.40mm Draft @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_042", + "name": "0.40mm Draft @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.4", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.44mm SuperExtraChunky @Creality CR-6.json b/resources/profiles/Creality/process/0.44mm SuperExtraChunky @Creality CR-6.json new file mode 100644 index 000000000..21774436a --- /dev/null +++ b/resources/profiles/Creality/process/0.44mm SuperExtraChunky @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_039", + "name": "0.44mm SuperExtraChunky @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_height": "0.44", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_shell_layers": "4", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 Max 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Chunky @Creality CR-6.json b/resources/profiles/Creality/process/0.48mm Chunky @Creality CR-6.json new file mode 100644 index 000000000..841d0bf99 --- /dev/null +++ b/resources/profiles/Creality/process/0.48mm Chunky @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_043", + "name": "0.48mm Chunky @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.48", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.4", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality CR-6.json b/resources/profiles/Creality/process/0.48mm Draft @Creality CR-6.json new file mode 100644 index 000000000..ef9979244 --- /dev/null +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_046", + "name": "0.48mm Draft @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.48", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.48", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.56mm SuperChunky @Creality CR-6.json b/resources/profiles/Creality/process/0.56mm SuperChunky @Creality CR-6.json new file mode 100644 index 000000000..0400416ed --- /dev/null +++ b/resources/profiles/Creality/process/0.56mm SuperChunky @Creality CR-6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP_CREALITY_047", + "name": "0.56mm SuperChunky @Creality CR-6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_creality_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.56", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/fdm_process_common.json b/resources/profiles/Creality/process/fdm_process_common.json index 7398bcd48..9d217cbf8 100644 --- a/resources/profiles/Creality/process/fdm_process_common.json +++ b/resources/profiles/Creality/process/fdm_process_common.json @@ -8,7 +8,6 @@ "bridge_flow": "0.95", "bridge_speed": "25", "brim_width": "5", - "compatible_printers": [], "print_sequence": "by layer", "default_acceleration": "10000", "bridge_no_support": "0", @@ -66,5 +65,6 @@ "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0" -} + "xy_contour_compensation": "0", + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/fdm_process_creality_common.json b/resources/profiles/Creality/process/fdm_process_creality_common.json index c652dd296..61e0a9749 100644 --- a/resources/profiles/Creality/process/fdm_process_creality_common.json +++ b/resources/profiles/Creality/process/fdm_process_creality_common.json @@ -4,39 +4,24 @@ "from": "system", "instantiation": "false", "inherits": "fdm_process_common", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", - "print_sequence": "by layer", "default_acceleration": "500", "top_surface_acceleration": "500", - "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", "infill_wall_overlap": "23%", - "interface_shells": "0", "ironing_flow": "15%", "ironing_spacing": "0.1", "ironing_speed": "15", @@ -49,56 +34,31 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", "seam_position": "aligned", - "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "1", "minimum_sparse_infill_area": "15", "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": "default", - "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", - "support_filament": "0", "support_line_width": "0.4", - "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": "150", "support_threshold_angle": "30", "support_object_xy_distance": "0.35", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", - "detect_thin_wall": "0", "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", "initial_layer_speed": "15", "initial_layer_infill_speed": "20", "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", "travel_speed": "150", - "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0" -} + "prime_tower_width": "35" +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PETG.json b/resources/profiles/Custom/filament/My Generic PETG.json index 35c9957cd..9027eac7b 100644 --- a/resources/profiles/Custom/filament/My Generic PETG.json +++ b/resources/profiles/Custom/filament/My Generic PETG.json @@ -1,17 +1,11 @@ { "type": "filament", "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "My Generic PETG", + "setting_id": "GFSG99_CREALITY_00", + "name": "Generic PETG @Creality", "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" ], @@ -27,23 +21,22 @@ "fan_min_speed": [ "40" ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], "filament_flow_ratio": [ "0.95" ], "filament_max_volumetric_speed": [ "10" ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle" + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA.json b/resources/profiles/Custom/filament/My Generic PLA.json index 0c9dcc414..55a0155f3 100644 --- a/resources/profiles/Custom/filament/My Generic PLA.json +++ b/resources/profiles/Custom/filament/My Generic PLA.json @@ -1,22 +1,27 @@ { "type": "filament", "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "My Generic PLA", + "setting_id": "GFSL99_CREALITY_00", + "name": "Generic PLA @Creality", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", "filament_flow_ratio": [ "0.98" ], - "filament_max_volumetric_speed": [ - "12" - ], "slow_down_layer_time": [ "8" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle" + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index aa0f884af..890f5f72a 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,38 +1,38 @@ { "name": "Elegoo", - "version": "01.06.00.00", + "version": "01.07.00.01", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ - { + { "name": "Elegoo Neptune", "sub_path": "machine/Elegoo Neptune.json" }, - { + { "name": "Elegoo Neptune X", "sub_path": "machine/Elegoo Neptune X.json" }, - { + { "name": "Elegoo Neptune 2", "sub_path": "machine/Elegoo Neptune 2.json" }, - { + { "name": "Elegoo Neptune 2S", "sub_path": "machine/Elegoo Neptune 2S.json" }, - { + { "name": "Elegoo Neptune 2D", "sub_path": "machine/Elegoo Neptune 2D.json" }, - { + { "name": "Elegoo Neptune 3", "sub_path": "machine/Elegoo Neptune 3.json" }, - { + { "name": "Elegoo Neptune 3 Pro", "sub_path": "machine/Elegoo Neptune 3 Pro.json" }, - { + { "name": "Elegoo Neptune 3 Plus", "sub_path": "machine/Elegoo Neptune 3 Plus.json" }, @@ -50,219 +50,219 @@ "name": "fdm_process_elegoo_common", "sub_path": "process/fdm_process_elegoo_common.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo NeptuneX", "sub_path": "process/0.08mm Extra Fine @Elegoo NeptuneX.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune2", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune2.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune2S", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune2S.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune2D", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune2D.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune3", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune3.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune3Pro", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune3Pro.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune3Plus", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune3Plus.json" }, - { + { "name": "0.08mm Extra Fine @Elegoo Neptune3Max", "sub_path": "process/0.08mm Extra Fine @Elegoo Neptune3Max.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune", "sub_path": "process/0.12mm Fine @Elegoo Neptune.json" }, - { + { "name": "0.12mm Fine @Elegoo NeptuneX", "sub_path": "process/0.12mm Fine @Elegoo NeptuneX.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune2", "sub_path": "process/0.12mm Fine @Elegoo Neptune2.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune2S", "sub_path": "process/0.12mm Fine @Elegoo Neptune2S.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune2D", "sub_path": "process/0.12mm Fine @Elegoo Neptune2D.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune3", "sub_path": "process/0.12mm Fine @Elegoo Neptune3.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune3Pro", "sub_path": "process/0.12mm Fine @Elegoo Neptune3Pro.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune3Plus", "sub_path": "process/0.12mm Fine @Elegoo Neptune3Plus.json" }, - { + { "name": "0.12mm Fine @Elegoo Neptune3Max", "sub_path": "process/0.12mm Fine @Elegoo Neptune3Max.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune", "sub_path": "process/0.16mm Optimal @Elegoo Neptune.json" }, - { + { "name": "0.16mm Optimal @Elegoo NeptuneX", "sub_path": "process/0.16mm Optimal @Elegoo NeptuneX.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune2", "sub_path": "process/0.16mm Optimal @Elegoo Neptune2.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune2S", "sub_path": "process/0.16mm Optimal @Elegoo Neptune2S.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune2D", "sub_path": "process/0.16mm Optimal @Elegoo Neptune2D.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune3", "sub_path": "process/0.16mm Optimal @Elegoo Neptune3.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune3Pro", "sub_path": "process/0.16mm Optimal @Elegoo Neptune3Pro.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune3Plus", "sub_path": "process/0.16mm Optimal @Elegoo Neptune3Plus.json" }, - { + { "name": "0.16mm Optimal @Elegoo Neptune3Max", "sub_path": "process/0.16mm Optimal @Elegoo Neptune3Max.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune", "sub_path": "process/0.20mm Standard @Elegoo Neptune.json" }, - { + { "name": "0.20mm Standard @Elegoo NeptuneX", "sub_path": "process/0.20mm Standard @Elegoo NeptuneX.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune2", "sub_path": "process/0.20mm Standard @Elegoo Neptune2.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune2S", "sub_path": "process/0.20mm Standard @Elegoo Neptune2S.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune2D", "sub_path": "process/0.20mm Standard @Elegoo Neptune2D.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune3", "sub_path": "process/0.20mm Standard @Elegoo Neptune3.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune3Pro", "sub_path": "process/0.20mm Standard @Elegoo Neptune3Pro.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune3Plus", "sub_path": "process/0.20mm Standard @Elegoo Neptune3Plus.json" }, - { + { "name": "0.20mm Standard @Elegoo Neptune3Max", "sub_path": "process/0.20mm Standard @Elegoo Neptune3Max.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune", "sub_path": "process/0.24mm Draft @Elegoo Neptune.json" }, - { + { "name": "0.24mm Draft @Elegoo NeptuneX", "sub_path": "process/0.24mm Draft @Elegoo NeptuneX.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune2", "sub_path": "process/0.24mm Draft @Elegoo Neptune2.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune2S", "sub_path": "process/0.24mm Draft @Elegoo Neptune2S.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune2D", "sub_path": "process/0.24mm Draft @Elegoo Neptune2D.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune3", "sub_path": "process/0.24mm Draft @Elegoo Neptune3.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune3Pro", "sub_path": "process/0.24mm Draft @Elegoo Neptune3Pro.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune3Plus", "sub_path": "process/0.24mm Draft @Elegoo Neptune3Plus.json" }, - { + { "name": "0.24mm Draft @Elegoo Neptune3Max", "sub_path": "process/0.24mm Draft @Elegoo Neptune3Max.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo NeptuneX", "sub_path": "process/0.28mm Extra Draft @Elegoo NeptuneX.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune2", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune2.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune2S", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune2S.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune2D", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune2D.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune3", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune3.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune3Pro", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune3Pro.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune3Plus", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune3Plus.json" }, - { + { "name": "0.28mm Extra Draft @Elegoo Neptune3Max", "sub_path": "process/0.28mm Extra Draft @Elegoo Neptune3Max.json" } @@ -280,21 +280,21 @@ "name": "fdm_filament_pet", "sub_path": "filament/fdm_filament_pet.json" }, - { + { "name": "fdm_filament_pla", "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Elegoo Generic ABS", - "sub_path": "filament/Elegoo Generic ABS.json" + "name": "Generic ABS @Elegoo", + "sub_path": "filament/Generic ABS @Elegoo.json" }, { - "name": "Elegoo Generic PETG", - "sub_path": "filament/Elegoo Generic PETG.json" + "name": "Generic PETG @Elegoo", + "sub_path": "filament/Generic PETG @Elegoo.json" }, { - "name": "Elegoo Generic PLA", - "sub_path": "filament/Elegoo Generic PLA.json" + "name": "Generic PLA @Elegoo", + "sub_path": "filament/Generic PLA @Elegoo.json" } ], "machine_list": [ @@ -306,35 +306,35 @@ "name": "fdm_elegoo_common", "sub_path": "machine/fdm_elegoo_common.json" }, - { + { "name": "Elegoo Neptune 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune X 0.4 nozzle", "sub_path": "machine/Elegoo Neptune X 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 2 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 2 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 2S 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 2S 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 2D 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 2D 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 3 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 3 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 3 Pro 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 3 Pro 0.4 nozzle.json" }, - { + { "name": "Elegoo Neptune 3 Plus 0.4 nozzle", "sub_path": "machine/Elegoo Neptune 3 Plus 0.4 nozzle.json" }, diff --git a/resources/profiles/Elegoo/filament/Generic ABS @Elegoo.json b/resources/profiles/Elegoo/filament/Generic ABS @Elegoo.json new file mode 100644 index 000000000..e1a30614d --- /dev/null +++ b/resources/profiles/Elegoo/filament/Generic ABS @Elegoo.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_Elegoo_00", + "name": "Generic ABS @Elegoo", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "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 0.4 nozzle", + "Elegoo Neptune 3 Pro 0.4 nozzle", + "Elegoo Neptune 3 Plus 0.4 nozzle", + "Elegoo Neptune 3 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/Generic PETG @Elegoo.json b/resources/profiles/Elegoo/filament/Generic PETG @Elegoo.json new file mode 100644 index 000000000..1f25d5b07 --- /dev/null +++ b/resources/profiles/Elegoo/filament/Generic PETG @Elegoo.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_Elegoo_00", + "name": "Generic PETG @Elegoo", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "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 0.4 nozzle", + "Elegoo Neptune 3 Pro 0.4 nozzle", + "Elegoo Neptune 3 Plus 0.4 nozzle", + "Elegoo Neptune 3 Max 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/Generic PLA @Elegoo.json b/resources/profiles/Elegoo/filament/Generic PLA @Elegoo.json new file mode 100644 index 000000000..9dce08376 --- /dev/null +++ b/resources/profiles/Elegoo/filament/Generic PLA @Elegoo.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_Elegoo_00", + "name": "Generic PLA @Elegoo", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/fdm_filament_common.json b/resources/profiles/Elegoo/filament/fdm_filament_common.json index 9f7797511..c48b23ada 100644 --- a/resources/profiles/Elegoo/filament/fdm_filament_common.json +++ b/resources/profiles/Elegoo/filament/fdm_filament_common.json @@ -111,9 +111,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json index d0e7069db..c66f638ef 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune", - "default_print_profile": "0.20mm Standard @Elegoo Neptune", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "210x0", - "210x210", - "0x210" - ], - "printable_height": "200", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "60" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_000", + "name": "Elegoo Neptune 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune", + "default_print_profile": "0.20mm Standard @Elegoo Neptune", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "210x0", + "210x210", + "0x210" + ], + "printable_height": "200", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "60" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json index 1829a28c7..d86500970 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 2 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 2", - "default_print_profile": "0.20mm Standard @Elegoo Neptune2", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "60" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_001", + "name": "Elegoo Neptune 2 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 2", + "default_print_profile": "0.20mm Standard @Elegoo Neptune2", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "60" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2.json index 643e719f3..ef918540e 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune2_buildplate_model.stl", "bed_texture": "elegoo_neptune2_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2D 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2D 0.4 nozzle.json index bba756bc3..87d863748 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2D 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2D 0.4 nozzle.json @@ -1,131 +1,131 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 2D 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 2D", - "default_print_profile": "0.20mm Standard @Elegoo Neptune2D", + "type": "machine", + "setting_id": "GM_Elegoo_002", + "name": "Elegoo Neptune 2D 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 2D", + "default_print_profile": "0.20mm Standard @Elegoo Neptune2D", "extruder_colour": [ "#FCE94F", - "#FCE94F" + "#FCE94F" ], "extruder_offset": [ "0x0", - "0x0" + "0x0" ], - "nozzle_diameter": [ - "0.4", - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32", - "0.32" - ], - "min_layer_height": [ - "0.08", - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "2", - "2" - ], - "retract_before_wipe": [ - "70%", - "70%" - ], - "retraction_length": [ - "5", - "5" - ], - "retraction_speed": [ - "60", - "60" - ], - "retract_length_toolchange": [ - "1", - "1" - ], - "deretraction_speed": [ - "40", - "40" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "T[initial_tool] ; set active extruder\nM413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; auto bed levelling - remove ; at beginning of line to enable\n;M420 S1 ; enable mesh - remove ; at beginning of line to enable\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240 ; move down to prime nozzle\nG92 E0 ; reset extruder\nG1 E90 ; load filament\nG92 E0 ; reset extruder\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000 ; move over for second prime line\nG92 E0 ; reset extruder\nG1 Y10 E10 F1200 ; prime the nozzle\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\nG1 E-80 F2000 ; unload filament\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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "nozzle_diameter": [ + "0.4", + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32", + "0.32" + ], + "min_layer_height": [ + "0.08", + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "2", + "2" + ], + "retract_before_wipe": [ + "70%", + "70%" + ], + "retraction_length": [ + "5", + "5" + ], + "retraction_speed": [ + "60", + "60" + ], + "retract_length_toolchange": [ + "1", + "1" + ], + "deretraction_speed": [ + "40", + "40" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "T[initial_tool] ; set active extruder\nM413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; auto bed levelling - remove ; at beginning of line to enable\n;M420 S1 ; enable mesh - remove ; at beginning of line to enable\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240 ; move down to prime nozzle\nG92 E0 ; reset extruder\nG1 E90 ; load filament\nG92 E0 ; reset extruder\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000 ; move over for second prime line\nG92 E0 ; reset extruder\nG1 Y10 E10 F1200 ; prime the nozzle\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\nG1 E-80 F2000 ; unload filament\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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2D.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2D.json index 2527c7d33..bdf272015 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2D.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2D.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune2d_buildplate_model.stl", "bed_texture": "elegoo_neptune2d_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json index f1f9bb254..1805e5e51 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 2S 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 2S", - "default_print_profile": "0.20mm Standard @Elegoo Neptune2S", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "60" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_003", + "name": "Elegoo Neptune 2S 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 2S", + "default_print_profile": "0.20mm Standard @Elegoo Neptune2S", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "60" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S.json index dd733b4ab..268506791 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune2s_buildplate_model.stl", "bed_texture": "elegoo_neptune2s_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json index e948cdf34..f278c7f4e 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json @@ -1,111 +1,111 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 3 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 3", - "default_print_profile": "0.20mm Standard @Elegoo Neptune3", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "280", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "2" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_008", + "name": "Elegoo Neptune 3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 3", + "default_print_profile": "0.20mm Standard @Elegoo Neptune3", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "280", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "2" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json index 7976ac0c9..84f5594d2 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 3 Max 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 3 Max", - "default_print_profile": "0.20mm Standard @Elegoo Neptune3Max", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "420x0", - "420x420", - "0x420" - ], - "printable_height": "500", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "25" - ], - "retract_length_toolchange": [ - "2" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_004", + "name": "Elegoo Neptune 3 Max 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 3 Max", + "default_print_profile": "0.20mm Standard @Elegoo Neptune3Max", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "420x0", + "420x420", + "0x420" + ], + "printable_height": "500", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "25" + ], + "retract_length_toolchange": [ + "2" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json index a7c765272..0dc38baff 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune3max_buildplate_model.stl", "bed_texture": "elegoo_neptune3max_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json index e6b96b2bf..2398849d1 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 3 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 3 Plus", - "default_print_profile": "0.20mm Standard @Elegoo Neptune3Plus", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "320x0", - "320x320", - "0x320" - ], - "printable_height": "400", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "25" - ], - "retract_length_toolchange": [ - "2" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_005", + "name": "Elegoo Neptune 3 Plus 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 3 Plus", + "default_print_profile": "0.20mm Standard @Elegoo Neptune3Plus", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "320x0", + "320x320", + "0x320" + ], + "printable_height": "400", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "25" + ], + "retract_length_toolchange": [ + "2" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus.json index 54ef2d766..053c28d6b 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune3plus_buildplate_model.stl", "bed_texture": "elegoo_neptune3plus_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json index 84b108421..b724e2b14 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune 3 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune 3 Pro", - "default_print_profile": "0.20mm Standard @Elegoo Neptune3Pro", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "225x0", - "225x225", - "0x225" - ], - "printable_height": "280", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "25" - ], - "retract_length_toolchange": [ - "2" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_006", + "name": "Elegoo Neptune 3 Pro 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune 3 Pro", + "default_print_profile": "0.20mm Standard @Elegoo Neptune3Pro", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "225x0", + "225x225", + "0x225" + ], + "printable_height": "280", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "25" + ], + "retract_length_toolchange": [ + "2" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro.json index 8b6613f70..dacde968e 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune3pro_buildplate_model.stl", "bed_texture": "elegoo_neptune3pro_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3.json index 1257d6f8a..e1b65281b 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune3_buildplate_model.stl", "bed_texture": "elegoo_neptune3_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json index 25055f6b2..511e7f11d 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json @@ -1,114 +1,114 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Elegoo Neptune X 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_elegoo_common", - "printer_model": "Elegoo Neptune X", - "default_print_profile": "0.20mm Standard @Elegoo NeptuneX", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Elegoo", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2.5" - ], - "retraction_speed": [ - "60" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Elegoo Generic PLA" - ], - "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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 < printable_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", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Elegoo_007", + "name": "Elegoo Neptune X 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_elegoo_common", + "printer_model": "Elegoo Neptune X", + "default_print_profile": "0.20mm Standard @Elegoo NeptuneX", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Elegoo", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2.5" + ], + "retraction_speed": [ + "60" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Elegoo" + ], + "machine_start_gcode": "M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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 < printable_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", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0\n;[layer_z]\n\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune X.json b/resources/profiles/Elegoo/machine/Elegoo Neptune X.json index 1157ca832..27180fdb1 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune X.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune X.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptunex_buildplate_model.stl", "bed_texture": "elegoo_neptunex_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune.json b/resources/profiles/Elegoo/machine/Elegoo Neptune.json index 48c02f137..4cb99e3c2 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_neptune_buildplate_model.stl", "bed_texture": "elegoo_neptune_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo Generic ABS;Elegoo Generic PETG;Elegoo Generic PLA" + "default_materials": "Generic ABS @Elegoo;Generic PETG @Elegoo;Generic PLA @Elegoo" } diff --git a/resources/profiles/Elegoo/machine/fdm_machine_common.json b/resources/profiles/Elegoo/machine/fdm_machine_common.json index 41b183216..a5e460ac0 100644 --- a/resources/profiles/Elegoo/machine/fdm_machine_common.json +++ b/resources/profiles/Elegoo/machine/fdm_machine_common.json @@ -112,7 +112,6 @@ ], "z_lift_type": "NormalLift", "default_print_profile": "", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", "machine_end_gcode": "" } diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune.json index 539343e9f..ebb550d6c 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_000", + "name": "0.08mm Extra Fine @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2.json index d1a3bb059..5e56475bc 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_001", + "name": "0.08mm Extra Fine @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2D.json index 63200f767..ef9ad5554 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_002", + "name": "0.08mm Extra Fine @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2S.json index dfef27e15..03985ed60 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_003", + "name": "0.08mm Extra Fine @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3.json index 739cef808..5f54b8c14 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_004", + "name": "0.08mm Extra Fine @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Max.json index aaade1da5..1fb06ada6 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_005", + "name": "0.08mm Extra Fine @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Plus.json index 10550956d..ade0ea063 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_006", + "name": "0.08mm Extra Fine @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Pro.json index 4d1d16f32..554ee6c0b 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_007", + "name": "0.08mm Extra Fine @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo NeptuneX.json index e92801bf1..5314196a1 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Extra Fine @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.08", + "type": "process", + "setting_id": "GP_Elegoo_008", + "name": "0.08mm Extra Fine @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.08", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json index 6af882132..07a102fc3 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_009", + "name": "0.12mm Fine @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json index 8d281ef78..2a8b83521 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_010", + "name": "0.12mm Fine @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json index 6edc7d035..9b03df570 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_011", + "name": "0.12mm Fine @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json index f43bfe5a1..56ba8e9d9 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_012", + "name": "0.12mm Fine @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json index bf3266486..1b0a9bfbf 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_013", + "name": "0.12mm Fine @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json index 18d409bb3..1e898232b 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_014", + "name": "0.12mm Fine @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json index 1995dce6d..30defd723 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_015", + "name": "0.12mm Fine @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json index bd61f8bc8..30f5fe999 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_016", + "name": "0.12mm Fine @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json index eac0b7809..4867233be 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.12", + "type": "process", + "setting_id": "GP_Elegoo_017", + "name": "0.12mm Fine @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.12", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json index 3794fd2e8..b035b00bf 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_018", + "name": "0.16mm Optimal @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json index cf79ff16a..b29588253 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_019", + "name": "0.16mm Optimal @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json index 3ab4f0385..30668492a 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_020", + "name": "0.16mm Optimal @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json index fb2a9fea7..9bd9a71d6 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_021", + "name": "0.16mm Optimal @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json index 90e2e6e9e..3ee96a775 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_022", + "name": "0.16mm Optimal @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json index 1da848e6f..090f0561c 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_023", + "name": "0.16mm Optimal @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json index cbfaca047..1ca5952fd 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_024", + "name": "0.16mm Optimal @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json index 4695d5fa0..007e31cf7 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_025", + "name": "0.16mm Optimal @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json index d13dfe8f3..00bedc827 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.16", + "type": "process", + "setting_id": "GP_Elegoo_026", + "name": "0.16mm Optimal @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.16", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json index 9669986b2..3303f6327 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_027", + "name": "0.20mm Standard @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json index cb9a62acd..0719f1fc4 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_028", + "name": "0.20mm Standard @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json index 33aab6f6a..1f1563f71 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_029", + "name": "0.20mm Standard @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json index 9ad7f5483..5c562a5db 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_030", + "name": "0.20mm Standard @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json index af0576a51..1ac920650 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_031", + "name": "0.20mm Standard @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json index ec157e084..f7b021e49 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_032", + "name": "0.20mm Standard @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json index cde6fa9f1..356c034aa 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_033", + "name": "0.20mm Standard @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json index adb50086e..4cbdc37fc 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_034", + "name": "0.20mm Standard @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json index d5749bce1..3a621c890 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.2", + "type": "process", + "setting_id": "GP_Elegoo_035", + "name": "0.20mm Standard @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.2", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json index b3278427a..dbe4b87b0 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_036", + "name": "0.24mm Draft @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json index 692951a97..f92dc2c56 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_037", + "name": "0.24mm Draft @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json index 92035a3fc..d90631574 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_038", + "name": "0.24mm Draft @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json index 53ea928c6..3428a87a5 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_039", + "name": "0.24mm Draft @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json index df072e350..d11eab15f 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_040", + "name": "0.24mm Draft @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json index d465779d5..5b7468d7b 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_041", + "name": "0.24mm Draft @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json index b3a1023b9..d1a0cf622 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_042", + "name": "0.24mm Draft @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json index b270e5b30..f28dec8d5 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_043", + "name": "0.24mm Draft @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json index b9a14acad..45aaaae3e 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.24", + "type": "process", + "setting_id": "GP_Elegoo_044", + "name": "0.24mm Draft @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.24", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune.json index a5c5dd2c9..ae690c5dd 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_045", + "name": "0.28mm Extra Draft @Elegoo Neptune", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2.json index 2a67da73c..6665d8d51 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune2", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_046", + "name": "0.28mm Extra Draft @Elegoo Neptune2", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2D.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2D.json index 7e7a9062a..96b0b50ae 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2D.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune2D", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_047", + "name": "0.28mm Extra Draft @Elegoo Neptune2D", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2D 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2D 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2S.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2S.json index 4342f9aec..3ecb5c905 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune2S.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune2S", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_048", + "name": "0.28mm Extra Draft @Elegoo Neptune2S", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 2S 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 2S 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3.json index 9bb848aee..626ffb66a 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune3", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_049", + "name": "0.28mm Extra Draft @Elegoo Neptune3", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Max.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Max.json index d8d19449f..12dd44cbe 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Max.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune3Max", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_050", + "name": "0.28mm Extra Draft @Elegoo Neptune3Max", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Max 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Plus.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Plus.json index ac002f95d..f3b8d387f 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Plus.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune3Plus", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_051", + "name": "0.28mm Extra Draft @Elegoo Neptune3Plus", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Plus 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Pro.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Pro.json index 4c6529a26..32b4da5c6 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune3Pro.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo Neptune3Pro", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_052", + "name": "0.28mm Extra Draft @Elegoo Neptune3Pro", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune 3 Pro 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune 3 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo NeptuneX.json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo NeptuneX.json index 292d88f24..2764033fe 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo NeptuneX.json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.28mm Extra Draft @Elegoo NeptuneX", - "from": "system", - "inherits": "fdm_process_elegoo_common", - "instantiation": "true", - "layer_height": "0.28", + "type": "process", + "setting_id": "GP_Elegoo_053", + "name": "0.28mm Extra Draft @Elegoo NeptuneX", + "from": "system", + "inherits": "fdm_process_elegoo_common", + "instantiation": "true", + "layer_height": "0.28", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", @@ -102,7 +102,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [ - "Elegoo Neptune X 0.4 nozzle" - ] + "compatible_printers": [ + "Elegoo Neptune X 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 5eda29198..f73ea1535 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "01.06.04.00", + "version": "01.07.00.01", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -32,77 +32,78 @@ "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_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.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_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" }, { "name": "fdm_filament_pva", "sub_path": "filament/fdm_filament_pva.json" }, { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Prusa Generic PLA", - "sub_path": "filament/Prusa Generic PLA.json" + "name": "Generic ABS @Prusa", + "sub_path": "filament/Generic ABS @Prusa.json" }, { - "name": "Prusa Generic PLA-CF", - "sub_path": "filament/Prusa Generic PLA-CF.json" + "name": "Generic ASA @Prusa", + "sub_path": "filament/Generic ASA @Prusa.json" }, { - "name": "Prusa Generic PETG", - "sub_path": "filament/Prusa Generic PETG.json" + "name": "Generic PA @Prusa", + "sub_path": "filament/Generic PA @Prusa.json" }, { - "name": "Prusa Generic ABS", - "sub_path": "filament/Prusa Generic ABS.json" + "name": "Generic PA-CF @Prusa", + "sub_path": "filament/Generic PA-CF @Prusa.json" }, { - "name": "Prusa Generic TPU", - "sub_path": "filament/Prusa Generic TPU.json" + "name": "Generic PC @Prusa", + "sub_path": "filament/Generic PC @Prusa.json" }, { - "name": "Prusa Generic ASA", - "sub_path": "filament/Prusa Generic ASA.json" + "name": "Generic PETG @Prusa", + "sub_path": "filament/Generic PETG @Prusa.json" }, { - "name": "Prusa Generic PC", - "sub_path": "filament/Prusa Generic PC.json" + "name": "Generic PLA @Prusa", + "sub_path": "filament/Generic PLA @Prusa.json" }, { - "name": "Prusa Generic PVA", - "sub_path": "filament/Prusa Generic PVA.json" + "name": "Generic PLA-CF @Prusa", + "sub_path": "filament/Generic PLA-CF @Prusa.json" }, { - "name": "Prusa Generic PA", - "sub_path": "filament/Prusa Generic PA.json" + "name": "Generic PVA @Prusa", + "sub_path": "filament/Generic PVA @Prusa.json" }, { - "name": "Prusa Generic PA-CF", - "sub_path": "filament/Prusa Generic PA-CF.json" + "name": "Generic TPU @Prusa", + "sub_path": "filament/Generic TPU @Prusa.json" } ], "machine_list": [ diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json new file mode 100644 index 000000000..9a47d7e91 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_PRUSA_00", + "name": "Generic ABS @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json new file mode 100644 index 000000000..fd86abbdc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSB98_PRUSA_00", + "name": "Generic ASA @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa.json b/resources/profiles/Prusa/filament/Generic PA @Prusa.json new file mode 100644 index 000000000..4da98e6e9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSN99_PRUSA_00", + "name": "Generic PA @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json new file mode 100644 index 000000000..6ec7f17e8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSN98_PRUSA_00", + "name": "Generic PA-CF @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa.json b/resources/profiles/Prusa/filament/Generic PC @Prusa.json new file mode 100644 index 000000000..6e4969b14 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99_PRUSA_00", + "name": "Generic PC @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json new file mode 100644 index 000000000..7eae2cac3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_PRUSA_00", + "name": "Generic PETG @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json new file mode 100644 index 000000000..3e93a8060 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_PRUSA_00", + "name": "Generic PLA @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json new file mode 100644 index 000000000..1ffd6c2d1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98_PRUSA_00", + "name": "Generic PLA-CF @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json new file mode 100644 index 000000000..cc6cc5547 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSS99_PRUSA_00", + "name": "Generic PVA @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json new file mode 100644 index 000000000..b0b161a21 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSU99_PRUSA_00", + "name": "Generic TPU @Prusa", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Prusa MK3S 0.4 nozzle", + "Prusa MINI 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/fdm_filament_common.json b/resources/profiles/Prusa/filament/fdm_filament_common.json index 5212d445a..c0d4f6a72 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_common.json +++ b/resources/profiles/Prusa/filament/fdm_filament_common.json @@ -102,9 +102,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json index fe10604e7..63cf0c416 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json @@ -1,15 +1,18 @@ { "type": "machine", - "setting_id": "GM003", + "setting_id": "GM_PRUSA_000", "name": "Prusa MINI 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Prusa MINI", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI", + "extruder_type": [ + "Bowden" + ], "nozzle_diameter": [ "0.4" ], diff --git a/resources/profiles/Prusa/machine/Prusa MINI.json b/resources/profiles/Prusa/machine/Prusa MINI.json index 199cab4e9..b39c7e6a0 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI.json +++ b/resources/profiles/Prusa/machine/Prusa MINI.json @@ -8,5 +8,5 @@ "bed_model": "mini_bed.stl", "bed_texture": "mini.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json index 346b73c1f..6c6dcb56a 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json @@ -1,13 +1,13 @@ { "type": "machine", - "setting_id": "GM003", + "setting_id": "GM_PRUSA_001", "name": "Prusa MK3S 0.4 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "Prusa MK3S", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MK3S", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S.json b/resources/profiles/Prusa/machine/Prusa MK3S.json index 3cb76e93c..ea2ef7e81 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S.json @@ -8,5 +8,5 @@ "bed_model": "mk3_bed.stl", "bed_texture": "mk3.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/fdm_machine_common.json b/resources/profiles/Prusa/machine/fdm_machine_common.json index 8680aa36f..b73df798a 100644 --- a/resources/profiles/Prusa/machine/fdm_machine_common.json +++ b/resources/profiles/Prusa/machine/fdm_machine_common.json @@ -129,9 +129,8 @@ "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "layer_change_gcode": "", - "machine_pause_gcode": "M400 U1\n", + "machine_pause_gcode": "M601", "wipe": [ "1" ] diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MINI.json b/resources/profiles/Prusa/process/0.20mm Standard @MINI.json index 40d9a9410..1ca592c18 100644 --- a/resources/profiles/Prusa/process/0.20mm Standard @MINI.json +++ b/resources/profiles/Prusa/process/0.20mm Standard @MINI.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_PRUSA_000", "name": "0.20mm Standard @MINI", "from": "system", "instantiation": "true", diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MK3S.json b/resources/profiles/Prusa/process/0.20mm Standard @MK3S.json index 661eba9ad..d88f58085 100644 --- a/resources/profiles/Prusa/process/0.20mm Standard @MK3S.json +++ b/resources/profiles/Prusa/process/0.20mm Standard @MK3S.json @@ -1,6 +1,6 @@ { "type": "process", - "setting_id": "GP004", + "setting_id": "GP_PRUSA_001", "name": "0.20mm Standard @MK3S", "from": "system", "instantiation": "true", diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index e4f06b1e5..1d50020f2 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,290 +1,290 @@ -{ - "name": "Qidi", - "version": "01.06.05.01", - "force_update": "0", - "description": "Qidi configurations", - "machine_model_list": [ - { - "name": "Qidi X-Plus", - "sub_path": "machine/Qidi X-Plus.json" - }, - { - "name": "Qidi X-Max", - "sub_path": "machine/Qidi X-Max.json" - }, - { - "name": "Qidi X-CF Pro", - "sub_path": "machine/Qidi X-CF Pro.json" - }, - { - "name": "Qidi X-Smart 3", - "sub_path": "machine/Qidi X-Smart 3.json" - }, - { - "name": "Qidi X-Plus 3", - "sub_path": "machine/Qidi X-Plus 3.json" - }, - { - "name": "Qidi X-Max 3", - "sub_path": "machine/Qidi X-Max 3.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_qidi_common", - "sub_path": "process/fdm_process_qidi_common.json" - }, - { - "name": "fdm_process_qidi_x3_common", - "sub_path": "process/fdm_process_qidi_x3_common.json" - }, - { - "name": "0.12mm Fine @Qidi XMPlus", - "sub_path": "process/0.12mm Fine @Qidi XPlus.json" - }, - { - "name": "0.12mm Fine @Qidi XMax", - "sub_path": "process/0.12mm Fine @Qidi XMax.json" - }, - { - "name": "0.12mm Fine @Qidi XCFPro", - "sub_path": "process/0.12mm Fine @Qidi XCFPro.json" - }, - { - "name": "0.12mm Fine @Qidi XSmart3", - "sub_path": "process/0.12mm Fine @Qidi XSmart3.json" - }, - { - "name": "0.12mm Fine @Qidi XPlus3", - "sub_path": "process/0.12mm Fine @Qidi XPlus3.json" - }, - { - "name": "0.12mm Fine @Qidi XMax3", - "sub_path": "process/0.12mm Fine @Qidi XMax3.json" - }, - { - "name": "0.16mm Optimal @Qidi XPlus", - "sub_path": "process/0.16mm Optimal @Qidi XPlus.json" - }, - { - "name": "0.16mm Optimal @Qidi XMax", - "sub_path": "process/0.16mm Optimal @Qidi XMax.json" - }, - { - "name": "0.16mm Optimal @Qidi XCFPro", - "sub_path": "process/0.16mm Optimal @Qidi XCFPro.json" - }, - { - "name": "0.16mm Optimal @Qidi XSmart3", - "sub_path": "process/0.16mm Optimal @Qidi XSmart3.json" - }, - { - "name": "0.16mm Optimal @Qidi XPlus3", - "sub_path": "process/0.16mm Optimal @Qidi XPlus3.json" - }, - { - "name": "0.16mm Optimal @Qidi XMax3", - "sub_path": "process/0.16mm Optimal @Qidi XMax3.json" - }, - { - "name": "0.20mm Standard @Qidi XPlus", - "sub_path": "process/0.20mm Standard @Qidi XPlus.json" - }, - { - "name": "0.20mm Standard @Qidi XMax", - "sub_path": "process/0.20mm Standard @Qidi XMax.json" - }, - { - "name": "0.20mm Standard @Qidi XCFPro", - "sub_path": "process/0.20mm Standard @Qidi XCFPro.json" - }, - { - "name": "0.20mm Standard @Qidi XSmart3", - "sub_path": "process/0.20mm Standard @Qidi XSmart3.json" - }, - { - "name": "0.20mm Standard @Qidi XPlus3", - "sub_path": "process/0.20mm Standard @Qidi XPlus3.json" - }, - { - "name": "0.20mm Standard @Qidi XMax3", - "sub_path": "process/0.20mm Standard @Qidi XMax3.json" - }, - { - "name": "0.25mm Draft @Qidi XPlus", - "sub_path": "process/0.25mm Draft @Qidi XPlus.json" - }, - { - "name": "0.25mm Draft @Qidi XMax", - "sub_path": "process/0.25mm Draft @Qidi XMax.json" - }, - { - "name": "0.25mm Draft @Qidi XCFPro", - "sub_path": "process/0.25mm Draft @Qidi XCFPro.json" - }, - { - "name": "0.25mm Draft @Qidi XSmart3", - "sub_path": "process/0.25mm Draft @Qidi XSmart3.json" - }, - { - "name": "0.25mm Draft @Qidi XPlus3", - "sub_path": "process/0.25mm Draft @Qidi XPlus3.json" - }, - { - "name": "0.25mm Draft @Qidi XMax3", - "sub_path": "process/0.25mm Draft @Qidi XMax3.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XPlus", - "sub_path": "process/0.30mm Extra Draft @Qidi XPlus.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XMax", - "sub_path": "process/0.30mm Extra Draft @Qidi XMax.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XCFPro", - "sub_path": "process/0.30mm Extra Draft @Qidi XCFPro.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XSmart3", - "sub_path": "process/0.30mm Extra Draft @Qidi XSmart3.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XPlus3", - "sub_path": "process/0.30mm Extra Draft @Qidi XPlus3.json" - }, - { - "name": "0.30mm Extra Draft @Qidi XMax3", - "sub_path": "process/0.30mm Extra Draft @Qidi XMax3.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_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.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_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Qidi Generic ABS", - "sub_path": "filament/Qidi Generic ABS.json" - }, - { - "name": "Qidi Generic ASA", - "sub_path": "filament/Qidi Generic ASA.json" - }, - { - "name": "Qidi Generic PA", - "sub_path": "filament/Qidi Generic PA.json" - }, - { - "name": "Qidi Generic PA-CF", - "sub_path": "filament/Qidi Generic PA-CF.json" - }, - { - "name": "Qidi Generic PC", - "sub_path": "filament/Qidi Generic PC.json" - }, - { - "name": "Qidi Generic PETG", - "sub_path": "filament/Qidi Generic PETG.json" - }, - { - "name": "Qidi Generic PETG-CF", - "sub_path": "filament/Qidi Generic PETG-CF.json" - }, - { - "name": "Qidi Generic PLA Silk", - "sub_path": "filament/Qidi Generic PLA Silk.json" - }, - { - "name": "Qidi Generic PLA", - "sub_path": "filament/Qidi Generic PLA.json" - }, - { - "name": "Qidi Generic PLA-CF", - "sub_path": "filament/Qidi Generic PLA-CF.json" - }, - { - "name": "Qidi Generic PVA", - "sub_path": "filament/Qidi Generic PVA.json" - }, - { - "name": "Qidi Generic TPU", - "sub_path": "filament/Qidi Generic TPU.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_qidi_common", - "sub_path": "machine/fdm_qidi_common.json" - }, - { - "name": "fdm_qidi_x3_common", - "sub_path": "machine/fdm_qidi_x3_common.json" - }, - { - "name": "Qidi X-Plus 0.4 nozzle", - "sub_path": "machine/Qidi X-Plus 0.4 nozzle.json" - }, - { - "name": "Qidi X-Max 0.4 nozzle", - "sub_path": "machine/Qidi X-Max 0.4 nozzle.json" - }, - { - "name": "Qidi X-CF Pro 0.4 nozzle", - "sub_path": "machine/Qidi X-CF Pro 0.4 nozzle.json" - }, - { - "name": "Qidi X-Smart 3 0.4 nozzle", - "sub_path": "machine/Qidi X-Smart 3 0.4 nozzle.json" - }, - { - "name": "Qidi X-Plus 3 0.4 nozzle", - "sub_path": "machine/Qidi X-Plus 3 0.4 nozzle.json" - }, - { - "name": "Qidi X-Max 3 0.4 nozzle", - "sub_path": "machine/Qidi X-Max 3 0.4 nozzle.json" - } - ] -} +{ + "name": "Qidi", + "version": "01.07.00.02", + "force_update": "0", + "description": "Qidi configurations", + "machine_model_list": [ + { + "name": "Qidi X-Plus", + "sub_path": "machine/Qidi X-Plus.json" + }, + { + "name": "Qidi X-Max", + "sub_path": "machine/Qidi X-Max.json" + }, + { + "name": "Qidi X-CF Pro", + "sub_path": "machine/Qidi X-CF Pro.json" + }, + { + "name": "Qidi X-Smart 3", + "sub_path": "machine/Qidi X-Smart 3.json" + }, + { + "name": "Qidi X-Plus 3", + "sub_path": "machine/Qidi X-Plus 3.json" + }, + { + "name": "Qidi X-Max 3", + "sub_path": "machine/Qidi X-Max 3.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_qidi_common", + "sub_path": "process/fdm_process_qidi_common.json" + }, + { + "name": "fdm_process_qidi_x3_common", + "sub_path": "process/fdm_process_qidi_x3_common.json" + }, + { + "name": "0.12mm Fine @Qidi XMPlus", + "sub_path": "process/0.12mm Fine @Qidi XPlus.json" + }, + { + "name": "0.12mm Fine @Qidi XMax", + "sub_path": "process/0.12mm Fine @Qidi XMax.json" + }, + { + "name": "0.12mm Fine @Qidi XCFPro", + "sub_path": "process/0.12mm Fine @Qidi XCFPro.json" + }, + { + "name": "0.12mm Fine @Qidi XSmart3", + "sub_path": "process/0.12mm Fine @Qidi XSmart3.json" + }, + { + "name": "0.12mm Fine @Qidi XPlus3", + "sub_path": "process/0.12mm Fine @Qidi XPlus3.json" + }, + { + "name": "0.12mm Fine @Qidi XMax3", + "sub_path": "process/0.12mm Fine @Qidi XMax3.json" + }, + { + "name": "0.16mm Optimal @Qidi XPlus", + "sub_path": "process/0.16mm Optimal @Qidi XPlus.json" + }, + { + "name": "0.16mm Optimal @Qidi XMax", + "sub_path": "process/0.16mm Optimal @Qidi XMax.json" + }, + { + "name": "0.16mm Optimal @Qidi XCFPro", + "sub_path": "process/0.16mm Optimal @Qidi XCFPro.json" + }, + { + "name": "0.16mm Optimal @Qidi XSmart3", + "sub_path": "process/0.16mm Optimal @Qidi XSmart3.json" + }, + { + "name": "0.16mm Optimal @Qidi XPlus3", + "sub_path": "process/0.16mm Optimal @Qidi XPlus3.json" + }, + { + "name": "0.16mm Optimal @Qidi XMax3", + "sub_path": "process/0.16mm Optimal @Qidi XMax3.json" + }, + { + "name": "0.20mm Standard @Qidi XPlus", + "sub_path": "process/0.20mm Standard @Qidi XPlus.json" + }, + { + "name": "0.20mm Standard @Qidi XMax", + "sub_path": "process/0.20mm Standard @Qidi XMax.json" + }, + { + "name": "0.20mm Standard @Qidi XCFPro", + "sub_path": "process/0.20mm Standard @Qidi XCFPro.json" + }, + { + "name": "0.20mm Standard @Qidi XSmart3", + "sub_path": "process/0.20mm Standard @Qidi XSmart3.json" + }, + { + "name": "0.20mm Standard @Qidi XPlus3", + "sub_path": "process/0.20mm Standard @Qidi XPlus3.json" + }, + { + "name": "0.20mm Standard @Qidi XMax3", + "sub_path": "process/0.20mm Standard @Qidi XMax3.json" + }, + { + "name": "0.25mm Draft @Qidi XPlus", + "sub_path": "process/0.25mm Draft @Qidi XPlus.json" + }, + { + "name": "0.25mm Draft @Qidi XMax", + "sub_path": "process/0.25mm Draft @Qidi XMax.json" + }, + { + "name": "0.25mm Draft @Qidi XCFPro", + "sub_path": "process/0.25mm Draft @Qidi XCFPro.json" + }, + { + "name": "0.25mm Draft @Qidi XSmart3", + "sub_path": "process/0.25mm Draft @Qidi XSmart3.json" + }, + { + "name": "0.25mm Draft @Qidi XPlus3", + "sub_path": "process/0.25mm Draft @Qidi XPlus3.json" + }, + { + "name": "0.25mm Draft @Qidi XMax3", + "sub_path": "process/0.25mm Draft @Qidi XMax3.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XPlus", + "sub_path": "process/0.30mm Extra Draft @Qidi XPlus.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XMax", + "sub_path": "process/0.30mm Extra Draft @Qidi XMax.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XCFPro", + "sub_path": "process/0.30mm Extra Draft @Qidi XCFPro.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XSmart3", + "sub_path": "process/0.30mm Extra Draft @Qidi XSmart3.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XPlus3", + "sub_path": "process/0.30mm Extra Draft @Qidi XPlus3.json" + }, + { + "name": "0.30mm Extra Draft @Qidi XMax3", + "sub_path": "process/0.30mm Extra Draft @Qidi XMax3.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_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.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_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Generic ABS @Qidi", + "sub_path": "filament/Generic ABS @Qidi.json" + }, + { + "name": "Generic ASA @Qidi", + "sub_path": "filament/Generic ASA @Qidi.json" + }, + { + "name": "Generic PA @Qidi", + "sub_path": "filament/Generic PA @Qidi.json" + }, + { + "name": "Generic PA-CF @Qidi", + "sub_path": "filament/Generic PA-CF @Qidi.json" + }, + { + "name": "Generic PC @Qidi", + "sub_path": "filament/Generic PC @Qidi.json" + }, + { + "name": "Generic PETG @Qidi", + "sub_path": "filament/Generic PETG @Qidi.json" + }, + { + "name": "Generic PETG-CF @Qidi", + "sub_path": "filament/Generic PETG-CF @Qidi.json" + }, + { + "name": "Generic PLA @Qidi", + "sub_path": "filament/Generic PLA @Qidi.json" + }, + { + "name": "Generic PLA Silk @Qidi", + "sub_path": "filament/Generic PLA Silk @Qidi.json" + }, + { + "name": "Generic PLA-CF @Qidi", + "sub_path": "filament/Generic PLA-CF @Qidi.json" + }, + { + "name": "Generic PVA @Qidi", + "sub_path": "filament/Generic PVA @Qidi.json" + }, + { + "name": "Generic TPU @Qidi", + "sub_path": "filament/Generic TPU @Qidi.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_qidi_common", + "sub_path": "machine/fdm_qidi_common.json" + }, + { + "name": "fdm_qidi_x3_common", + "sub_path": "machine/fdm_qidi_x3_common.json" + }, + { + "name": "Qidi X-Plus 0.4 nozzle", + "sub_path": "machine/Qidi X-Plus 0.4 nozzle.json" + }, + { + "name": "Qidi X-Max 0.4 nozzle", + "sub_path": "machine/Qidi X-Max 0.4 nozzle.json" + }, + { + "name": "Qidi X-CF Pro 0.4 nozzle", + "sub_path": "machine/Qidi X-CF Pro 0.4 nozzle.json" + }, + { + "name": "Qidi X-Smart 3 0.4 nozzle", + "sub_path": "machine/Qidi X-Smart 3 0.4 nozzle.json" + }, + { + "name": "Qidi X-Plus 3 0.4 nozzle", + "sub_path": "machine/Qidi X-Plus 3 0.4 nozzle.json" + }, + { + "name": "Qidi X-Max 3 0.4 nozzle", + "sub_path": "machine/Qidi X-Max 3 0.4 nozzle.json" + } + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json new file mode 100644 index 000000000..60f6c96d0 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_Qidi_00", + "name": "Generic ABS @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json new file mode 100644 index 000000000..3848d71b9 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_Qidi_01", + "name": "Generic ASA @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.926" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PA @Qidi.json b/resources/profiles/Qidi/filament/Generic PA @Qidi.json new file mode 100644 index 000000000..94b38505d --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PA @Qidi.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSN99_Qidi_00", + "name": "Generic PA @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "required_nozzle_HRC": [ + "3" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json new file mode 100644 index 000000000..66d70c49f --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSN98_Qidi_00", + "name": "Generic PA-CF @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "40" + ], + "fan_cooling_layer_time": [ + "5" + ], + "full_fan_speed_layer": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi.json b/resources/profiles/Qidi/filament/Generic PC @Qidi.json new file mode 100644 index 000000000..257344cdd --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99_Qidi_00", + "name": "Generic PC @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json new file mode 100644 index 000000000..d26b1fb46 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_Qidi_00", + "name": "Generic PETG @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json new file mode 100644 index 000000000..69f971755 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json @@ -0,0 +1,83 @@ +{ + "type": "filament", + "filament_id": "GFG98", + "setting_id": "GFSG98_Qidi_00", + "name": "Generic PETG-CF @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "temperature_vitrification": [ + "75" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "cool_plate_temp": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "6" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json new file mode 100644 index 000000000..585f09bd4 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_Qidi_00", + "name": "Generic PLA @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json new file mode 100644 index 000000000..0ada592e3 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "filament_id": "GFA05", + "setting_id": "GFSA05_Qidi_01", + "name": "Generic PLA Silk @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_retraction_length": [ + "0.5" + ], + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json new file mode 100644 index 000000000..1dc14d506 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98_Qidi_00", + "name": "Generic PLA-CF @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "required_nozzle_HRC": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "slow_down_layer_time": [ + "7" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "temperature_vitrification": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic PVA @Qidi.json b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json new file mode 100644 index 000000000..a847d02a5 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSS99_Qidi_00", + "name": "Generic PVA @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Generic TPU @Qidi.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json new file mode 100644 index 000000000..43c69581f --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSU99_Qidi_00", + "name": "Generic TPU @Qidi", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/fdm_filament_abs.json b/resources/profiles/Qidi/filament/fdm_filament_abs.json index 1ed867ba1..ba66a3c46 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_abs.json +++ b/resources/profiles/Qidi/filament/fdm_filament_abs.json @@ -1,88 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_abs", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "95" - ], - "eng_plate_temp" : [ - "95" - ], - "hot_plate_temp" : [ - "95" - ], - "textured_plate_temp" : [ - "95" - ], - "cool_plate_temp_initial_layer" : [ - "95" - ], - "eng_plate_temp_initial_layer" : [ - "95" - ], - "hot_plate_temp_initial_layer" : [ - "95" - ], - "textured_plate_temp_initial_layer" : [ - "95" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "35" - ], - "fan_min_speed": [ - "35" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "35" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_asa.json b/resources/profiles/Qidi/filament/fdm_filament_asa.json index 53a7b3303..4163011fc 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_asa.json +++ b/resources/profiles/Qidi/filament/fdm_filament_asa.json @@ -1,88 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_asa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "95" - ], - "eng_plate_temp" : [ - "95" - ], - "hot_plate_temp" : [ - "95" - ], - "textured_plate_temp" : [ - "95" - ], - "cool_plate_temp_initial_layer" : [ - "95" - ], - "eng_plate_temp_initial_layer" : [ - "95" - ], - "hot_plate_temp_initial_layer" : [ - "95" - ], - "textured_plate_temp_initial_layer" : [ - "95" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "ASA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "35" - ], - "fan_min_speed": [ - "35" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "100" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} +{ + "type": "filament", + "name": "fdm_filament_asa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "90" + ], + "hot_plate_temp" : [ + "90" + ], + "textured_plate_temp" : [ + "90" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "90" + ], + "hot_plate_temp_initial_layer" : [ + "90" + ], + "textured_plate_temp_initial_layer" : [ + "90" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ASA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "35" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "100" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_common.json b/resources/profiles/Qidi/filament/fdm_filament_common.json index 9119a4031..c48b23ada 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_common.json +++ b/resources/profiles/Qidi/filament/fdm_filament_common.json @@ -1,144 +1,141 @@ -{ - "type": "filament", - "name": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "60" - ], - "hot_plate_temp" : [ - "60" - ], - "textured_plate_temp" : [ - "60" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "60" - ], - "hot_plate_temp_initial_layer" : [ - "60" - ], - "textured_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_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_z_hop_types": [ - "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" - ], - "bed_type": [ - "Cool Plate" - ], - "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": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \nM106 P3 S0" - ], - "nozzle_temperature": [ - "200" - ], - "temperature_vitrification": [ - "100" - ] -} +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "textured_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_z_hop_types": [ + "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": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pa.json b/resources/profiles/Qidi/filament/fdm_filament_pa.json index 1f360b4cc..fb2d02e70 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pa.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pa.json @@ -1,88 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_pa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "required_nozzle_HRC": [ - "40" - ], - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "100" - ], - "hot_plate_temp" : [ - "100" - ], - "textured_plate_temp" : [ - "100" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "100" - ], - "hot_plate_temp_initial_layer" : [ - "100" - ], - "textured_plate_temp_initial_layer" : [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "4" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_type": [ - "PA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "0" - ], - "overhang_fan_speed": [ - "30" - ], - "nozzle_temperature": [ - "290" - ], - "temperature_vitrification": [ - "108" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "required_nozzle_HRC": [ + "40" + ], + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "textured_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "textured_plate_temp_initial_layer" : [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "4" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "overhang_fan_speed": [ + "30" + ], + "nozzle_temperature": [ + "290" + ], + "temperature_vitrification": [ + "108" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pc.json b/resources/profiles/Qidi/filament/fdm_filament_pc.json index ad84aaa77..daf96f016 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pc.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pc.json @@ -1,88 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_pc", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "110" - ], - "hot_plate_temp" : [ - "110" - ], - "textured_plate_temp" : [ - "110" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "110" - ], - "hot_plate_temp_initial_layer" : [ - "110" - ], - "textured_plate_temp_initial_layer" : [ - "110" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "temperature_vitrification": [ - "120" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pc", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "110" + ], + "hot_plate_temp" : [ + "110" + ], + "textured_plate_temp" : [ + "110" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "110" + ], + "hot_plate_temp_initial_layer" : [ + "110" + ], + "textured_plate_temp_initial_layer" : [ + "110" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "23.2" + ], + "filament_type": [ + "PC" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "60" + ], + "nozzle_temperature": [ + "280" + ], + "temperature_vitrification": [ + "120" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pet.json b/resources/profiles/Qidi/filament/fdm_filament_pet.json index da12333e7..bb2323e9c 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pet.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pet.json @@ -1,79 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "70" - ], - "textured_plate_temp" : [ - "80" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "70" - ], - "textured_plate_temp_initial_layer" : [ - "80" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "250" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "80" + ], + "textured_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "textured_plate_temp_initial_layer" : [ + "80" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "255" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pla.json b/resources/profiles/Qidi/filament/fdm_filament_pla.json index 9619a5afc..82c6772f3 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pla.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pla.json @@ -1,91 +1,94 @@ -{ - "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" : [ - "60" - ], - "eng_plate_temp" : [ - "60" - ], - "hot_plate_temp" : [ - "60" - ], - "textured_plate_temp" : [ - "60" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "60" - ], - "hot_plate_temp_initial_layer" : [ - "60" - ], - "textured_plate_temp_initial_layer" : [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "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": [ - "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" - ] -} +{ + "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" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "textured_plate_temp_initial_layer" : [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "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": [ + "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" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Qidi/filament/fdm_filament_pva.json b/resources/profiles/Qidi/filament/fdm_filament_pva.json index be39991a3..a3825d2cd 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pva.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pva.json @@ -1,97 +1,100 @@ -{ - "type": "filament", - "name": "fdm_filament_pva", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "35" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "55" - ], - "textured_plate_temp" : [ - "55" - ], - "cool_plate_temp_initial_layer" : [ - "35" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "55" - ], - "textured_plate_temp_initial_layer" : [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_soluble": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "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": [ - "220" - ], - "temperature_vitrification": [ - "55" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pva", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_soluble": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "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": [ + "220" + ], + "temperature_vitrification": [ + "55" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/fdm_filament_tpu.json b/resources/profiles/Qidi/filament/fdm_filament_tpu.json index c2ee9cbb8..15b7cc714 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_tpu.json +++ b/resources/profiles/Qidi/filament/fdm_filament_tpu.json @@ -1,85 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_tpu", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "30" - ], - "eng_plate_temp" : [ - "30" - ], - "hot_plate_temp" : [ - "35" - ], - "textured_plate_temp" : [ - "35" - ], - "cool_plate_temp_initial_layer" : [ - "30" - ], - "eng_plate_temp_initial_layer" : [ - "30" - ], - "hot_plate_temp_initial_layer" : [ - "35" - ], - "textured_plate_temp_initial_layer" : [ - "35" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "TPU" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "filament_retraction_length": [ - "0.4" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "temperature_vitrification": [ - "35" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ] -} +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp": [ + "30" + ], + "hot_plate_temp": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "TPU" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "filament_retraction_length": [ + "0.4" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "temperature_vitrification": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json index d1b6d6bd7..96e3ca426 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json @@ -1,106 +1,106 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-CF Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_common", - "printer_model": "Qidi X-CF Pro", - "default_print_profile": "0.20mm Standard @Qidi XCFPro", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "300x0", - "300x250", - "0x250" - ], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "1500", - "1250" - ], - "machine_max_acceleration_retracting": [ - "1500", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "9000", - "1000" - ], - "machine_max_acceleration_y": [ - "9000", - "1000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_speed_e": [ - "120", - "120" - ], - "machine_max_speed_x": [ - "500", - "200" - ], - "machine_max_speed_y": [ - "500", - "200" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "10", - "10" - ], - "machine_max_jerk_y": [ - "10", - "10" - ], - "machine_max_jerk_z": [ - "0.2", - "0.4" - ], - "max_layer_height": [ - "0" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", - "scan_first_layer": "0" +{ + "type": "machine", + "setting_id": "GM_Qidi_001", + "name": "Qidi X-CF Pro 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_common", + "printer_model": "Qidi X-CF Pro", + "default_print_profile": "0.20mm Standard @Qidi XCFPro", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "300x0", + "300x250", + "0x250" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "1500", + "1250" + ], + "machine_max_acceleration_retracting": [ + "1500", + "1250" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "9000", + "1000" + ], + "machine_max_acceleration_y": [ + "9000", + "1000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "120", + "120" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "10", + "10" + ], + "machine_max_jerk_y": [ + "10", + "10" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "max_layer_height": [ + "0" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ], + "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json index ab2c87763..92442e957 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Qidi X-CF Pro", - "model_id": "Qidi-XCF-Pro", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Qidi", - "bed_model": "qidi_xcfpro_buildplate_model.stl", - "bed_texture": "qidi_xcfpro_buildplate_texture.png", - "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" -} +{ + "type": "machine_model", + "name": "Qidi X-CF Pro", + "model_id": "Qidi-XCF-Pro", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xcfpro_buildplate_model.stl", + "bed_texture": "qidi_xcfpro_buildplate_texture.png", + "hotend_model": "qidi_xseries_gen2_hotend.stl", + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 94dcbd44d..f87d834ce 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json @@ -1,106 +1,106 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-Max 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_common", - "printer_model": "Qidi X-Max", - "default_print_profile": "0.20mm Standard @Qidi XMax", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "300x0", - "300x250", - "0x250" - ], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "1500", - "1250" - ], - "machine_max_acceleration_retracting": [ - "1500", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "9000", - "1000" - ], - "machine_max_acceleration_y": [ - "9000", - "1000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_speed_e": [ - "120", - "120" - ], - "machine_max_speed_x": [ - "500", - "200" - ], - "machine_max_speed_y": [ - "500", - "200" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "10", - "10" - ], - "machine_max_jerk_y": [ - "10", - "10" - ], - "machine_max_jerk_z": [ - "0.2", - "0.4" - ], - "max_layer_height": [ - "0" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", - "scan_first_layer": "0" +{ + "type": "machine", + "setting_id": "GM_Qidi_002", + "name": "Qidi X-Max 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_common", + "printer_model": "Qidi X-Max", + "default_print_profile": "0.20mm Standard @Qidi XMax", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "300x0", + "300x250", + "0x250" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "1500", + "1250" + ], + "machine_max_acceleration_retracting": [ + "1500", + "1250" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "9000", + "1000" + ], + "machine_max_acceleration_y": [ + "9000", + "1000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "120", + "120" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "10", + "10" + ], + "machine_max_jerk_y": [ + "10", + "10" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "max_layer_height": [ + "0" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ], + "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index 9cd36a4cf..73653b40e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -1,48 +1,48 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-Max 3 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_x3_common", - "printer_model": "Qidi X-Max 3", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Qidi XMax3", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "325x0", - "325x325", - "0x325" - ], - "printable_height": "320", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "max_layer_height": [ - "0.3" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ] +{ + "type": "machine", + "setting_id": "GM_Qidi_003", + "name": "Qidi X-Max 3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_x3_common", + "printer_model": "Qidi X-Max 3", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Qidi XMax3", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "325x0", + "325x325", + "0x325" + ], + "printable_height": "320", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "0.8" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3.json b/resources/profiles/Qidi/machine/Qidi X-Max 3.json index ee5db1f5b..5464fdcdb 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Qidi X-Max 3", - "model_id": "Qidi-XMax-3", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Qidi", - "bed_model": "qidi_xmax3_buildplate_model.stl", - "bed_texture": "qidi_xmax3_buildplate_texture.png", - "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" -} +{ + "type": "machine_model", + "name": "Qidi X-Max 3", + "model_id": "Qidi-XMax-3", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xmax3_buildplate_model.stl", + "bed_texture": "qidi_xmax3_buildplate_texture.png", + "hotend_model": "qidi_xseries_gen3_hotend.stl", + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Max.json b/resources/profiles/Qidi/machine/Qidi X-Max.json index 3cfd747c7..26b4b2f98 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Qidi X-Max", - "model_id": "Qidi-XMax", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Qidi", - "bed_model": "qidi_xmax_buildplate_model.stl", - "bed_texture": "qidi_xmax_buildplate_texture.png", - "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" -} +{ + "type": "machine_model", + "name": "Qidi X-Max", + "model_id": "Qidi-XMax", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xmax_buildplate_model.stl", + "bed_texture": "qidi_xmax_buildplate_texture.png", + "hotend_model": "qidi_xseries_gen2_hotend.stl", + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index c722d7ca3..39bd0f9f1 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json @@ -1,106 +1,106 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_common", - "printer_model": "Qidi X-Plus", - "default_print_profile": "0.20mm Standard @Qidi XPlus", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "270x0", - "270x200", - "0x200" - ], - "printable_height": "200", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "1500", - "1250" - ], - "machine_max_acceleration_retracting": [ - "1500", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "9000", - "1000" - ], - "machine_max_acceleration_y": [ - "9000", - "1000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_speed_e": [ - "120", - "120" - ], - "machine_max_speed_x": [ - "500", - "200" - ], - "machine_max_speed_y": [ - "500", - "200" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "10", - "10" - ], - "machine_max_jerk_y": [ - "10", - "10" - ], - "machine_max_jerk_z": [ - "0.2", - "0.4" - ], - "max_layer_height": [ - "0" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", - "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Qidi_004", + "name": "Qidi X-Plus 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_common", + "printer_model": "Qidi X-Plus", + "default_print_profile": "0.20mm Standard @Qidi XPlus", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "270x0", + "270x200", + "0x200" + ], + "printable_height": "200", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "1500", + "1250" + ], + "machine_max_acceleration_retracting": [ + "1500", + "1250" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "9000", + "1000" + ], + "machine_max_acceleration_y": [ + "9000", + "1000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "120", + "120" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "10", + "10" + ], + "machine_max_jerk_y": [ + "10", + "10" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "max_layer_height": [ + "0" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ], + "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index cdfbda215..ba5a1aa45 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -1,47 +1,47 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-Plus 3 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_x3_common", - "printer_model": "Qidi X-Plus 3", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Qidi XPlus3", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "280x0", - "280x280", - "0x280" - ], - "printable_height": "270", - "nozzle_type": "hardened_steel", - "max_layer_height": [ - "0.3" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ] +{ + "type": "machine", + "setting_id": "GM_Qidi_005", + "name": "Qidi X-Plus 3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_x3_common", + "printer_model": "Qidi X-Plus 3", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Qidi XPlus3", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "280x0", + "280x280", + "0x280" + ], + "printable_height": "270", + "nozzle_type": "hardened_steel", + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "0.8" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json index bda7020f2..dcfb6f366 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Qidi X-Plus 3", - "model_id": "Qidi-XPlus-3", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Qidi", - "bed_model": "qidi_xplus3_buildplate_model.stl", - "bed_texture": "qidi_xplus3_buildplate_texture.png", - "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" -} +{ + "type": "machine_model", + "name": "Qidi X-Plus 3", + "model_id": "Qidi-XPlus-3", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xplus3_buildplate_model.stl", + "bed_texture": "qidi_xplus3_buildplate_texture.png", + "hotend_model": "qidi_xseries_gen3_hotend.stl", + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus.json b/resources/profiles/Qidi/machine/Qidi X-Plus.json index d5b10a849..ccad5df1f 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus_buildplate_model.stl", "bed_texture": "qidi_xplus_buildplate_texture.png", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index 5bf031a46..72a113c0c 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -1,48 +1,48 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Qidi X-Smart 3 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_qidi_x3_common", - "printer_model": "Qidi X-Smart 3", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Qidi XSmart3", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "180x0", - "180x180", - "0x180" - ], - "printable_height": "170", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "max_layer_height": [ - "0.3" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Qidi", - "retraction_minimum_travel": [ - "2" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "10" - ], - "deretraction_speed": [ - "0" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Qidi Generic PLA" - ] +{ + "type": "machine", + "setting_id": "GM_Qidi_006", + "name": "Qidi X-Smart 3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_qidi_x3_common", + "printer_model": "Qidi X-Smart 3", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Qidi XSmart3", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "170", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Qidi", + "retraction_minimum_travel": [ + "2" + ], + "retraction_length": [ + "0.8" + ], + "retract_length_toolchange": [ + "10" + ], + "deretraction_speed": [ + "0" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Qidi" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json index 79bb3bc42..6f483561f 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Qidi X-Smart 3", - "model_id": "Qidi-XSmart-3", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Qidi", - "bed_model": "qidi_xsmart3_buildplate_model.stl", - "bed_texture": "qidi_xsmart3_buildplate_texture.png", - "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" -} +{ + "type": "machine_model", + "name": "Qidi X-Smart 3", + "model_id": "Qidi-XSmart-3", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xsmart3_buildplate_model.stl", + "bed_texture": "qidi_xsmart3_buildplate_texture.png", + "hotend_model": "qidi_xseries_gen3_hotend.stl", + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" +} diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index 5adf358b3..f7bed81fe 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -1,118 +1,117 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "printer_technology": "FFF", - "deretraction_speed": [ - "40" - ], - "extruder_colour": [ - "#FCE94F" - ], - "extruder_offset": [ - "0x0" - ], - "gcode_flavor": "marlin", - "silent_mode": "0", - "machine_max_acceleration_e": [ - "5000" - ], - "machine_max_acceleration_extruding": [ - "10000" - ], - "machine_max_acceleration_retracting": [ - "1000" - ], - "machine_max_acceleration_x": [ - "10000" - ], - "machine_max_acceleration_y": [ - "10000" - ], - "machine_max_acceleration_z": [ - "100" - ], - "machine_max_speed_e": [ - "60" - ], - "machine_max_speed_x": [ - "500" - ], - "machine_max_speed_y": [ - "500" - ], - "machine_max_speed_z": [ - "10" - ], - "machine_max_jerk_e": [ - "5" - ], - "machine_max_jerk_x": [ - "8" - ], - "machine_max_jerk_y": [ - "8" - ], - "machine_max_jerk_z": [ - "0.4" - ], - "machine_min_extruding_rate": [ - "0" - ], - "machine_min_travel_rate": [ - "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", - "nozzle_diameter": [ - "0.4" - ], - "printer_settings_id": "", - "printer_variant": "0.4", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "1" - ], - "z_hop": [ - "0" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retraction_speed": [ - "60" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "wipe": [ - "1" - ], - "z_lift_type": "NormalLift", - "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", - "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" -} +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "deretraction_speed": [ + "40" + ], + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "gcode_flavor": "marlin", + "silent_mode": "0", + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "10000" + ], + "machine_max_acceleration_retracting": [ + "1000" + ], + "machine_max_acceleration_x": [ + "10000" + ], + "machine_max_acceleration_y": [ + "10000" + ], + "machine_max_acceleration_z": [ + "100" + ], + "machine_max_speed_e": [ + "60" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "10" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "8" + ], + "machine_max_jerk_y": [ + "8" + ], + "machine_max_jerk_z": [ + "0.4" + ], + "machine_min_extruding_rate": [ + "0" + ], + "machine_min_travel_rate": [ + "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", + "nozzle_diameter": [ + "0.4" + ], + "printer_settings_id": "", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "1" + ], + "z_hop": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "60" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "z_lift_type": "NormalLift", + "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", + "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", + "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" +} diff --git a/resources/profiles/Qidi/machine/fdm_qidi_common.json b/resources/profiles/Qidi/machine/fdm_qidi_common.json index 418961081..e44322a7c 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_common.json @@ -1,141 +1,141 @@ -{ - "type": "machine", - "name": "fdm_qidi_common", - "from": "system", - "instantiation": "false", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "500", - "500" - ], - "machine_max_acceleration_x": [ - "3000", - "3000" - ], - "machine_max_acceleration_y": [ - "3000", - "3000" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "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": "47", - "extruder_clearance_height_to_rod": "34", - "extruder_clearance_height_to_lid": "34", - "printer_settings_id": "", - "printer_technology": "FFF", - "printer_variant": "0.4", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retraction_speed": [ - "60" - ], - "deretraction_speed": [ - "40" - ], - "silent_mode": "0", - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "machine_pause_gcode": "M25 ;pause print", - "wipe": [ - "1" - ], - "default_filament_profile": [ - "Generic PLA @QIDI" - ], - "default_print_profile": "0.20mm Standard @QIDI", - "bed_exclude_area": [ - "0x0" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{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{min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_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", - "layer_change_gcode": "", - "scan_first_layer": "0", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "z_hop_types": "Normal Lift" - -} +{ + "type": "machine", + "name": "fdm_qidi_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "500", + "500" + ], + "machine_max_acceleration_x": [ + "3000", + "3000" + ], + "machine_max_acceleration_y": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "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": "47", + "extruder_clearance_height_to_rod": "34", + "extruder_clearance_height_to_lid": "34", + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "60" + ], + "deretraction_speed": [ + "40" + ], + "silent_mode": "0", + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "machine_pause_gcode": "M25 ;pause print", + "wipe": [ + "1" + ], + "default_filament_profile": [ + "Generic PLA @QIDI" + ], + "default_print_profile": "0.20mm Standard @QIDI", + "bed_exclude_area": [ + "0x0" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{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{min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_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", + "layer_change_gcode": "", + "scan_first_layer": "0", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "z_hop_types": "Normal Lift" + +} diff --git a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index 8a5d61a5f..c07b51b4c 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -4,71 +4,71 @@ "from": "system", "instantiation": "false", "inherits": "fdm_qidi_common", - "gcode_flavor": "klipper", + "gcode_flavor": "klipper", "auxiliary_fan": "1", "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_e": [ - "30", - "30" - ], - "machine_max_speed_x": [ - "600", - "600" - ], - "machine_max_speed_y": [ - "600", - "600" - ], - "machine_max_speed_z": [ - "20", - "20" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "12", - "12" - ], - "machine_max_jerk_y": [ - "12", - "12" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], - "change_filament_gcode": "", - "machine_pause_gcode": "M0", - "machine_start_gcode": "G28\nM141 S0\nG0 Z50 F600\nM190 S[first_layer_bed_temperature]\nG28 Z\nG29 ; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM109 S[first_layer_temperature]\nM83\nG0 Z5 F1200\nG0 X{first_layer_print_min[0]} Y{max(0, first_layer_print_min[1] - 2)} F12000\nG0 Z0.2 F600\nG1 E3 F1800\nG0 Z0.3 F600\nG1 X{min(first_layer_print_min[0] + 30,print_bed_max[0])} E6 F600", - "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\n{if max_layer_z < max_print_height / 2}\nG1 Z{max_print_height / 2 + 10} F600\n{else}\nG1 Z{min(max_print_height, max_layer_z + 10)}\n{endif}\nG0 X0 Y{print_bed_max[1]-11} F12000", - "scan_first_layer": "0" + "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_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "change_filament_gcode": "", + "machine_pause_gcode": "M0", + "machine_start_gcode": "G28\nM141 S0\nG0 Z50 F600\nM190 S[first_layer_bed_temperature]\nG28 Z\nG29 ; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM109 S[first_layer_temperature]\nM83\nG0 Z5 F1200\nG0 X{first_layer_print_min[0]} Y{max(0, first_layer_print_min[1] - 2)} F12000\nG0 Z0.2 F600\nG1 E3 F1800\nG0 Z0.3 F600\nG1 X{min(first_layer_print_min[0] + 30,print_bed_max[0])} E6 F600", + "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\nG0 Z{min(max_print_height,max_layer_z+10)} F600\nG0 X0 Y{print_bed_max[1]} F12000", + "scan_first_layer": "0" } diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json index 0fa912eb5..2ac9f9634 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XCFPro", - "from": "system", - "inherits": "fdm_process_qidi_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": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "25", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "50", - "outer_wall_speed": "25", - "outer_wall_jerk": "8", - "inner_wall_speed": "25", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "50", - "infill_jerk": "8", - "top_surface_speed": "25", - "gap_infill_speed": "25", - "sparse_infill_speed": "50", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-CF Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_001", + "name": "0.12mm Fine @Qidi XCFPro", + "from": "system", + "inherits": "fdm_process_qidi_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": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "25", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "50", + "outer_wall_speed": "25", + "outer_wall_jerk": "8", + "inner_wall_speed": "25", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "50", + "infill_jerk": "8", + "top_surface_speed": "25", + "gap_infill_speed": "25", + "sparse_infill_speed": "50", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-CF Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json index 67e7997bb..9a1ad0494 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XMax", - "from": "system", - "inherits": "fdm_process_qidi_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": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_002", + "name": "0.12mm Fine @Qidi XMax", + "from": "system", + "inherits": "fdm_process_qidi_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": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax3.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax3.json index ec844bbdb..30358c23d 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XMax3", - "from": "system", - "inherits": "fdm_process_qidi_x3_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", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_003", + "name": "0.12mm Fine @Qidi XMax3", + "from": "system", + "inherits": "fdm_process_qidi_x3_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", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json index 3de23e3e9..0e9cd5463 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json @@ -1,114 +1,114 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XPlus", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", + "type": "process", + "setting_id": "GP_Qidi_004", + "name": "0.12mm Fine @Qidi XPlus", + "from": "system", + "inherits": "fdm_process_qidi_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": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle" - ] + "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": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus3.json index 196e60ae7..71e5e5925 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XPlus3", - "from": "system", - "inherits": "fdm_process_qidi_x3_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", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 3 0.4 nozzle" - ] -} +{ + "type": "process", + "setting_id": "GP_Qidi_005", + "name": "0.12mm Fine @Qidi XPlus3", + "from": "system", + "inherits": "fdm_process_qidi_x3_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", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XSmart3.json index 0d05fe698..455cf760d 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XSmart3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.12mm Fine @Qidi XSmart3", - "from": "system", - "inherits": "fdm_process_qidi_x3_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", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.12", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.12", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Smart 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_006", + "name": "0.12mm Fine @Qidi XSmart3", + "from": "system", + "inherits": "fdm_process_qidi_x3_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", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.12", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.12", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Smart 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json index 5e8d36c1b..087b3da14 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XCFPro", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "25", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "50", - "outer_wall_speed": "25", - "outer_wall_jerk": "8", - "inner_wall_speed": "25", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "50", - "infill_jerk": "8", - "top_surface_speed": "25", - "gap_infill_speed": "25", - "sparse_infill_speed": "50", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-CF Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_007", + "name": "0.16mm Optimal @Qidi XCFPro", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "25", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "50", + "outer_wall_speed": "25", + "outer_wall_jerk": "8", + "inner_wall_speed": "25", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "50", + "infill_jerk": "8", + "top_surface_speed": "25", + "gap_infill_speed": "25", + "sparse_infill_speed": "50", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-CF Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json index 6cdbbb287..c75613896 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XMax", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_008", + "name": "0.16mm Optimal @Qidi XMax", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax3.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax3.json index d921ebfad..74f541086 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XMax3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_009", + "name": "0.16mm Optimal @Qidi XMax3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json index 5121a5ac2..5d39f334d 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json @@ -1,114 +1,114 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XPlus", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_Qidi_010", + "name": "0.16mm Optimal @Qidi XPlus", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus3.json index ee149a07f..84cb7577a 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XPlus3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 3 0.4 nozzle" - ] -} +{ + "type": "process", + "setting_id": "GP_Qidi_011", + "name": "0.16mm Optimal @Qidi XPlus3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XSmart3.json index a157074c6..d23dc029f 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XSmart3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Qidi XSmart3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.16", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Smart 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_012", + "name": "0.16mm Optimal @Qidi XSmart3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.16", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Smart 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json index 7f756d208..6bb6b47ec 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XCFPro", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "25", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "50", - "outer_wall_speed": "25", - "outer_wall_jerk": "8", - "inner_wall_speed": "25", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "50", - "infill_jerk": "8", - "top_surface_speed": "25", - "gap_infill_speed": "25", - "sparse_infill_speed": "50", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-CF Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_013", + "name": "0.20mm Standard @Qidi XCFPro", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "25", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "50", + "outer_wall_speed": "25", + "outer_wall_jerk": "8", + "inner_wall_speed": "25", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "50", + "infill_jerk": "8", + "top_surface_speed": "25", + "gap_infill_speed": "25", + "sparse_infill_speed": "50", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-CF Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json index 42b9e70af..942332e76 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XMax", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_014", + "name": "0.20mm Standard @Qidi XMax", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax3.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax3.json index 2add30fef..f42c49ddd 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XMax3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_015", + "name": "0.20mm Standard @Qidi XMax3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json index 33e3771d3..cdf47fe1e 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json @@ -1,114 +1,114 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XPlus", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", + "type": "process", + "setting_id": "GP_Qidi_016", + "name": "0.20mm Standard @Qidi XPlus", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle" - ] + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus3.json index 463d5eb30..d05be814a 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XPlus3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_017", + "name": "0.20mm Standard @Qidi XPlus3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XSmart3.json index 924fbed56..3bd97119f 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XSmart3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Qidi XSmart3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Smart 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_018", + "name": "0.20mm Standard @Qidi XSmart3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Smart 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json index 5dad9f492..141d98488 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XCFPro", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.25", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "25", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "50", - "outer_wall_speed": "25", - "outer_wall_jerk": "8", - "inner_wall_speed": "25", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "50", - "infill_jerk": "8", - "top_surface_speed": "25", - "gap_infill_speed": "25", - "sparse_infill_speed": "50", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-CF Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_019", + "name": "0.25mm Draft @Qidi XCFPro", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "25", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "50", + "outer_wall_speed": "25", + "outer_wall_jerk": "8", + "inner_wall_speed": "25", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "50", + "infill_jerk": "8", + "top_surface_speed": "25", + "gap_infill_speed": "25", + "sparse_infill_speed": "50", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-CF Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json index c910d4d58..7fca25888 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XMax", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.25", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_020", + "name": "0.25mm Draft @Qidi XMax", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json index 6767dc82d..14590c037 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XMax3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.25", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_021", + "name": "0.25mm Draft @Qidi XMax3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json index 023678aaa..ff227d346 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json @@ -1,114 +1,114 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XPlus", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_Qidi_022", + "name": "0.25mm Draft @Qidi XPlus", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json index 4bd503535..784113bb9 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XPlus3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.25", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_023", + "name": "0.25mm Draft @Qidi XPlus3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json index 5c80db0e8..93b5939ef 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.25mm Draft @Qidi XSmart3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.25", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.25", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.25", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Smart 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_024", + "name": "0.25mm Draft @Qidi XSmart3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Smart 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json index 30da45b91..28c00e4ef 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XCFPro", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.3", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "25", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "50", - "outer_wall_speed": "25", - "outer_wall_jerk": "8", - "inner_wall_speed": "25", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "50", - "infill_jerk": "8", - "top_surface_speed": "25", - "gap_infill_speed": "25", - "sparse_infill_speed": "50", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-CF Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_025", + "name": "0.30mm Extra Draft @Qidi XCFPro", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "25", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "50", + "outer_wall_speed": "25", + "outer_wall_jerk": "8", + "inner_wall_speed": "25", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "50", + "infill_jerk": "8", + "top_surface_speed": "25", + "gap_infill_speed": "25", + "sparse_infill_speed": "50", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-CF Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json index b3a46288f..ac95c30e1 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json @@ -1,114 +1,114 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XMax", - "from": "system", - "inherits": "fdm_process_qidi_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": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.30", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_026", + "name": "0.30mm Extra Draft @Qidi XMax", + "from": "system", + "inherits": "fdm_process_qidi_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": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.30", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json index a672f86ae..b32e979cd 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XMax3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.3", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Max 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_027", + "name": "0.30mm Extra Draft @Qidi XMax3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Max 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json index 96233b699..80235d357 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json @@ -1,114 +1,114 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XPlus", - "from": "system", - "inherits": "fdm_process_qidi_common", - "instantiation": "true", + "type": "process", + "setting_id": "GP_Qidi_028", + "name": "0.30mm Extra Draft @Qidi XPlus", + "from": "system", + "inherits": "fdm_process_qidi_common", + "instantiation": "true", "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "default_jerk": "8", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "0", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.3", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "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": "30", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "top_surface_jerk": "8", - "initial_layer_speed": "20", - "initial_layer_jerk": "8", - "initial_layer_infill_speed": "30", - "outer_wall_speed": "30", - "outer_wall_jerk": "8", - "inner_wall_speed": "30", - "inner_wall_jerk": "8", - "internal_solid_infill_speed": "60", - "infill_jerk": "8", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_jerk": "8", - "travel_speed": "500", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle" - ] + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "default_jerk": "8", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "0", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "30", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_jerk": "8", + "initial_layer_speed": "20", + "initial_layer_jerk": "8", + "initial_layer_infill_speed": "30", + "outer_wall_speed": "30", + "outer_wall_jerk": "8", + "inner_wall_speed": "30", + "inner_wall_jerk": "8", + "internal_solid_infill_speed": "60", + "infill_jerk": "8", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_jerk": "8", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json index c278a2e41..64f4cedb4 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XPlus3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.3", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Plus 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_029", + "name": "0.30mm Extra Draft @Qidi XPlus3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Plus 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json index 7fcdfe4e4..cccff4356 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json @@ -1,85 +1,85 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @Qidi XSmart3", - "from": "system", - "inherits": "fdm_process_qidi_x3_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.42", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.3", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.3", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "30", - "support_object_xy_distance": "50%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Qidi X-Smart 3 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP_Qidi_030", + "name": "0.30mm Extra Draft @Qidi XSmart3", + "from": "system", + "inherits": "fdm_process_qidi_x3_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "2.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi X-Smart 3 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 9c35f4a80..7398bcd48 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -1,70 +1,70 @@ -{ - "type": "process", - "name": "fdm_process_common", - "from": "system", - "instantiation": "false", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", - "brim_width": "5", - "compatible_printers": [], - "print_sequence": "by layer", - "default_acceleration": "10000", - "bridge_no_support": "0", - "elefant_foot_compensation": "0.1", - "outer_wall_line_width": "0.4", - "outer_wall_speed": "120", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.42", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "20", - "gap_infill_speed": "30", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "sparse_infill_speed": "50", - "interface_shells": "0", - "detect_overhang_wall": "0", - "reduce_infill_retraction": "0", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "wall_loops": "3", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "40", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "nearest", - "skirt_distance": "2", - "skirt_height": "2", - "minimum_sparse_infill_area": "0", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "40", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_filament": "0", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_interface_loop_pattern": "0", - "support_interface_top_layers": "2", - "support_interface_spacing": "0", - "support_interface_speed": "80", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2", - "support_speed": "40", - "support_threshold_angle": "40", - "support_object_xy_distance": "0.5", - "detect_thin_wall": "0", - "top_surface_line_width": "0.4", - "top_surface_speed": "30", - "travel_speed": "400", - "enable_prime_tower": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0" -} +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "5", + "compatible_printers": [], + "print_sequence": "by layer", + "default_acceleration": "10000", + "bridge_no_support": "0", + "elefant_foot_compensation": "0.1", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "120", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "20", + "gap_infill_speed": "30", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "sparse_infill_speed": "50", + "interface_shells": "0", + "detect_overhang_wall": "0", + "reduce_infill_retraction": "0", + "filename_format": "{input_filename_base}.gcode", + "wall_loops": "3", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "40", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "nearest", + "skirt_distance": "2", + "skirt_height": "2", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.45", + "internal_solid_infill_speed": "40", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0", + "support_interface_speed": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2", + "support_speed": "40", + "support_threshold_angle": "40", + "support_object_xy_distance": "0.5", + "detect_thin_wall": "0", + "top_surface_line_width": "0.4", + "top_surface_speed": "30", + "travel_speed": "400", + "enable_prime_tower": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_common.json index 37459837e..3a182a888 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_common.json @@ -1,103 +1,103 @@ -{ - "type": "process", - "name": "fdm_process_qidi_common", - "from": "system", - "instantiation": "false", - "inherits": "fdm_process_common", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bridge_flow": "1", - "bridge_speed": "25", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "500", - "top_surface_acceleration": "500", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", - "travel_acceleration": "700", - "inner_wall_acceleration": "500", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "1", - "minimum_sparse_infill_area": "15", - "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": "default", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "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": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "initial_layer_speed": "15", - "initial_layer_infill_speed": "20", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "50", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0" -} +{ + "type": "process", + "name": "fdm_process_qidi_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "top_surface_acceleration": "500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "700", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "15", + "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": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "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": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "15", + "initial_layer_infill_speed": "20", + "outer_wall_speed": "25", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "50", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "35", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json index bf373c0c9..9399abfda 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -4,36 +4,35 @@ "from": "system", "instantiation": "false", "inherits": "fdm_process_qidi_common", - "default_acceleration": "7000", - "top_surface_acceleration": "5000", - "initial_layer_acceleration": "1000", - "travel_acceleration": "10000", - "inner_wall_acceleration": "7000", - "outer_wall_acceleration": "5000", - "travel_speed": "500", - "initial_layer_speed": "50", - "initial_layer_infill_speed": "80", - "outer_wall_speed": "150", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "top_surface_speed": "120", - "gap_infill_speed": "150", - "sparse_infill_speed": "300", - "support_speed": "80", - "support_interface_speed": "100%", - "ironing_speed": "15", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "default_acceleration": "7000", + "top_surface_acceleration": "5000", + "initial_layer_acceleration": "1000", + "travel_acceleration": "10000", + "inner_wall_acceleration": "7000", + "outer_wall_acceleration": "5000", + "travel_speed": "500", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "150", + "inner_wall_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "120", + "gap_infill_speed": "150", + "sparse_infill_speed": "300", + "support_speed": "80", + "support_interface_speed": "100%", + "ironing_speed": "15", + "bridge_speed": "25", "default_jerk": "9", "initial_layer_jerk": "9", - "outer_wall_jerk": "7", - "infill_jerk": "12", + "outer_wall_jerk": "7", + "infill_jerk": "12", "travel_jerk": "12", - "inner_wall_jerk": "7", - "top_surface_jerk": "9", + "inner_wall_jerk": "7", + "top_surface_jerk": "9", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "overhang_1_4_speed": "80%", + "overhang_1_4_speed": "80", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "10" diff --git a/resources/profiles/Tronxy/filament/Tronxy Generic ABS.json b/resources/profiles/Tronxy/filament/Tronxy Generic ABS.json index d2990aef4..ba948656d 100644 --- a/resources/profiles/Tronxy/filament/Tronxy Generic ABS.json +++ b/resources/profiles/Tronxy/filament/Tronxy Generic ABS.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFB99", - "setting_id": "GFSB99_00", - "name": "Tronxy Generic ABS", + "setting_id": "GFSB99_CREALITY_00", + "name": "Generic ABS @Creality", "from": "system", "instantiation": "true", "inherits": "fdm_filament_abs", @@ -13,6 +13,15 @@ "12" ], "compatible_printers": [ - "Tronxy X5SA 400 0.4 nozzle" + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Tronxy/process/0.12mm Fine @Tronxy.json b/resources/profiles/Tronxy/process/0.12mm Fine @Tronxy.json deleted file mode 100644 index 3049d05f8..000000000 --- a/resources/profiles/Tronxy/process/0.12mm Fine @Tronxy.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "process", - "setting_id": "GP002", - "name": "0.12mm Fine @Tronxy", - "from": "system", - "instantiation": "true", - "inherits": "fdm_process_common", - "layer_height": "0.12", - "bottom_shell_layers": "5", - "top_shell_layers": "6" -} diff --git a/resources/profiles/Tronxy/process/0.15mm Optimal @Tronxy.json b/resources/profiles/Tronxy/process/0.15mm Optimal @Tronxy.json deleted file mode 100644 index 1ee3b788e..000000000 --- a/resources/profiles/Tronxy/process/0.15mm Optimal @Tronxy.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "process", - "setting_id": "GP003", - "name": "0.15mm Optimal @Tronxy", - "from": "system", - "instantiation": "true", - "inherits": "fdm_process_common", - "bottom_shell_layers": "4", - "top_shell_layers": "5", - "layer_height": "0.15" -} diff --git a/resources/profiles/Tronxy/process/0.20mm Standard @Tronxy.json b/resources/profiles/Tronxy/process/0.20mm Standard @Tronxy.json deleted file mode 100644 index 59d6ae93a..000000000 --- a/resources/profiles/Tronxy/process/0.20mm Standard @Tronxy.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Tronxy", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "layer_height": "0.2", - "bottom_shell_layers": "3", - "top_shell_layers": "4" -} diff --git a/resources/profiles/Tronxy/process/0.24mm Draft @Tronxy.json b/resources/profiles/Tronxy/process/0.24mm Draft @Tronxy.json deleted file mode 100644 index 98d9bfbff..000000000 --- a/resources/profiles/Tronxy/process/0.24mm Draft @Tronxy.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "process", - "setting_id": "GP005", - "name": "0.24mm Draft @Tronxy", - "from": "system", - "instantiation": "true", - "inherits": "fdm_process_common", - "layer_height": "0.24", - "top_surface_line_width": "0.45", - "bottom_shell_layers": "3", - "top_shell_layers": "4" -} diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 31cfd6685..d16eb8f42 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "01.06.05.02", + "version": "01.07.00.01", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ @@ -72,77 +72,77 @@ "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": "Voron Generic PLA", - "sub_path": "filament/Voron Generic PLA.json" + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" }, { - "name": "Voron Generic PLA-CF", - "sub_path": "filament/Voron Generic PLA-CF.json" + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" }, { - "name": "Voron Generic PETG", - "sub_path": "filament/Voron Generic PETG.json" + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Voron Generic ABS", - "sub_path": "filament/Voron Generic ABS.json" + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" }, { - "name": "Voron Generic TPU", - "sub_path": "filament/Voron Generic TPU.json" + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Voron Generic ASA", - "sub_path": "filament/Voron Generic ASA.json" + "name": "Generic ABS @Voron", + "sub_path": "filament/Generic ABS @Voron.json" }, { - "name": "Voron Generic PC", - "sub_path": "filament/Voron Generic PC.json" + "name": "Generic ASA @Voron", + "sub_path": "filament/Generic ASA @Voron.json" }, { - "name": "Voron Generic PVA", - "sub_path": "filament/Voron Generic PVA.json" + "name": "Generic PA @Voron", + "sub_path": "filament/Generic PA @Voron.json" }, { - "name": "Voron Generic PA", - "sub_path": "filament/Voron Generic PA.json" + "name": "Generic PA-CF @Voron", + "sub_path": "filament/Generic PA-CF @Voron.json" }, { - "name": "Voron Generic PA-CF", - "sub_path": "filament/Voron Generic PA-CF.json" + "name": "Generic PC @Voron", + "sub_path": "filament/Generic PC @Voron.json" + }, + { + "name": "Generic PETG @Voron", + "sub_path": "filament/Generic PETG @Voron.json" + }, + { + "name": "Generic PLA @Voron", + "sub_path": "filament/Generic PLA @Voron.json" + }, + { + "name": "Generic PLA-CF @Voron", + "sub_path": "filament/Generic PLA-CF @Voron.json" + }, + { + "name": "Generic PVA @Voron", + "sub_path": "filament/Generic PVA @Voron.json" + }, + { + "name": "Generic TPU @Voron", + "sub_path": "filament/Generic TPU @Voron.json" } ], "machine_list": [ diff --git a/resources/profiles/Voron/filament/Generic ABS @Voron.json b/resources/profiles/Voron/filament/Generic ABS @Voron.json new file mode 100644 index 000000000..a29229971 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic ABS @Voron.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_VORON_00", + "name": "Generic ABS @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic ASA @Voron.json b/resources/profiles/Voron/filament/Generic ASA @Voron.json new file mode 100644 index 000000000..51a777c45 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic ASA @Voron.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSB98_VORON_00", + "name": "Generic ASA @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PA @Voron.json b/resources/profiles/Voron/filament/Generic PA @Voron.json new file mode 100644 index 000000000..6b57e1748 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PA @Voron.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSN99_VORON_00", + "name": "Generic PA @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PA-CF @Voron.json b/resources/profiles/Voron/filament/Generic PA-CF @Voron.json new file mode 100644 index 000000000..246cf10c5 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PA-CF @Voron.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSN98_VORON_00", + "name": "Generic PA-CF @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PC @Voron.json b/resources/profiles/Voron/filament/Generic PC @Voron.json new file mode 100644 index 000000000..5b45a164e --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PC @Voron.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSC99_VORON_00", + "name": "Generic PC @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PETG @Voron.json b/resources/profiles/Voron/filament/Generic PETG @Voron.json new file mode 100644 index 000000000..e3b86bfa3 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PETG @Voron.json @@ -0,0 +1,39 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_VORON_00", + "name": "Generic PETG @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PLA @Voron.json b/resources/profiles/Voron/filament/Generic PLA @Voron.json new file mode 100644 index 000000000..bad7d6ef8 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PLA @Voron.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99_VORON_00", + "name": "Generic PLA @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PLA-CF @Voron.json b/resources/profiles/Voron/filament/Generic PLA-CF @Voron.json new file mode 100644 index 000000000..2e2805c4b --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PLA-CF @Voron.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98_VORON_00", + "name": "Generic PLA-CF @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic PVA @Voron.json b/resources/profiles/Voron/filament/Generic PVA @Voron.json new file mode 100644 index 000000000..1807c465a --- /dev/null +++ b/resources/profiles/Voron/filament/Generic PVA @Voron.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSS99_VORON_00", + "name": "Generic PVA @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Generic TPU @Voron.json b/resources/profiles/Voron/filament/Generic TPU @Voron.json new file mode 100644 index 000000000..53bc48bc5 --- /dev/null +++ b/resources/profiles/Voron/filament/Generic TPU @Voron.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSU99_VORON_00", + "name": "Generic TPU @Voron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Voron 2.4 250 0.4 nozzle", + "Voron 2.4 300 0.4 nozzle", + "Voron 2.4 350 0.4 nozzle", + "Voron Trident 250 0.4 nozzle", + "Voron Trident 300 0.4 nozzle", + "Voron Trident 350 0.4 nozzle", + "Voron 0.1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Voron Generic ABS.json b/resources/profiles/Voron/filament/Voron Generic ABS.json deleted file mode 100644 index 0d05960e1..000000000 --- a/resources/profiles/Voron/filament/Voron Generic ABS.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "GFSA04", - "name": "Voron Generic ABS", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic ASA.json b/resources/profiles/Voron/filament/Voron Generic ASA.json deleted file mode 100644 index 5a05b4511..000000000 --- a/resources/profiles/Voron/filament/Voron Generic ASA.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB98", - "setting_id": "GFSA04", - "name": "Voron Generic ASA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_asa", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic PA-CF.json b/resources/profiles/Voron/filament/Voron Generic PA-CF.json deleted file mode 100644 index bdf028e40..000000000 --- a/resources/profiles/Voron/filament/Voron Generic PA-CF.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN98", - "setting_id": "GFSA04", - "name": "Voron Generic PA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], -"compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic PA.json b/resources/profiles/Voron/filament/Voron Generic PA.json deleted file mode 100644 index bf1bf35dd..000000000 --- a/resources/profiles/Voron/filament/Voron Generic PA.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN99", - "setting_id": "GFSA04", - "name": "Voron Generic PA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], -"compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic PC.json b/resources/profiles/Voron/filament/Voron Generic PC.json deleted file mode 100644 index 772c4f307..000000000 --- a/resources/profiles/Voron/filament/Voron Generic PC.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFC99", - "setting_id": "GFSA04", - "name": "Voron Generic PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], -"compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic PLA-CF.json b/resources/profiles/Voron/filament/Voron Generic PLA-CF.json deleted file mode 100644 index 3f24172e6..000000000 --- a/resources/profiles/Voron/filament/Voron Generic PLA-CF.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL98", - "setting_id": "GFSA04", - "name": "Voron Generic PLA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], -"compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/Voron Generic TPU.json b/resources/profiles/Voron/filament/Voron Generic TPU.json deleted file mode 100644 index 3459d4584..000000000 --- a/resources/profiles/Voron/filament/Voron Generic TPU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFU99", - "setting_id": "GFSA04", - "name": "Voron Generic TPU", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Voron/filament/fdm_filament_common.json b/resources/profiles/Voron/filament/fdm_filament_common.json index 9f7797511..c48b23ada 100644 --- a/resources/profiles/Voron/filament/fdm_filament_common.json +++ b/resources/profiles/Voron/filament/fdm_filament_common.json @@ -111,9 +111,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], diff --git a/resources/profiles/Voron/machine/Voron 0.1.json b/resources/profiles/Voron/machine/Voron 0.1.json index 6a3d37f83..3c989b66c 100644 --- a/resources/profiles/Voron/machine/Voron 0.1.json +++ b/resources/profiles/Voron/machine/Voron 0.1.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_v0_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron 2.4 250.json b/resources/profiles/Voron/machine/Voron 2.4 250.json index 5099f066d..a43497dde 100644 --- a/resources/profiles/Voron/machine/Voron 2.4 250.json +++ b/resources/profiles/Voron/machine/Voron 2.4 250.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron 2.4 300.json b/resources/profiles/Voron/machine/Voron 2.4 300.json index 37d3632e0..4b9c5b1d7 100644 --- a/resources/profiles/Voron/machine/Voron 2.4 300.json +++ b/resources/profiles/Voron/machine/Voron 2.4 300.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron 2.4 350.json b/resources/profiles/Voron/machine/Voron 2.4 350.json index 228bfbc8f..bb9c87ab4 100644 --- a/resources/profiles/Voron/machine/Voron 2.4 350.json +++ b/resources/profiles/Voron/machine/Voron 2.4 350.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron Trident 250.json b/resources/profiles/Voron/machine/Voron Trident 250.json index 0fd8baac1..7dd1351d9 100644 --- a/resources/profiles/Voron/machine/Voron Trident 250.json +++ b/resources/profiles/Voron/machine/Voron Trident 250.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron Trident 300.json b/resources/profiles/Voron/machine/Voron Trident 300.json index a84801a9f..20f26eb17 100644 --- a/resources/profiles/Voron/machine/Voron Trident 300.json +++ b/resources/profiles/Voron/machine/Voron Trident 300.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/machine/Voron Trident 350.json b/resources/profiles/Voron/machine/Voron Trident 350.json index 2cce35b6a..7d513d419 100644 --- a/resources/profiles/Voron/machine/Voron Trident 350.json +++ b/resources/profiles/Voron/machine/Voron Trident 350.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "voron_logo.png", "hotend_model": "", - "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" + "default_materials": "Generic ABS @Voron;Generic PLA @Voron;Generic PLA-CF @Voron;Generic PETG @Voron;Generic TPU @Voron;Generic ASA @Voron;Generic PC @Voron;Generic PVA @Voron;Generic PA @Voron;Generic PA-CF @Voron" } diff --git a/resources/profiles/Voron/process/fdm_process_voron_common.json b/resources/profiles/Voron/process/fdm_process_voron_common.json index 48d8772e9..46eab02b0 100644 --- a/resources/profiles/Voron/process/fdm_process_voron_common.json +++ b/resources/profiles/Voron/process/fdm_process_voron_common.json @@ -12,7 +12,6 @@ "bottom_shell_thickness": "0", "bridge_flow": "0.95", "bridge_speed": "25", - "internal_bridge_speed" : "70", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -46,7 +45,7 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "80%", + "overhang_1_4_speed": "80", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index 053f25050..0e593d809 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,6 @@ { "name": "Voxelab", - "url": "", - "version": "01.06.00.00", + "version": "01.07.00.02", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ @@ -42,16 +41,16 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Voxelab Generic ABS", - "sub_path": "filament/Voxelab Generic ABS.json" + "name": "Generic ABS @Voxelab", + "sub_path": "filament/Generic ABS @Voxelab.json" }, { - "name": "Voxelab Generic PETG", - "sub_path": "filament/Voxelab Generic PETG.json" + "name": "Generic PETG @Voxelab", + "sub_path": "filament/Generic PETG @Voxelab.json" }, { - "name": "Voxelab Generic PLA", - "sub_path": "filament/Voxelab Generic PLA.json" + "name": "Generic PLA @Voxelab", + "sub_path": "filament/Generic PLA @Voxelab.json" } ], "machine_list": [ diff --git a/resources/profiles/Voxelab/filament/Generic ABS @Voxelab.json b/resources/profiles/Voxelab/filament/Generic ABS @Voxelab.json new file mode 100644 index 000000000..02386fe7a --- /dev/null +++ b/resources/profiles/Voxelab/filament/Generic ABS @Voxelab.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSB99_Voxelab_00", + "name": "Generic ABS @Voxelab", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Voxelab Aquila X2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voxelab/filament/Generic PETG @Voxelab.json b/resources/profiles/Voxelab/filament/Generic PETG @Voxelab.json new file mode 100644 index 000000000..b40a81d04 --- /dev/null +++ b/resources/profiles/Voxelab/filament/Generic PETG @Voxelab.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99_Voxelab_00", + "name": "Generic PETG @Voxelab", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "compatible_printers": [ + "Voxelab Aquila X2 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Voron/filament/Voron Generic PLA.json b/resources/profiles/Voxelab/filament/Generic PLA @Voxelab.json similarity index 50% rename from resources/profiles/Voron/filament/Voron Generic PLA.json rename to resources/profiles/Voxelab/filament/Generic PLA @Voxelab.json index ad8cbc0b1..0f6ec682e 100644 --- a/resources/profiles/Voron/filament/Voron Generic PLA.json +++ b/resources/profiles/Voxelab/filament/Generic PLA @Voxelab.json @@ -1,8 +1,8 @@ { "type": "filament", "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "Voron Generic PLA", + "setting_id": "GFSL99_Voxelab_00", + "name": "Generic PLA @Voxelab", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", @@ -10,18 +10,12 @@ "0.98" ], "filament_max_volumetric_speed": [ - "12" + "15" ], "slow_down_layer_time": [ "8" ], "compatible_printers": [ - "Voron 2.4 250 0.4 nozzle", - "Voron 2.4 300 0.4 nozzle", - "Voron 2.4 350 0.4 nozzle", - "Voron Trident 250 0.4 nozzle", - "Voron Trident 300 0.4 nozzle", - "Voron Trident 350 0.4 nozzle", - "Voron 0.1 0.4 nozzle" + "Voxelab Aquila X2 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Voxelab/filament/fdm_filament_common.json b/resources/profiles/Voxelab/filament/fdm_filament_common.json index 823c736e8..3e6a21071 100644 --- a/resources/profiles/Voxelab/filament/fdm_filament_common.json +++ b/resources/profiles/Voxelab/filament/fdm_filament_common.json @@ -111,9 +111,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], diff --git a/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json b/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json index 23674b2f2..faf9f6790 100644 --- a/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json +++ b/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json @@ -1,109 +1,112 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Voxelab Aquila X2 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Voxelab Aquila X2", - "default_print_profile": "0.20mm Standard @Voxelab AquilaX2", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "500", - "500" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1000" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "500" - ], - "machine_max_acceleration_y": [ - "500", - "500" - ], - "machine_max_acceleration_z": [ - "100", - "100" - ], - "machine_max_speed_e": [ - "60", - "60" - ], - "machine_max_speed_x": [ - "500", - "500" - ], - "machine_max_speed_y": [ - "500", - "500" - ], - "machine_max_speed_z": [ - "10", - "10" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "0.4", - "0.4" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "Voxelab", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Voxelab Generic PLA" - ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", - "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", - "scan_first_layer": "0" + "type": "machine", + "setting_id": "GM_Voxelab_001", + "name": "Voxelab Aquila X2 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Voxelab Aquila X2", + "default_print_profile": "0.20mm Standard @Voxelab AquilaX2", + "extruder_type": [ + "Bowden" + ], + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "500", + "500" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1000" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "500" + ], + "machine_max_acceleration_y": [ + "500", + "500" + ], + "machine_max_acceleration_z": [ + "100", + "100" + ], + "machine_max_speed_e": [ + "60", + "60" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "10", + "10" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "0.4", + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Voxelab", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Generic PLA @Voxelab" + ], + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", + "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", + "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Voxelab/machine/Voxelab Aquila X2.json b/resources/profiles/Voxelab/machine/Voxelab Aquila X2.json index 0f4b34926..09585e822 100644 --- a/resources/profiles/Voxelab/machine/Voxelab Aquila X2.json +++ b/resources/profiles/Voxelab/machine/Voxelab Aquila X2.json @@ -8,5 +8,5 @@ "bed_model": "voxelab_aquilax2_buildplate_model.stl", "bed_texture": "voxelab_aquilax2_buildplate_texture.png", "hotend_model": "", - "default_materials": "Voxelab Generic ABS;Voxelab Generic PETG;Voxelab Generic PLA" + "default_materials": "Generic ABS @Voxelab;Generic PETG @Voxelab;Generic PLA @Voxelab" } diff --git a/resources/profiles/Voxelab/machine/fdm_machine_common.json b/resources/profiles/Voxelab/machine/fdm_machine_common.json index 56e8374ef..31fc61df8 100644 --- a/resources/profiles/Voxelab/machine/fdm_machine_common.json +++ b/resources/profiles/Voxelab/machine/fdm_machine_common.json @@ -112,7 +112,6 @@ ], "z_lift_type": "NormalLift", "default_print_profile": "", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", "machine_end_gcode": "" } diff --git a/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json b/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json index 6f0a07e2c..9abeb2034 100644 --- a/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json @@ -1,109 +1,109 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Voxelab AquilaX2", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.85", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "outer_wall_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "40", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.38", - "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Voxelab Aquila X2 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_Voxelab_004", + "name": "0.16mm Optimal @Voxelab AquilaX2", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.85", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "outer_wall_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "40", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.38", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Voxelab Aquila X2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json b/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json index 029a0a33e..bac47669c 100644 --- a/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json @@ -1,109 +1,109 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Voxelab AquilaX2", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bridge_flow": "0.85", - "bridge_speed": "25", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "0", - "outer_wall_acceleration": "0", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "0", - "travel_acceleration": "0", - "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "2", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.19", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "3", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.2", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "40", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "40", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.38", - "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Voxelab Aquila X2 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP_Voxelab_005", + "name": "0.20mm Standard @Voxelab AquilaX2", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.85", + "bridge_speed": "25", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "0", + "outer_wall_acceleration": "0", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "[input_filename_base].gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.19", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "40", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.38", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Voxelab Aquila X2 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/check_duplicated_setting_id.py b/resources/profiles/check_duplicated_setting_id.py new file mode 100644 index 000000000..f263d766d --- /dev/null +++ b/resources/profiles/check_duplicated_setting_id.py @@ -0,0 +1,44 @@ +#by chatGPT +import os +import json + +# 定义一个空列表,用于存储所有的 setting_id +setting_id_values = [] + +# 定义递归函数 +def traverse_files(path): + for file in os.listdir(path): + file_path = os.path.join(path, file) + if os.path.isdir(file_path): + traverse_files(file_path) # 递归遍历子文件夹 + elif file_path.endswith('.json'): + # 解析 JSON 文件并提取 setting_id 的值 + with open(file_path) as f: + try: + data = json.load(f) + if 'setting_id' in data: + setting_id = data['setting_id'] + if isinstance(setting_id, str): + setting_id_values.append(setting_id) + #print(f"Found setting_id value: {setting_id}") + except (KeyError, json.JSONDecodeError): + pass + +# 从当前目录开始遍历 +traverse_files('.') + +from collections import Counter + +# 统计每个 setting_id 出现的次数 +setting_id_counts = Counter(setting_id_values) + +# 找出出现次数大于 1 的 setting_id +duplicated_setting_ids = [setting_id for setting_id, count in setting_id_counts.items() if count > 1] + +# 输出重复的 setting_id +if len(duplicated_setting_ids) > 0: + print("Found duplicated setting_id values:") + for setting_id in duplicated_setting_ids: + print(setting_id) +else: + print("No duplicated setting_id values.") \ No newline at end of file diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs index 3aa2b0294..3f12a6e92 100644 --- a/resources/shaders/gouraud.fs +++ b/resources/shaders/gouraud.fs @@ -4,6 +4,8 @@ const vec3 ZERO = vec3(0.0, 0.0, 0.0); //BBS: add grey and orange //const vec3 GREY = vec3(0.9, 0.9, 0.9); const vec3 ORANGE = vec3(0.8, 0.4, 0.0); +const vec3 LightRed = vec3(0.78, 0.0, 0.0); +const vec3 LightBlue = vec3(0.73, 1.0, 1.0); const float EPSILON = 0.0001; struct PrintVolumeDetection @@ -58,13 +60,19 @@ void main() vec3 color = uniform_color.rgb; float alpha = uniform_color.a; - if (slope.actived && world_normal_z < slope.normal_z - EPSILON) { - //color = vec3(0.7, 0.7, 1.0); - color = ORANGE; - alpha = 1.0; + if (slope.actived) { + if(world_pos.z<0.1&&world_pos.z>-0.1) + { + color = LightBlue; + alpha = 0.8; + } + else if( world_normal_z < slope.normal_z - EPSILON) + { + color = color * 0.5 + LightRed * 0.5; + alpha = 0.8; + } } - - // if the fragment is outside the print volume -> use darker color + // if the fragment is outside the print volume -> use darker color vec3 pv_check_min = ZERO; vec3 pv_check_max = ZERO; if (print_volume.type == 0) { @@ -85,7 +93,7 @@ void main() if (is_outline) gl_FragColor = uniform_color; #ifdef ENABLE_ENVIRONMENT_MAP - else if (use_environment_tex) + else if (use_environment_tex) gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha); #endif else diff --git a/resources/shaders/mm_gouraud.fs b/resources/shaders/mm_gouraud.fs index fa1b03f47..4a74d75b5 100644 --- a/resources/shaders/mm_gouraud.fs +++ b/resources/shaders/mm_gouraud.fs @@ -19,12 +19,13 @@ const float EPSILON = 0.0001; //BBS: add grey and orange //const vec3 GREY = vec3(0.9, 0.9, 0.9); const vec3 ORANGE = vec3(0.8, 0.4, 0.0); - +const vec3 LightRed = vec3(0.78, 0.0, 0.0); +const vec3 LightBlue = vec3(0.73, 1.0, 1.0); uniform vec4 uniform_color; varying vec3 clipping_planes_dots; varying vec4 model_pos; - +varying vec4 world_pos; uniform bool volume_mirrored; struct SlopeDetection @@ -43,20 +44,24 @@ void main() float alpha = uniform_color.a; vec3 triangle_normal = normalize(cross(dFdx(model_pos.xyz), dFdy(model_pos.xyz))); -#ifdef FLIP_TRIANGLE_NORMALS - triangle_normal = -triangle_normal; -#endif - - vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); - if (slope.actived && transformed_normal.z < slope.normal_z - EPSILON) { - //color = vec3(0.7, 0.7, 1.0); - color = color * 0.5 + ORANGE * 0.5; - alpha = 1.0; - } - if (volume_mirrored) + { triangle_normal = -triangle_normal; - + } + vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); + + if (slope.actived) { + if(world_pos.z<0.1&&world_pos.z>-0.1) + { + color = LightBlue; + alpha = 1.0; + } + else if( transformed_normal.z < slope.normal_z - EPSILON) + { + color = color * 0.5 + LightRed * 0.5; + alpha = 1.0; + } + } // First transform the normal into camera space and normalize the result. vec3 eye_normal = normalize(gl_NormalMatrix * triangle_normal); diff --git a/resources/shaders/mm_gouraud.vs b/resources/shaders/mm_gouraud.vs index 0c222cffb..5929c88be 100644 --- a/resources/shaders/mm_gouraud.vs +++ b/resources/shaders/mm_gouraud.vs @@ -10,7 +10,7 @@ uniform vec4 clipping_plane; varying vec3 clipping_planes_dots; varying vec4 model_pos; - +varying vec4 world_pos; struct SlopeDetection { bool actived; @@ -22,7 +22,7 @@ void main() { model_pos = gl_Vertex; // Point in homogenous coordinates. - vec4 world_pos = volume_world_matrix * gl_Vertex; + world_pos = volume_world_matrix * gl_Vertex; gl_Position = ftransform(); // Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded. diff --git a/resources/tooltip/privacyupdate.html b/resources/tooltip/privacyupdate.html index c67ccf83f..c76e432b2 100644 --- a/resources/tooltip/privacyupdate.html +++ b/resources/tooltip/privacyupdate.html @@ -23,7 +23,8 @@ function SwitchDarkMode(is_dark_mode) { - document.getElementById("content").style.backgroundColor = is_dark_mode ? "#36363C" : "#F8F8F8"; + document.getElementById("content").style.backgroundColor = is_dark_mode ? "#36363C" : "#F8F8F8"; + document.getElementById("content").style.color = is_dark_mode ? "#FFFFFF" : "#000000"; } diff --git a/resources/web/agreement/page.html b/resources/web/agreement/page.html new file mode 100644 index 000000000..06224ab41 --- /dev/null +++ b/resources/web/agreement/page.html @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 26f6b7ce5..7effab0f5 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -1,564 +1,323 @@ var LangText={ - "en":{ - "t1":"Welcome to Orca Slicer", - "t2":"Orca Slicer will be setup in several steps. Let's start!", - "t3":"User Agreement", - "t4":"Disagree", - "t5":"Agree", - "t6":"We kindly request your help to improve
everyone's printing", - "t7":"Allow sending anonymous data", - "t8":"Back", - "t9":"Next", - "t10":"Printer Selection", - "t11":"All", - "t12":"Clear all", - "t13":"mm nozzle", - "t14":"Filament Selection", - "t15":"Printer", - "t16":"Filament type", - "t17":"Vendor", - "t18":"error", - "t19":"At least one filament must be selected.", - "t20":"Do you want to use default filament ?", - "t21":"yes", - "t22":"no", - "t23":"Release note", - "t24":"Get Started", - "t25":"Finish", - "t26":"Login", - "t27":"Register", - "t28":"Recent", - "t29":"Mall", - "t30":"Manual", - "t31":"New Project", - "t32":"Create new project", - "t33":"Open Project", - "t34":"hotspot", - "t35":"Recently opened", - "t36":"ok", - "t37":"At least one printer must be selected.", - "t38":"Cancel", - "t39":"Confirm", - "t40":"Network disconnect, please check and try again later.", - "t47":"Please select your login region", - "t48":"Asia-Pacific", - "t49":"China", - "t50":"Log out", - "t52":"Skip", - "t53":"Join", - "t54":"In the 3D Printing community, we learn from each other's successes and failures to adjust our own slicing parameters and settings. Orca Slicer follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training Orca Slicer 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 ", - "t55":"Privacy Policy", - "t56":". 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.", - "t57":"", - "t58":"", - "t59":".", - "t60":"Europe", - "t61":"North America", - "t62":"Others", - "t63":"After changing the region, your account will be logged out. Please log in again later.", - "t64":"Bambu Network plug-in", - "t65":"Sending print job via WLAN", - "t66":"Full remote control", - "t67":"Liveview streaming", - "t68":"User data synchronization", - "t69":"Install Bambu Network plug-in", - "t70":"", - "t71":"Downloading", - "t72":"Downloading failed", - "t73":"Installation successful.", - "t74":"Restart", - "t75":"Bambu Network plug-in provides the following features:", - "t76":"Bambu Network plug-in not detected. Click ", - "t77":"here", - "t78":" to install it.", - "t79":"Failed to install plug-in. ", - "t80":"Try the following steps:", - "t81":"1, Click ", - "t82":" to open the plug-in directory", - "t83":"2, Close all open Orca Slicer", - "t84":"3, Delete all files under the plug-in directory", - "t85":"4, Reopen Orca Slicer and install the plug-in again", - "t86":"Close", - "t87":"User Manual", - "t88":"Remove", - "t89":"Open Containing Folder", - "t90":"3D Model", - "t91":"Download 3D models", - "t92":"Bambu Christmas Cabin", - "t93":"Printer Connection", - "t94":"Please set up your printer connection to view the device." - }, - "es_ES":{ - "t1":"Bienvenido a Orca Slicer", - "t2":"Va a configurar Orca Slicer mediante varios pasos. ¡Vamos a comenzar!", - "t3":"Terminos de usuario", - "t4":"Estoy en desacuerdo", - "t5":"Estoy de deacuerdo", - "t6":"Le rogamos su ayuda para mejorar
la experiencia de impresión de todos", - "t7":"Permitir enviar datos anónimos", - "t8":"Volver", - "t9":"Siguiente", - "t10":"Seleccionar impresora", - "t11":"Todo", - "t12":"Limpiar todo", - "t13":"mm de boquilla", - "t14":"Seleccionar filamento", - "t15":"Impresora", - "t16":"Tipo de filamento", - "t17":"Fabricante", - "t18":"error", - "t19":"Al menos se debe seleccionar un filamento.", - "t20":"¿Desea usar el filamento por defecto?", - "t21":"sí", - "t22":"no", - "t23":"Notas de lanzamiento", - "t24":"Comencemos", - "t25":"Finalizar", - "t26":"Ingresar", - "t27":"Registro", - "t28":"Reciente", - "t29":"Tienda", - "t30":"Manual", - "t31":"Nuevo proyecto", - "t32":"Crear nuevo proyecto", - "t33":"Abrir proyecto", - "t34":"punto de acceso", - "t35":"Abiertos recientemente", - "t36":"ok", - "t37":"Al menos se debe seleccionar una impresora.", - "t38":"Cancelar", - "t39":"Confirmar", - "t40":"Desconectado, por favor compruebe la conexión de red e inténtelo de nuevo.", - "t47":"Por favor, seleccione su región:", - "t48":"Asia-Pacífico", - "t49":"China", - "t50":"Desconectarse", - "t52":"Saltar", - "t53":"Ingresar", - "t54":"En la comunidad de impresión 3D, pordemos aprender de los logros y los fallos de otros para obtener nuestros propios parametros y configuraciones de Orca Slicer follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training Orca Slicer 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 ", - "t55":"Política de privacidad", - "t56":". No recolectaremos ningún tipo de dato personal con el que se le pueda identificar directa o indirectamente, incluyendo nombre, direcciones, información de pago, o números de teléfono. Activando este servicio, si está de acuerdo en estos términos y los acuerdos sobre Política y Privacidad.", - "t57":"", - "t58":"", - "t59":".", - "t60":"Europa", - "t61":"Norte América", - "t62":"Otras", - "t63":"Después de cambiar de región, su cuenta será desconectada. por favor, vuelva a ingresar.", - "t64":"Complemento de red Bambú", - "t65":"", - "t66":"Control remoto total", - "t67":"Retransmisión en vivo", - "t68":"Sincronización de datos de usuario", - "t69":"Instalar complemento de red Bambú", - "t70":"", - "t71":"Descargando", - "t72":"Descarga fallida", - "t73":"Instalación exitosa.", - "t74":"Reiniciar", - "t75":"El complemento de red Bambú proporciona las siguientes carácteristicas:", - "t76":"Complemento de red Bambú no encontrado. Presione ", - "t77":"aquí", - "t78":" para instalarlo.", - "t79":"Fallo al instalar el complemento. ", - "t80":"Intente los siguientes pasos:", - "t81":"1, Presionar ", - "t82":" para abrir el directorio de complementos", - "t83":"2, Cerrar todos los Orca Slicer abiertos", - "t84":"3, Borrar todos los archivos en el directorio de complementos", - "t85":"4, Reabrir Orca Slicer e instalar el complemento de nuevo", - "t86":"Cerrar", - "t87":"Manual de usuario", - "t88":"Borrar", - "t89":"Abrir carpeta contenedora", - "t90":"Modelo 3D", - "t91":"Descargar modelos 3D", - "t92":"Cabina Bambú de Navidad", - "t93":"Conexión de Impresora", - "t94":"Por favor, configure la conexión de red de la impresora para encontrarla." - }, - "de_DE":{ - "t1":"Willkommen im Orca Slicer", - "t2":"Das Orca Slicer wird in mehreren Schritten eingerichtet. Lass uns anfangen!", - "t3":"Nutzervereinbarung", - "t4":"Ablehnen", - "t5":"Zustimmen", - "t6":"Wir bitten um deine Hilfe, um den Druck für alle zu verbessern", - "t7":"Anonyme Daten senden erlauben", - "t8":"Zurück", - "t9":"Weiter", - "t10":"Druckerauswahl", - "t11":"Alle", - "t12":"Keinen", - "t13":"mm Düse", - "t14":"Filamentauswahl", - "t15":"Drucker", - "t16":"Filamenttyp", - "t17":"Hersteller", - "t18":"Fehler", - "t19":"Es muss mindestens ein Filament ausgewählt sein.", - "t20":"Möchten Sie das Standard-Filament verwenden?", - "t21":"Ja", - "t22":"Nein", - "t23":"Versionshinweise", - "t24":"Loslegen", - "t25":"Fertig", - "t26":"Anmelden", - "t27":"Registrieren", - "t28":"Neueste", - "t29":"Einkaufszentrum", - "t30":"Handbuch", - "t31":"Neues Projekt", - "t32":"Neues Projekt erstellen", - "t33":"Projekt öffnen", - "t34":"Hotspot", - "t35":"Zuletzt geöffnet", - "t36":"OK", - "t37":"Es muss mindestens ein Drucker ausgewählt sein.", - "t38":"Abbrechen", - "t39":"Bestätigen", - "t40":"Netzwerkunterbrechung, bitte überprüfen und später erneut versuchen.", - "t47":"Bitte wählen Sie Ihre Login-Region aus", - "t48":"Asien-Pazifik", - "t49":"China", - "t50":"Abmelden", - "t52":"Überspringen", - "t53":"Beitreten", - "t54":"In der 3D-Druck-Community lernen wir aus den Erfolgen und Misserfolgen der anderen Benutzer, um unsere eigenen Schneideparameter und Einstellungen anzupassen. Orca Slicer folgt demselben Prinzip und verbessert seine Leistung durch die Erfolge und Misserfolge der Vielzahl von Drucken unserer Benutzer mittels maschinellem Lernen. Wir trainieren Orca Slicer, indem wir ihnen die realen Daten zuführen. Wenn Sie bereit sind, greift dieser Dienst auf Informationen aus Ihren Fehler- und Nutzungsprotokollen zu, die Informationen enthalten können, die in der ", - "t55":"Datenschutzrichtlinie", - "t56": ". Wir werden keine personenbezogenen Daten sammeln, durch die eine Person direkt oder indirekt identifiziert werden kann, einschließlich, aber nicht beschränkt auf Namen, Adressen, Zahlungsinformationen oder Telefonnummern. Durch Aktivieren dieses Dienstes stimmen Sie diesen Bedingungen und der Erklärung zur Datenschutzrichtlinie zu.", - "t57": "", - "t58": "", - "t59": ".", - "t60": "Europa", - "t61": "Nordamerika", - "t62": "Andere", - "t63": "Nach Ändern der Region wird Ihr Konto abgemeldet. Bitte melden Sie sich später erneut an.", - "t64": "Bambu Network-Plug-in", - "t65": "Senden von Druckaufträgen über WLAN", - "t66": "Vollständige Fernsteuerung", - "t67": "Live-View-Streaming", - "t68": "Synchronisierung von Benutzerdaten", - "t69": "Bambu Network-Plug-in installieren", - "t70": "", - "t71": "Herunterladen", - "t72": "Herunterladen fehlgeschlagen", - "t73": "Installation erfolgreich.", - "t74": "Neustart", - "t75": "Das Bambu Network-Plug-in bietet folgende Funktionen:", - "t76": "Das Bambu Network-Plug-in wurde nicht erkannt. Klicken Sie ", - "t77": "hier", - "t78": ", um es zu installieren.", - "t79": "Fehler beim Installieren des Plug-ins. ", - "t80": "Versuchen Sie die folgenden Schritte:", - "t81": "1, Klicken Sie auf ", - "t82": ", um das Plug-in-Verzeichnis zu öffnen", - "t83": "2, Schließen Sie alle geöffneten Orca Slicer", - "t84": "3, Löschen Sie alle Dateien im Plug-in-Verzeichnis", - "t85": "4, Öffnen Sie Orca Slicer erneut und installieren Sie das Plug-in erneut", - "t86": "Schließen", - "t87": "Benutzerhandbuch", - "t88": "Entfernen", - "t89": "Enthaltenden Ordner öffnen", - "t90": "3D-Modell", - "t91": "3D-Modelle herunterladen", - "t92": "Bambu Weihnachtshütte" - }, - "cs_CZ":{ - "t1":"Vítejte v Orca Slicer", - "t2":"Orca Slicer bude nastaven v několika krocích. Začněme!", - "t3":"Uživatelská smlouva", - "t4":"Nesouhlasím", - "t5":"Souhlasím", - "t6":"Prosíme o vaši pomoc se zlepšením všech tisků", - "t7":"Povolit odesílání anonymních dat", - "t8":"Zpět", - "t9":"Další", - "t10":"Výběr tiskárny", - "t11":"Všechny", - "t12":"Vymazat vše", - "t13":"Tryska mm", - "t14":"Výběr Filamentu", - "t15":"Tiskárna", - "t16":"Typ Filamentu", - "t17":"Dodavatel", - "t18":"Chyba", - "t19":"Musí být vybraný alespoň jeden Filament.", - "t20":"Chcete použít výchozí Filament?", - "t21":"Ano", - "t22":"Ne", - "t23":"Poznámka k vydání", - "t24":"Začínáme", - "t25":"Dokončit", - "t26":"Přihlásit", - "t27":"Registrovat", - "t28":"Poslední", - "t29":"Obchodní centrum", - "t30":"Manuální", - "t31":"Nový projekt", - "t32":"Vytvořit nový projekt", - "t33":"Otevřít projekt", - "t34":"Hotspot", - "t35":"Nedávno otevřeno", - "t36":"OK", - "t37":"Musí být vybrána alespoň jedna tiskárna.", - "t38":"Zrušit", - "t39":"Potvrdit", - "t40":"Síť je odpojena, prosím zkontrolujte a zkuste to znovu později.", - "t47":"Vyberte prosím svou oblast přihlášení", - "t48":"Asie-Pacifik", - "t49":"Čína", - "t50":"Odhlásit se", - "t52":"Přeskočit", - "t53":"Připojit se", - "t54":"V komunitě 3D tisku se ze vzájemných úspěchů a neúspěchů učíme upravovat vlastní parametry a nastavení krájení. Orca Slicer se řídí stejným principem a využívá strojové učení ke zlepšení svého výkonu na základě úspěchů a neúspěchů počet výtisků našimi uživateli. Orca Slicer školíme, aby byl chytřejší tím, že jim poskytuje data z reálného světa. Pokud budete chtít, bude tato služba přistupovat k informacím z vašich protokolů chyb a protokolů použití, které mohou zahrnovat informace popsané v ", - "t55":"Zásady ochrany osobních údajů", - "t56": ". Nebudeme shromažďovat žádné osobní údaje, pomocí kterých lze přímo nebo nepřímo identifikovat jednotlivce, včetně jmen, adres, platebních údajů nebo telefonních čísel. Povolením této služby souhlasíte s těmito podmínkami a prohlášení o zásadách ochrany osobních údajů.", - "t57": "", - "t58": "", - "t59": ".", - "t60": "Evropa", - "t61": "Severní Amerika", - "t62": "Ostatní", - "t63": "Po změně regionu bude váš účet odhlášen. Přihlaste se prosím znovu později.", - "t64": "Bambu Network plug-in", - "t65": "Odesílání tiskové úlohy přes WLAN", - "t66": "Plné dálkové ovládání", - "t67": "Streamování v přímém přenosu", - "t68": "Synchronizace uživatelských dat", - "t69": "Instalovat Bambu Network plug-in", - "t70": "", - "t71": "Stahování", - "t72": "Stahování se nezdařilo", - "t73": "Instalace úspěšná.", - "t74": "Restartovat", - "t75": "Síťový plug-in Bambu poskytuje následující funkce:", - "t76": "Síťový plug-in Bambu nebyl zjištěn. Klikněte na ", - "t77": "zde", - "t78": " k instalaci.", - "t79": "Nepodařilo se nainstalovat plugin.", - "t80": "Zkuste následující kroky:", - "t81": "1, klikněte", - "t82": "otevřete adresář plug-in", - "t83": "2, Zavřete všechny otevřené Orca Slicer", - "t84": "3, Smažte všechny soubory v adresáři plug-in", - "t85": "4, znovu otevřete Orca Slicer a znovu nainstalujte zásuvný modul", - "t86": "Zavřít", - "t87": "Uživatelská příručka", - "t88": "Odstranit", - "t89": "Otevřít složku obsahující", - "t90": "3D model", - "t91": "Stáhnout 3D modely", - "t92": "Vánoční kabina Bambu" - }, - "fr_FR":{ - "t1":"Bienvenue sur Orca Slicer", - "t2":"Orca Slicer sera configuré en plusieurs étapes. Commençons !", - "t3":"Accord d'utilisation", - "t4":"Décliner", - "t5":"Accepter", - "t6":"Nous sollicitons votre aide pour améliorer
l'impression de chacun", - "t7":"Autoriser l'envoi de données anonymes", - "t8":"Retour", - "t9":"Suivant", - "t10":"Sélection de l'imprimante", - "t11":"Tous", - "t12":"Supprimer", - "t13":"mm", - "t14":"Sélection des filaments", - "t15":"Imprimante", - "t16":"Type de filament", - "t17":"Fournisseur", - "t18":"erreur", - "t19":"Au moins un filament doit être sélectionné.", - "t20":"Voulez-vous utiliser le filament par défaut ?", - "t21":"oui", - "t22":"non", - "t23":"Note de version", - "t24":"Commencer", - "t25":"Terminer", - "t26":"Connexion", - "t27":"Inscription", - "t28":"Récent", - "t29":"Mail", - "t30":"Manuel", - "t31":"Nouveau Projet", - "t32":"Créer un nouveau projet", - "t33":"Ouvrir un Projet", - "t34":"hotspot", - "t35":"Récemment ouvert", - "t36":"ok", - "t37":"Au moins une imprimante doit être sélectionnée.", - "t38":"Annuler", - "t39":"Confirmer", - "t40":"Déconnexion du réseau, veuillez vérifier et réessayer plus tard.", - "t47":"Veuillez sélectionner votre région de connexion", - "t48":"Asie-Pacifique", - "t49":"Chine", - "t50":"Se déconnecter", - "t52":"Passer", - "t53":"Rejoindre", - "t54":"Dans la communauté de l'impression 3D, nous apprenons des succès et des échecs des uns et des autres pour ajuster nos propres paramètres et paramètres de découpage. Orca Slicer suit le même principe et utilise l'apprentissage automatique pour améliorer ses performances à partir des succès et des échecs du grand nombre d'impressions de nos utilisateurs. Nous formons Orca Slicer à être plus intelligent en leur fournissant les données du monde réel. Si vous le souhaitez, ce service accédera aux informations de vos journaux d'erreurs et de vos journaux d'utilisation, qui peuvent inclure des informations décrites dans ", - "t55":"Politique de confidentialité", - "t56":". Nous ne collecterons aucune donnée personnelle par laquelle un individu peut être identifié directement ou indirectement, y compris, sans s'y limiter, les noms, adresses, informations de paiement ou numéros de téléphone. En activant ce service, vous acceptez ces conditions et la déclaration sur la politique de confidentialité.", - "t57":"", - "t58":"", - "t59":".", - "t60":"Europe", - "t61":"Amérique du Nord", - "t62":"Autres", - "t63":"Après avoir changé de région, votre compte sera déconnecté. Veuillez vous reconnecter ensuite.", - "t64":"Plug-in Bambu Network", - "t65":"Envoi du travail d'impression via WLAN", - "t66":"Commande à distance complète", - "t67":"Diffusion en direct", - "t68":"Synchronisation des données utilisateur", - "t69":"Installer Bambu Network", - "t70":"", - "t71":"Téléchargement", - "t72":"Échec du téléchargement", - "t73":"Installation réussie.", - "t74":"Redémarrer", - "t75":"Le plug-in Bambu Network offre les fonctionnalités suivantes :", - "t76":"Le plug-in Bambu Network n'est pas détecté. Cliquez ", - "t77":"ici", - "t78":" pour l'installer.", - "t79":"Échec de l'installation du plug-in. ", - "t80":"Essayez les étapes suivantes :", - "t81":"1, Cliquez ", - "t82":" pour ouvrir le répertoire des plug-ins", - "t83":"2, Fermez toutes les fenêtres de Orca Slicer", - "t84":"3, Supprimez tous les fichiers dans le répertoire du plug-in", - "t85":"4, Relancez Orca Slicer et réinstallez le plug-in.", - "t86":"Fermer", - "t87":"Manuel d'utilisation", - "t88":"Supprimer", - "t89":"Ouvrir le dossier contenant", - "t90":"Modèle 3D", - "t91":"Télécharger des modèles 3D", - "t92":"Cabane de Noël Bambu", - "t93":"Connexion à l'imprimante", - "t94":"Veuillez configurer la connexion de votre imprimante pour afficher l'interface.", - "wk1":"Démarrage rapide", - "wk2":"Cet article présente l'utilisation la plus basique de Orca Slicer. Il guide les utilisateurs pour configurer le logiciel, créer des projets et effectuer la première tâche d'impression étape par étape.", - "wk3":"Workflow basé sur des projets", - "wk4":"Orca Slicer met en avant un workflow de pointe pour véritablement réaliser un projet « tout en un ». Basé sur le format de projet 3MF grand public, il fournit une série de nouvelles fonctionnalités révolutionnaires, telles que la prise en charge de plusieurs plaques, un gestionnaire de ressources de projet et une vue d'assemblage/de pièce. Cela améliore considérablement l'efficacité des créateurs et des utilisateurs réguliers", - "wk5":"Impression haute vitesse de qualité", - "wk6":"Il est difficile d'imprimer à grande vitesse tout en maintenant une qualité élevée. Orca Slicer rend cela possible. « Arch Move » permet à la hotend de se déplacer en douceur et réduit les vibrations de la machine. Le refroidissement intelligent est basé sur des paramètres de refroidissement affinés pour chaque type de filament. Le « ralentissement automatique » pour les paroies en porte-à-faux permet d'éviter la déformation à grande vitesse.", - "wk7":"Impression multi-couleur", - "wk8":"Orca Slicer fournit des outils de colorisation polyvalents pour créer un modèle coloré. Vous pouvez librement ajouter/supprimer des filaments dans un projet et coloriser votre modèle avec différents pinceaux. Avant l'impression, chaque filament sera automatiquement mappé sur un emplacement AMS, sans avoir besoin de modifier manuellement le placement de la bobine dans l'AMS.", - "wk9":"Guide de réglage des paramètres de découpage", - "wk10":"Les fonctionnalités de gestion des paramètres de Orca Slicer offrent un contrôle très flexible et puissant sur le processus de découpage. Cet article présente l'organisation des paramètres et fournit quelques compétences pour tirer pleinement parti de ces fonctionnalités.", - "wk11":"Contrôle et surveillance à distance", - "wk12":"Orca Slicer prend en charge l'envoi du travail d'impression à votre imprimante via le réseau WAN/LAN, contrôlant et surveillant chaque aspect de votre imprimante 3D et des travaux d'impression. Si vous avez plusieurs imprimantes, vous pouvez facilement basculer entre elles dans la liste des périphériques.", - "wk13":"Format STEP", - "wk14":"Par rapport au format STL, le format STEP apporte des informations plus efficaces. Grâce à la grande précision de ce format, de nombreuses trajectoires d'extrusion peuvent être générées sous forme d'arcs. Il inclut également la relation d'assemblage de chaque pièce d'un modèle, qui peut être utilisée pour restaurer la vue d'assemblage après la coupe d'un modèle.", - "wk15":"Texte 3D", - "wk16":"Avec l'outil Texte 3D, les utilisateurs peuvent facilement créer diverses formes de texte 3D dans le projet, ce qui rend le modèle plus personnalisé. Orca Slicer fournit des dizaines de polices et prend en charge les styles gras et italique pour donner au texte une plus grande flexibilité." - }, - "zh_CN":{ - "t1":"欢迎使用Orca Slicer", - "t2":"Orca Slicer需要几步安装步骤,让我们开始吧!", - "t3":"用户使用协议", - "t4":"拒绝", - "t5":"同意", - "t6":"帮助提升Orca Slicer性能", - "t7":"允许发送匿名数据", - "t8":"上一步", - "t9":"下一步", - "t10":"选择打印机", - "t11":"全部", - "t12":"清空", - "t13":"mm 喷嘴", - "t14":"选择材料", - "t15":"打印机", - "t16":"材料类型", - "t17":"供应商", - "t18":"错误", - "t19":"至少要选择一款材料。", - "t20":"你希望使用默认的材料列表吗?", - "t21":"是", - "t22":"否", - "t23":"发布说明", - "t24":"开始", - "t25":"结束", - "t26":"登录", - "t27":"注册", - "t28":"近期", - "t29":"商城", - "t30":"使用手册", - "t31":"新建项目", - "t32":"创建一个新项目", - "t33":"打开项目", - "t34":"热点", - "t35":"近期打开文件", - "t36":"确定", - "t37":"至少需要选择一款打印机。", - "t38":"取消", - "t39":"确定", - "t40":"网络不通,请检查并稍后重试。", - "t47":"请选择登录区域", - "t48":"亚太", - "t49":"中国", - "t50":"退出登录", - "t52":"忽略", - "t53":"同意", - "t54":"在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。Orca Slicer遵循同样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改善打印性能。我们正在通过向Orca Slicer提供真实世界的数据来训练他们变得更聪明。如果您愿意,此服务将访问您的错误日志和使用日志中的信息,其中可能包括", - "t55":"隐私政策", - "t56":"中描述的信息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓名、地址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策的声明。", - "t57":"", - "t58":"", - "t59":"。", - "t60":"欧洲", - "t61":"北美", - "t62":"其他", - "t63":"切换区域后,你的账号会被登出。稍后请重新登录。", - "t64":"Bambu网络插件", - "t65":"通过WLAN发送打印任务", - "t66":"强大的远程控制功能", - "t67":"实时视频流", - "t68":"用户数据同步", - "t69":"安装Bambu网络插件", - "t70":"", - "t71":"正在下载", - "t72":"下载失败", - "t73":"安装成功。", - "t74":"重启", - "t75":"Bambu网络插件提供以下功能:", - "t76":"没有发现Bambu网络插件,请", - "t77":"下载", - "t78":"并安装。", - "t79":"安装插件失败。", - "t80":"请尝试如下步骤:", - "t81":"1, 点击", - "t82":"打开插件所在目录", - "t83":"2, 关闭所有Orca Slicer", - "t84":"3, 删除插件所在目录下的所有文件", - "t85":"4, 重新启动Orca Slicer并尝试安装插件", - "t86":"关闭", - "t87":"使用引导", - "t88":"移除", - "t89":"打开所在的文件夹", - "t90":"3D 模型", - "t91":"下载3D模型", - "t92":"Bambu圣诞小屋", - "wk1":"快速入门指南", - "wk2":"本文介绍了Orca Slicer的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", - "wk3":"基于项目的工作流", - "wk4":"Orca Slicer提出了领先的工作流程,真正实现了“一体化”项目。基于主流的3MF项目格式,它提供了一系列革命性的新功能,如支持多盘、项目资源管理器和装配/零件视图。它可以大幅提高模型创作者及普通用户的使用效率。", - "wk5":"质量卓越的高速打印", - "wk6":"在保持高质量的前提下进行高速打印是非常具有挑战性的。Orca Slicer让这一切发生。支持“圆弧移动”特性使工具头移动更加顺滑,有效减少机器振动。基于不同材料类型的精细标定过的冷却控制参数,使得冷却过程可以自动开展。在悬垂区域进行“自动减速”,可防止高速打印时在此区域的外观瑕疵。", - "wk7":"多色打印", - "wk8":"Orca Slicer提供了多种着色工具来制作彩色模型。您可以在项目中自由添加/移除打印材料,并使用不同的笔刷为模型着色。开始打印时,打印任务中的各个材料将自动映射到匹配的AMS槽位,无需手动调整AMS中的料卷位置。", - "wk9":"切片参数设置指南", - "wk10":"Orca Slicer中的参数管理功能为切片过程提供了非常灵活和强大的控制。本文介绍了切片参数的组织分类和设置方法,并提供了一些使用技巧。", - "wk11":"远程控制和监控", - "wk12":"Orca Slicer支持通过WAN/LAN网络向打印机发送打印任务,控制和查看3D打印机和打印任务的各个方面。如果您有多台打印机,还可以在设备列表中轻松切换。", - "wk13":"STEP格式", - "wk14":"与STL相比,STEP带来了更多有效的信息。由于STEP的高精度,切片时可以生成更多的圆弧路径。STEP还包括模型每个零件的装配关系,可分割模型后恢复装配视图。", - "wk15":"3D文本", - "wk16":"使用3D文本工具,用户可以轻松地在项目中创建各种3D文本形状,使模型更加个性化。Orca Slicer提供了数十种字体,并支持粗体和斜体样式,使文本具有更大的灵活性。" - } + "en": { + "t1": "Welcome to Bambu Studio", + "t2": "Bambu Studio will be setup in several steps. Let's start!", + "t3": "User Agreement", + "t4": "Disagree", + "t5": "Agree", + "t6": "We kindly request your help to improve
everyone's printing", + "t7": "Join our Customer Experience Improvement Program", + "t8": "Back", + "t9": "Next", + "t10": "Printer Selection", + "t11": "All", + "t12": "Clear all", + "t13": "mm nozzle", + "t14": "Filament Selection", + "t15": "Printer", + "t16": "Filament type", + "t17": "Vendor", + "t18": "error", + "t19": "At least one filament must be selected.", + "t20": "Do you want to use default filament ?", + "t21": "yes", + "t22": "no", + "t23": "Release note", + "t24": "Get Started", + "t25": "Finish", + "t26": "Login", + "t27": "Register", + "t28": "Recent", + "t29": "Mall", + "t30": "Manual", + "t31": "New Project", + "t32": "Create new project", + "t33": "Open Project", + "t34": "hotspot", + "t35": "Recently opened", + "t36": "ok", + "t37": "At least one printer must be selected.", + "t38": "Cancel", + "t39": "Confirm", + "t40": "Network disconnect, please check and try again later.", + "t47": "Please select your login region", + "t48": "Asia-Pacific", + "t49": "China", + "t50": "Log out", + "t52": "Skip", + "t53": "Join", + "t54": "In the 3D Printing community, we learn from each other's successes and failures to adjust our own slicing parameters and settings. Bambu Studio follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training Bambu Studio 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 ", + "t55": "Privacy Policy", + "t56": ". 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.", + "t57": "", + "t58": "", + "t59": ".", + "t60": "Europe", + "t61": "North America", + "t62": "Others", + "t63": "After changing the region, your account will be logged out. Please log in again later.", + "t64": "Bambu Network plug-in", + "t65": "Sending print job via WLAN", + "t66": "Full remote control", + "t67": "Liveview streaming", + "t68": "User data synchronization", + "t69": "Install Bambu Network plug-in", + "t70": "", + "t71": "Downloading", + "t72": "Downloading failed", + "t73": "Installation successful.", + "t74": "Restart", + "t75": "Bambu Network plug-in provides the following features:", + "t76": "Bambu Network plug-in not detected. Click ", + "t77": "here", + "t78": " to install it.", + "t79": "Failed to install plug-in. ", + "t80": "Try the following steps:", + "t81": "1, Click ", + "t82": " to open the plug-in directory", + "t83": "2, Close all open Bambu Studio", + "t84": "3, Delete all files under the plug-in directory", + "t85": "4, Reopen Bambu studio and install the plug-in again", + "t86": "Close", + "t87": "User Manual", + "t88": "Remove", + "t89": "Open Containing Folder", + "t90": "3D Model", + "t91": "Download 3D models", + "t92": "Create by", + "t93": "Remixed by", + "t94": "Shared by", + "t95": "Model Information", + "t96": "Accessories", + "t97": "Profile Information", + "t98": "Model name", + "t100":"Model description", + "t101":"BOM", + "t102":"Assembly Guide", + "t103":"Other", + "t104":"Profile name", + "t105":"Profile Author", + "t106":"Profile description", + "t107":"Online Models" + }, + "zh_CN": { + "t1": "欢迎使用Bambu Studio", + "t2": "Bambu Studio需要几步安装步骤,让我们开始吧!", + "t3": "用户使用协议", + "t4": "拒绝", + "t5": "同意", + "t6": "帮助提升Bambu Studio性能", + "t7": "允许发送匿名数据", + "t8": "上一步", + "t9": "下一步", + "t10": "选择打印机", + "t11": "全部", + "t12": "清空", + "t13": "mm 喷嘴", + "t14": "选择材料", + "t15": "打印机", + "t16": "材料类型", + "t17": "供应商", + "t18": "错误", + "t19": "至少要选择一款材料。", + "t20": "你希望使用默认的材料列表吗?", + "t21": "是", + "t22": "否", + "t23": "发布说明", + "t24": "开始", + "t25": "结束", + "t26": "登录", + "t27": "注册", + "t28": "近期", + "t29": "商城", + "t30": "使用手册", + "t31": "新建项目", + "t32": "创建一个新项目", + "t33": "打开项目", + "t34": "热点", + "t35": "近期打开文件", + "t36": "确定", + "t37": "至少需要选择一款打印机。", + "t38": "取消", + "t39": "确定", + "t40": "网络不通,请检查并稍后重试。", + "t47": "请选择登录区域", + "t48": "亚太", + "t49": "中国", + "t50": "退出登录", + "t52": "忽略", + "t53": "同意", + "t54": "在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。Bambu Studio遵循同样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改善打印性能。我们正在通过向Bambu Studio提供真实世界的数据来训练他们变得更聪明。如果您愿意,此服务将访问您的错误日志和使用日志中的信息,其中可能包括", + "t55": "隐私政策", + "t56": "中描述的信息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓名、地址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策的声明。", + "t57": "", + "t58": "", + "t59": "。", + "t60": "欧洲", + "t61": "北美", + "t62": "其他", + "t63": "切换区域后,你的账号会被登出。稍后请重新登录。", + "t64": "Bambu网络插件", + "t65": "通过WLAN发送打印任务", + "t66": "强大的远程控制功能", + "t67": "实时视频流", + "t68": "用户数据同步", + "t69": "安装Bambu网络插件", + "t70": "", + "t71": "正在下载", + "t72": "下载失败", + "t73": "安装成功。", + "t74": "重启", + "t75": "Bambu网络插件提供以下功能:", + "t76": "没有发现Bambu网络插件,请", + "t77": "下载", + "t78": "并安装。", + "t79": "安装插件失败。", + "t80": "请尝试如下步骤:", + "t81": "1, 点击", + "t82": "打开插件所在目录", + "t83": "2, 关闭所有Bambu Studio", + "t84": "3, 删除插件所在目录下的所有文件", + "t85": "4, 重新启动Bambu Studio并尝试安装插件", + "t86": "关闭", + "t87": "使用引导", + "t88": "移除", + "t89": "打开所在的文件夹", + "t90": "3D 模型", + "t91": "下载3D模型", + "t92": "创作", + "t93": "修改", + "t94": "分享", + "t95": "模型信息", + "t96": "附件", + "t97": "配置信息", + "t98": "模型名称", + "t100":"模型介绍", + "t101":"物料清单", + "t102":"装备指导", + "t103":"其他", + "t104":"配置名称", + "t105":"配置作者", + "t106":"配置介绍", + "t107":"在线模型", + "wk1": "快速入门指南", + "wk2": "本文介绍了Bambu Studio的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", + "wk3": "基于项目的工作流", + "wk4": "Bambu Studio提出了领先的工作流程,真正实现了“一体化”项目。基于主流的3MF项目格式,它提供了一系列革命性的新功能,如支持多盘、项目资源管理器和装配/零件视图。它可以大幅提高模型创作者及普通用户的使用效率。", + "wk5": "质量卓越的高速打印", + "wk6": "在保持高质量的前提下进行高速打印是非常具有挑战性的。Bambu Studio让这一切发生。支持“圆弧移动”特性使工具头移动更加顺滑,有效减少机器振动。基于不同材料类型的精细标定过的冷却控制参数,使得冷却过程可以自动开展。在悬垂区域进行“自动减速”,可防止高速打印时在此区域的外观瑕疵。", + "wk7": "多色打印", + "wk8": "Bambu Studio提供了多种着色工具来制作彩色模型。您可以在项目中自由添加/移除打印材料,并使用不同的笔刷为模型着色。开始打印时,打印任务中的各个材料将自动映射到匹配的AMS槽位,无需手动调整AMS中的料卷位置。", + "wk9": "切片参数设置指南", + "wk10": "Bambu Studio中的参数管理功能为切片过程提供了非常灵活和强大的控制。本文介绍了切片参数的组织分类和设置方法,并提供了一些使用技巧。", + "wk11": "远程控制和监控", + "wk12": "Bambu Studio支持通过WAN/LAN网络向打印机发送打印任务,控制和查看3D打印机和打印任务的各个方面。如果您有多台打印机,还可以在设备列表中轻松切换。", + "wk13": "STEP格式", + "wk14": "与STL相比,STEP带来了更多有效的信息。由于STEP的高精度,切片时可以生成更多的圆弧路径。STEP还包括模型每个零件的装配关系,可分割模型后恢复装配视图。", + "wk15": "3D文本", + "wk16": "使用3D文本工具,用户可以轻松地在项目中创建各种3D文本形状,使模型更加个性化。Bambu Studio提供了数十种字体,并支持粗体和斜体样式,使文本具有更大的灵活性。" + }, + "ja_JP": { + "t1": "Bambu Studioへようこそ", + "t2": "セットアップ", + "t3": "利用規約", + "t4": "同意しない", + "t5": "同意", + "t6": "ユーザ体験向上プログラム", + "t7": "匿名で送信することを許容", + "t8": "戻る", + "t9": "次へ", + "t10": "プリンター選択", + "t11": "全て", + "t12": "全てを解除", + "t13": "mm ノズル", + "t14": "フィラメント選択", + "t15": "プリンター", + "t16": "フィラメントタイプ", + "t17": "メーカー", + "t18": "エラー", + "t19": "最低限一つのフィラメントを選択する必要があります", + "t20": "デフォルトのフィラメントにしますか?", + "t21": "はい", + "t22": "いいえ", + "t23": "リリースノート", + "t24": "利用開始", + "t25": "完了", + "t26": "サインイン", + "t27": "登録", + "t28": "最近の項目", + "t29": "モール", + "t30": "マニュアル", + "t31": "新規プロジェクト", + "t32": "プロジェクトを作成", + "t33": "プロジェクトを開く", + "t34": "ホットスポット", + "t35": "最近開いた項目", + "t36": "OK", + "t37": "最低限一つのプリンターを選択する必要があります", + "t38": "取消し", + "t39": "確認", + "t40": "ネットワークが切断されたのようです、もう一度も試しください", + "t47": "地域を選択してください", + "t48": "アジア-太平洋", + "t49": "中国", + "t50": "サインアウト", + "t52": "スキップ", + "t53": "参加する", + "t54": "3Dプリンティングのコミュニティで、私たちはお互いの成功例と失敗例から色々勉強してきています。Bambu Labもそうと考えています、AIでユーザの実世界の経験から勉強し、造型の性能を向上しにいきたいと思います。あなたの経験は私たちにとって大切なので、私たちの「ユーザ体験向上プログラム」を参加してみませんか?「参加」する場合、エラーログや使用ログから情報をBambu Labと共有します、具体的な項目は", + "t55": "プライバシーポリシー", + "t56": "をご参照ください。個人情報は一切共有しませんのでご安心ください。", + "t57": "", + "t58": "", + "t59": ".", + "t60": "欧州", + "t61": "北米", + "t62": "その他", + "t63": "地域を変更したら、一回サインアウトされます。もう一度サインインしてください", + "t64": "Bambu ネットワークプラグイン", + "t65": "WiFi経由で造形タスクを送信します", + "t66": "リモートコントロール", + "t67": "ライブビュー", + "t68": "ユーザデータ同期", + "t69": "Bambu ネットワークプラグインをインストール", + "t70": "", + "t71": "ダウンロード中", + "t72": "ダウンロード失敗", + "t73": "インストールは成功しました", + "t74": "再起動", + "t75": "Bambu ネットワークプラグインは以下の機能を提供します:", + "t76": "Bambu ネットワークプラグインは検出されません。", + "t77": "こちら", + "t78": "をクリックし、インストールしてください。", + "t79": "インストールは失敗しました", + "t80": "下記の方法もお試しください", + "t81": "1. クリックして ", + "t82": "プラグイン フォルダを開く", + "t83": "2. 全て開いたBambu Studioを閉じる", + "t84": "3. プラグイン フォルダのファイルを全て削除", + "t85": "4. Bambu Studioを開く、再度プラグインをインストールしてください", + "t86": "閉じる", + "t87": "ユーザ マニュアル", + "t88": "削除", + "t89": "フォルダを開く", + "t90": "3Dモデル", + "t91": "モデルをダウンロード", + "t92": "創作", + "t93": "修正", + "t94": "共有", + "t95": "モデル情報", + "t96": "添付ファイル", + "t97": "構成情報", + "t98": "モデル名", + "t100":"モデルの紹介", + "t101":"BOM", + "t102":"装備指導", + "t103":"その他", + "t104":"構成名", + "t105":"構成著者", + "t106":"構成の概要", + "t107":"スタッフが選ぶ" + } }; @@ -596,4 +355,4 @@ function TranslatePage() $(OneNode).html(LangText[strLang][tid]); } } -} \ No newline at end of file +} diff --git a/resources/web/device/css/dark.css b/resources/web/device/css/dark.css new file mode 100644 index 000000000..a5f041e8a --- /dev/null +++ b/resources/web/device/css/dark.css @@ -0,0 +1,25 @@ +body { + background-color:#4c4c54; + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + text-align: center; + padding: 30px; + border-radius: 10px; + background-color: #272727; + box-shadow: 0 4px 6px rgba(39, 39, 39, 0.1); +} + +h1 { + color: #ffffff; +} + +p { + color: #ffffff; +} \ No newline at end of file diff --git a/resources/web/device/css/home.css b/resources/web/device/css/home.css new file mode 100644 index 000000000..3f4cc4eb9 --- /dev/null +++ b/resources/web/device/css/home.css @@ -0,0 +1,18 @@ +body +{ + background-color:#eeeeee; + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + text-align: center; + padding: 30px; + border-radius: 10px; + background-color: #ffffff; + box-shadow: 0 4px 6px rgba(39, 39, 39, 0.1); +} \ No newline at end of file diff --git a/resources/web/device/missing_connection.html b/resources/web/device/missing_connection.html new file mode 100644 index 000000000..a66ea4561 --- /dev/null +++ b/resources/web/device/missing_connection.html @@ -0,0 +1,22 @@ + + + + + +Printer Connection Required + + + + + + + + + +
+

Printer Connection

+

Please set up your printer connection to view the device.

+ Printer connection setup demonstration +
+ + diff --git a/resources/web/device/setup_connection.gif b/resources/web/device/setup_connection.gif new file mode 100644 index 000000000..ba6220915 Binary files /dev/null and b/resources/web/device/setup_connection.gif differ diff --git a/resources/web/guide/21/21.css b/resources/web/guide/21/21.css index dabd64dac..d866b6811 100644 --- a/resources/web/guide/21/21.css +++ b/resources/web/guide/21/21.css @@ -36,7 +36,7 @@ .PrinterArea { - padding: 10px; + padding: 0px; display: flex; flex-wrap: wrap; } @@ -45,7 +45,7 @@ { width: 160px; text-align: center; - padding: 10px; + padding: 8px; } .PrinterBlock img diff --git a/resources/web/guide/21/21.js b/resources/web/guide/21/21.js index 64c725688..729d2b152 100644 --- a/resources/web/guide/21/21.js +++ b/resources/web/guide/21/21.js @@ -41,6 +41,12 @@ function HandleStudio( pVal ) } +function ShowPrinterThumb(pItem, strImg) +{ + $(pItem).attr('src',strImg); + $(pItem).attr('onerror',null); +} + function HandleModelList( pVal ) { if( !pVal.hasOwnProperty("model") ) @@ -62,11 +68,7 @@ function HandleModelList( pVal ) let sVV=strVendor; if( sVV=="BBL" ) sVV="Bambu Lab"; - if( sVV=="Custom") - sVV="Custom Printer"; - if( sVV=="Other") - sVV="Orca colosseum"; - + let HtmlNewVendor='
'+ '
'+ '
'+ @@ -79,7 +81,10 @@ function HandleModelList( pVal ) '
'+ '
'; - $('#Content').append(HtmlNewVendor); + if(sVV=='Bambu Lab') + $('#Content').html( HtmlNewVendor + $('#Content').html() ); + else + $('#Content').append( HtmlNewVendor ); } let ModelName=OneModel['model']; @@ -96,9 +101,10 @@ function HandleModelList( pVal ) HtmlNozzel+='
'+nNozzel+'mm nozzle
'; } - let CoverImage=OneModel['cover']; + let CoverImage="../../image/printer/"+OneModel['model']+"_cover.png"; + let CoverImage2="../../../profiles/"+strVendor+"/"+OneModel['model']+"_cover.png"; ModelHtml[strVendor]+='
'+ -'
'+ +'
'+ '
'+OneModel['model']+'
'+ HtmlNozzel +'
'; } @@ -133,12 +139,12 @@ function HandleModelList( pVal ) } } - // let AlreadySelect=$("input:checked"); - // let nSelect=AlreadySelect.length; - // if(nSelect==0) - // { - // $("input[nozzel='0.4'][vendor='Custom']").prop("checked", true); - // } + let AlreadySelect=$("input:checked"); + let nSelect=AlreadySelect.length; + if(nSelect==0) + { + $("input[nozzel='0.4'][vendor='BBL']").prop("checked", true); + } TranslatePage(); } diff --git a/resources/web/guide/22/22.css b/resources/web/guide/22/22.css index 51b3ec6e5..0a542a464 100644 --- a/resources/web/guide/22/22.css +++ b/resources/web/guide/22/22.css @@ -32,6 +32,7 @@ input #ItemSelectArea { + flex: 0 0 40px; height:40px; border-top: 1px solid #009688; display: flex; @@ -46,7 +47,7 @@ input #ItemBlockArea { - flex: 1; + flex: 1 0 236px; display:flex; overflow-x:auto; flex-wrap:wrap; @@ -59,7 +60,7 @@ input .MItem { - width: 220px; + min-width: 220px; height: 32px; } diff --git a/resources/web/guide/22/index.html b/resources/web/guide/22/index.html index 0b0bd5473..6e379d2a0 100644 --- a/resources/web/guide/22/index.html +++ b/resources/web/guide/22/index.html @@ -19,7 +19,7 @@
Filament Selection
-
+
printer
@@ -33,7 +33,15 @@
Bambulab BBL-3DP-001-V4-normal
Bambulab BBL-3DP-001-V4-normal
Bambulab BBL-3DP-001-V5-normal
-
Bambulab BBL-3DP-001-V4-normal
--> +
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V4-normal
+
Bambulab BBL-3DP-001-V5-normal
+
Bambulab BBL-3DP-001-V4-normal
-->
@@ -46,7 +54,13 @@
ABS
TPU
PA6+CF
-
N/A
--> +
N/A
+
PLA
+
PET
+
ABS
+
TPU
+
PA6+CF
+
N/A
-->
@@ -58,7 +72,12 @@
BBL
eSUN
Kexcelled
-
Polymaker
--> +
Polymaker
+
Unknown
+
BBL
+
eSUN
+
Kexcelled
+
Polymaker
--> diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index 368b61e55..e3405b9a8 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -32,6 +32,7 @@ input #ItemSelectArea { + flex: 0 0 40px; height:40px; border-top: 1px solid #009688; display: flex; @@ -46,7 +47,7 @@ input #ItemBlockArea { - flex: 1; + flex: 1 0 236px; display:flex; overflow-x:auto; flex-wrap:wrap; @@ -59,7 +60,7 @@ input .MItem { - width: 220px; + min-width: 220px; height: 32px; } diff --git a/resources/web/guide/23/index.html b/resources/web/guide/23/index.html index 84d620648..6ab43f73f 100644 --- a/resources/web/guide/23/index.html +++ b/resources/web/guide/23/index.html @@ -19,7 +19,7 @@
Filament Selection
-
+
printer
diff --git a/resources/web/guide/24/24.css b/resources/web/guide/24/24.css index eeb78189f..9f47005ac 100644 --- a/resources/web/guide/24/24.css +++ b/resources/web/guide/24/24.css @@ -59,7 +59,7 @@ .PrinterArea { - padding: 10px; + padding: 0px; display: flex; flex-wrap: wrap; } @@ -68,7 +68,7 @@ { width: 160px; text-align: center; - padding: 10px; + padding: 8px; } .PrinterBlock img diff --git a/resources/web/guide/24/24.js b/resources/web/guide/24/24.js index 21fcf16c0..00ae24a2b 100644 --- a/resources/web/guide/24/24.js +++ b/resources/web/guide/24/24.js @@ -40,6 +40,11 @@ function HandleStudio( pVal ) } } +function ShowPrinterThumb(pItem, strImg) +{ + $(pItem).attr('src',strImg); + $(pItem).attr('onerror',null); +} function HandleModelList( pVal ) { @@ -62,11 +67,7 @@ function HandleModelList( pVal ) let sVV=strVendor; if( sVV=="BBL" ) sVV="Bambu Lab"; - if( sVV=="Custom") - sVV="Custom Printer"; - if( sVV=="Other") - sVV="Orca colosseum"; - + let HtmlNewVendor='
'+ '
'+ '
'+ @@ -79,7 +80,10 @@ function HandleModelList( pVal ) '
'+ '
'; - $('#Content').append(HtmlNewVendor); + if(sVV=='Bambu Lab') + $('#Content').html( HtmlNewVendor + $('#Content').html() ); + else + $('#Content').append( HtmlNewVendor ); } let ModelName=OneModel['model']; @@ -96,9 +100,10 @@ function HandleModelList( pVal ) HtmlNozzel+='
'+nNozzel+'mm nozzle
'; } - let CoverImage=OneModel['cover']; + let CoverImage="../../image/printer/"+OneModel['model']+"_cover.png"; + let CoverImage2="../../../profiles/"+strVendor+"/"+OneModel['model']+"_cover.png"; ModelHtml[strVendor]+='
'+ -'
'+ +'
'+ '
'+OneModel['model']+'
'+ HtmlNozzel +'
'; } @@ -133,12 +138,12 @@ function HandleModelList( pVal ) } } - // let AlreadySelect=$("input:checked"); - // let nSelect=AlreadySelect.length; - // if(nSelect==0) - // { - // $("input[nozzel='0.4'][vendor='Custom']").prop("checked", true); - // } + let AlreadySelect=$("input:checked"); + let nSelect=AlreadySelect.length; + if(nSelect==0) + { + $("input[nozzel='0.4'][vendor='BBL']").prop("checked", true); + } TranslatePage(); } diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index ba1b49c16..8f585744d 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -14,6 +14,11 @@ body color:#efeff0; } +.TextS2 +{ + color:#B3B3B5; +} + .ZScrol::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ background-color: #939594; } @@ -83,4 +88,44 @@ body .UG_DESC { color:#818183; +} + +/*---Staff PIck----*/ +#HotModel_Swiper +{ + +} + +.HotModel_NameText +{ + height: 32px; +} + +.HotModelPiece +{ + border: 1px solid #4C4C55; + box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.04); + background-color: #4C4C55; +} + +#HotModel_RIGHT_Title +{ + color: #818183; +} + +.swiper +{ + --swiper-navigation-color: #EFEFF0;/* 单独设置按钮颜色 */ +} + +.swiper-button-prev +{ + background: rgba(54, 54, 60, 0.88); + border: 1px solid rgba(129, 129, 131, 0.64); +} + +.swiper-button-next +{ + background: rgba(54, 54, 60, 0.88); + border: 1px solid rgba(129, 129, 131, 0.64); } \ No newline at end of file diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index 6252c7281..fedd9a6be 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -245,6 +245,13 @@ body height: 100%; } +.TitleSmallIcon +{ + width:30px; + height: 30px; + margin-right: 10px; +} + #MenuArea { height: 140px; @@ -303,6 +310,35 @@ body height: 420px; } +#HotModelBlock +{ + display:flex; + align-items: center; + justify-content: space-between; + padding: 0px; +} + +#HotModel_LEFT_Title +{ + display:flex; + align-items: center; + padding: 6px 0px; +} + +#HotModel_RIGHT_Title +{ + font-size:16px; +} + + +.HotModel_PrevImg +{ + width: 200px; + height: 148px; + object-fit: cover; +} + + #RecentFileArea { margin-top: 10px; @@ -315,9 +351,7 @@ body { display:flex; align-items: center; - padding: 6px; - border-bottom-width: 1px; - border-bottom-style: solid; + padding: 6px 0px; } #RecentClearAllBtn @@ -628,28 +662,112 @@ body font-size: 14px; } -/*------Christmas cabin---*/ -#ChristmasArea +/*--Staff Pick--*/ +#HotModelArea { - margin-top: 10px; - display: flex; - flex-direction: column; + display: none; } -#ChristmasTitleBlock +#HotModel_Swiper +{ + padding: 0px; +} + +.HotModel_Designer_Info { display:flex; align-items: center; - padding: 6px; - border-bottom-width: 1px; - border-bottom-style: solid; + height: 28px; + padding: 0px 8px; } -#CabinList +.HotModel_Designer_Info img { - display: flex; - flex-wrap: wrap; - align-content: flex-start; - overflow-y: auto; + width: 16px; + height: 16px; + border-radius: 8px; +} +.HotModel_Designer_Info span +{ + margin-left: 6px; + font-size: 12px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#HotModel_RIGHT_Title:hover +{ + cursor: pointer; + color:#00AE42; +} + +.HotModelPiece +{ + width: 200px!important; + display:flex; + flex-direction: column; + cursor: pointer; + border: 1px solid #EEEEEE; + box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.04); + border-radius: 8px; +} + +.HotModel_PrevBlock +{ + height: 150px; +} + +.HotModel_PrevImg +{ + width: 200px; + height: 150px; +} + +.HotModel_NameText +{ + height: 32px; + line-height: 32px; + padding: 0px 8px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 14px; +} + + +.swiper-scrollbar +{ + height: 10px!important; +} + +.swiper-button-prev +{ + width: 40px!important; + height: 40px!important; + border-radius: 20px!important; + background: rgba(244, 244, 244, 0.88); +} + +.swiper-button-next +{ + width: 40px!important; + height: 40px!important; + border-radius: 20px!important; + background: rgba(244, 244, 244, 0.88); +} + +.swiper +{ + --swiper-theme-color: #ff6600;/* 设置Swiper风格 */ + --swiper-navigation-color: #676767;/* 单独设置按钮颜色 */ + --swiper-navigation-size: 12px;/* 设置按钮大小 */ +} + +.swiper-button-disabled +{ + opacity: 1!important; + cursor: pointer!important; + pointer-events: auto!important; } \ No newline at end of file diff --git a/resources/web/homepage/img/t1.svg b/resources/web/homepage/img/t1.svg new file mode 100644 index 000000000..319067548 --- /dev/null +++ b/resources/web/homepage/img/t1.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/web/homepage/img/t2.svg b/resources/web/homepage/img/t2.svg new file mode 100644 index 000000000..a7864b126 --- /dev/null +++ b/resources/web/homepage/img/t2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 9a31aa330..8f5009a4d 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -5,12 +5,17 @@ homepage - - - - - - + + + + + + + + + + + @@ -71,10 +76,71 @@
-
+
+ +
+
+
+ +
Online Models
+
+
MORE >
+
+
+
+ +
+
+
+ +
+
+ + +
-
recent open
+ +
Recently opened
Clear all
diff --git a/resources/web/homepage/js/globalapi.js b/resources/web/homepage/js/globalapi.js deleted file mode 100644 index 80bbaa01d..000000000 --- a/resources/web/homepage/js/globalapi.js +++ /dev/null @@ -1,340 +0,0 @@ - -/*------------------ Date Function ------------------------*/ -function GetFullToday( ) -{ - var d=new Date(); - - var nday=d.getDate(); - var nmonth=d.getMonth()+1; - var nyear=d.getFullYear(); - - var strM=nmonth+''; - if( nmonth<10 ) - strM='0'+nmonth; - - var strD=nday+''; - if( nday<10 ) - strD='0'+nday; - - return nyear+'-'+strM+'-'+strD; -} - -function GetFullDate() -{ - var d=new Date(); - - var tDate={}; - - tDate.nyear=d.getFullYear(); - tDate.nmonth=d.getMonth()+1; - tDate.nday=d.getDate(); - - tDate.nhour=d.getHours(); - tDate.nminute=d.getMinutes(); - tDate.nsecond=d.getSeconds(); - - tDate.nweek=d.getDay(); - tDate.ndate=d.getDate(); - - var strM=tDate.nmonth+''; - if( tDate.nmonth<10 ) - strM='0'+tDate.nmonth; - - var strD=tDate.nday+''; - if( tDate.nday<10 ) - strD='0'+tDate.nday; - - var strH=tDate.nhour+''; - if( tDate.nhour<10 ) - strH='0'+tDate.nhour; - - var strMin=tDate.nminute+''; - if( tDate.nminute<10 ) - strMin='0'+tDate.nminute; - - var strS=tDate.nsecond+''; - if( tDate.nsecond<10 ) - strS='0'+tDate.nsecond; - - tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; - tDate.strFulldate=tDate.strdate+' '+strH+':'+strMin+':'+strS; - - return tDate; -} - - -function Unixtimestamp2Date( nSecond ) -{ - var d=new Date(nSecond*1000); - - var tDate={}; - - tDate.nyear=d.getFullYear(); - tDate.nmonth=d.getMonth()+1; - tDate.nday=d.getDate(); - - tDate.nhour=d.getHours(); - tDate.nminute=d.getMinutes(); - tDate.nsecond=d.getSeconds(); - - tDate.nweek=d.getDay(); - tDate.ndate=d.getDate(); - - var strM=tDate.nmonth+''; - if( tDate.nmonth<10 ) - strM='0'+tDate.nmonth; - - var strD=tDate.nday+''; - if( tDate.nday<10 ) - strD='0'+tDate.nday; - - tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; - - return tDate.strdate; -} - - -//------------Array Function------------- -Array.prototype.in_array = function (e) { - let sArray= ',' + this.join(this.S) + ','; - let skey=','+e+','; - - if(sArray.indexOf(skey)>=0) - return true; - else - return false; - } - - - -//------------String Function------------------ -/** -* Delete Left/Right Side Blank -*/ -String.prototype.trim=function() -{ - return this.replace(/(^\s*)|(\s*$)/g, ''); -} -/** -* Delete Left Side Blank -*/ -String.prototype.ltrim=function() -{ - return this.replace(/(^\s*)/g,''); -} -/** -* Delete Right Side Blank -*/ -String.prototype.rtrim=function() -{ - return this.replace(/(\s*$)/g,''); -} - - -//----------------Get Param------------- -function GetQueryString(name) -{ - var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); - var r = window.location.search.substr(1).match(reg); - if (r!=null) - { - return unescape(r[2]); - } - else - { - return null; - } -} - -function GetGetStr() -{ - let strGet=""; - - //获取当前URL - let url = document.location.href; - - //获取?的位置 - let index = url.indexOf("?") - if(index != -1) { - //截取出?后面的字符串 - strGet = url.substr(index + 1); - } - - return strGet; -} - - -/*--------------------JSON Function------------*/ - -/* -功能:检查一个字符串是不是标准的JSON格式 -参数: strJson 被检查的字符串 -返回值: 如果字符串是一个标准的JSON格式,则返回JSON对象 - 如果字符串不是标准JSON格式,则返回null -*/ -function IsJson( strJson ) -{ - var tJson=null; - try - { - tJson=JSON.parse(strJson); - } - catch(exception) - { - return null; - } - - return tJson; -} - -/*-----------------------Ajax Function--------------------*/ -/*对JQuery的Ajax函数的封装,只支持异步 -参数说明: - url 目标地址 - action post/get - data 字符串格式的发送内容 - asyn true---异步模式;false-----同步模式; -*/ -function HttpReq( url,action, data,callbackfunc) -{ - var strAction=action.toLowerCase(); - - if( strAction=="post") - { - $.post(url,data,callbackfunc); - } - else if( strAction=="get") - { - $.get(url,callbackfunc); - } -} - -/*---------------Cookie Function-------------------*/ -function setCookie(name, value, time='',path='') { - if(time && path){ - var strsec = time * 1000; - var exp = new Date(); - exp.setTime(exp.getTime() + strsec * 1); - document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString() + ";path="+path; - }else if(time){ - var strsec = time * 1000; - var exp = new Date(); - exp.setTime(exp.getTime() + strsec * 1); - document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); - }else if(path){ - document.cookie = name + "=" + escape(value) + ";path="+path; - }else{ - document.cookie = name + "=" + escape(value); - } -} - -function getCookie(c_name) -{ - if(document.cookie.length > 0) { - c_start = document.cookie.indexOf(c_name + "=");//获取字符串的起点 - if(c_start != -1) { - c_start = c_start + c_name.length + 1;//获取值的起点 - c_end = document.cookie.indexOf(";", c_start);//获取结尾处 - if(c_end == -1) c_end = document.cookie.length;//如果是最后一个,结尾就是cookie字符串的结尾 - return decodeURI(document.cookie.substring(c_start, c_end));//截取字符串返回 - } - } - - return ""; -} - -function checkCookie(c_name) { - username = getCookie(c_name); - console.log(username); - if (username != null && username != "") - { return true; } - else - { return false; } -} - -function clearCookie(name) { - setCookie(name, "", -1); -} - - -/*--------Studio WX Message-------*/ -function IsInSlicer() -{ - let bMatch=navigator.userAgent.match( RegExp('BBL-Slicer','i') ); - - return bMatch; -} - - - -function SendWXMessage( strMsg ) -{ - let bCheck=IsInSlicer(); - - if(bCheck!=null) - { - window.wx.postMessage(strMsg); - } -} - - -/*------CSS Link Control----*/ -function RemoveCssLink( LinkPath ) -{ - let pNow=$("head link[href='"+LinkPath+"']"); - - let nTotal=pNow.length; - for( let n=0;n0) - RemoveCssLink(DarkCssPath); - } - else - { - if(nNow==0) - AddCssLink(DarkCssPath); - } -} - -SwitchDarkMode("css/dark.css"); \ No newline at end of file diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index bfb27fe72..23f3a2eed 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -6,12 +6,14 @@ function OnInit() //-----Test----- //Set_RecentFile_MouseRightBtn_Event(); - //-----Official----- TranslatePage(); SendMsg_GetLoginInfo(); SendMsg_GetRecentFile(); + SendMsg_GetStaffPick(); + + //InitStaffPick(); } //------最佳打开文件的右键菜单功能---------- @@ -19,10 +21,11 @@ var RightBtnFilePath=''; var MousePosX=0; var MousePosY=0; +var sImages = {}; function Set_RecentFile_MouseRightBtn_Event() { - $("#FileList .FileItem").mousedown( + $(".FileItem").mousedown( function(e) { //FilePath @@ -80,7 +83,6 @@ function Set_RecentFile_MouseRightBtn_Event() function HandleStudio( pVal ) { let strCmd = pVal['command']; - //alert(strCmd); if(strCmd=='get_recent_projects') { @@ -118,6 +120,11 @@ function HandleStudio( pVal ) $("#NoPluginTip").hide(); } } + else if( strCmd=="modelmall_model_advise_get") + { + //alert('hot'); + ShowStaffPick( pVal['hits'] ); + } } function GotoMenu( strMenu ) @@ -145,9 +152,16 @@ function SetLoginInfo( strAvatar, strName ) { $("#Login1").hide(); - $("#UserAvatarIcon").prop("src",strAvatar); $("#UserName").text(strName); + let OriginAvatar=$("#UserAvatarIcon").prop("src"); + if(strAvatar!=OriginAvatar) + $("#UserAvatarIcon").prop("src",strAvatar); + else + { + //alert('Avatar is Same'); + } + $("#Login2").show(); $("#Login2").css("display","flex"); } @@ -177,10 +191,11 @@ function ShowRecentFileList( pList ) { let OneFile=pList[n]; - let sImg=OneFile["image"]; let sPath=OneFile['path']; + let sImg=OneFile["image"] || sImages[sPath]; let sTime=OneFile['time']; let sName=OneFile['project_name']; + sImages[sPath] = sImg; //let index=sPath.lastIndexOf('\\')>0?sPath.lastIndexOf('\\'):sPath.lastIndexOf('\/'); //let sShortName=sPath.substring(index+1,sPath.length); @@ -398,7 +413,99 @@ function OpenWikiUrl( strUrl ) SendWXMessage( JSON.stringify(tSend) ); } +//--------------Staff Pick------- +var StaffPickSwiper=null; +function InitStaffPick() +{ + if( StaffPickSwiper!=null ) + { + StaffPickSwiper.destroy(true,true); + StaffPickSwiper=null; + } + + StaffPickSwiper = new Swiper('#HotModel_Swiper.swiper', { + slidesPerView : 'auto', + spaceBetween: 16, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + slidesPerView : 'auto', + slidesPerGroup : 3 +// autoplay: { +// delay: 3000, +// stopOnLastSlide: false, +// disableOnInteraction: true, +// disableOnInteraction: false +// }, +// pagination: { +// el: '.swiper-pagination', +// }, +// scrollbar: { +// el: '.swiper-scrollbar', +// draggable: true +// } + }); +} + +function SendMsg_GetStaffPick() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="modelmall_model_advise_get"; + + SendWXMessage( JSON.stringify(tSend) ); + + setTimeout("SendMsg_GetStaffPick()",3600*1000*1); +} + +function ShowStaffPick( ModelList ) +{ + let PickTotal=ModelList.length; + if(PickTotal==0) + { + $('#HotModelList').html(''); + $('#HotModelArea').hide(); + + return; + } + + let strPickHtml=''; + for(let a=0;a'+ + '
'+DesignerName+'
'+ + '
'+ + '
'+ModelName+'
'+ + '
'; + } + + $('#HotModelList').html(strPickHtml); + InitStaffPick(); + $('#HotModelArea').show(); +} + +function OpenOneStaffPickModel( ModelID ) +{ + //alert(ModelID); + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="modelmall_model_open"; + tSend['data']={}; + tSend['data']['id']=ModelID; + + SendWXMessage( JSON.stringify(tSend) ); +} + //---------------Global----------------- window.postMessage = HandleStudio; - diff --git a/resources/web/homepage/js/jquery-3.6.0.min.js b/resources/web/homepage/js/jquery-3.6.0.min.js deleted file mode 100644 index c4c6022f2..000000000 --- a/resources/web/homepage/js/jquery-3.6.0.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 #include #include +#include #include #include #include #include -#include +#define slic3r_Semver_hpp_ +#define _libslic3r_h_ +#include static std::string g_log_folder; static std::atomic g_crash_log_count = 0; @@ -105,127 +108,127 @@ void CBaseException::ShowExceptionResoult(DWORD dwExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: { - //OutputString(_T("ACCESS_VIOLATION(%s)\r\n"), _T("��д�Ƿ��ڴ�")); + //OutputString(_T("ACCESS_VIOLATION(%s)\r\n"), _T("дǷڴ")); OutputString(_T("ACCESS_VIOLATION\r\n")); } return ; case EXCEPTION_DATATYPE_MISALIGNMENT: { - //OutputString(_T("DATATYPE_MISALIGNMENT(%s)\r\n"), _T("�߳���ͼ�ڲ�֧�ֶ����Ӳ���϶�дδ���������")); + //OutputString(_T("DATATYPE_MISALIGNMENT(%s)\r\n"), _T("߳ͼڲֶ֧Ӳ϶дδ")); OutputString(_T("DATATYPE_MISALIGNMENT\r\n")); } return ; case EXCEPTION_BREAKPOINT: { - //OutputString(_T("BREAKPOINT(%s)\r\n"), _T("����һ���ϵ�")); + //OutputString(_T("BREAKPOINT(%s)\r\n"), _T("һϵ")); OutputString(_T("BREAKPOINT\r\n")); } return ; case EXCEPTION_SINGLE_STEP: { - //OutputString(_T("SINGLE_STEP(%s)\r\n"), _T("����")); //һ���Ƿ����ڵ����¼��� + //OutputString(_T("SINGLE_STEP(%s)\r\n"), _T("")); //һǷڵ¼ OutputString(_T("SINGLE_STEP\r\n")); } return ; case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: { - //OutputString(_T("ARRAY_BOUNDS_EXCEEDED(%s)\r\n"), _T("�������Խ��")); + //OutputString(_T("ARRAY_BOUNDS_EXCEEDED(%s)\r\n"), _T("Խ")); OutputString(_T("ARRAY_BOUNDS_EXCEEDED\r\n")); } return ; case EXCEPTION_FLT_DENORMAL_OPERAND: { - //OutputString(_T("FLT_DENORMAL_OPERAND(%s)\r\n"), _T("���������һ�������������棬�����ĸ������޷���ʾ")); //������������ + //OutputString(_T("FLT_DENORMAL_OPERAND(%s)\r\n"), _T("һ棬ĸ޷ʾ")); // OutputString(_T("FLT_DENORMAL_OPERAND\r\n")); } return ; case EXCEPTION_FLT_DIVIDE_BY_ZERO: { - //OutputString(_T("FLT_DIVIDE_BY_ZERO(%s)\r\n"), _T("��������0����")); + //OutputString(_T("FLT_DIVIDE_BY_ZERO(%s)\r\n"), _T("0")); OutputString(_T("FLT_DIVIDE_BY_ZERO\r\n")); } return ; case EXCEPTION_FLT_INEXACT_RESULT: { - //OutputString(_T("FLT_INEXACT_RESULT(%s)\r\n"), _T("�����������Ľ���޷���ʾ")); //�޷���ʾһ��������̫С��������������ʾ�ķ�Χ, ����֮������Ľ���쳣 + //OutputString(_T("FLT_INEXACT_RESULT(%s)\r\n"), _T("Ľ޷ʾ")); //޷ʾһ̫СʾķΧ, ֮Ľ쳣 OutputString(_T("FLT_INEXACT_RESULT\r\n")); } return ; case EXCEPTION_FLT_INVALID_OPERATION: { - //OutputString(_T("FLT_INVALID_OPERATION(%s)\r\n"), _T("�����������쳣")); + //OutputString(_T("FLT_INVALID_OPERATION(%s)\r\n"), _T("쳣")); OutputString(_T("FLT_INVALID_OPERATION\r\n")); } return ; case EXCEPTION_FLT_OVERFLOW: { - //OutputString(_T("FLT_OVERFLOW(%s)\r\n"), _T("���������ָ����������Ӧ���͵����ֵ")); + //OutputString(_T("FLT_OVERFLOW(%s)\r\n"), _T("ָӦ͵ֵ")); OutputString(_T("FLT_OVERFLOW\r\n")); } return ; case EXCEPTION_FLT_STACK_CHECK: { - //OutputString(_T("STACK_CHECK(%s)\r\n"), _T("ջԽ�����ջ�������")); + //OutputString(_T("STACK_CHECK(%s)\r\n"), _T("ջԽջ")); OutputString(_T("STACK_CHECK\r\n")); } return ; case EXCEPTION_INT_DIVIDE_BY_ZERO: { - //OutputString(_T("INT_DIVIDE_BY_ZERO(%s)\r\n"), _T("������0�쳣")); + //OutputString(_T("INT_DIVIDE_BY_ZERO(%s)\r\n"), _T("0쳣")); OutputString(_T("INT_DIVIDE_BY_ZERO\r\n")); } return ; case EXCEPTION_INVALID_HANDLE: { - //OutputString(_T("INVALID_HANDLE(%s)\r\n"), _T("�����Ч")); + //OutputString(_T("INVALID_HANDLE(%s)\r\n"), _T("Ч")); OutputString(_T("INVALID_HANDLE\r\n")); } return ; case EXCEPTION_PRIV_INSTRUCTION: { - //OutputString(_T("PRIV_INSTRUCTION(%s)\r\n"), _T("�߳���ͼִ�е�ǰ����ģʽ��֧�ֵ�ָ��")); + //OutputString(_T("PRIV_INSTRUCTION(%s)\r\n"), _T("߳ͼִеǰģʽֵָ֧")); OutputString(_T("PRIV_INSTRUCTION\r\n")); } return ; case EXCEPTION_IN_PAGE_ERROR: { - //OutputString(_T("IN_PAGE_ERROR(%s)\r\n"), _T("�߳���ͼ����δ���ص������ڴ�ҳ���߲��ܼ��ص������ڴ�ҳ")); + //OutputString(_T("IN_PAGE_ERROR(%s)\r\n"), _T("߳ͼδصڴҳ߲ܼصڴҳ")); OutputString(_T("IN_PAGE_ERROR\r\n")); } return ; case EXCEPTION_ILLEGAL_INSTRUCTION: { - //OutputString(_T("ILLEGAL_INSTRUCTION(%s)\r\n"), _T("�߳���ͼִ����Чָ��")); + //OutputString(_T("ILLEGAL_INSTRUCTION(%s)\r\n"), _T("߳ͼִЧָ")); OutputString(_T("ILLEGAL_INSTRUCTION\r\n")); } return ; case EXCEPTION_NONCONTINUABLE_EXCEPTION: { - //OutputString(_T("NONCONTINUABLE_EXCEPTION(%s)\r\n"), _T("�߳���ͼ��һ�����ɼ���ִ�е��쳣���������ִ��")); + //OutputString(_T("NONCONTINUABLE_EXCEPTION(%s)\r\n"), _T("߳ͼһɼִе쳣ִ")); OutputString(_T("NONCONTINUABLE_EXCEPTION\r\n")); } return ; case EXCEPTION_STACK_OVERFLOW: { - //OutputString(_T("STACK_OVERFLOW(%s)\r\n"), _T("ջ���")); + //OutputString(_T("STACK_OVERFLOW(%s)\r\n"), _T("ջ")); OutputString(_T("STACK_OVERFLOW\r\n")); } return ; case EXCEPTION_INVALID_DISPOSITION: { - //OutputString(_T("INVALID_DISPOSITION(%s)\r\n"), _T("�쳣���������쳣������������һ����Ч����")); //ʹ�ø߼����Ա�д�ij�����Զ������������쳣 + //OutputString(_T("INVALID_DISPOSITION(%s)\r\n"), _T("쳣쳣һЧ")); //ʹø߼ԱдijԶ쳣 OutputString(_T("INVALID_DISPOSITION\r\n")); } return ; case EXCEPTION_FLT_UNDERFLOW: { - //OutputString(_T("FLT_UNDERFLOW(%s)\r\n"), _T("������������ָ��С����Ӧ���͵���Сֵ")); + //OutputString(_T("FLT_UNDERFLOW(%s)\r\n"), _T("ָСӦ͵Сֵ")); OutputString(_T("FLT_UNDERFLOW\r\n")); } return ; case EXCEPTION_INT_OVERFLOW: { - //OutputString(_T("INT_OVERFLOW(%s)\r\n"), _T("��������Խ��")); + //OutputString(_T("INT_OVERFLOW(%s)\r\n"), _T("Խ")); OutputString(_T("INT_OVERFLOW\r\n")); } return ; @@ -254,6 +257,7 @@ LONG WINAPI CBaseException::UnhandledExceptionFilter(PEXCEPTION_POINTERS pExcept //BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": got an ExceptionCode %1%, skip it!") % pExceptionInfo->ExceptionRecord->ExceptionCode; return EXCEPTION_CONTINUE_SEARCH; } + Slic3r::flush_logs(); g_dump_mutex.lock(); CBaseException base(GetCurrentProcess(), GetCurrentProcessId(), NULL, pExceptionInfo); base.ShowExceptionInformation(); @@ -292,7 +296,7 @@ BOOL CBaseException::GetLogicalAddress( DWORD rva = (DWORD)addr - hMod; - //���㵱ǰ��ַ�ڵڼ����� + //㵱ǰַڵڼ for (unsigned i = 0; i < pNtHdr->FileHeader.NumberOfSections; i++, pSection++ ) { DWORD sectionStart = pSection->VirtualAddress; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ab9a97079..e2623e16f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -248,6 +248,12 @@ else () COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${BIN_RESOURCES_DIR}" COMMENT "Symlinking the resources directory into the build tree" VERBATIM) + if (UNIX AND NOT APPLE) + add_custom_command(TARGET BambuStudio POST_BUILD + COMMAND ln -sfn "zh_cn" "${BIN_RESOURCES_DIR}/i18n/zh_CN" + COMMENT "Symlinking zh_CN language setting to zh_cn" + VERBATIM) + endif() endif () # Slic3r binary install target. Default build type is release in case no CMAKE_BUILD_TYPE is provided. diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 6dfcc686d..db099d1aa 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -38,6 +38,7 @@ using namespace nlohmann; #include #include #include +#include #include #include #include @@ -63,10 +64,11 @@ using namespace nlohmann; #include "libslic3r/Time.hpp" #include "libslic3r/Thread.hpp" #include "libslic3r/BlacklistedLibraryCheck.hpp" +#include "libslic3r/FlushVolCalc.hpp" #include "libslic3r/Orient.hpp" -#include "OrcaSlicer.hpp" +#include "BambuStudio.hpp" //BBS: add exception handler for win32 #include #ifdef WIN32 @@ -96,30 +98,46 @@ using namespace Slic3r; std::map cli_errors = { - {CLI_SUCCESS, "Success"}, - {CLI_ENVIRONMENT_ERROR, "Environment setup failed"}, - {CLI_INVALID_PARAMS, "Input param invalid"}, - {CLI_FILE_NOTFOUND, "Input file not found"}, - {CLI_FILELIST_INVALID_ORDER, "File list order invalid(please make sure 3mf in the first place)"}, - {CLI_CONFIG_FILE_ERROR, "Invalid config file, could not be parsed"}, - {CLI_DATA_FILE_ERROR, "Invalid model file, could not be loaded"}, - {CLI_INVALID_PRINTER_TECH, "Invalid printer technoledge"}, - {CLI_UNSUPPORTED_OPERATION, "Unsupported operation"}, - {CLI_COPY_OBJECTS_ERROR, "Copy objects error"}, - {CLI_SCALE_TO_FIT_ERROR, "Scale to fit error"}, - {CLI_EXPORT_STL_ERROR, "Export stl error"}, - {CLI_EXPORT_OBJ_ERROR, "Export obj error"}, - {CLI_EXPORT_3MF_ERROR, "Export 3mf error"}, - {CLI_OUT_OF_MEMORY, "Out of memory"}, - {CLI_NO_SUITABLE_OBJECTS, "Found no objects in print volume to slice"}, - {CLI_VALIDATE_ERROR, "Validate print error"}, - {CLI_OBJECTS_PARTLY_INSIDE, "Objects partly inside"}, - {CLI_EXPORT_CACHE_DIRECTORY_CREATE_FAILED, "Objects partly inside"}, - {CLI_EXPORT_CACHE_WRITE_FAILED, "export cached slicedata failed"}, - {CLI_IMPORT_CACHE_NOT_FOUND, "cached slicedata can not be found"}, - {CLI_IMPORT_CACHE_DATA_CAN_NOT_USE, "cached slicedata can not be used"}, - {CLI_IMPORT_CACHE_LOAD_FAILED, "load cached slicedata failed"}, - {CLI_SLICING_ERROR, "Slice error"} + {CLI_SUCCESS, "Success."}, + {CLI_ENVIRONMENT_ERROR, "Failed setting up server environment."}, + {CLI_INVALID_PARAMS, "Invalid parameters to the slicer."}, + {CLI_FILE_NOTFOUND, "The input files to the slicer are not found."}, + {CLI_FILELIST_INVALID_ORDER, "File list order to the slicer is invalid. Please make sure the 3mf in the first place."}, + {CLI_CONFIG_FILE_ERROR, "The input preset file is invalid and can not be parsed."}, + {CLI_DATA_FILE_ERROR, "The input model file to the slicer can not be parsed."}, + {CLI_INVALID_PRINTER_TECH, "Unsupported printer technology (not FDM)."}, + {CLI_UNSUPPORTED_OPERATION, "Unsupported CLI instruction."}, + {CLI_COPY_OBJECTS_ERROR, "Failed copying objects."}, + {CLI_SCALE_TO_FIT_ERROR, "Failed scaling an object to fit the plate."}, + {CLI_EXPORT_STL_ERROR, "Failed exporting STL files."}, + {CLI_EXPORT_OBJ_ERROR, "Failed exporting OBJ files."}, + {CLI_EXPORT_3MF_ERROR, "Failed exporting 3mf files."}, + {CLI_OUT_OF_MEMORY, "Out of memory during slicing. Please upload a model with lower geometry resolution and try again."}, + {CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE, "The selected printer is not supported."}, + {CLI_3MF_NEW_MACHINE_NOT_SUPPORTED, "The selected printer is not compatible with the 3mf."}, + {CLI_PROCESS_NOT_COMPATIBLE, "The selected printer is not compatible with the process preset in the 3mf."}, + {CLI_INVALID_VALUES_IN_3MF, "Invalid parameter value(s) included in the 3mf file."}, + {CLI_POSTPROCESS_NOT_SUPPORTED, "post_process is not supported under CLI."}, + {CLI_PRINTABLE_SIZE_REDUCED, "The selected printer's bed size is smaller than the bed size used in the print profile."}, + {CLI_OBJECT_ARRANGE_FAILED, "An error occurred when auto-arranging object(s)."}, + {CLI_OBJECT_ORIENT_FAILED, "An error occurred when auto-orienting object(s)."}, + {CLI_NO_SUITABLE_OBJECTS, "An empty plate was found. Please check that all plates are not empty in Bambu Studio before uploading."}, + {CLI_VALIDATE_ERROR, "There are some incorrect slicing parameters in the 3mf. Please verify the slicing of all plates in Bambu Studio before uploading."}, + {CLI_OBJECTS_PARTLY_INSIDE, "Some objects are located over the boundary of the heated bed."}, + {CLI_EXPORT_CACHE_DIRECTORY_CREATE_FAILED, "Failed creating directory when exporting cache data."}, + {CLI_EXPORT_CACHE_WRITE_FAILED, "Failed exporting cache data."}, + {CLI_IMPORT_CACHE_NOT_FOUND, "Cache data not found."}, + {CLI_IMPORT_CACHE_DATA_CAN_NOT_USE, "Cache data can not be parsed."}, + {CLI_IMPORT_CACHE_LOAD_FAILED, "Failed importing cache data."}, + {CLI_SLICING_TIME_EXCEEDS_LIMIT, "Slicing time of a certain plate exceeds the limit. Please simplify the model or use a larger slicing layer height."}, + {CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT, "Triangle count of single plate exceeds the limit. Please simplify the model and try to upload again."}, + {CLI_NO_SUITABLE_OBJECTS_AFTER_SKIP, "No printable objects to slice after skipping."}, + {CLI_FILAMENT_NOT_MATCH_BED_TYPE, "Filaments are not compatible with the plate type. Please verify the slicing of all plates in Bambu Studio before uploading."}, + {CLI_FILAMENTS_DIFFERENT_TEMP, "The temperature difference of the filaments used is too large. Please verify the slicing of all plates in Bambu Studio before uploading."}, + {CLI_OBJECT_COLLISION_IN_SEQ_PRINT, "Object conflicts were detected when using print-by-object mode. Please verify the slicing of all plates in Bambu Studio before uploading."}, + {CLI_OBJECT_COLLISION_IN_LAYER_PRINT, "Object conflicts were detected. Please verify the slicing of all plates in Bambu Studio before uploading."}, + {CLI_SLICING_ERROR, "Failed slicing the model. Please verify the slicing of all plates on Bambu Studio before uploading."}, + {CLI_GCODE_PATH_CONFLICTS, " G-code conflicts detected after slicing. Please make sure the 3mf file can be successfully sliced in the latest Bambu Studio."} }; #if defined(__linux__) || defined(__LINUX__) @@ -198,6 +216,7 @@ typedef struct _cli_callback_mgr { m_data_ready = false; lck.unlock(); m_condition.notify_one(); + boost::this_thread::sleep(boost::posix_time::milliseconds(20)); BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::thread_proc started."; while(1) { lck.lock(); @@ -266,7 +285,9 @@ typedef struct _cli_callback_mgr { m_thread = create_thread([this]{ this->thread_proc(); }); + m_condition.wait(lck, [this](){ return m_started; }); lck.unlock(); + m_condition.notify_one(); BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::start successfully."; return true; } @@ -328,6 +349,36 @@ static PrinterTechnology get_printer_technology(const DynamicConfig &config) return(ret);} #endif +void record_exit_reson(std::string outputdir, int code, int plate_id, std::string error_message, std::map key_values = std::map()) +{ +#if defined(__linux__) || defined(__LINUX__) + std::string result_file; + + if (!outputdir.empty()) + result_file = outputdir + "/result.json"; + else + result_file = "result.json"; + + try { + json j; + //record the headers + j["plate_index"] = plate_id; + j["return_code"] = code; + j["error_string"] = error_message; + for (auto& iter: key_values) + j[iter.first] = iter.second; + + boost::nowide::ofstream c; + c.open(result_file, std::ios::out | std::ios::trunc); + c << std::setw(4) << j << std::endl; + c.close(); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", saved config to %1%\n")%result_file; + } + catch (...) {} +#endif +} + static void glfw_callback(int error_code, const char* description) { BOOST_LOG_TRIVIAL(error) << "error_code " <setup(debug_argc, debug_argv))*/ if (!this->setup(argc, argv)) @@ -415,14 +466,20 @@ int CLI::run(int argc, char **argv) boost::algorithm::iends_with(boost::filesystem::path(argv[0]).filename().string(), "gcodeviewer"); #endif // _WIN32*/ - bool translate_old = false, regenerate_thumbnails = false; - int current_width, current_depth, current_height; + bool translate_old = false, regenerate_thumbnails = false, shrink_to_new_bed = false; + int current_printable_width, current_printable_depth, current_printable_height; + int old_printable_height = 0, old_printable_width = 0, old_printable_depth = 0; + Pointfs old_printable_area, old_exclude_area; + std::string outfile_dir = m_config.opt_string("outputdir", true); const std::vector &load_configs = m_config.option("load_settings", true)->values; + const std::vector &uptodate_configs = m_config.option("uptodate_settings", true)->values; //BBS: always use ForwardCompatibilitySubstitutionRule::Enable //const ForwardCompatibilitySubstitutionRule config_substitution_rule = m_config.option>("config_compatibility", true)->value; const ForwardCompatibilitySubstitutionRule config_substitution_rule = ForwardCompatibilitySubstitutionRule::Enable; const std::vector &load_filaments = m_config.option("load_filaments", true)->values; + //skip model object logic const std::vector &skip_objects = m_config.option("skip_objects", true)->values; + std::map skip_maps; bool need_skip = (skip_objects.size() > 0)?true:false; if (start_gui) { @@ -469,7 +526,7 @@ int CLI::run(int argc, char **argv) //BBS: remove GCodeViewer as seperate APP logic //params.start_as_gcodeviewer = start_as_gcodeviewer; - BOOST_LOG_TRIVIAL(info) << "begin to launch OrcaSlicer GUI soon"; + BOOST_LOG_TRIVIAL(info) << "begin to launch BambuStudio GUI soon"; return Slic3r::GUI::GUI_Run(params); #else // SLIC3R_GUI // No GUI support. Just print out a help. @@ -493,12 +550,12 @@ int CLI::run(int argc, char **argv) //BBS: add plate data related logic PlateDataPtrs plate_data_src; int arrange_option; - int plate_to_slice = 0, filament_count = 0; - bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true; + int plate_to_slice = 0, filament_count = 0, duplicate_count = 0, real_duplicate_count = 0; + bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false; Semver file_version; std::map orients_requirement; std::vector project_presets; - std::string new_printer_name, current_printer_name, new_process_name, current_process_name, current_printer_system_name, current_process_system_name;//, printer_inherits, print_inherits; + std::string new_printer_name, current_printer_name, new_process_name, current_process_name, current_printer_system_name, current_process_system_name, new_process_system_name, new_printer_system_name;//, printer_inherits, print_inherits; std::vector upward_compatible_printers, new_print_compatible_printers, current_print_compatible_printers, current_different_settings; std::vector current_filaments_name, current_filaments_system_name, current_inherits_group; DynamicPrintConfig load_process_config, load_machine_config; @@ -518,6 +575,10 @@ int CLI::run(int argc, char **argv) if (uptodate_option) up_config_to_date = uptodate_option->value; + ConfigOptionBool* load_defaultfila_option = m_config.option("load_defaultfila"); + if (load_defaultfila_option) + use_first_fila_as_default = load_defaultfila_option->value; + ConfigOptionString* pipe_option = m_config.option("pipe"); if (pipe_option) { pipe_name = pipe_option->value; @@ -525,21 +586,34 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("Will use pipe %1%")%pipe_name; #if defined(__linux__) || defined(__LINUX__) g_cli_callback_mgr.start(pipe_name); + PrintBase::SlicingStatus slicing_status{1, "Start to load files"}; + cli_status_callback(slicing_status); #endif } } + //skip model object map construct + if (need_skip) { + BOOST_LOG_TRIVIAL(info) << boost::format("need to skip objects, size %1%:")%skip_objects.size(); + for (int index = 0; index < skip_objects.size(); index++) + { + skip_maps[skip_objects[index]] = false; + BOOST_LOG_TRIVIAL(info) << boost::format("object %1%, id %2%")%index %skip_objects[index]; + } + } + /*for (const std::string& file : m_input_files) if (is_gcode_file(file) && boost::filesystem::exists(file)) { start_as_gcodeviewer = true; BOOST_LOG_TRIVIAL(info) << "found a gcode file:" << file << ", will start as gcode viewer\n"; break; }*/ - BOOST_LOG_TRIVIAL(info) << boost::format("plate_to_slice=%1%, normative_check=%2%")%plate_to_slice %normative_check; + BOOST_LOG_TRIVIAL(info) << boost::format("plate_to_slice=%1%, normative_check=%2%, use_first_fila_as_default=%3%")%plate_to_slice %normative_check %use_first_fila_as_default; //if (!start_as_gcodeviewer) { for (const std::string& file : m_input_files) { if (!boost::filesystem::exists(file)) { boost::nowide::cerr << "No such file: " << file << std::endl; + record_exit_reson(outfile_dir, CLI_FILE_NOTFOUND, 0, cli_errors[CLI_FILE_NOTFOUND]); flush_and_exit(CLI_FILE_NOTFOUND); } Model model; @@ -569,9 +643,10 @@ int CLI::run(int argc, char **argv) if (!first_file) { BOOST_LOG_TRIVIAL(info) << "The BBL 3mf file should be placed at the first position, filename=" << file << "\n"; + record_exit_reson(outfile_dir, CLI_FILELIST_INVALID_ORDER, 0, cli_errors[CLI_FILELIST_INVALID_ORDER]); flush_and_exit(CLI_FILELIST_INVALID_ORDER); } - BOOST_LOG_TRIVIAL(info) << "the first file is a 3mf, got plate count:" << plate_data_src.size() << "\n"; + BOOST_LOG_TRIVIAL(info) << boost::format("the first file is a 3mf, version %1%, got plate count %2%") %file_version.to_string() %plate_data_src.size(); need_arrange = false; for (ModelObject* o : model.objects) { @@ -595,6 +670,7 @@ int CLI::run(int argc, char **argv) std::vector postprocess_values = postprocess_scripts->values; if (postprocess_values.size() > 0) { BOOST_LOG_TRIVIAL(error) << boost::format("normative_check: postprocess not supported, array size %1%")%postprocess_values.size(); + record_exit_reson(outfile_dir, CLI_POSTPROCESS_NOT_SUPPORTED, 0, cli_errors[CLI_POSTPROCESS_NOT_SUPPORTED]); flush_and_exit(CLI_POSTPROCESS_NOT_SUPPORTED); } } @@ -609,37 +685,60 @@ int CLI::run(int argc, char **argv) current_printer_name = config.option("printer_settings_id")->value; current_process_name = config.option("print_settings_id")->value; current_filaments_name = config.option("filament_settings_id")->values; + + BOOST_LOG_TRIVIAL(info) << boost::format("current_printer_name %1%, current_process_name %2%")%current_printer_name %current_process_name; ConfigOptionStrings* option_strings = config.option("inherits_group"); if (option_strings) { current_inherits_group = option_strings->values; size_t size = current_inherits_group.size(); - if (current_inherits_group[size-1].empty()) + if (current_inherits_group[size-1].empty()) { current_printer_system_name = current_printer_name; - else + BOOST_LOG_TRIVIAL(info) << boost::format("inherits of printer is null, should be system preset"); + } + else { current_printer_system_name = current_inherits_group[size-1]; + BOOST_LOG_TRIVIAL(info) << boost::format("inherits of printer valid, current_printer_system_name is %1%") %current_printer_system_name; + } - if (current_inherits_group[0].empty()) + if (current_inherits_group[0].empty()) { current_process_system_name = current_process_name; - else + BOOST_LOG_TRIVIAL(info) << boost::format("inherits of process is null, should be system preset"); + } + else { current_process_system_name = current_inherits_group[0]; + BOOST_LOG_TRIVIAL(info) << boost::format("inherits of process valid, current_process_system_name is %1%") %current_process_system_name; + } current_filaments_system_name.resize(size - 2); for (int index = 1; index < (size - 1); index++) { - if (current_inherits_group[index].empty()) + if (current_inherits_group[index].empty()) { current_filaments_system_name[index-1] = current_filaments_name[index-1]; - else + } + else { current_filaments_system_name[index-1] = current_inherits_group[index]; + } } } else { current_printer_system_name = current_printer_name; current_process_system_name = current_process_name; current_filaments_system_name = current_filaments_name; + BOOST_LOG_TRIVIAL(info) << boost::format("no inherits_group: use system name the same as current name"); } filament_count = current_filaments_name.size(); upward_compatible_printers = config.option("upward_compatible_machine", true)->values; current_print_compatible_printers = config.option("print_compatible_printers", true)->values; current_different_settings = config.option("different_settings_to_system", true)->values; + + //use Pointfs insteadof Points + old_printable_area = config.option("printable_area", true)->values; + old_exclude_area = config.option("bed_exclude_area", true)->values; + if (old_printable_area.size() >= 4) { + old_printable_width = (int)(old_printable_area[2].x() - old_printable_area[0].x()); + old_printable_depth = (int)(old_printable_area[2].y() - old_printable_area[0].y()); + } + old_printable_height = (int)(config.opt_float("printable_height")); + BOOST_LOG_TRIVIAL(info) << boost::format("old printable size from 3mf: {%1%, %2%, %3%}")%old_printable_width %old_printable_depth %old_printable_height; } else { @@ -659,6 +758,7 @@ int CLI::run(int argc, char **argv) } if ((printer_technology != other_printer_technology) && (other_printer_technology != ptUnknown)) { boost::nowide::cerr << "invalid printer_technology " < load_filaments_id; std::vector load_filaments_name; int current_index = 0; + std::string default_load_fila_name, default_load_fila_id, default_filament_file; + DynamicPrintConfig default_load_fila_config; + if (use_first_fila_as_default) { + //construct default filament + for (int index = 0; index < load_filament_count; index++) { + const std::string& file = load_filaments[index]; + if (default_filament_file.empty() && !file.empty()) { + DynamicPrintConfig config; + std::string config_type, config_name, filament_id; + int ret = load_system_config_file(file, config, config_type, config_name, filament_id); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); + flush_and_exit(ret); + } + + if (config_type != "filament") { + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(": unknown config type %1% of file %2% in load-filaments") % config_type % file; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } + + default_filament_file = file; + default_load_fila_name = config_name; + default_load_fila_id = filament_id; + default_load_fila_config = std::move(config); + break; + } + } + if ((load_filament_count > 0) && default_filament_file.empty()) + { + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(": load_filament_count is %1%, but can not load a default filament") % load_filament_count; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } + } for (int index = 0; index < load_filament_count; index++) { const std::string& file = load_filaments[index]; current_index++; @@ -810,11 +950,13 @@ int CLI::run(int argc, char **argv) std::string config_type, config_name, filament_id; int ret = load_system_config_file(file, config, config_type, config_name, filament_id); if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); } if (config_type != "filament") { - boost::nowide::cerr <<__FUNCTION__ << boost::format(": unknown config type %1% of file %2% in load-filaments") % config_type % file; + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(": unknown config type %1% of file %2% in load-filaments") % config_type % file; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); flush_and_exit(CLI_CONFIG_FILE_ERROR); } @@ -823,7 +965,8 @@ int CLI::run(int argc, char **argv) printer_technology = other_printer_technology; } if ((printer_technology != other_printer_technology) && (other_printer_technology != ptUnknown)) { - boost::nowide::cerr << "invalid printer_technology " < 0) + { + for (auto const &file : uptodate_configs) { DynamicPrintConfig config; std::string config_type, config_name, filament_id; - int ret = load_system_config_file(system_printer_path, config, config_type, config_name, filament_id); - if (ret) + int ret = load_system_config_file(file, config, config_type, config_name, filament_id); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); - upward_compatible_printers = config.option("upward_compatible_machine", true)->values; - config.set("printer_settings_id", config_name, true); - load_machine_config = std::move(config); - } - } - else - fetch_upward_values = true; + } - if (new_process_name.empty() && !current_process_system_name.empty()) { - //use the original printer name in 3mf - std::string system_process_path = resources_dir() + "/profiles/BBL/process_full/"+current_process_system_name+".json"; - if (! boost::filesystem::exists(system_process_path)) { - boost::nowide::cerr << __FUNCTION__<< ": can not find system preset file: " << system_process_path << std::endl; - //use original one - } - else { - DynamicPrintConfig config; - std::string config_type, config_name, filament_id; - int ret = load_system_config_file(system_process_path, config, config_type, config_name, filament_id); - if (ret) - flush_and_exit(ret); - current_print_compatible_printers = config.option("compatible_printers", true)->values; - config.set("print_settings_id", config_name, true); - load_process_config = std::move(config); + if (config_type == "machine") { + if ( config_name != current_printer_system_name ) { + BOOST_LOG_TRIVIAL(error) << boost::format("wrong machine config file %1% loaded, current machine config name %2% ")%config_name %current_printer_system_name; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } + upward_compatible_printers = config.option("upward_compatible_machine", true)->values; + BOOST_LOG_TRIVIAL(info) << boost::format("load a machine config %1% from file %2%, upward_compatible_printers size is %3% ")%config_name %file %upward_compatible_printers.size(); + if (new_printer_name.empty() && !current_printer_system_name.empty()) + { + config.set("printer_settings_id", config_name, true); + load_machine_config = std::move(config); + } + } + else if (config_type == "process") { + if ( config_name != current_process_system_name ) { + BOOST_LOG_TRIVIAL(error) << boost::format("wrong process config file %1% loaded, current process config name %2% ")%config_name %current_process_system_name; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } + current_print_compatible_printers = config.option("compatible_printers", true)->values; + BOOST_LOG_TRIVIAL(info) << boost::format("load a process config %1% from file %2%, current_print_compatible_printers size is %3% ")%config_name %file %current_print_compatible_printers.size(); + if (new_process_name.empty() && !current_process_system_name.empty()) + { + config.set("print_settings_id", config_name, true); + load_process_config = std::move(config); + } + } + else { + BOOST_LOG_TRIVIAL(error) << boost::format("found invalid config type %1% from config %2% ")%config_type %file; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } } } - else - fetch_compatible_values = true; + else { + if (new_printer_name.empty() && !current_printer_system_name.empty()) { + //use the original printer name in 3mf + std::string system_printer_path = resources_dir() + "/profiles/BBL/machine_full/"+current_printer_system_name+".json"; + if (! boost::filesystem::exists(system_printer_path)) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__<< boost::format(":%1%, can not find system preset file: %2% ")%__LINE__ %system_printer_path; + //use original one + } + else { + DynamicPrintConfig config; + std::string config_type, config_name, filament_id; + int ret = load_system_config_file(system_printer_path, config, config_type, config_name, filament_id); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); + flush_and_exit(ret); + } + upward_compatible_printers = config.option("upward_compatible_machine", true)->values; + config.set("printer_settings_id", config_name, true); + load_machine_config = std::move(config); + } + } + else + fetch_upward_values = true; + + if (new_process_name.empty() && !current_process_system_name.empty()) { + //use the original printer name in 3mf + std::string system_process_path = resources_dir() + "/profiles/BBL/process_full/"+current_process_system_name+".json"; + if (! boost::filesystem::exists(system_process_path)) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__<< boost::format(":%1%, can not find system preset file: %2% ")%__LINE__ %system_process_path; + //use original one + } + else { + DynamicPrintConfig config; + std::string config_type, config_name, filament_id; + int ret = load_system_config_file(system_process_path, config, config_type, config_name, filament_id); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); + flush_and_exit(ret); + } + current_print_compatible_printers = config.option("compatible_printers", true)->values; + config.set("print_settings_id", config_name, true); + load_process_config = std::move(config); + } + } + else + fetch_compatible_values = true; + } if (load_filaments_config.empty() && !current_filaments_system_name.empty()) { for (int index = 0; index < current_filaments_system_name.size(); index++) { std::string system_filament_path = resources_dir() + "/profiles/BBL/filament_full/"+current_filaments_system_name[index]+".json"; current_index++; if (! boost::filesystem::exists(system_filament_path)) { - boost::nowide::cerr << __FUNCTION__<< ": can not find system preset file: " << system_filament_path << std::endl; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__<< boost::format(":%1%, can not find system preset file: %2% ")%__LINE__ %system_filament_path; continue; } DynamicPrintConfig config; std::string config_type, config_name, filament_id; int ret = load_system_config_file(system_filament_path, config, config_type, config_name, filament_id); - if (ret) + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); + } load_filaments_id.push_back(filament_id); load_filaments_name.push_back(config_name); @@ -916,15 +1120,17 @@ int CLI::run(int argc, char **argv) //use the original printer name in 3mf std::string system_printer_path = resources_dir() + "/profiles/BBL/machine_full/"+current_printer_system_name+".json"; if (! boost::filesystem::exists(system_printer_path)) { - boost::nowide::cerr << __FUNCTION__<< ": can not find system preset file: " << system_printer_path << std::endl; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__<< boost::format(":%1%, can not find system preset file: %2% ")%__LINE__ %system_printer_path; //skip } else { DynamicPrintConfig config; std::string config_type, config_name, filament_id; int ret = load_system_config_file(system_printer_path, config, config_type, config_name, filament_id); - if (ret) + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); + } upward_compatible_printers = config.option("upward_compatible_machine", true)->values; } } @@ -936,24 +1142,37 @@ int CLI::run(int argc, char **argv) //use the original printer name in 3mf std::string system_process_path = resources_dir() + "/profiles/BBL/process_full/"+current_process_system_name+".json"; if (! boost::filesystem::exists(system_process_path)) { - boost::nowide::cerr << __FUNCTION__<< ": can not find system preset file: " << system_process_path << std::endl; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__<< boost::format(":%1%, can not find system preset file: %2% ")%__LINE__ %system_process_path; //use original one } else { DynamicPrintConfig config; std::string config_type, config_name, filament_id; int ret = load_system_config_file(system_process_path, config, config_type, config_name, filament_id); - if (ret) + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); + } current_print_compatible_printers = config.option("compatible_printers", true)->values; } } } //upwards check - bool process_compatible = true, machine_upwards = false; + bool process_compatible = false, machine_upwards = false; + BOOST_LOG_TRIVIAL(info) << boost::format("current printer %1%, new printer %2%, current process %3%, new process %4%")%current_printer_name %new_printer_name %current_process_name %new_process_name; + BOOST_LOG_TRIVIAL(info) << boost::format("current printer inherits %1%, new printer inherits %2%, current process inherits %3%, new process inherits %4%") + %current_printer_system_name %new_printer_system_name %current_process_system_name %new_process_system_name; + for (int index = 0; index < current_print_compatible_printers.size(); index++) { + BOOST_LOG_TRIVIAL(info) << boost::format("index %1%, current print compatible printer %2%")%index %current_print_compatible_printers[index]; + } + for (int index = 0; index < new_print_compatible_printers.size(); index++) { + BOOST_LOG_TRIVIAL(info) << boost::format("index %1%, new print compatible printer %2%")%index %new_print_compatible_printers[index]; + } + for (int index = 0; index < upward_compatible_printers.size(); index++) { + BOOST_LOG_TRIVIAL(info) << boost::format("index %1%, upward_compatible_printers %2%")%index %upward_compatible_printers[index]; + } if (!new_printer_name.empty()) { - process_compatible = false; if (!new_process_name.empty()) { for (int index = 0; index < new_print_compatible_printers.size(); index++) { if (new_print_compatible_printers[index] == new_printer_name) { @@ -961,7 +1180,8 @@ int CLI::run(int argc, char **argv) break; } } - BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, new process %2%, compatible %3%")%new_printer_name %new_process_name %process_compatible; + BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") + %new_printer_name %new_printer_system_name %new_process_name %new_process_system_name %process_compatible; } else { for (int index = 0; index < current_print_compatible_printers.size(); index++) { @@ -970,18 +1190,35 @@ int CLI::run(int argc, char **argv) break; } } - BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, old process %2%, compatible %3%")%new_printer_name %current_process_name %process_compatible; + BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, old process %3%, inherited from %4% ,compatible %5%") + %new_printer_name %new_printer_system_name %current_process_name %current_process_system_name %process_compatible; } } else if (!new_process_name.empty()) { - process_compatible = false; for (int index = 0; index < new_print_compatible_printers.size(); index++) { - if (new_print_compatible_printers[index] == current_printer_name) { + if (new_print_compatible_printers[index] == current_printer_system_name) { process_compatible = true; break; } } - BOOST_LOG_TRIVIAL(info) << boost::format("old printer %1%, new process %2%, compatible %3%")%current_printer_name %new_process_name %process_compatible; + BOOST_LOG_TRIVIAL(info) << boost::format("old printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") + %current_printer_name %current_printer_system_name %new_process_name %new_process_system_name %process_compatible; + } + else { + //check the compatible of old printer&&process + for (int index = 0; index < current_print_compatible_printers.size(); index++) { + if (current_print_compatible_printers[index] == current_printer_system_name) { + process_compatible = true; + break; + } + } + if (!process_compatible && current_print_compatible_printers.empty()) + { + BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf, no compatible printers, set to compatible"); + process_compatible = true; + } + BOOST_LOG_TRIVIAL(info) << boost::format("old printer %1%, inherited from %2%, old process %3%, inherited from %4% ,compatible %5%") + %current_printer_name %current_printer_system_name %current_process_name %current_process_system_name %process_compatible; } if (!process_compatible && !new_printer_name.empty() && !current_printer_name.empty() && (new_printer_name != current_printer_name)) { if (upward_compatible_printers.size() > 0) { @@ -993,18 +1230,21 @@ int CLI::run(int argc, char **argv) } } if (!process_compatible) { - boost::nowide::cout <<__FUNCTION__ << boost::format(": current 3mf file not support the new printer %1%")%new_printer_name; + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(" %1% : current 3mf file not support the new printer %2%")%__LINE__%new_printer_name; + record_exit_reson(outfile_dir, CLI_3MF_NEW_MACHINE_NOT_SUPPORTED, 0, cli_errors[CLI_3MF_NEW_MACHINE_NOT_SUPPORTED]); flush_and_exit(CLI_3MF_NEW_MACHINE_NOT_SUPPORTED); } } else { - boost::nowide::cout <<__FUNCTION__ << boost::format(": current 3mf file not support upward_compatible_printers, can not change machine preset."); + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(" %1%: current 3mf file not support upward_compatible_printers, can not change machine preset.")%__LINE__; + record_exit_reson(outfile_dir, CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE, 0, cli_errors[CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE]); flush_and_exit(CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE); } } if (!process_compatible) { - boost::nowide::cout <<__FUNCTION__ << boost::format(": process not compatible with printer."); + BOOST_LOG_TRIVIAL(error) <<__FUNCTION__ << boost::format(" %1%: process not compatible with printer.")%__LINE__; + record_exit_reson(outfile_dir, CLI_PROCESS_NOT_COMPATIBLE, 0, cli_errors[CLI_PROCESS_NOT_COMPATIBLE]); flush_and_exit(CLI_PROCESS_NOT_COMPATIBLE); } @@ -1107,8 +1347,10 @@ int CLI::run(int argc, char **argv) std::set different_keys_set(different_keys.begin(), different_keys.end()); BOOST_LOG_TRIVIAL(info) << boost::format("update printer config to newest, different size %1%")%different_keys_set.size(); int ret = update_full_config(m_print_config, load_machine_config, different_keys_set); - if (ret) + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); + } } //set the process settings into print config @@ -1144,9 +1386,11 @@ int CLI::run(int argc, char **argv) std::set different_keys_set(different_keys.begin(), different_keys.end()); BOOST_LOG_TRIVIAL(info) << boost::format("update process config to newest, different size %1%")%different_keys_set.size(); - int ret = update_full_config(m_print_config, load_machine_config, different_keys_set); - if (ret) + int ret = update_full_config(m_print_config, load_process_config, different_keys_set); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret]); flush_and_exit(ret); + } } if (machine_upwards) { @@ -1224,6 +1468,7 @@ int CLI::run(int argc, char **argv) if (source_opt == nullptr) { // The key was not found in the source config, therefore it will not be initialized! BOOST_LOG_TRIVIAL(error) << boost::format("can not find %1% from filament %2%: %3%")%opt_key%filament_index%load_filaments_name[index]; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); flush_and_exit(CLI_CONFIG_FILE_ERROR); } if (source_opt->is_scalar()) { @@ -1256,6 +1501,7 @@ int CLI::run(int argc, char **argv) // opt_key does not exist in this ConfigBase and it cannot be created, because it is not defined by this->def(). // This is only possible if other is of DynamicConfig type. BOOST_LOG_TRIVIAL(error) << boost::format("can not create option %1% to config, from filament %2%: %3%")%opt_key%filament_index%load_filaments_name[index]; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); flush_and_exit(CLI_CONFIG_FILE_ERROR); } ConfigOptionVectorBase* opt_vec_dst = static_cast(opt); @@ -1266,6 +1512,106 @@ int CLI::run(int argc, char **argv) } } + //compute the flush volume + ConfigOptionStrings* selected_filament_colors_option = m_extra_config.option("filament_colour"); + ConfigOptionStrings *project_filament_colors_option = m_print_config.option("filament_colour"); + if (project_filament_colors_option) + { + std::vector selected_filament_colors; + if (selected_filament_colors_option) { + selected_filament_colors = selected_filament_colors_option->values; + //erase here + m_extra_config.erase("filament_colour"); + } + + std::vector &project_filament_colors = project_filament_colors_option->values; + size_t project_filament_count = project_filament_colors.size(); + BOOST_LOG_TRIVIAL(info) << boost::format("select filament color from cli, size %1%")%selected_filament_colors.size(); + BOOST_LOG_TRIVIAL(info) << boost::format("project filament colors size %1%")%project_filament_colors.size(); + if (project_filament_count > 0) + { + for ( size_t index = 0; index < project_filament_count; index++ ) + { + BOOST_LOG_TRIVIAL(info) << boost::format("project filament %1% original color %2%")%index %project_filament_colors[index]; + if (selected_filament_colors.size() > index) + { + if (!selected_filament_colors[index].empty()) + { + BOOST_LOG_TRIVIAL(info) << boost::format("changed to new color %1%")%selected_filament_colors[index]; + project_filament_colors[index] = selected_filament_colors[index]; + } + } + } + + //computing + ConfigOptionBools* filament_is_support = m_print_config.option("filament_is_support", true); + std::vector& flush_vol_matrix = m_print_config.option("flush_volumes_matrix", true)->values; + //std::vector& flush_vol_vector = m_print_config.option("flush_volumes_vector", true)->values; + flush_vol_matrix.resize(project_filament_count*project_filament_count, 0.f); + //flush_vol_vector.resize(project_filament_count); + //set multiplier to 1? + m_print_config.option("flush_multiplier", true)->set(new ConfigOptionFloat(1.f)); + ConfigOption* extra_flush_volume_opt = m_print_config.option("nozzle_volume"); + int extra_flush_volume = extra_flush_volume_opt ? (int)extra_flush_volume_opt->getFloat() : 0; + + if (filament_is_support->size() != project_filament_count) + { + BOOST_LOG_TRIVIAL(error) << boost::format("filament_is_support's count %1% not equal to filament_colour's size %2%")%filament_is_support->size() %project_filament_count; + record_exit_reson(outfile_dir, CLI_CONFIG_FILE_ERROR, 0, cli_errors[CLI_CONFIG_FILE_ERROR]); + flush_and_exit(CLI_CONFIG_FILE_ERROR); + } + + BOOST_LOG_TRIVIAL(info) << boost::format("extra_flush_volume: %1%")%extra_flush_volume; + BOOST_LOG_TRIVIAL(info) << boost::format("filament_is_support: %1%")%filament_is_support->serialize(); + BOOST_LOG_TRIVIAL(info) << boost::format("flush_volumes_matrix before computing: %1%")%m_print_config.option("flush_volumes_matrix")->serialize(); + for (int from_idx = 0; from_idx < project_filament_count; from_idx++) { + const std::string& from_color = project_filament_colors[from_idx]; + unsigned char from_rgb[4] = {}; + Slic3r::GUI::BitmapCache::parse_color4(from_color, from_rgb); + bool is_from_support = filament_is_support->get_at(from_idx); + for (int to_idx = 0; to_idx < project_filament_count; to_idx++) { + bool is_to_support = filament_is_support->get_at(to_idx); + if (from_idx == to_idx) { + flush_vol_matrix[project_filament_count*from_idx + to_idx] = 0.f; + } + else { + int flushing_volume = 0; + if (is_to_support) { + flushing_volume = Slic3r::g_flush_volume_to_support; + } + else { + const std::string& to_color = project_filament_colors[to_idx]; + unsigned char to_rgb[4] = {}; + Slic3r::GUI::BitmapCache::parse_color4(to_color, to_rgb); + //BOOST_LOG_TRIVIAL(info) << boost::format("src_idx %1%, src color %2%, dst idex %3%, dst color %4%")%from_idx %from_color %to_idx %to_color; + //BOOST_LOG_TRIVIAL(info) << boost::format("src_rgba {%1%,%2%,%3%,%4%} dst_rgba {%5%,%6%,%7%,%8%}")%(unsigned int)(from_rgb[0]) %(unsigned int)(from_rgb[1]) %(unsigned int)(from_rgb[2]) %(unsigned int)(from_rgb[3]) + // %(unsigned int)(to_rgb[0]) %(unsigned int)(to_rgb[1]) %(unsigned int)(to_rgb[2]) %(unsigned int)(to_rgb[3]); + + Slic3r::FlushVolCalculator calculator(extra_flush_volume, Slic3r::g_max_flush_volume); + + flushing_volume = calculator.calc_flush_vol(from_rgb[3], from_rgb[0], from_rgb[1], from_rgb[2], to_rgb[3], to_rgb[0], to_rgb[1], to_rgb[2]); + if (is_from_support) { + flushing_volume = std::max(Slic3r::g_min_flush_volume_from_support, flushing_volume); + } + } + + flush_vol_matrix[project_filament_count * from_idx + to_idx] = flushing_volume; + //flushing_volume = int(flushing_volume * get_flush_multiplier()); + } + } + } + BOOST_LOG_TRIVIAL(info) << boost::format("flush_volumes_matrix after computed: %1%")%m_print_config.option("flush_volumes_matrix")->serialize(); + } + else + { + BOOST_LOG_TRIVIAL(warning) << boost::format("filament colors count is 0 in projects"); + } + } + else + { + BOOST_LOG_TRIVIAL(warning) << boost::format("no filament colors found in projects"); + } + //BBS: set default to ptFFF if (printer_technology == ptUnknown) printer_technology = ptFFF; @@ -1308,6 +1654,7 @@ int CLI::run(int argc, char **argv) m_print_config.apply(fff_print_config, true); } else { boost::nowide::cerr << "invalid printer_technology " << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PRINTER_TECH, 0, cli_errors[CLI_INVALID_PRINTER_TECH]); flush_and_exit(CLI_INVALID_PRINTER_TECH); /*assert(printer_technology == ptSLA); sla_print_config.filename_format.value = "[input_filename_base].sl1"; @@ -1327,35 +1674,66 @@ int CLI::run(int argc, char **argv) boost::nowide::cerr << "Param values in 3mf/config error: "<< std::endl; for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) boost::nowide::cerr << it->first <<": "<< it->second << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_VALUES_IN_3MF, 0, cli_errors[CLI_INVALID_VALUES_IN_3MF]); flush_and_exit(CLI_INVALID_VALUES_IN_3MF); } //BBS: partplate list Slic3r::GUI::PartPlateList partplate_list(NULL, m_models.data(), printer_technology); //use Pointfs insteadof Points - Pointfs bedfs = m_print_config.opt("printable_area")->values; - Pointfs excluse_areas = m_print_config.opt("bed_exclude_area")->values; + Pointfs current_printable_area = m_print_config.opt("printable_area")->values; + Pointfs current_exclude_area = m_print_config.opt("bed_exclude_area")->values; //update part plate's size double print_height = m_print_config.opt_float("printable_height"); double height_to_lid = m_print_config.opt_float("extruder_clearance_height_to_lid"); double height_to_rod = m_print_config.opt_float("extruder_clearance_height_to_rod"); - double plate_stride; + double cleareance_radius = m_print_config.opt_float("extruder_clearance_max_radius"); + //double plate_stride; std::string bed_texture; - if (m_models.size() > 0) + + current_printable_width = current_printable_area[2].x() - current_printable_area[0].x(); + current_printable_depth = current_printable_area[2].y() - current_printable_area[0].y(); + current_printable_height = print_height; + if (old_printable_width == 0) + old_printable_width = current_printable_width; + if (old_printable_depth == 0) + old_printable_depth = current_printable_depth; + if (old_printable_height == 0) + old_printable_height = current_printable_height; + if ((old_printable_width > 0)&&(old_printable_depth > 0)&&(old_printable_height > 0)) { - if (translate_old) { - current_width = bedfs[2].x() - bedfs[0].x(); - current_depth = bedfs[2].y() - bedfs[0].y(); - current_height = print_height; - BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch to old bed size,{%1%, %2%, %3%}")%(current_width + bed3d_ax3s_default_tip_radius)%(current_depth+bed3d_ax3s_default_tip_radius) %current_height; - partplate_list.reset_size(current_width + bed3d_ax3s_default_tip_radius, current_depth + bed3d_ax3s_default_tip_radius, current_height, false); + //check the printable size logic + if ((old_printable_width > current_printable_width) || (old_printable_depth > current_printable_depth) || (old_printable_height > current_printable_height)) + { + BOOST_LOG_TRIVIAL(error) << boost::format("old printable size {%1%, %2%, %3%} is larger than new printable size {%4%, %5%, %6%}, can not print") + %old_printable_width %old_printable_depth %old_printable_height %current_printable_width %current_printable_depth %current_printable_height; + record_exit_reson(outfile_dir, CLI_PRINTABLE_SIZE_REDUCED, 0, cli_errors[CLI_PRINTABLE_SIZE_REDUCED]); + flush_and_exit(CLI_PRINTABLE_SIZE_REDUCED); + } + else if ((old_printable_width < current_printable_width) || (old_printable_depth < current_printable_depth)) + { + BOOST_LOG_TRIVIAL(info) << boost::format("old printable size {%1%, %2%, %3%} is smaller than new printable size {%4%, %5%, %6%}, need to center the model") + %old_printable_width %old_printable_depth %old_printable_height %current_printable_width %current_printable_depth %current_printable_height; + shrink_to_new_bed = true; } else { - partplate_list.reset_size(bedfs[2].x() - bedfs[0].x(), bedfs[2].y() - bedfs[0].y(), print_height, false); + BOOST_LOG_TRIVIAL(info) << boost::format("old printable size {%1%, %2%, %3%}, new printable size {%4%, %5%, %6%}") + %old_printable_width %old_printable_depth %old_printable_height %current_printable_width %current_printable_depth %current_printable_height; } - partplate_list.set_shapes(bedfs, excluse_areas, bed_texture, height_to_lid, height_to_rod); - plate_stride = partplate_list.plate_stride_x(); - BOOST_LOG_TRIVIAL(info) << "bed size, x="< 0) + { + BOOST_LOG_TRIVIAL(info) << boost::format("translate_old %1%, shrink_to_new_bed %2%, old bed size {%3%, %4%, %5%}")%translate_old%shrink_to_new_bed %old_printable_width %old_printable_depth %old_printable_height; + if (translate_old) { + BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch to older bed size,{%1%, %2%, %3%}")%(old_printable_width + bed3d_ax3s_default_tip_radius)%(old_printable_depth+bed3d_ax3s_default_tip_radius) %old_printable_height; + partplate_list.reset_size(old_printable_width + bed3d_ax3s_default_tip_radius, old_printable_depth + bed3d_ax3s_default_tip_radius, old_printable_height, false); + } + else { + partplate_list.reset_size(old_printable_width, old_printable_depth, old_printable_height, false); + } + partplate_list.set_shapes(current_printable_area, current_exclude_area, bed_texture, height_to_lid, height_to_rod); + //plate_stride = partplate_list.plate_stride_x(); } if (plate_data_src.size() > 0) { @@ -1368,12 +1746,32 @@ int CLI::run(int argc, char **argv) Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); Vec3d cur_origin = cur_plate->get_origin(); - Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, current_width, current_depth); + Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, old_printable_width, old_printable_depth); cur_plate->translate_all_instance(new_origin - cur_origin); } - BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch back to current bed size,{%1%, %2%, %3%}")%current_width %current_depth %current_height; - partplate_list.reset_size(current_width, current_depth, current_height, true, true); + BOOST_LOG_TRIVIAL(info) << boost::format("translate old 3mf, switch back to current bed size,{%1%, %2%, %3%}")%old_printable_width %old_printable_depth %old_printable_height; + partplate_list.reset_size(old_printable_width, old_printable_depth, old_printable_height, true, true); + } + + if (shrink_to_new_bed) + { + int plate_count = partplate_list.get_plate_count(); + for (int index = 0; index < plate_count; index ++) { + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); + + Vec3d cur_origin = cur_plate->get_origin(); + Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, current_printable_width, current_printable_depth); + Vec3d cur_center_offset { ((double)old_printable_width)/2, ((double)old_printable_depth)/2, 0}, new_center_offset { ((double)current_printable_width)/2, ((double)current_printable_depth)/2, 0}; + Vec3d cur_center = cur_origin + cur_center_offset; + Vec3d new_center = new_origin + new_center_offset; + Vec3d offset = new_center - cur_center; + + cur_plate->translate_all_instance(offset); + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed, plate %1% translate offset: {%2%, %3%, %4%}")%(index+1) %offset[0] %offset[1] %offset[2]; + } + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed, shrink all the models to current bed size,{%1%, %2%, %3%}")%current_printable_width %current_printable_depth %current_printable_height; + partplate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true); } } @@ -1393,7 +1791,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "will start transforms, commands count " << m_transforms.size() << "\n"; #if defined(__linux__) || defined(__LINUX__) if (g_cli_callback_mgr.is_started()) { - PrintBase::SlicingStatus slicing_status{1, "Loading files finished"}; + PrintBase::SlicingStatus slicing_status{2, "Loading files finished"}; cli_status_callback(slicing_status); } #endif @@ -1417,6 +1815,32 @@ int CLI::run(int argc, char **argv) m_models.clear(); m_models.emplace_back(std::move(m));*/ } + else if (opt_key == "repetitions") { + int repetitions_count = m_config.option("repetitions")->value; + if (repetitions_count <= 1) + { + BOOST_LOG_TRIVIAL(info) << "invalid repetitions value " << repetitions_count << ", just skip\n"; + } + else { + if (plate_to_slice == 0) { + BOOST_LOG_TRIVIAL(error) << "Invalid params: can not set repetitions when slice all." << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); + flush_and_exit(CLI_INVALID_PARAMS); + } + else if (plate_to_slice > partplate_list.get_plate_count()) { + BOOST_LOG_TRIVIAL(error) << boost::format("Invalid params:invalid plate %1% to slice, total %2%")%plate_to_slice %partplate_list.get_plate_count(); + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); + flush_and_exit(CLI_INVALID_PARAMS); + } + BOOST_LOG_TRIVIAL(info) << "repetitions value " << repetitions_count << ", will copy model object first\n"; + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(plate_to_slice-1); + //copy model objects and instances on plate + cur_plate->duplicate_all_instance(repetitions_count-1, need_skip, skip_maps); + + need_arrange = true; + duplicate_count = repetitions_count - 1; + } + } else if (opt_key == "convert_unit") { for (auto& model : m_models) { if (model.looks_like_saved_in_meters()) { @@ -1462,6 +1886,7 @@ int CLI::run(int argc, char **argv) } } catch (std::exception &ex) { boost::nowide::cerr << "error: " << ex.what() << std::endl; + record_exit_reson(outfile_dir, CLI_COPY_OBJECTS_ERROR, 0, cli_errors[CLI_COPY_OBJECTS_ERROR]); flush_and_exit(CLI_COPY_OBJECTS_ERROR); } } @@ -1531,6 +1956,7 @@ int CLI::run(int argc, char **argv) const Vec3d &opt = m_config.opt(opt_key)->value; if (opt.x() <= 0 || opt.y() <= 0 || opt.z() <= 0) { boost::nowide::cerr << "--scale-to-fit requires a positive volume" << std::endl; + record_exit_reson(outfile_dir, CLI_SCALE_TO_FIT_ERROR, 0, cli_errors[CLI_SCALE_TO_FIT_ERROR]); flush_and_exit(CLI_SCALE_TO_FIT_ERROR); } for (auto &model : m_models) @@ -1621,6 +2047,7 @@ int CLI::run(int argc, char **argv) // model.repair(); } else { boost::nowide::cerr << "error: option not implemented yet: " << opt_key << std::endl; + record_exit_reson(outfile_dir, CLI_UNSUPPORTED_OPERATION, 0, cli_errors[CLI_UNSUPPORTED_OPERATION]); flush_and_exit(CLI_UNSUPPORTED_OPERATION); } } @@ -1648,51 +2075,183 @@ int CLI::run(int argc, char **argv) orients_requirement.clear(); oriented_or_arranged |= need_arrange; + BOOST_LOG_TRIVIAL(info) << boost::format("before arrange, need_arrange=%1%, duplicate_count %2%")%need_arrange%duplicate_count; if (need_arrange) { ArrangePolygons selected, unselected, unprintable, locked_aps; - BOOST_LOG_TRIVIAL(info) << "Will arrange now, need_arrange="< 0) { - //Step-1: prepare arrange polygons - for (size_t oidx = 0; oidx < model.objects.size(); ++oidx) - { - ModelObject* mo = model.objects[oidx]; - for (size_t inst_idx = 0; inst_idx < mo->instances.size(); ++inst_idx) - { - ModelInstance* minst = mo->instances[inst_idx]; - ArrangePolygon ap = get_instance_arrange_poly(minst, m_print_config); + Model &model = m_models[0]; - //preprocess by partplate list - //remove the locked plate's instances, neither in selected, nor in un-selected - bool locked = partplate_list.preprocess_arrange_polygon(oidx, inst_idx, ap, true); - if (!locked) + arrange_cfg.is_seq_print = false; + + //Step-1: prepare arrange polygons + if (duplicate_count == 0) + { + for (size_t oidx = 0; oidx < model.objects.size(); ++oidx) + { + ModelObject* mo = model.objects[oidx]; + for (size_t inst_idx = 0; inst_idx < mo->instances.size(); ++inst_idx) { - ap.itemid = selected.size(); - if (minst->printable) - selected.emplace_back(ap); + ModelInstance* minst = mo->instances[inst_idx]; + ArrangePolygon ap = get_instance_arrange_poly(minst, m_print_config); + + //preprocess by partplate list + //remove the locked plate's instances, neither in selected, nor in un-selected + bool locked = partplate_list.preprocess_arrange_polygon(oidx, inst_idx, ap, true); + if (!locked) + { + ap.itemid = selected.size(); + if (minst->printable) + selected.emplace_back(ap); + else + unprintable.emplace_back(ap); + } else - unprintable.emplace_back(ap); + { + //skip this object due to be locked in plate + ap.itemid = locked_aps.size(); + locked_aps.emplace_back(ap); + boost::nowide::cout <<__FUNCTION__ << boost::format(": skip locked instance, obj_id %1%, instance_id %2%") % oidx % inst_idx; + } + } + } + + if (m_print_config.has("print_sequence")) { + PrintSequence seq = m_print_config.option>("print_sequence")->value; + arrange_cfg.is_seq_print = (seq == PrintSequence::ByObject); + } + + //add the virtual object into unselect list if has + partplate_list.preprocess_exclude_areas(unselected); + } + else { + //only arrange current plate + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(plate_to_slice-1); + PrintSequence curr_plate_seq = cur_plate->get_print_seq(); + if (curr_plate_seq == PrintSequence::ByDefault) { + auto seq_print = m_print_config.option>("print_sequence"); + if (seq_print && (seq_print->value == PrintSequence::ByObject)) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% print by object, set from global")%plate_to_slice; + arrange_cfg.is_seq_print = true; + } + } + else if (curr_plate_seq == PrintSequence::ByObject) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% print by object, set from plate self")%plate_to_slice; + arrange_cfg.is_seq_print = true; + } + + partplate_list.lock_plate(plate_to_slice - 1, false); + partplate_list.select_plate(plate_to_slice-1); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% set to selected")%plate_to_slice; + + for (size_t oidx = 0; oidx < model.objects.size(); ++oidx) + { + ModelObject* mo = model.objects[oidx]; + + for (size_t inst_idx = 0; inst_idx < mo->instances.size(); ++inst_idx) + { + ModelInstance* minst = mo->instances[inst_idx]; + bool in_plate = cur_plate->contain_instance(oidx, inst_idx) || cur_plate->intersect_instance(oidx, inst_idx); + ArrangePolygon ap = get_instance_arrange_poly(minst, m_print_config); + + ArrangePolygons& cont = mo->instances[inst_idx]->printable ? + (in_plate ? selected : unselected) : + unprintable; + bool locked = partplate_list.preprocess_arrange_polygon_other_locked(oidx, inst_idx, ap, in_plate); + BOOST_LOG_TRIVIAL(info) << boost::format("name %4% in_plate %1% printable %2%, locked %3%")%in_plate %mo->instances[inst_idx]->printable %locked % ap.name ; + if (!locked) + { + ap.itemid = cont.size(); + cont.emplace_back(std::move(ap)); + } + else + { + //skip this object due to be not in current plate, treated as locked + ap.itemid = locked_aps.size(); + locked_aps.emplace_back(std::move(ap)); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": skip locked instance, obj_id %1%, name %2%") % oidx % mo->name; + } + } + } + if (selected.size() == (duplicate_count + 1)) + { + duplicate_single_object = true; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": found single object mode"); + } + + if (m_print_config.has("wipe_tower_x")) { + float x = dynamic_cast(m_print_config.option("wipe_tower_x"))->get_at(plate_to_slice-1); + float y = dynamic_cast(m_print_config.option("wipe_tower_y"))->get_at(plate_to_slice-1); + float w = dynamic_cast(m_print_config.option("prime_tower_width"))->value; + float a = dynamic_cast(m_print_config.option("wipe_tower_rotation_angle"))->value; + float v = dynamic_cast(m_print_config.option("prime_volume"))->value; + unsigned int filaments_cnt = plate_data_src[plate_to_slice-1]->slice_filaments_info.size(); + if ((filaments_cnt == 0) || need_skip) + { + // slice filaments info invalid + std::vector extruders = cur_plate->get_extruders_under_cli(true, m_print_config); + filaments_cnt = extruders.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": slice filaments info invalid or need_skip, get from partplate: filament_count %1%")%filaments_cnt; + } + + if (filaments_cnt <= 1) + { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": not a multi-color object anymore, drop the wipe tower before arrange."); } else { - //skip this object due to be locked in plate - ap.itemid = locked_aps.size(); - locked_aps.emplace_back(ap); - boost::nowide::cout <<__FUNCTION__ << boost::format(": skip locked instance, obj_id %1%, instance_id %2%") % oidx % inst_idx; + float layer_height = 0.2; + ConfigOption* layer_height_opt = m_print_config.option("layer_height"); + if (layer_height_opt) + layer_height = layer_height_opt->getFloat(); + + float depth = v * (filaments_cnt - 1) / (layer_height * w); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", wipe_tower: x=%1%, y=%2%, width=%3%, depth=%4%, angle=%5%, prime_volume=%6%, filaments_cnt=%7%, layer_height=%8%") + %x %y %w %depth %a %v %filaments_cnt %layer_height; + + Vec3d plate_origin = cur_plate->get_origin(); + + ArrangePolygon wipe_tower_ap; + + Polygon ap({ + {scaled(x), scaled(y)}, + {scaled(x + w), scaled(y)}, + {scaled(x + w), scaled(y + depth)}, + {scaled(x), scaled(y + depth)} + }); + wipe_tower_ap.bed_idx = 0; + wipe_tower_ap.setter = NULL; // do not move wipe tower + + wipe_tower_ap.poly.contour = std::move(ap); + wipe_tower_ap.translation = {scaled(0.f), scaled(0.f)}; + wipe_tower_ap.rotation = a; + wipe_tower_ap.name = "WipeTower"; + wipe_tower_ap.is_virt_object = true; + wipe_tower_ap.is_wipe_tower = true; + ++wipe_tower_ap.priority; + unselected.emplace_back(std::move(wipe_tower_ap)); } } + + // add the virtual object into unselect list if has + partplate_list.preprocess_exclude_areas(unselected, plate_to_slice); } - //add the virtual object into unselect list if has - partplate_list.preprocess_exclude_areas(unselected); //Step-2:prepare the arrange params arrange_cfg.allow_rotations = true; - arrange_cfg.min_obj_distance = scaled(6.0); - //BBS: add specific params - arrange_cfg.is_seq_print = false; + arrange_cfg.allow_multi_materials_on_same_plate = true; + arrange_cfg.avoid_extrusion_cali_region = false; + arrange_cfg.min_obj_distance = scaled(22.0); + arrange_cfg.clearance_height_to_rod = height_to_rod; + arrange_cfg.clearance_height_to_lid = height_to_lid; + arrange_cfg.cleareance_radius = cleareance_radius; + arrange_cfg.printable_height = print_height; + arrange_cfg.bed_shrink_x = 0; arrange_cfg.bed_shrink_y = 0; double skirt_distance = m_print_config.opt_float("skirt_distance"); @@ -1704,6 +2263,14 @@ int CLI::run(int argc, char **argv) // So we can't do max but do adding instead. arrange_cfg.bed_shrink_x += arrange_cfg.brim_skirt_distance; arrange_cfg.bed_shrink_y += arrange_cfg.brim_skirt_distance; + + if (arrange_cfg.is_seq_print) + { + arrange_cfg.min_obj_distance = std::max(arrange_cfg.min_obj_distance, scaled(arrange_cfg.cleareance_radius + 0.001)); + float shift_dist = arrange_cfg.cleareance_radius / 2 - 5; + arrange_cfg.bed_shrink_x -= shift_dist; + arrange_cfg.bed_shrink_y -= shift_dist; + } // shrink bed beds[0] += Point(scaled(arrange_cfg.bed_shrink_x), scaled(arrange_cfg.bed_shrink_y)); beds[1] += Point(-scaled(arrange_cfg.bed_shrink_x), scaled(arrange_cfg.bed_shrink_y)); @@ -1729,43 +2296,133 @@ int CLI::run(int argc, char **argv) //Step-4:postprocess by partplate list&&apply the result int bed_idx_max = 0; - //clear all the relations before apply the arrangement results - partplate_list.clear(); + if (duplicate_count == 0) + { + //clear all the relations before apply the arrangement results + partplate_list.clear(); - // Apply the arrange result to all selected objects - for (ArrangePolygon &ap : selected) { - //BBS: partplate postprocess - partplate_list.postprocess_bed_index_for_selected(ap); + // Apply the arrange result to all selected objects + for (ArrangePolygon &ap : selected) { + //BBS: partplate postprocess + partplate_list.postprocess_bed_index_for_selected(ap); - bed_idx_max = std::max(ap.bed_idx, bed_idx_max); - boost::nowide::cout<< "after arrange: name=" << ap.name << boost::format(",bed_id %1%, trans {%2%,%3%}") % ap.bed_idx % unscale(ap.translation(X)) % unscale(ap.translation(Y)) << "\n"; + bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + boost::nowide::cout<< "after arrange: name=" << ap.name << boost::format(",bed_id %1%, trans {%2%,%3%}") % ap.bed_idx % unscale(ap.translation(X)) % unscale(ap.translation(Y)) << "\n"; + } + for (ArrangePolygon &ap : locked_aps) { + bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + + partplate_list.postprocess_arrange_polygon(ap, false); + + ap.apply(); + } + + // Apply the arrange result to all selected objects + for (ArrangePolygon &ap : selected) { + //BBS: partplate postprocess + partplate_list.postprocess_arrange_polygon(ap, true); + + ap.apply(); + } + + // Move the unprintable items to the last virtual bed. + for (ArrangePolygon &ap : unprintable) { + ap.bed_idx += bed_idx_max + 1; + partplate_list.postprocess_arrange_polygon(ap, true); + + ap.apply(); + } + + //BBS: reload all objects due to arrange + partplate_list.rebuild_plates_after_arrangement(); } - for (ArrangePolygon &ap : locked_aps) { - bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + else { + //only for partplate case + partplate_list.clear(false, false, true, plate_to_slice-1); - partplate_list.postprocess_arrange_polygon(ap, false); + //BBS: adjust the bed_index, create new plates, get the max bed_index - ap.apply(); + for (ArrangePolygon& ap : selected) { + if (ap.bed_idx != (plate_to_slice-1)) + { + // + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":arrange failed: ap.name %1% ap.bed_idx %2%, plate index %3%")% ap.name % ap.bed_idx % (plate_to_slice-1); + if (!duplicate_single_object) + { + BOOST_LOG_TRIVIAL(error) << "arrange failed when duplicate multiple objects." << std::endl; + record_exit_reson(outfile_dir, CLI_OBJECT_ARRANGE_FAILED, 0, cli_errors[CLI_OBJECT_ARRANGE_FAILED]); + flush_and_exit(CLI_OBJECT_ARRANGE_FAILED); + } + } + else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":arrange success: ap.name %1% ap.bed_idx %2%, plate index %3%")% ap.name % ap.bed_idx % (plate_to_slice-1); + real_duplicate_count ++; + } + partplate_list.postprocess_bed_index_for_current_plate(ap); + + bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": arrange selected %4%: bed_id %1%, trans {%2%,%3%}") % ap.bed_idx % unscale(ap.translation(X)) % unscale(ap.translation(Y)) % ap.name; + } + + if (duplicate_single_object && (real_duplicate_count <= 0)) + { + BOOST_LOG_TRIVIAL(error) << "no object can be placed under single object mode." << std::endl; + record_exit_reson(outfile_dir, CLI_OBJECT_ARRANGE_FAILED, 0, cli_errors[CLI_OBJECT_ARRANGE_FAILED]); + flush_and_exit(CLI_OBJECT_ARRANGE_FAILED); + } + + //BBS: adjust the bed_index, create new plates, get the max bed_index + for (ArrangePolygon& ap : unselected) + { + if (ap.is_virt_object) + continue; + + bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":arrange unselected %4%: bed_id %1%, trans {%2%,%3%}") % ap.bed_idx % unscale(ap.translation(X)) % unscale(ap.translation(Y)) % ap.name; + } + + for (ArrangePolygon& ap : locked_aps) + { + bed_idx_max = std::max(ap.bed_idx, bed_idx_max); + + partplate_list.postprocess_arrange_polygon(ap, false); + + ap.apply(); + } + + // Apply the arrange result to all selected objects + for (ArrangePolygon& ap : selected) { + //BBS: partplate postprocess + partplate_list.postprocess_arrange_polygon(ap, true); + + ap.apply(); + } + + // Apply the arrange result to unselected objects(due to the sukodu-style column changes, the position of unselected may also be modified) + for (ArrangePolygon& ap : unselected) + { + if (ap.is_virt_object) + continue; + + //BBS: partplate postprocess + partplate_list.postprocess_arrange_polygon(ap, false); + + ap.apply(); + } + + // Move the unprintable items to the last virtual bed. + // Note ap.apply() moves relatively according to bed_idx, so we need to subtract the orignal bed_idx + for (ArrangePolygon& ap : unprintable) + { + ap.bed_idx = bed_idx_max + 1; + partplate_list.postprocess_arrange_polygon(ap, true); + + ap.apply(); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":arrange m_unprintable: name: %4%, bed_id %1%, trans {%2%,%3%}") % ap.bed_idx % unscale(ap.translation(X)) % unscale(ap.translation(Y)) % ap.name; + } + + partplate_list.rebuild_plates_after_arrangement(false, true, plate_to_slice-1); } - - // Apply the arrange result to all selected objects - for (ArrangePolygon &ap : selected) { - //BBS: partplate postprocess - partplate_list.postprocess_arrange_polygon(ap, true); - - ap.apply(); - } - - // Move the unprintable items to the last virtual bed. - for (ArrangePolygon &ap : unprintable) { - ap.bed_idx += bed_idx_max + 1; - partplate_list.postprocess_arrange_polygon(ap, true); - - ap.apply(); - } - - //BBS: reload all objects due to arrange - partplate_list.rebuild_plates_after_arrangement(); } } @@ -1781,9 +2438,10 @@ int CLI::run(int argc, char **argv) bool export_to_3mf = false, load_slicedata = false, export_slicedata = false, export_slicedata_error = false; bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir; - std::string outfile_dir = m_config.opt_string("outputdir"); std::vector calibration_thumbnails; int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0; + std::vector plate_has_skips(partplate_list.get_plate_count(), false); + std::vector> plate_skipped_objects(partplate_list.get_plate_count()); for (auto const &opt_key : m_actions) { if (opt_key == "help") { this->print_help(); @@ -1798,13 +2456,26 @@ int CLI::run(int argc, char **argv) load_slice_data_dir = m_config.opt_string(opt_key); if (export_slicedata) { BOOST_LOG_TRIVIAL(error) << "should not set load_slicedata and export_slicedata together." << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); + flush_and_exit(CLI_INVALID_PARAMS); + } + else if (duplicate_count > 0) + { + BOOST_LOG_TRIVIAL(error) << "should not set load_slicedata when set repetitions." << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); + flush_and_exit(CLI_INVALID_PARAMS); + } + else if (shrink_to_new_bed) + { + BOOST_LOG_TRIVIAL(error) << "should not set load_slicedata when shrink_to_new_bed(switch printer from small to bigger." << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); flush_and_exit(CLI_INVALID_PARAMS); } } else if (opt_key == "export_settings") { //FIXME check for mixing the FFF / SLA parameters. // or better save fff_print_config vs. sla_print_config //m_print_config.save(m_config.opt_string("save")); - m_print_config.save_to_json(m_config.opt_string(opt_key), std::string("project_settings"), std::string("project"), std::string(SoftFever_VERSION)); + m_print_config.save_to_json(m_config.opt_string(opt_key), std::string("project_settings"), std::string("project"), std::string(SLIC3R_VERSION)); } else if (opt_key == "info") { // --info works on unrepaired model for (Model &model : m_models) { @@ -1813,6 +2484,8 @@ int CLI::run(int argc, char **argv) } } else if (opt_key == "uptodate") { //already processed before + } else if (opt_key == "load_defaultfila") { + //already processed before } else if (opt_key == "mtcpp") { max_triangle_count_per_plate = m_config.option("mtcpp")->value; } else if (opt_key == "mstpp") { @@ -1820,13 +2493,17 @@ int CLI::run(int argc, char **argv) } else if (opt_key == "export_stl") { for (auto &model : m_models) model.add_default_instances(); - if (! this->export_models(IO::STL)) + if (! this->export_models(IO::STL)) { + record_exit_reson(outfile_dir, CLI_EXPORT_STL_ERROR, 0, cli_errors[CLI_EXPORT_STL_ERROR]); flush_and_exit(CLI_EXPORT_STL_ERROR); + } } else if (opt_key == "export_obj") { for (auto &model : m_models) model.add_default_instances(); - if (! this->export_models(IO::OBJ)) + if (! this->export_models(IO::OBJ)) { + record_exit_reson(outfile_dir, CLI_EXPORT_OBJ_ERROR, 0, cli_errors[CLI_EXPORT_OBJ_ERROR]); flush_and_exit(CLI_EXPORT_OBJ_ERROR); + } }/* else if (opt_key == "export_amf") { if (! this->export_models(IO::AMF)) return 1; @@ -1843,6 +2520,7 @@ int CLI::run(int argc, char **argv) export_slice_data_dir = m_config.opt_string(opt_key); if (load_slicedata) { BOOST_LOG_TRIVIAL(error) << "should not set load_slicedata and export_slicedata together." << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS]); flush_and_exit(CLI_INVALID_PARAMS); } } else if (opt_key == "slice") { @@ -1853,21 +2531,13 @@ int CLI::run(int argc, char **argv) pre_check = false; bool finished = false; - //skip model object - std::map skip_maps; - if (need_skip) { - BOOST_LOG_TRIVIAL(info) << boost::format("need to skip objects, size %1%:")%skip_objects.size(); - for (int index = 0; index < skip_objects.size(); index++) - { - skip_maps[skip_objects[index]] = false; - BOOST_LOG_TRIVIAL(info) << boost::format("object %1%, id %2%")%index %skip_objects[index]; - } - } /*if (opt_key == "export_gcode" && printer_technology == ptSLA) { boost::nowide::cerr << "error: cannot export G-code for an FFF configuration" << std::endl; + record_exit_reson(outfile_dir, 1, 0, cli_errors[1]); flush_and_exit(1); } else if (opt_key == "export_sla" && printer_technology == ptFFF) { boost::nowide::cerr << "error: cannot export SLA slices for a SLA configuration" << std::endl; + record_exit_reson(outfile_dir, 1, 0, cli_errors[1]); flush_and_exit(1); }*/ BOOST_LOG_TRIVIAL(info) << "Need to slice for plate "<instances) { + i->use_loaded_id_for_label = true; if (skip_maps.find(i->loaded_id) != skip_maps.end()) { skip_maps[i->loaded_id] = true; i->printable = false; - if (i->print_volume_state == ModelInstancePVS_Inside) { + if (i->print_volume_state == ModelInstancePVS_Inside || need_arrange) { skipped_count++; + plate_has_skips[index] = true; + plate_skipped_objects[index].emplace_back(i->loaded_id); BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: skip object %2%.")%(index+1)%i->loaded_id; //need to regenerate the thumbnail if (plate_data_src.size() > index) { @@ -1971,6 +2645,7 @@ int CLI::run(int argc, char **argv) if (i->print_volume_state == ModelInstancePVS_Partly_Outside) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Found Object " << model_object->name <<" partly inside, can not be sliced." << std::endl; + record_exit_reson(outfile_dir, CLI_OBJECTS_PARTLY_INSIDE, index+1, cli_errors[CLI_OBJECTS_PARTLY_INSIDE]); flush_and_exit(CLI_OBJECTS_PARTLY_INSIDE); } else if ((max_triangle_count_per_plate != 0) && (i->print_volume_state == ModelInstancePVS_Inside)) @@ -1984,6 +2659,7 @@ int CLI::run(int argc, char **argv) if (triangle_count > max_triangle_count_per_plate) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": triangle count " << triangle_count <<" exceeds the limit:" << max_triangle_count_per_plate; + record_exit_reson(outfile_dir, CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT, index+1, cli_errors[CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT]); flush_and_exit(CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT); } } @@ -1996,6 +2672,7 @@ int CLI::run(int argc, char **argv) if (printable_instances == 0) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, after skipping "<validate(&warning); if (!err.string.empty()) { - BOOST_LOG_TRIVIAL(info) << "got error when validate: "<< err.string << std::endl; + BOOST_LOG_TRIVIAL(error) << "got error when validate: "<< err.string << std::endl; boost::nowide::cerr << err.string << std::endl; - //BBS: continue for other plates - //continue; - flush_and_exit(CLI_VALIDATE_ERROR); + int validate_error; + switch (err.type) + { + case STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE: + validate_error = CLI_FILAMENT_NOT_MATCH_BED_TYPE; + break; + case STRING_EXCEPT_FILAMENTS_DIFFERENT_TEMP: + validate_error = CLI_FILAMENTS_DIFFERENT_TEMP; + break; + case STRING_EXCEPT_OBJECT_COLLISION_IN_SEQ_PRINT: + validate_error = CLI_OBJECT_COLLISION_IN_SEQ_PRINT; + break; + case STRING_EXCEPT_OBJECT_COLLISION_IN_LAYER_PRINT: + validate_error = CLI_OBJECT_COLLISION_IN_LAYER_PRINT; + break; + default: + validate_error = CLI_VALIDATE_ERROR; + break; + } + record_exit_reson(outfile_dir, validate_error, index+1, cli_errors[validate_error]); + flush_and_exit(validate_error); } else if (!warning.string.empty()) - BOOST_LOG_TRIVIAL(info) << "got warnings: "<< warning.string << std::endl; + BOOST_LOG_TRIVIAL(warning) << "got warnings: "<< warning.string << std::endl; if (print->empty()) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume after apply." << std::endl; + record_exit_reson(outfile_dir, CLI_NO_SUITABLE_OBJECTS, index+1, cli_errors[CLI_NO_SUITABLE_OBJECTS]); flush_and_exit(CLI_NO_SUITABLE_OBJECTS); } else { @@ -2047,6 +2743,22 @@ int CLI::run(int argc, char **argv) } } #endif + //check whether it is bbl printer + std::string& printer_model_string = new_print_config.opt_string("printer_model", true); + bool is_bbl_vendor_preset = false; + + if (!printer_model_string.empty()) { + is_bbl_vendor_preset = (printer_model_string.compare(0, 9, "Bambu Lab") == 0); + BOOST_LOG_TRIVIAL(info) << boost::format("printer_model_string: %1%, is_bbl_vendor_preset %2%")%printer_model_string %is_bbl_vendor_preset; + } + else { + if (!new_printer_name.empty()) + is_bbl_vendor_preset = (new_printer_name.compare(0, 9, "Bambu Lab") == 0); + else if (!current_printer_system_name.empty()) + is_bbl_vendor_preset = (current_printer_system_name.compare(0, 9, "Bambu Lab") == 0); + BOOST_LOG_TRIVIAL(info) << boost::format("new_printer_name: %1%, current_printer_system_name %2%, is_bbl_vendor_preset %3%")%new_printer_name %current_printer_system_name %is_bbl_vendor_preset; + } + (dynamic_cast(print))->set_BBL_Printer(is_bbl_vendor_preset); if (load_slicedata) { std::string plate_dir = load_slice_data_dir+"/"+std::to_string(index+1); int ret = print->load_cached_data(plate_dir); @@ -2074,6 +2786,7 @@ int CLI::run(int argc, char **argv) std::string conflict_result = dynamic_cast(print)->get_conflict_string(); if (!conflict_result.empty()) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": found slicing result conflict!"<< std::endl; + record_exit_reson(outfile_dir, CLI_GCODE_PATH_CONFLICTS, index+1, cli_errors[CLI_GCODE_PATH_CONFLICTS]); flush_and_exit(CLI_GCODE_PATH_CONFLICTS); } // The outfile is processed by a PlaceholderParser. @@ -2098,6 +2811,7 @@ int CLI::run(int argc, char **argv) /*if (outfile != outfile_final) { if (Slic3r::rename_file(outfile, outfile_final)) { boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; + record_exit_reson(outfile_dir, 1, index+1, cli_errors[1]); flush_and_exit(1); } outfile = outfile_final; @@ -2122,6 +2836,8 @@ int CLI::run(int argc, char **argv) export_slicedata_error = true; if (fs::exists(plate_dir)) fs::remove_all(plate_dir); + record_exit_reson(outfile_dir, ret, index+1, cli_errors[ret]); + flush_and_exit(ret); } } if (max_slicing_time_per_plate != 0) { @@ -2130,6 +2846,7 @@ int CLI::run(int argc, char **argv) if (time_cost > max_slicing_time_per_plate) { BOOST_LOG_TRIVIAL(error) << boost::format("plate %1%'s slice time %2% exceeds the limit %3%, return error.") %(index+1) %time_cost %max_slicing_time_per_plate; + record_exit_reson(outfile_dir, CLI_SLICING_TIME_EXCEEDS_LIMIT, index+1, cli_errors[CLI_SLICING_TIME_EXCEEDS_LIMIT]); flush_and_exit(CLI_SLICING_TIME_EXCEEDS_LIMIT); } } @@ -2137,6 +2854,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(error) << "found slicing or export error for partplate "<skipped_objects = plate_skipped_objects[i]; + for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { //it->filament_id = filament_id?filament_id->get_at(it->id):"unknown"; std::string display_filament_type; @@ -2240,7 +2961,12 @@ int CLI::run(int argc, char **argv) } } else { - BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail file exists, no need to regenerate")%(i+1); + if (regenerate_thumbnails) { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail file %2% cleared, need to regenerate")%(i+1) %plate_data->thumbnail_file; + plate_data->thumbnail_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail file exists, no need to regenerate")%(i+1); } } else { @@ -2266,7 +2992,13 @@ int CLI::run(int argc, char **argv) } } else { - BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s top_thumbnail file exists, no need to regenerate")%(i+1); + if (regenerate_thumbnails) { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s top_thumbnail file %2% cleared, need to regenerate")%(i+1) %plate_data->top_file; + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s top_thumbnail file exists, no need to regenerate")%(i+1); } } } @@ -2277,14 +3009,14 @@ int CLI::run(int argc, char **argv) colors= filament_color->vserialize(); } else - colors.push_back("#FFFFFF"); + colors.push_back("#FFFFFFFF"); std::vector> colors_out(colors.size()); - unsigned char rgb_color[3] = {}; + unsigned char rgb_color[4] = {}; for (const std::string& color : colors) { - Slic3r::GUI::BitmapCache::parse_color(color, rgb_color); + Slic3r::GUI::BitmapCache::parse_color4(color, rgb_color); size_t color_idx = &color - &colors.front(); - colors_out[color_idx] = { float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, 1.f }; + colors_out[color_idx] = { float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, float(rgb_color[3]) / 255.f }; } int gl_major, gl_minor, gl_verbos; @@ -2331,7 +3063,7 @@ int CLI::run(int argc, char **argv) //opengl manager related logic { Slic3r::GUI::OpenGLManager opengl_mgr; - bool opengl_valid = opengl_mgr.init_gl(); + bool opengl_valid = opengl_mgr.init_gl(false); if (!opengl_valid) { BOOST_LOG_TRIVIAL(error) << "init opengl failed! skip thumbnail generating" << std::endl; } @@ -2355,17 +3087,17 @@ int CLI::run(int argc, char **argv) const ModelInstance &model_instance = *model_object.instances[instance_idx]; glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); //glvolume_collection.volumes.back()->geometry_id = key.geometry_id; - std::string color = filament_color?filament_color->get_at(extruder_id - 1):"#00FF00"; + std::string color = filament_color?filament_color->get_at(extruder_id - 1):"#00FF00FF"; - unsigned char rgb_color[3] = {}; - Slic3r::GUI::BitmapCache::parse_color(color, rgb_color); - glvolume_collection.volumes.back()->set_render_color( float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, 1.f); + unsigned char rgb_color[4] = {}; + Slic3r::GUI::BitmapCache::parse_color4(color, rgb_color); + glvolume_collection.volumes.back()->set_render_color( float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, float(rgb_color[3]) / 255.f); std::array new_color; new_color[0] = float(rgb_color[0]) / 255.f; new_color[1] = float(rgb_color[1]) / 255.f; new_color[2] = float(rgb_color[2]) / 255.f; - new_color[3] = 1.f; + new_color[3] = float(rgb_color[3]) / 255.f; glvolume_collection.volumes.back()->set_color(new_color); glvolume_collection.volumes.back()->printable = model_instance.printable; } @@ -2529,7 +3261,7 @@ int CLI::run(int argc, char **argv) glfwTerminate(); } else { - BOOST_LOG_TRIVIAL(info) << boost::format("use previous thumbnails, no need to regenerate"); + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: use previous thumbnails, no need to regenerate")%__LINE__; for (int i = 0; i < partplate_list.get_plate_count(); i++) { PlateData *plate_data = plate_data_list[i]; bool skip_this_plate = ((plate_to_slice != 0) && (plate_to_slice != (i + 1)))?true:false; @@ -2646,8 +3378,6 @@ int CLI::run(int argc, char **argv) BBoxData data; auto bb_scaled = obj->get_first_layer_bbox(data.area, data.layer_height, data.name); auto bb = unscaled(bb_scaled); - bb.min -= orig2d; - bb.max -= orig2d; bbox_all.merge(bb); data.area *= (SCALING_FACTOR * SCALING_FACTOR); // unscale area data.id = obj->id().id; @@ -2694,6 +3424,7 @@ int CLI::run(int argc, char **argv) calibration_thumbnails, plate_bboxes, &m_print_config)) { release_PlateData_list(plate_data_list); + record_exit_reson(outfile_dir, CLI_EXPORT_3MF_ERROR, 0, cli_errors[CLI_EXPORT_3MF_ERROR]); flush_and_exit(CLI_EXPORT_3MF_ERROR); } release_PlateData_list(plate_data_list); @@ -2730,6 +3461,17 @@ int CLI::run(int argc, char **argv) } //BBS: flush logs BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", Finished" << std::endl; + + //record the duplicate here + if ((duplicate_count > 0) && duplicate_single_object) + { + std::map key_values; + key_values["sliced_count"] = std::to_string(real_duplicate_count); + record_exit_reson(outfile_dir, 0, plate_to_slice, cli_errors[0], key_values); + } + else + record_exit_reson(outfile_dir, 0, plate_to_slice, cli_errors[0]); + boost::nowide::cout.flush(); boost::nowide::cerr.flush(); @@ -2742,17 +3484,17 @@ bool CLI::setup(int argc, char **argv) detect_platform(); #ifdef WIN32 - // Notify user that a blacklisted DLL was injected into OrcaSlicer process (for example Nahimic, see GH #5573). - // We hope that if a DLL is being injected into a OrcaSlicer process, it happens at the very start of the application, + // Notify user that a blacklisted DLL was injected into BambuStudio process (for example Nahimic, see GH #5573). + // We hope that if a DLL is being injected into a BambuStudio process, it happens at the very start of the application, // thus we shall detect them now. if (BlacklistedLibraryCheck::get_instance().perform_check()) { - std::wstring text = L"Following DLLs have been injected into the OrcaSlicer process:\n\n"; + std::wstring text = L"Following DLLs have been injected into the BambuStudio process:\n\n"; text += BlacklistedLibraryCheck::get_instance().get_blacklisted_string(); text += L"\n\n" - L"OrcaSlicer is known to not run correctly with these DLLs injected. " + L"BambuStudio is known to not run correctly with these DLLs injected. " L"We suggest stopping or uninstalling these services if you experience " - L"crashes or unexpected behaviour while using OrcaSlicer.\n" - L"For example, ASUS Sonic Studio injects a Nahimic driver, which makes OrcaSlicer " + L"crashes or unexpected behaviour while using BambuStudio.\n" + L"For example, ASUS Sonic Studio injects a Nahimic driver, which makes BambuStudio " L"to crash on a secondary monitor"; MessageBoxW(NULL, text.c_str(), L"Warning"/*L"Incopatible library found"*/, MB_OK); } @@ -2813,7 +3555,7 @@ bool CLI::setup(int argc, char **argv) for (const t_optiondef_map::value_type &optdef : *options) m_config.option(optdef.first, true); - set_data_dir(m_config.opt_string("datadir")); + //set_data_dir(m_config.opt_string("datadir")); //FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet. if (!validity.empty()) { @@ -2829,9 +3571,9 @@ bool CLI::setup(int argc, char **argv) void CLI::print_help(bool include_print_options, PrinterTechnology printer_technology) const { boost::nowide::cout - << SLIC3R_APP_KEY <<"-"<< SoftFever_VERSION << ":" + << SLIC3R_APP_KEY <<"-"<< SLIC3R_VERSION << ":" << std::endl - << "Usage: orca-slicer [ OPTIONS ] [ file.3mf/file.stl ... ]" << std::endl + << "Usage: bambu-studio [ OPTIONS ] [ file.3mf/file.stl ... ]" << std::endl << std::endl << "OPTIONS:" << std::endl; cli_misc_config_def.print_cli_help(boost::nowide::cout, false); @@ -2860,21 +3602,38 @@ bool CLI::export_models(IO::ExportFormat format) { for (Model &model : m_models) { const std::string path = this->output_filepath(model, format); - bool success = false; + bool success = true; switch (format) { //case IO::AMF: success = Slic3r::store_amf(path.c_str(), &model, nullptr, false); break; - case IO::OBJ: success = Slic3r::store_obj(path.c_str(), &model); break; - case IO::STL: success = Slic3r::store_stl(path.c_str(), &model, true); break; + case IO::OBJ: + success = Slic3r::store_obj(path.c_str(), &model); + if (success) + BOOST_LOG_TRIVIAL(info) << "Model successfully exported to " << path << std::endl; + else { + boost::nowide::cerr << "Model export to " << path << " failed" << std::endl; + return false; + } + break; + case IO::STL: + { + unsigned int index = 1; + for (ModelObject* model_object : model.objects) + { + const std::string path = this->output_filepath(*model_object, index++, format); + success = Slic3r::store_stl(path.c_str(), model_object, true); + if (success) + BOOST_LOG_TRIVIAL(info) << "Model successfully exported to " << path << std::endl; + else { + boost::nowide::cerr << "Model export to " << path << " failed" << std::endl; + return false; + } + } + break; + } //BBS: use bbs 3mf instead of original //case IO::TMF: success = Slic3r::store_bbs_3mf(path.c_str(), &model, nullptr, false); break; default: assert(false); break; } - if (success) - BOOST_LOG_TRIVIAL(info) << "Model exported to " << path << std::endl; - else { - boost::nowide::cerr << "Model export to " << path << " failed" << std::endl; - return false; - } } return true; } @@ -2898,7 +3657,7 @@ bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partpla store_params.pick_thumbnail_data = pick_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; store_params.id_bboxes = plate_bboxes; - store_params.strategy = SaveStrategy::Silence|SaveStrategy::WithGcode|SaveStrategy::SplitModel|SaveStrategy::UseLoadedId; + store_params.strategy = SaveStrategy::Silence|SaveStrategy::WithGcode|SaveStrategy::SplitModel|SaveStrategy::UseLoadedId|SaveStrategy::ShareMesh; success = Slic3r::store_bbs_3mf(store_params); @@ -2923,7 +3682,7 @@ std::string CLI::output_filepath(const Model &model, IO::ExportFormat format) co }; auto proposed_path = boost::filesystem::path(model.propose_export_file_name_and_path(ext)); // use --output when available - std::string cmdline_param = m_config.opt_string("output"); + std::string cmdline_param = m_config.opt_string("outputdir"); if (! cmdline_param.empty()) { // if we were supplied a directory, use it and append our automatically generated filename boost::filesystem::path cmdline_path(cmdline_param); @@ -2935,6 +3694,50 @@ std::string CLI::output_filepath(const Model &model, IO::ExportFormat format) co return proposed_path.string(); } +std::string CLI::output_filepath(const ModelObject &object, unsigned int index, IO::ExportFormat format) const +{ + std::string ext, subdir, file_name, output_path; + switch (format) { + case IO::AMF: + ext = ".zip.amf"; + subdir = "amf"; + break; + case IO::OBJ: + ext = ".obj"; + subdir = "obj"; + break; + case IO::STL: + ext = ".stl"; + subdir = "stl"; + break; + case IO::TMF: + ext = ".3mf"; + subdir = "3mf"; + break; + default: assert(false); break; + }; + // use --outputdir when available + file_name = object.name.empty()?object.input_file:object.name; + file_name = "obj_"+std::to_string(index)+"_"+file_name; + size_t pos = file_name.find_last_of(ext), ext_pos = file_name.size() - 1; + if (pos != ext_pos) + file_name += ext; + + BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": file_name="< //#pragma comment(lib, "version.lib") @@ -2994,7 +3797,7 @@ LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) #if defined(_MSC_VER) || defined(__MINGW32__) extern "C" { - __declspec(dllexport) int __stdcall orcaslicer_main(int argc, wchar_t **argv) + __declspec(dllexport) int __stdcall bambustu_main(int argc, wchar_t **argv) { // Convert wchar_t arguments to UTF8. std::vector argv_narrow; @@ -3008,8 +3811,13 @@ extern "C" { #if BBL_RELEASE_TO_PUBLIC SET_DEFULTER_HANDLER(); #else - AddVectoredExceptionHandler(1, CBaseException::UnhandledExceptionFilter); + //AddVectoredExceptionHandler(1, CBaseException::UnhandledExceptionFilter); + SET_DEFULTER_HANDLER(); #endif + std::set_new_handler([]() { + int *a = nullptr; + *a = 0; + }); // Call the UTF8 main. return CLI().run(argc, argv_ptrs.data()); } diff --git a/src/OrcaSlicer.hpp b/src/OrcaSlicer.hpp index c7fc5ae3e..71507738d 100644 --- a/src/OrcaSlicer.hpp +++ b/src/OrcaSlicer.hpp @@ -46,6 +46,7 @@ private: bool has_print_action() const { return m_config.opt_bool("export_gcode") || m_config.opt_bool("export_sla"); } std::string output_filepath(const Model &model, IO::ExportFormat format) const; + std::string output_filepath(const ModelObject &object, unsigned int index, IO::ExportFormat format) const; }; } diff --git a/src/libnest2d/include/libnest2d/nester.hpp b/src/libnest2d/include/libnest2d/nester.hpp index 2ac0392d7..9038a9d63 100644 --- a/src/libnest2d/include/libnest2d/nester.hpp +++ b/src/libnest2d/include/libnest2d/nester.hpp @@ -84,6 +84,7 @@ public: //BBS: virtual object to mark unprintable region on heatbed bool is_virt_object{ false }; bool is_wipe_tower{ false }; + bool has_tried_with_excluded{ false }; /// The type of the shape which was handed over as the template argument. using ShapeType = RawShape; @@ -662,9 +663,21 @@ public: /// Get the packed items. inline ItemGroup getItems() { return impl_.getItems(); } + inline int getPackedSize() + { + int size = 0; + auto items = getItems(); + for (const auto &itm : items) { + if (itm.get().isFixed() == false) { size++; } + } + return size; + } + /// Clear the packed items so a new session can be started. inline void clearItems() { impl_.clearItems(); } + inline void clearItems(const std::function &func) { impl_.clearItems(func); } + inline double filledArea() const { return impl_.filledArea(); } inline double score() const { return impl_.score(); } diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index ae0fcb36e..1a6339477 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -555,6 +555,13 @@ public: Base::clearItems(); } + //clearFunc: itm will be cleared if return ture + inline void clearItems(const std::function &clearFunc) + { + finalAlign(bin_); + Base::clearItems(clearFunc); + } + void preload(const ItemGroup& packeditems) { Base::preload(packeditems); if (config_.on_preload) diff --git a/src/libnest2d/include/libnest2d/placers/placer_boilerplate.hpp b/src/libnest2d/include/libnest2d/placers/placer_boilerplate.hpp index 4b2af5f7b..ae2d9712d 100644 --- a/src/libnest2d/include/libnest2d/placers/placer_boilerplate.hpp +++ b/src/libnest2d/include/libnest2d/placers/placer_boilerplate.hpp @@ -96,6 +96,17 @@ public: farea_valid_ = false; } + //clearFunc: will be cleared if return true + inline void clearItems(const std::function &clearFunc) + { + ItemGroup newGroup; + for (auto &i : items_) { + if (clearFunc(i.get()) == false) { newGroup.push_back(i); } + } + std::swap(newGroup, items_); + farea_valid_ = false; + } + inline double filledArea() const { if(farea_valid_) return farea_; else { diff --git a/src/libnest2d/include/libnest2d/selections/firstfit.hpp b/src/libnest2d/include/libnest2d/selections/firstfit.hpp index e739a8870..ef05398da 100644 --- a/src/libnest2d/include/libnest2d/selections/firstfit.hpp +++ b/src/libnest2d/include/libnest2d/selections/firstfit.hpp @@ -161,6 +161,24 @@ public: makeProgress(placers[j], j); } + if (was_packed && it->get().has_tried_with_excluded) { + placers[j].clearItems([](const Item &itm) { return itm.isFixed() && !itm.is_wipe_tower; }); + placers[j].preload(fixed_bins[placers.size() - 1]); + } + bool placer_not_packed = !was_packed && !placers.empty() && j == placers.size() && placers[j - 1].getPackedSize() == 0; // large item is not placed into the bin + if (placer_not_packed) { + if (it->get().has_tried_with_excluded == false) { + it->get().has_tried_with_excluded = true; + placers[j - 1].clearItems([](const Item &itm) { return itm.isFixed()&&!itm.is_wipe_tower; }); + placers[j - 1].preload(pconfig.m_excluded_items); + j = j - 1; + continue; + } else { + placers[j - 1].clearItems([](const Item &itm) { return itm.isFixed() && !itm.is_wipe_tower; }); + placers[j - 1].preload(fixed_bins[placers.size() - 1]); + } + } + if(!was_packed){ if (this->unfitindicator_ && !placers.empty()) this->unfitindicator_(it->get().name + ", height=" +std::to_string(it->get().height) diff --git a/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp b/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp index ffb878e41..a9871dcb1 100644 --- a/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp +++ b/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp @@ -37,7 +37,7 @@ protected: // then it should be removed from the list Placer p{ bin }; p.configure(pcfg); - //p.preload(pcfg.m_excluded_items); + p.preload(pcfg.m_excluded_items); auto it = c.begin(); while (it != c.end() && !stopcond_()) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index d53031fc7..48f1fa7b0 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -38,7 +38,7 @@ using namespace nlohmann; namespace Slic3r { -static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases"; +static const std::string VERSION_CHECK_URL = ""; static const std::string MODELS_STR = "models"; const std::string AppConfig::SECTION_FILAMENTS = "filaments"; @@ -65,19 +65,19 @@ std::string AppConfig::get_hms_host() { std::string sel = get("iot_environment"); std::string host = ""; -// #if !BBL_RELEASE_TO_PUBLIC -// if (sel == ENV_DEV_HOST) -// host = "e-dev.bambu-lab.com"; -// else if (sel == ENV_QAT_HOST) -// host = "e-qa.bambu-lab.com"; -// else if (sel == ENV_PRE_HOST) -// host = "e-pre.bambu-lab.com"; -// else if (sel == ENV_PRODUCT_HOST) -// host = "e.bambulab.com"; -// return host; -// #else +#if !BBL_RELEASE_TO_PUBLIC + if (sel == ENV_DEV_HOST) + host = "e-dev.bambu-lab.com"; + else if (sel == ENV_QAT_HOST) + host = "e-qa.bambu-lab.com"; + else if (sel == ENV_PRE_HOST) + host = "e-pre.bambu-lab.com"; + else if (sel == ENV_PRODUCT_HOST) + host = "e.bambulab.com"; + return host; +#else return "e.bambulab.com"; -// #endif +#endif } void AppConfig::reset() @@ -178,9 +178,6 @@ void AppConfig::set_defaults() set_bool("show_hints", true); //#endif - if (get("show_gcode_window").empty()) - set_bool("show_gcode_window", true); - #ifdef _WIN32 @@ -229,10 +226,6 @@ void AppConfig::set_defaults() set("slicer_uuid", to_string(uuid)); } - // Orca - if (get("stealth_mode").empty()) { - set_bool("stealth_mode", false); - } if (get("show_model_mesh").empty()) { set_bool("show_model_mesh", false); } @@ -305,6 +298,10 @@ void AppConfig::set_defaults() set("max_recent_count", "18"); } + if (get("staff_pick_switch").empty()) { + set_bool("staff_pick_switch", true); + } + if (get("sync_system_preset").empty()) { set_bool("sync_system_preset", true); } @@ -321,19 +318,15 @@ void AppConfig::set_defaults() set("curr_bed_type", "1"); } -// #if BBL_RELEASE_TO_PUBLIC +#if BBL_RELEASE_TO_PUBLIC if (get("iot_environment").empty()) { set("iot_environment", "3"); } -// #else -// if (get("iot_environment").empty()) { -// set("iot_environment", "1"); -// } -// #endif - - if (get("presets", "filament_colors").empty()) { - set_str("presets", "filament_colors", "#F2754E"); +#else + if (get("iot_environment").empty()) { + set("iot_environment", "1"); } +#endif if (get("print", "bed_leveling").empty()) { set_str("print", "bed_leveling", "1"); @@ -515,11 +508,30 @@ std::string AppConfig::load() m_storage[it.key()][iter.key()] = iter.value().get(); } } - } else if (it.key() == "orca_presets") { - for (auto& j_model : it.value()) { - m_printer_settings[j_model["machine"].get()] = j_model; + } else if (it.key() == "calis") { + for (auto &calis_j : it.value()) { + PrinterCaliInfo cali_info; + if (calis_j.contains("dev_id")) + cali_info.dev_id = calis_j["dev_id"].get(); + if (calis_j.contains("cali_finished")) + cali_info.cali_finished = bool(calis_j["cali_finished"].get()); + if (calis_j.contains("flow_ratio")) + cali_info.cache_flow_ratio = calis_j["flow_ratio"].get(); + if (calis_j.contains("presets")) { + cali_info.selected_presets.clear(); + for (auto cali_it = calis_j["presets"].begin(); cali_it != calis_j["presets"].end(); cali_it++) { + CaliPresetInfo preset_info; + preset_info.tray_id = cali_it.value()["tray_id"].get(); + preset_info.nozzle_diameter = cali_it.value()["nozzle_diameter"].get(); + preset_info.filament_id = cali_it.value()["filament_id"].get(); + preset_info.setting_id = cali_it.value()["setting_id"].get(); + preset_info.name = cali_it.value()["name"].get(); + cali_info.selected_presets.push_back(preset_info); + } + } + m_printer_cali_infos.emplace_back(cali_info); } - }else { + } else { if (it.value().is_object()) { for (auto iter = it.value().begin(); iter != it.value().end(); iter++) { if (iter.value().is_boolean()) { @@ -618,6 +630,23 @@ void AppConfig::save() j["app"]["filament_colors"].push_back(filament_color); } + for (const auto &cali_info : m_printer_cali_infos) { + json cali_json; + cali_json["dev_id"] = cali_info.dev_id; + cali_json["flow_ratio"] = cali_info.cache_flow_ratio; + cali_json["cali_finished"] = cali_info.cali_finished ? 1 : 0; + for (auto filament_preset : cali_info.selected_presets) { + json preset_json; + preset_json["tray_id"] = filament_preset.tray_id; + preset_json["nozzle_diameter"] = filament_preset.nozzle_diameter; + preset_json["filament_id"] = filament_preset.filament_id; + preset_json["setting_id"] = filament_preset.setting_id; + preset_json["name"] = filament_preset.name; + cali_json["presets"].push_back(preset_json); + } + j["calis"].push_back(cali_json); + } + // Write the other categories. for (const auto& category : m_storage) { if (category.first.empty()) @@ -638,8 +667,7 @@ void AppConfig::save() j[category.first][kvp.first] = kvp.second; } } - if(j_filament_array.size() > 0) - j["presets"]["filaments"] = j_filament_array; + j["presets"]["filaments"] = j_filament_array; continue; } for (const auto& kvp : category.second) { @@ -674,10 +702,6 @@ void AppConfig::save() } } - // write machine settings - for (const auto& preset : m_printer_settings) { - j["orca_presets"].push_back(preset.second); - } boost::nowide::ofstream c; c.open(path_pid, std::ios::out | std::ios::trunc); c << std::setw(4) << j << std::endl; @@ -945,6 +969,22 @@ void AppConfig::set_vendors(const AppConfig &from) m_dirty = true; } +void AppConfig::save_printer_cali_infos(const PrinterCaliInfo &cali_info) +{ + auto iter = std::find_if(m_printer_cali_infos.begin(), m_printer_cali_infos.end(), [&cali_info](const PrinterCaliInfo &cali_info_item) { + return cali_info_item.dev_id == cali_info.dev_id; + }); + + if (iter == m_printer_cali_infos.end()) { + m_printer_cali_infos.emplace_back(cali_info); + } else { + (*iter).cali_finished = cali_info.cali_finished; + (*iter).cache_flow_ratio = cali_info.cache_flow_ratio; + (*iter).selected_presets = cali_info.selected_presets; + } + m_dirty = true; +} + std::string AppConfig::get_last_dir() const { const auto it = m_storage.find("recent"); @@ -1088,29 +1128,29 @@ void AppConfig::update_last_backup_dir(const std::string& dir) std::string AppConfig::get_region() { -// #if BBL_RELEASE_TO_PUBLIC +#if BBL_RELEASE_TO_PUBLIC return this->get("region"); -// #else -// std::string sel = get("iot_environment"); -// std::string region; -// if (sel == ENV_DEV_HOST) -// region = "ENV_CN_DEV"; -// else if (sel == ENV_QAT_HOST) -// region = "ENV_CN_QA"; -// else if (sel == ENV_PRE_HOST) -// region = "ENV_CN_PRE"; -// if (region.empty()) -// return this->get("region"); -// return region; -// #endif +#else + std::string sel = get("iot_environment"); + std::string region; + if (sel == ENV_DEV_HOST) + region = "ENV_CN_DEV"; + else if (sel == ENV_QAT_HOST) + region = "ENV_CN_QA"; + else if (sel == ENV_PRE_HOST) + region = "ENV_CN_PRE"; + if (region.empty()) + return this->get("region"); + return region; +#endif } std::string AppConfig::get_country_code() { std::string region = get_region(); -// #if !BBL_RELEASE_TO_PUBLIC -// if (is_engineering_region()) { return region; } -// #endif +#if !BBL_RELEASE_TO_PUBLIC + if (is_engineering_region()) { return region; } +#endif if (region == "CHN" || region == "China") return "CN"; else if (region == "USA") diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 974670ba4..2c56aeac4 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -9,6 +9,7 @@ #include "libslic3r/Config.hpp" #include "libslic3r/Semver.hpp" +#include "Calib.hpp" using namespace nlohmann; @@ -204,6 +205,9 @@ public: m_dirty = true; } + const std::vector &get_printer_cali_infos() const { return m_printer_cali_infos; } + void save_printer_cali_infos(const PrinterCaliInfo& cali_info); + // return recent/last_opened_folder or recent/settings_folder or empty string. std::string get_last_dir() const; void update_config_dir(const std::string &dir); @@ -305,6 +309,8 @@ private: std::vector m_filament_presets; std::vector m_filament_colors; + + std::vector m_printer_cali_infos; }; } // namespace Slic3r diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index 1038a245c..30f06f21d 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -268,13 +268,13 @@ void extrusion_paths_append(ExtrusionPaths &dst, const ClipperLib_Z::Paths &extr { for (const ClipperLib_Z::Path &extrusion_path : extrusion_paths) { ThickPolyline thick_polyline = Arachne::to_thick_polyline(extrusion_path); - Slic3r::append(dst, thick_polyline_to_extrusion_paths(thick_polyline, role, flow, scaled(0.05), SCALED_EPSILON)); + Slic3r::append(dst, thick_polyline_to_multi_path(thick_polyline, role, flow, scaled(0.05), float(SCALED_EPSILON)).paths); } } void extrusion_paths_append(ExtrusionPaths &dst, const Arachne::ExtrusionLine &extrusion, const ExtrusionRole role, const Flow &flow) { ThickPolyline thick_polyline = Arachne::to_thick_polyline(extrusion); - Slic3r::append(dst, thick_polyline_to_extrusion_paths(thick_polyline, role, flow, scaled(0.05), SCALED_EPSILON)); + Slic3r::append(dst, thick_polyline_to_multi_path(thick_polyline, role, flow, scaled(0.05), float(SCALED_EPSILON)).paths); } } // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp index 8a5f41982..283ba3de1 100644 --- a/src/libslic3r/BoundingBox.hpp +++ b/src/libslic3r/BoundingBox.hpp @@ -70,23 +70,14 @@ public: return ! (this->max(0) < other.min(0) || this->min(0) > other.max(0) || this->max(1) < other.min(1) || this->min(1) > other.max(1)); } - PointClass operator[](size_t idx) const { + PointClass operator[](size_t idx) const + { switch (idx) { - case 0: - return min; - break; - case 1: - return PointClass(max(0), min(1)); - break; - case 2: - return max; - break; - case 3: - return PointClass(min(0), max(1)); - break; - default: - return PointClass(); - break; + case 0: return min; break; + case 1: return PointClass(max(0), min(1)); break; + case 2: return max; break; + case 3: return PointClass(min(0), max(1)); break; + default: return PointClass(); break; } return PointClass(); } diff --git a/src/libslic3r/Brim.hpp b/src/libslic3r/Brim.hpp index a9322fe4b..eb2a4e6b5 100644 --- a/src/libslic3r/Brim.hpp +++ b/src/libslic3r/Brim.hpp @@ -23,8 +23,8 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, std::vector& printExtruders); // BBS: automatically make brim -ExtrusionEntityCollection make_brim_auto(const Print &print, PrintTryCancel try_cancel, Polygons &islands_area); - +ExtrusionEntityCollection make_brim_auto(const Print &print, PrintTryCancel try_cancel, Polygons &islands_area); + } // Slic3r #endif // slic3r_Brim_hpp_ diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 99e964da6..13f45471d 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -37,6 +37,8 @@ set(lisbslic3r_sources Brim.hpp BuildVolume.cpp BuildVolume.hpp + Calib.cpp + Calib.hpp Circle.cpp Circle.hpp clipper.cpp diff --git a/src/libslic3r/Calib.cpp b/src/libslic3r/Calib.cpp new file mode 100644 index 000000000..b210d3672 --- /dev/null +++ b/src/libslic3r/Calib.cpp @@ -0,0 +1,748 @@ +#include "Calib.hpp" +#include "Config.hpp" +#include "Model.hpp" +#include "GCode.hpp" +#include + + +namespace Slic3r { +float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx) +{ + const double general_suggested_min_speed = 100.0; + double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); + Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); + auto pa_speed = std::min(std::max(general_suggested_min_speed, config.option("outer_wall_speed")->value), + filament_max_volumetric_speed / pattern_line.mm3_per_mm()); + + return std::floor(pa_speed); +} + +std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter &writer, std::string comment) +{ + std::stringstream gcode; + + gcode << writer.retract(); + gcode << writer.travel_to_xy(pt, comment); + gcode << writer.unretract(); + + m_last_pos = Vec3d(pt.x(), pt.y(), 0); + + return gcode.str(); +} + +double CalibPressureAdvance::e_per_mm(double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const +{ + const Flow line_flow = Flow(line_width, layer_height, nozzle_diameter); + const double filament_area = M_PI * std::pow(filament_diameter / 2, 2); + + return line_flow.mm3_per_mm() / filament_area * print_flow_ratio; +} + +std::string CalibPressureAdvance::convert_number_to_string(double num) const +{ + auto sNumber = std::to_string(num); + sNumber.erase(sNumber.find_last_not_of('0') + 1, std::string::npos); + sNumber.erase(sNumber.find_last_not_of('.') + 1, std::string::npos); + + return sNumber; +} + +std::string CalibPressureAdvance::draw_digit( + double startx, double starty, char c, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, GCodeWriter &writer) +{ + const double len = m_digit_segment_len; + const double gap = line_width / 2.0; + + const auto dE = e_per_mm * len; + const auto two_dE = dE * 2; + + Vec2d p0, p1, p2, p3, p4, p5; + Vec2d p0_5, p4_5; + Vec2d gap_p0_toward_p3, gap_p2_toward_p3; + Vec2d dot_direction; + + if (mode == CalibPressureAdvance::DrawDigitMode::Bottom_To_Top) { + // 1-------2-------5 + // | | | + // | | | + // 0-------3-------4 + p0 = Vec2d(startx, starty); + p0_5 = Vec2d(startx, starty + len / 2); + p1 = Vec2d(startx, starty + len); + p2 = Vec2d(startx + len, starty + len); + p3 = Vec2d(startx + len, starty); + p4 = Vec2d(startx + len * 2, starty); + p4_5 = Vec2d(startx + len * 2, starty + len / 2); + p5 = Vec2d(startx + len * 2, starty + len); + + gap_p0_toward_p3 = p0 + Vec2d(gap, 0); + gap_p2_toward_p3 = p2 + Vec2d(0, gap); + + dot_direction = Vec2d(-len / 2, 0); + } else { + // 0-------1 + // | | + // 3-------2 + // | | + // 4-------5 + p0 = Vec2d(startx, starty); + p0_5 = Vec2d(startx + len / 2, starty); + p1 = Vec2d(startx + len, starty); + p2 = Vec2d(startx + len, starty - len); + p3 = Vec2d(startx, starty - len); + p4 = Vec2d(startx, starty - len * 2); + p4_5 = Vec2d(startx + len / 2, starty - len * 2); + p5 = Vec2d(startx + len, starty - len * 2); + + gap_p0_toward_p3 = p0 - Vec2d(0, gap); + gap_p2_toward_p3 = p2 - Vec2d(gap, 0); + + dot_direction = Vec2d(0, len / 2); + } + + std::stringstream gcode; + + switch (c) { + case '0': + gcode << move_to(p0, writer, "Glyph: 0"); + gcode << writer.extrude_to_xy(p1, dE); + gcode << writer.extrude_to_xy(p5, two_dE); + gcode << writer.extrude_to_xy(p4, dE); + gcode << writer.extrude_to_xy(gap_p0_toward_p3, two_dE); + break; + case '1': + gcode << move_to(p0_5, writer, "Glyph: 1"); + gcode << writer.extrude_to_xy(p4_5, two_dE); + break; + case '2': + gcode << move_to(p0, writer, "Glyph: 2"); + gcode << writer.extrude_to_xy(p1, dE); + gcode << writer.extrude_to_xy(p2, dE); + gcode << writer.extrude_to_xy(p3, dE); + gcode << writer.extrude_to_xy(p4, dE); + gcode << writer.extrude_to_xy(p5, dE); + break; + case '3': + gcode << move_to(p0, writer, "Glyph: 3"); + gcode << writer.extrude_to_xy(p1, dE); + gcode << writer.extrude_to_xy(p5, two_dE); + gcode << writer.extrude_to_xy(p4, dE); + gcode << move_to(gap_p2_toward_p3, writer); + gcode << writer.extrude_to_xy(p3, dE); + break; + case '4': + gcode << move_to(p0, writer, "Glyph: 4"); + gcode << writer.extrude_to_xy(p3, dE); + gcode << writer.extrude_to_xy(p2, dE); + gcode << move_to(p1, writer); + gcode << writer.extrude_to_xy(p5, two_dE); + break; + case '5': + gcode << move_to(p1, writer, "Glyph: 5"); + gcode << writer.extrude_to_xy(p0, dE); + gcode << writer.extrude_to_xy(p3, dE); + gcode << writer.extrude_to_xy(p2, dE); + gcode << writer.extrude_to_xy(p5, dE); + gcode << writer.extrude_to_xy(p4, dE); + break; + case '6': + gcode << move_to(p1, writer, "Glyph: 6"); + gcode << writer.extrude_to_xy(p0, dE); + gcode << writer.extrude_to_xy(p4, two_dE); + gcode << writer.extrude_to_xy(p5, dE); + gcode << writer.extrude_to_xy(p2, dE); + gcode << writer.extrude_to_xy(p3, dE); + break; + case '7': + gcode << move_to(p0, writer, "Glyph: 7"); + gcode << writer.extrude_to_xy(p1, dE); + gcode << writer.extrude_to_xy(p5, two_dE); + break; + case '8': + gcode << move_to(p2, writer, "Glyph: 8"); + gcode << writer.extrude_to_xy(p3, dE); + gcode << writer.extrude_to_xy(p4, dE); + gcode << writer.extrude_to_xy(p5, dE); + gcode << writer.extrude_to_xy(p1, two_dE); + gcode << writer.extrude_to_xy(p0, dE); + gcode << writer.extrude_to_xy(p3, dE); + break; + case '9': + gcode << move_to(p5, writer, "Glyph: 9"); + gcode << writer.extrude_to_xy(p1, two_dE); + gcode << writer.extrude_to_xy(p0, dE); + gcode << writer.extrude_to_xy(p3, dE); + gcode << writer.extrude_to_xy(p2, dE); + break; + case '.': + gcode << move_to(p4_5, writer, "Glyph: ."); + gcode << writer.extrude_to_xy(p4_5 + dot_direction, dE); + break; + default: break; + } + + return gcode.str(); +} + +std::string CalibPressureAdvance::draw_number( + double startx, double starty, double value, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, double speed, GCodeWriter &writer) +{ + auto sNumber = convert_number_to_string(value); + std::stringstream gcode; + gcode << writer.set_speed(speed); + + for (std::string::size_type i = 0; i < sNumber.length(); ++i) { + if (i > m_max_number_len) { break; } + switch (mode) { + case DrawDigitMode::Bottom_To_Top: gcode << draw_digit(startx, starty + i * number_spacing(), sNumber[i], mode, line_width, e_per_mm, writer); break; + default: gcode << draw_digit(startx + i * number_spacing(), starty, sNumber[i], mode, line_width, e_per_mm, writer); + } + } + + return gcode.str(); +} + +CalibPressureAdvanceLine::CalibPressureAdvanceLine(GCode *gcodegen) + : mp_gcodegen(gcodegen) + , m_nozzle_diameter(gcodegen->config().nozzle_diameter.get_at(0)) +{ +} + +std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, double step_pa /*= 0.002*/, int count /*= 10*/) +{ + BoundingBoxf bed_ext = get_extents(mp_gcodegen->config().printable_area.values); + if (is_delta()) { CalibPressureAdvanceLine::delta_scale_bed_ext(bed_ext); } + + auto bed_sizes = mp_gcodegen->config().printable_area.values; + 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); + + auto startx = (w - m_length_short * 2 - m_length_long - 20) / 2; + auto starty = (h - count * m_space_y) / 2; + if (is_delta()) { CalibPressureAdvanceLine::delta_modify_start(startx, starty, count); } + + return print_pa_lines(startx, starty, start_pa, step_pa, count); +} + +bool CalibPressureAdvanceLine::is_delta() const { return mp_gcodegen->config().printable_area.values.size() > 4; } + +std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num) +{ + auto & writer = mp_gcodegen->writer(); + const auto &config = mp_gcodegen->config(); + + const auto filament_diameter = config.filament_diameter.get_at(0); + const auto print_flow_ratio = config.print_flow_ratio; + + const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); + const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); + const double number_e_per_mm = CalibPressureAdvance::e_per_mm(m_number_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); + + const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); + const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); + std::stringstream gcode; + gcode << mp_gcodegen->writer().travel_to_z(m_height_layer); + double y_pos = start_y; + + // prime line + auto prime_x = start_x - 2; + gcode << move_to(Vec2d(prime_x, y_pos + (num - 4) * m_space_y), writer); + gcode << writer.set_speed(slow); + gcode << writer.extrude_to_xy(Vec2d(prime_x, y_pos + 3 * m_space_y), e_per_mm * m_space_y * num * 1.1); + + for (int i = 0; i < num; ++i) { + gcode << writer.set_pressure_advance(start_pa + i * step_pa); + gcode << move_to(Vec2d(start_x, y_pos + i * m_space_y), writer); + gcode << writer.set_speed(slow); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + i * m_space_y), e_per_mm * m_length_short); + gcode << writer.set_speed(fast); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + i * m_space_y), e_per_mm * m_length_long); + gcode << writer.set_speed(slow); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long + m_length_short, y_pos + i * m_space_y), e_per_mm * m_length_short); + } + gcode << writer.set_pressure_advance(0.0); + + if (m_draw_numbers) { + // draw indicator lines + gcode << writer.set_speed(fast); + gcode << move_to(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 2), writer); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 7), thin_e_per_mm * 7); + gcode << move_to(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 7), writer); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 2), thin_e_per_mm * 7); + + for (int i = 0; i < num; i += 2) { + gcode << draw_number(start_x + m_length_short + m_length_long + m_length_short + 3, y_pos + i * m_space_y + m_space_y / 2, start_pa + i * step_pa, m_draw_digit_mode, + m_number_line_width, number_e_per_mm, 3600, writer); + } + } + return gcode.str(); +} + +void CalibPressureAdvanceLine::delta_modify_start(double &startx, double &starty, int count) +{ + startx = -startx; + starty = -(count * m_space_y) / 2; +} + +CalibPressureAdvancePattern::CalibPressureAdvancePattern(const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin) + : m_params(params) +{ + this->m_draw_digit_mode = DrawDigitMode::Bottom_To_Top; + + refresh_setup(config, is_bbl_machine, model, origin); +}; + +void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin) +{ + std::stringstream gcode; + gcode << "; start pressure advance pattern for layer\n"; + + refresh_setup(config, is_bbl_machine, model, origin); + + gcode << move_to(Vec2d(m_starting_point.x(), m_starting_point.y()), m_writer, "Move to start XY position"); + gcode << m_writer.travel_to_z(height_first_layer(), "Move to start Z position"); + gcode << m_writer.set_pressure_advance(m_params.start); + + const DrawBoxOptArgs default_box_opt_args(*this); + + // create anchoring frame + gcode << draw_box(m_starting_point.x(), m_starting_point.y(), print_size_x(), frame_size_y(), default_box_opt_args); + + // create tab for numbers + DrawBoxOptArgs draw_box_opt_args = default_box_opt_args; + draw_box_opt_args.is_filled = true; + draw_box_opt_args.num_perimeters = wall_count(); + gcode << draw_box(m_starting_point.x(), m_starting_point.y() + frame_size_y() + line_spacing_first_layer(), glyph_tab_max_x() - m_starting_point.x(), + max_numbering_height() + line_spacing_first_layer() + m_glyph_padding_vertical * 2, draw_box_opt_args); + + std::vector gcode_items; + const DrawLineOptArgs default_line_opt_args(*this); + const int num_patterns = get_num_patterns(); // "cache" for use in loops + + // draw pressure advance pattern + for (int i = 0; i < m_num_layers; ++i) { + if (i > 0) { + gcode << "; end pressure advance pattern for layer\n"; + CustomGCode::Item item; + item.print_z = height_first_layer() + (i - 1) * height_layer(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); + gcode_items.push_back(item); + + gcode = std::stringstream(); // reset for next layer contents + gcode << "; start pressure advance pattern for layer\n"; + + const double layer_height = height_first_layer() + (i * height_layer()); + gcode << m_writer.travel_to_z(layer_height, "Move to layer height"); + } + + // line numbering + if (i == 1) { + gcode << m_writer.set_pressure_advance(m_params.start); + + double number_e_per_mm = e_per_mm(line_width(), height_layer(), m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); + + // glyph on every other line + for (int j = 0; j < num_patterns; j += 2) { + gcode << draw_number(glyph_start_x(j), m_starting_point.y() + frame_size_y() + m_glyph_padding_vertical + line_width(), m_params.start + (j * m_params.step), + m_draw_digit_mode, line_width(), number_e_per_mm, speed_first_layer(), m_writer); + } + } + + DrawLineOptArgs draw_line_opt_args = default_line_opt_args; + + double to_x = m_starting_point.x() + pattern_shift(); + double to_y = m_starting_point.y(); + double side_length = m_wall_side_length; + + // shrink first layer to fit inside frame + if (i == 0) { + double shrink = (line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment))) / std::sin(to_radians(m_corner_angle) / 2); + side_length = m_wall_side_length - shrink; + to_x += shrink * std::sin(to_radians(90) - to_radians(m_corner_angle) / 2); + to_y += line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment)); + } + + double initial_x = to_x; + double initial_y = to_y; + + gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to pattern start"); + + for (int j = 0; j < num_patterns; ++j) { + // increment pressure advance + gcode << m_writer.set_pressure_advance(m_params.start + (j * m_params.step)); + + for (int k = 0; k < wall_count(); ++k) { + to_x += std::cos(to_radians(m_corner_angle) / 2) * side_length; + to_y += std::sin(to_radians(m_corner_angle) / 2) * side_length; + + draw_line_opt_args = default_line_opt_args; + draw_line_opt_args.height = i == 0 ? height_first_layer() : height_layer(); + draw_line_opt_args.line_width = line_width(); // don't use line_width_first_layer so results are consistent across all layers + draw_line_opt_args.speed = i == 0 ? speed_adjust(speed_first_layer()) : speed_adjust(speed_perimeter()); + draw_line_opt_args.comment = "Print pattern wall"; + gcode << draw_line(Vec2d(to_x, to_y), draw_line_opt_args); + + to_x -= std::cos(to_radians(m_corner_angle) / 2) * side_length; + to_y += std::sin(to_radians(m_corner_angle) / 2) * side_length; + + gcode << draw_line(Vec2d(to_x, to_y), draw_line_opt_args); + + to_y = initial_y; + if (k != wall_count() - 1) { + // perimeters not done yet. move to next perimeter + to_x += line_spacing_angle(); + gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to start next pattern wall"); + } else if (j != num_patterns - 1) { + // patterns not done yet. move to next pattern + to_x += m_pattern_spacing + line_width(); + gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to next pattern"); + } else if (i != m_num_layers - 1) { + // layers not done yet. move back to start + to_x = initial_x; + gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move back to start position"); + } else { + // everything done + } + } + } + } + + gcode << m_writer.set_pressure_advance(m_params.start); + gcode << "; end pressure advance pattern for layer\n"; + + CustomGCode::Item item; + item.print_z = max_layer_z(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); + gcode_items.push_back(item); + + CustomGCode::Info info; + info.mode = CustomGCode::Mode::SingleExtruder; + info.gcodes = gcode_items; + + model.plates_custom_gcodes[model.curr_plate_index] = info; +} + +void CalibPressureAdvancePattern::refresh_setup(const DynamicPrintConfig &config, bool is_bbl_machine, const Model &model, const Vec3d &origin) +{ + m_config = config; + m_config.apply(model.objects.front()->config.get(), true); + m_config.apply(model.objects.front()->volumes.front()->config.get(), true); + + m_is_delta = (m_config.option("printable_area")->values.size() > 4); + + _refresh_starting_point(model); + _refresh_writer(is_bbl_machine, model, origin); +} + +void CalibPressureAdvancePattern::_refresh_starting_point(const Model &model) +{ + ModelObject * obj = model.objects.front(); + BoundingBoxf3 bbox = obj->instance_bounding_box(*obj->instances.front(), false); + + m_starting_point = Vec3d(bbox.min.x(), bbox.max.y(), 0); + m_starting_point.y() += m_handle_spacing; + + if (m_is_delta) { + m_starting_point.x() *= -1; + m_starting_point.y() -= (frame_size_y() / 2); + } +} + +void CalibPressureAdvancePattern::_refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin) +{ + PrintConfig print_config; + print_config.apply(m_config, true); + + m_writer.apply_print_config(print_config); + m_writer.set_xy_offset(origin(0), origin(1)); + //m_writer.set_is_bbl_machine(is_bbl_machine); + + const unsigned int extruder_id = model.objects.front()->volumes.front()->extruder_id(); + m_writer.set_extruders({extruder_id}); + m_writer.set_extruder(extruder_id); +} + +std::string CalibPressureAdvancePattern::draw_line(Vec2d to_pt, DrawLineOptArgs opt_args) +{ + const double e_per_mm = CalibPressureAdvance::e_per_mm(opt_args.line_width, opt_args.height, m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); + + const double length = get_distance(Vec2d(m_last_pos.x(), m_last_pos.y()), to_pt); + auto dE = e_per_mm * length; + + std::stringstream gcode; + + gcode << m_writer.set_speed(opt_args.speed); + gcode << m_writer.extrude_to_xy(to_pt, dE, opt_args.comment); + + m_last_pos = Vec3d(to_pt.x(), to_pt.y(), 0); + + return gcode.str(); +} + +std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args) +{ + std::stringstream gcode; + + double x = min_x; + double y = min_y; + const double max_x = min_x + size_x; + const double max_y = min_y + size_y; + + const double spacing = opt_args.line_width - opt_args.height * (1 - M_PI / 4); + + // if number of perims exceeds size of box, reduce it to max + const int max_perimeters = std::min( + // this is the equivalent of number of perims for concentric fill + std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))), + std::floor(size_y * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45)))); + + opt_args.num_perimeters = std::min(opt_args.num_perimeters, max_perimeters); + + gcode << move_to(Vec2d(min_x, min_y), m_writer, "Move to box start"); + + DrawLineOptArgs line_opt_args(*this); + line_opt_args.height = opt_args.height; + line_opt_args.line_width = opt_args.line_width; + line_opt_args.speed = opt_args.speed; + + for (int i = 0; i < opt_args.num_perimeters; ++i) { + if (i != 0) { // after first perimeter, step inwards to start next perimeter + x += spacing; + y += spacing; + gcode << move_to(Vec2d(x, y), m_writer, "Step inwards to print next perimeter"); + } + + y += size_y - i * spacing * 2; + line_opt_args.comment = "Draw perimeter (up)"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + + x += size_x - i * spacing * 2; + line_opt_args.comment = "Draw perimeter (right)"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + + y -= size_y - i * spacing * 2; + line_opt_args.comment = "Draw perimeter (down)"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + + x -= size_x - i * spacing * 2; + line_opt_args.comment = "Draw perimeter (left)"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } + + if (!opt_args.is_filled) { return gcode.str(); } + + // create box infill + const double spacing_45 = spacing / std::sin(to_radians(45)); + + const double bound_modifier = (spacing * (opt_args.num_perimeters - 1)) + (opt_args.line_width * (1 - m_encroachment)); + const double x_min_bound = min_x + bound_modifier; + const double x_max_bound = max_x - bound_modifier; + const double y_min_bound = min_y + bound_modifier; + const double y_max_bound = max_y - bound_modifier; + const int x_count = std::floor((x_max_bound - x_min_bound) / spacing_45); + const int y_count = std::floor((y_max_bound - y_min_bound) / spacing_45); + + double x_remainder = std::fmod((x_max_bound - x_min_bound), spacing_45); + double y_remainder = std::fmod((y_max_bound - y_min_bound), spacing_45); + + x = x_min_bound; + y = y_min_bound; + + gcode << move_to(Vec2d(x, y), m_writer, "Move to fill start"); + + for (int i = 0; i < x_count + y_count + (x_remainder + y_remainder >= spacing_45 ? 1 : 0); + ++i) { // this isn't the most robust way, but less expensive than finding line intersections + if (i < std::min(x_count, y_count)) { + if (i % 2 == 0) { + x += spacing_45; + y = y_min_bound; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); + + y += x - x_min_bound; + x = x_min_bound; + line_opt_args.comment = "Fill: Print up/left"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } else { + y += spacing_45; + x = x_min_bound; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); + + x += y - y_min_bound; + y = y_min_bound; + line_opt_args.comment = "Fill: Print down/right"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } + } else if (i < std::max(x_count, y_count)) { + if (x_count > y_count) { + // box is wider than tall + if (i % 2 == 0) { + x += spacing_45; + y = y_min_bound; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); + + x -= y_max_bound - y_min_bound; + y = y_max_bound; + line_opt_args.comment = "Fill: Print up/left"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } else { + if (i == y_count) { + x += spacing_45 - y_remainder; + y_remainder = 0; + } else { + x += spacing_45; + } + y = y_max_bound; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); + + x += y_max_bound - y_min_bound; + y = y_min_bound; + line_opt_args.comment = "Fill: Print down/right"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } + } else { + // box is taller than wide + if (i % 2 == 0) { + x = x_max_bound; + if (i == x_count) { + y += spacing_45 - x_remainder; + x_remainder = 0; + } else { + y += spacing_45; + } + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); + + x = x_min_bound; + y += x_max_bound - x_min_bound; + line_opt_args.comment = "Fill: Print up/left"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } else { + x = x_min_bound; + y += spacing_45; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); + + x = x_max_bound; + y -= x_max_bound - x_min_bound; + line_opt_args.comment = "Fill: Print down/right"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } + } + } else { + if (i % 2 == 0) { + x = x_max_bound; + if (i == x_count) { + y += spacing_45 - x_remainder; + } else { + y += spacing_45; + } + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); + + x -= y_max_bound - y; + y = y_max_bound; + line_opt_args.comment = "Fill: Print up/left"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } else { + if (i == y_count) { + x += spacing_45 - y_remainder; + } else { + x += spacing_45; + } + y = y_max_bound; + gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); + + y -= x_max_bound - x; + x = x_max_bound; + line_opt_args.comment = "Fill: Print down/right"; + gcode << draw_line(Vec2d(x, y), line_opt_args); + } + } + } + + return gcode.str(); +} + +double CalibPressureAdvancePattern::get_distance(Vec2d from, Vec2d to) const { return std::hypot((to.x() - from.x()), (to.y() - from.y())); } + +double CalibPressureAdvancePattern::object_size_x() const +{ + return get_num_patterns() * ((wall_count() - 1) * line_spacing_angle()) + (get_num_patterns() - 1) * (m_pattern_spacing + line_width()) + + std::cos(to_radians(m_corner_angle) / 2) * m_wall_side_length + line_spacing_first_layer() * wall_count(); +} + +double CalibPressureAdvancePattern::object_size_y() const +{ + return 2 * (std::sin(to_radians(m_corner_angle) / 2) * m_wall_side_length) + max_numbering_height() + m_glyph_padding_vertical * 2 + line_width_first_layer(); +} + +double CalibPressureAdvancePattern::glyph_start_x(int pattern_i) const +{ + // note that pattern_i is zero-based! + // align glyph's start with first perimeter of specified pattern + double x = + // starting offset + m_starting_point.x() + pattern_shift() + + + // width of pattern extrusions + pattern_i * (wall_count() - 1) * line_spacing_angle() + // center to center distance of extrusions + pattern_i * line_width() + // endcaps. center to end on either side = 1 line width + + // space between each pattern + pattern_i * m_pattern_spacing; + + // align to middle of pattern walls + x += wall_count() * line_spacing_angle() / 2; + + // shift so glyph is centered on pattern + // m_digit_segment_len = half of X length of glyph + x -= (glyph_length_x() / 2); + + return x; +} + +double CalibPressureAdvancePattern::glyph_length_x() const +{ + // half of line_width sticks out on each side + return line_width() + (2 * m_digit_segment_len); +} + +double CalibPressureAdvancePattern::glyph_tab_max_x() const +{ + // only every other glyph is shown, starting with 1 + int num = get_num_patterns(); + int max_num = (num % 2 == 0) ? num - 1 : num; + + // padding at end should be same as padding at start + double padding = glyph_start_x(0) - m_starting_point.x(); + + return glyph_start_x(max_num - 1) + // glyph_start_x is zero-based + (glyph_length_x() - line_width() / 2) + padding; +} + +double CalibPressureAdvancePattern::max_numbering_height() const +{ + std::string::size_type most_characters = 0; + const int num_patterns = get_num_patterns(); + + // note: only every other number is printed + for (std::string::size_type i = 0; i < num_patterns; i += 2) { + std::string sNumber = convert_number_to_string(m_params.start + (i * m_params.step)); + + if (sNumber.length() > most_characters) { most_characters = sNumber.length(); } + } + + most_characters = std::min(most_characters, m_max_number_len); + + return (most_characters * m_digit_segment_len) + ((most_characters - 1) * m_digit_gap_len); +} + +double CalibPressureAdvancePattern::pattern_shift() const { return (wall_count() - 1) * line_spacing_first_layer() + line_width_first_layer() + m_glyph_padding_horizontal; } +} // namespace Slic3r + diff --git a/src/libslic3r/Calib.hpp b/src/libslic3r/Calib.hpp new file mode 100644 index 000000000..9311f244a --- /dev/null +++ b/src/libslic3r/Calib.hpp @@ -0,0 +1,307 @@ +#pragma once + +#include "GCodeWriter.hpp" +#include "PrintConfig.hpp" +#include "BoundingBox.hpp" + +namespace Slic3r { + +class GCode; +class Model; + +enum class CalibMode : int { + Calib_None = 0, + Calib_PA_Line, + Calib_PA_Pattern, + Calib_PA_Tower, + Calib_Flow_Rate, + Calib_Temp_Tower, + Calib_Vol_speed_Tower, + Calib_VFA_Tower, + Calib_Retraction_tower +}; + +enum class CalibState { + Start = 0, + Preset, + Calibration, + CoarseSave, + FineCalibration, + Save, + Finish +}; + +struct Calib_Params +{ + Calib_Params() : mode(CalibMode::Calib_None){} + double start, end, step; + bool print_numbers; + CalibMode mode; +}; + +class X1CCalibInfos +{ +public: + struct X1CCalibInfo + { + int tray_id; + int bed_temp; + int nozzle_temp; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + float max_volumetric_speed; + float flow_rate = 0.98f; // for flow ratio + }; + + std::vector calib_datas; +}; + +class CaliPresetInfo +{ +public: + int tray_id; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + std::string name; + + CaliPresetInfo &operator=(const CaliPresetInfo &other) + { + this->tray_id = other.tray_id; + this->nozzle_diameter = other.nozzle_diameter; + this->filament_id = other.filament_id; + this->setting_id = other.setting_id; + this->name = other.name; + return *this; + } +}; + +struct PrinterCaliInfo +{ + std::string dev_id; + bool cali_finished = true; + float cache_flow_ratio; + std::vector selected_presets; +}; + +class PACalibResult +{ +public: + enum CalibResult { + CALI_RESULT_SUCCESS = 0, + CALI_RESULT_PROBLEM = 1, + CALI_RESULT_FAILED = 2, + }; + int tray_id; + int cali_idx = -1; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + std::string name; + float k_value = 0.0; + float n_coef = 0.0; + int confidence = -1; // 0: success 1: uncertain 2: failed +}; + +struct PACalibIndexInfo +{ + int tray_id; + int cali_idx; + float nozzle_diameter; + std::string filament_id; +}; + +class FlowRatioCalibResult +{ +public: + int tray_id; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + float flow_ratio; + int confidence; // 0: success 1: uncertain 2: failed +}; + +class CalibPressureAdvance +{ +public: + static float find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx = 0); + +protected: + CalibPressureAdvance() = default; + ~CalibPressureAdvance() = default; + + enum class DrawDigitMode { Left_To_Right, Bottom_To_Top }; + + void delta_scale_bed_ext(BoundingBoxf &bed_ext) const { bed_ext.scale(1.0f / 1.41421f); } + + std::string move_to(Vec2d pt, GCodeWriter &writer, std::string comment = std::string()); + double e_per_mm(double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const; + double speed_adjust(int speed) const { return speed * 60; }; + + std::string convert_number_to_string(double num) const; + double number_spacing() const { return m_digit_segment_len + m_digit_gap_len; }; + std::string draw_digit(double startx, double starty, char c, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, GCodeWriter &writer); + std::string draw_number( + double startx, double starty, double value, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, double speed, GCodeWriter &writer); + + Vec3d m_last_pos; + + DrawDigitMode m_draw_digit_mode{DrawDigitMode::Left_To_Right}; + const double m_digit_segment_len{2}; + const double m_digit_gap_len{1}; + const std::string::size_type m_max_number_len{5}; +}; + +class CalibPressureAdvanceLine : public CalibPressureAdvance +{ +public: + CalibPressureAdvanceLine(GCode *gcodegen); + ~CalibPressureAdvanceLine(){}; + + std::string generate_test(double start_pa = 0, double step_pa = 0.002, int count = 50); + + void set_speed(double fast = 100.0, double slow = 20.0) + { + m_slow_speed = slow; + m_fast_speed = fast; + } + + const double &line_width() { return m_line_width; }; + bool is_delta() const; + bool & draw_numbers() { return m_draw_numbers; } + +private: + std::string print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num); + + void delta_modify_start(double &startx, double &starty, int count); + + GCode *mp_gcodegen; + + double m_nozzle_diameter; + double m_slow_speed, m_fast_speed; + + const double m_height_layer{0.2}; + const double m_line_width{0.6}; + const double m_thin_line_width{0.44}; + const double m_number_line_width{0.48}; + const double m_space_y{3.5}; + + double m_length_short{20.0}, m_length_long{40.0}; + bool m_draw_numbers{true}; +}; + +struct SuggestedConfigCalibPAPattern +{ + const std::vector> float_pairs{{"initial_layer_print_height", 0.25}, {"layer_height", 0.2}, {"initial_layer_speed", 30}}; + + const std::vector> nozzle_ratio_pairs{{"line_width", 112.5}, {"initial_layer_line_width", 140}}; + + const std::vector> int_pairs{{"skirt_loops", 0}, {"wall_loops", 3}}; + + const std::pair brim_pair{"brim_type", BrimType::btNoBrim}; +}; + +class CalibPressureAdvancePattern : public CalibPressureAdvance +{ + friend struct DrawLineOptArgs; + friend struct DrawBoxOptArgs; + +public: + CalibPressureAdvancePattern(const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); + + double handle_xy_size() const { return m_handle_xy_size; }; + double handle_spacing() const { return m_handle_spacing; }; + double print_size_x() const { return object_size_x() + pattern_shift(); }; + double print_size_y() const { return object_size_y(); }; + double max_layer_z() const { return height_first_layer() + ((m_num_layers - 1) * height_layer()); }; + + void generate_custom_gcodes(const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); + +protected: + double speed_first_layer() const { return m_config.option("initial_layer_speed")->value; }; + double speed_perimeter() const { return m_config.option("outer_wall_speed")->value; }; + double line_width_first_layer() const { return m_config.get_abs_value("initial_layer_line_width"); }; + double line_width() const { return m_config.get_abs_value("line_width"); }; + int wall_count() const { return m_config.option("wall_loops")->value; }; + +private: + struct DrawLineOptArgs + { + DrawLineOptArgs(const CalibPressureAdvancePattern &p) : height{p.height_layer()}, line_width{p.line_width()}, speed{p.speed_adjust(p.speed_perimeter())} {}; + + double height; + double line_width; + double speed; + std::string comment{"Print line"}; + }; + + struct DrawBoxOptArgs + { + DrawBoxOptArgs(const CalibPressureAdvancePattern &p) + : num_perimeters{p.wall_count()}, height{p.height_first_layer()}, line_width{p.line_width_first_layer()}, speed{p.speed_adjust(p.speed_first_layer())} {}; + + bool is_filled{false}; + int num_perimeters; + double height; + double line_width; + double speed; + }; + + void refresh_setup(const DynamicPrintConfig &config, bool is_bbl_machine, const Model &model, const Vec3d &origin); + void _refresh_starting_point(const Model &model); + void _refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin); + + double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; + double height_layer() const { return m_config.option("layer_height")->value; }; + const int get_num_patterns() const { return std::ceil((m_params.end - m_params.start) / m_params.step + 1); } + + std::string draw_line(Vec2d to_pt, DrawLineOptArgs opt_args); + std::string draw_box(double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args); + + double to_radians(double degrees) const { return degrees * M_PI / 180; }; + double get_distance(Vec2d from, Vec2d to) const; + + /* + from slic3r documentation: spacing = extrusion_width - layer_height * (1 - PI/4) + "spacing" = center-to-center distance of adjacent extrusions, which partially overlap + https://manual.slic3r.org/advanced/flow-math + https://ellis3dp.com/Print-Tuning-Guide/articles/misconceptions.html#two-04mm-perimeters--08mm + */ + double line_spacing() const { return line_width() - height_layer() * (1 - M_PI / 4); }; + double line_spacing_first_layer() const { return line_width_first_layer() - height_first_layer() * (1 - M_PI / 4); }; + double line_spacing_angle() const { return line_spacing() / std::sin(to_radians(m_corner_angle) / 2); }; + + double object_size_x() const; + double object_size_y() const; + double frame_size_y() const { return std::sin(to_radians(double(m_corner_angle) / 2)) * m_wall_side_length * 2; }; + + double glyph_start_x(int pattern_i = 0) const; + double glyph_length_x() const; + double glyph_tab_max_x() const; + double max_numbering_height() const; + + double pattern_shift() const; + + const Calib_Params &m_params; + + DynamicPrintConfig m_config; + GCodeWriter m_writer; + bool m_is_delta; + Vec3d m_starting_point; + + const double m_handle_xy_size{5}; + const double m_handle_spacing{2}; + const int m_num_layers{4}; + + const double m_wall_side_length{30.0}; + const int m_corner_angle{90}; + const int m_pattern_spacing{2}; + const double m_encroachment{1. / 3.}; + + const double m_glyph_padding_horizontal{1}; + const double m_glyph_padding_vertical{1}; +}; + +} // namespace Slic3r diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 37c778c3b..fe9c0782d 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -1660,7 +1660,7 @@ public: ConfigOptionEnumsGenericTempl& operator= (const ConfigOption* opt) { this->set(opt); return *this; } bool operator< (const ConfigOptionInts& rhs) const throw() { return this->values < rhs.values; } - bool operator==(const ConfigOptionInts& rhs) const throw() + bool operator==(const ConfigOptionInts& rhs) const { if (rhs.type() != this->type()) throw ConfigurationError("ConfigOptionEnumsGeneric: Comparing incompatible types"); diff --git a/src/libslic3r/Extruder.hpp b/src/libslic3r/Extruder.hpp index 9769d70c9..ec9b14c23 100644 --- a/src/libslic3r/Extruder.hpp +++ b/src/libslic3r/Extruder.hpp @@ -56,8 +56,6 @@ public: double retract_length_toolchange() const; double retract_restart_extra_toolchange() const; - bool use_firmware_retraction() const; - private: // Private constructor to create a key for a search in std::set. Extruder(unsigned int id) : m_id(id) {} @@ -66,7 +64,7 @@ private: GCodeConfig *m_config; // Print-wide global ID of this extruder. unsigned int m_id; - // Current state of the extruder axis, may be resetted if use_relative_e_distances. + // Current state of the extruder axis, may be resetted if use_relative_e_distance. double m_E; // Current state of the extruder tachometer, used to output the extruded_volume() and used_filament() statistics. double m_absolute_E; diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 30b81f4cd..0206951dc 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -95,7 +95,7 @@ struct SurfaceFillParams this->overlap == rhs.overlap && this->angle == rhs.angle && this->bridge == rhs.bridge && - this->bridge_angle == rhs.bridge_angle && +// this->bridge_angle == rhs.bridge_angle && this->density == rhs.density && // this->dont_adjust == rhs.dont_adjust && this->anchor_length == rhs.anchor_length && @@ -154,42 +154,26 @@ std::vector group_fills(const Layer &layer) //BBS params.with_loop = surface.surface_type == stInternalWithLoop; - if (surface.is_solid()) { + if (surface.is_solid()) { params.density = 100.f; //FIXME for non-thick bridges, shall we allow a bottom surface pattern? if (surface.is_solid_infill()) params.pattern = region_config.internal_solid_infill_pattern.value; - else if (surface.is_external() && ! is_bridge) { - if(surface.is_top()) - params.pattern = region_config.top_surface_pattern.value; - else - params.pattern = region_config.bottom_surface_pattern.value; - } - else { - if(region_config.top_surface_pattern == ipMonotonic || region_config.top_surface_pattern == ipMonotonicLine) - params.pattern = ipMonotonic; - else - params.pattern = ipRectilinear; - } + else if (surface.is_external() && !is_bridge) + params.pattern = surface.is_top() ? region_config.top_surface_pattern.value : region_config.bottom_surface_pattern.value; + else + params.pattern = region_config.top_surface_pattern == ipMonotonic ? ipMonotonic : ipRectilinear; + } else if (params.density <= 0) continue; - params.extrusion_role = erInternalInfill; - if (is_bridge) { - if (surface.is_internal_bridge()) - params.extrusion_role = erInternalBridgeInfill; - else - params.extrusion_role = erBridgeInfill; - } else if (surface.is_solid()) { - if (surface.is_top()) { - params.extrusion_role = erTopSolidInfill; - } else if (surface.is_bottom()) { - params.extrusion_role = erBottomSurface; - } else { - params.extrusion_role = erSolidInfill; - } - } - params.bridge_angle = float(surface.bridge_angle); + params.extrusion_role = + is_bridge ? + erBridgeInfill : + (surface.is_solid() ? + (surface.is_top() ? erTopSolidInfill : (surface.is_bottom()? erBottomSurface : erSolidInfill)) : + erInternalInfill); + params.bridge_angle = float(surface.bridge_angle); params.angle = float(Geometry::deg2rad(region_config.infill_direction.value)); // Calculate the actual flow we'll be using for this infill. @@ -210,11 +194,11 @@ std::vector group_fills(const Layer &layer) // so that internall infill will be aligned over all layers of the current region. params.spacing = layerm.region().flow(*layer.object(), frInfill, layer.object()->config().layer_height, false).spacing(); // Anchor a sparse infill to inner perimeters with the following anchor length: - params.anchor_length = float(region_config.infill_anchor); - if (region_config.infill_anchor.percent) + params.anchor_length = float(region_config.sparse_infill_anchor); + if (region_config.sparse_infill_anchor.percent) params.anchor_length = float(params.anchor_length * 0.01 * params.spacing); - params.anchor_length_max = float(region_config.infill_anchor_max); - if (region_config.infill_anchor_max.percent) + params.anchor_length_max = float(region_config.sparse_infill_anchor_max); + if (region_config.sparse_infill_anchor_max.percent) params.anchor_length_max = float(params.anchor_length_max * 0.01 * params.spacing); params.anchor_length = std::min(params.anchor_length, params.anchor_length_max); } @@ -331,11 +315,7 @@ std::vector group_fills(const Layer &layer) if (internal_solid_fill == nullptr) { // Produce another solid fill. params.extruder = layerm.region().extruder(frSolidInfill); - const auto top_pattern = layerm.region().config().top_surface_pattern; - if(top_pattern == ipMonotonic || top_pattern == ipMonotonicLine) - params.pattern = top_pattern; - else - params.pattern = ipRectilinear; + params.pattern = layerm.region().config().top_surface_pattern == ipMonotonic ? ipMonotonic : ipRectilinear; params.density = 100.f; params.extrusion_role = erInternalInfill; params.angle = float(Geometry::deg2rad(layerm.region().config().infill_direction.value)); @@ -479,12 +459,10 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: #endif } - LayerRegion* layerm = this->m_regions[surface_fill.region_id]; - // Maximum length of the perimeter segment linking two infill lines. f->link_max_length = (coord_t)scale_(link_max_length); // Used by the concentric infill pattern to clip the loops to create extrusion paths. - f->loop_clipping = coord_t(scale_(layerm->region().config().seam_gap.get_abs_value(surface_fill.params.flow.nozzle_diameter()))); + f->loop_clipping = coord_t(scale_(surface_fill.params.flow.nozzle_diameter()) * LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER); // apply half spacing using this flow's own spacing and generate infill FillParams params; @@ -502,19 +480,14 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.using_internal_flow = using_internal_flow; params.no_extrusion_overlap = surface_fill.params.overlap; params.with_loop = surface_fill.params.with_loop; - params.config = &layerm->region().config(); if (surface_fill.params.pattern == ipGrid) params.can_reverse = false; + LayerRegion* layerm = this->m_regions[surface_fill.region_id]; for (ExPolygon& expoly : surface_fill.expolygons) { f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes); // Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon. f->spacing = surface_fill.params.spacing; surface_fill.surface.expolygon = std::move(expoly); - - if(surface_fill.params.bridge && surface_fill.surface.is_external() && surface_fill.params.density > 99.0){ - params.density = layerm->region().config().bridge_density.get_abs_value(1.0); - params.dont_adjust = true; - } // BBS: make fill f->fill_surface_extrusion(&surface_fill.surface, params, diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 9c5c40348..baa426c49 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -28,11 +28,6 @@ namespace Slic3r { -//BBS: 0% of sparse_infill_line_width, no anchor at the start of sparse infill -float Fill::infill_anchor = 400; -//BBS: 20mm -float Fill::infill_anchor_max = 20; - Fill* Fill::new_from_type(const InfillPattern type) { switch (type) { diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index ddb6073e9..97246713f 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -40,7 +40,7 @@ struct FillParams bool full_infill() const { return density > 0.9999f; } // Don't connect the fill lines around the inner perimeter. bool dont_connect() const { return anchor_length_max < 0.05f; } - + double filter_out_gap_fill { 0.0 }; // Fill density, fraction in <0, 1> float density { 0.f }; @@ -110,9 +110,6 @@ public: // BBS: all no overlap expolygons in same layer ExPolygons no_overlap_expolygons; - static float infill_anchor; - static float infill_anchor_max; - public: virtual ~Fill() {} virtual Fill* clone() const = 0; diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 7a3816e79..154dec671 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3179,6 +3179,11 @@ void FillMonotonicLineWGapFill::fill_surface_extrusion(const Surface* surface, c }), polylines.end()); ExtrusionEntityCollection gap_fill; + // OrcaSlicer: filter out tiny gap fills + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), [&](const ThickPolyline &p) { + return p.length() < scale_(params.filter_out_gap_fill); + }), polylines.end()); + variable_width(polylines, erGapFill, params.flow, gap_fill.entities); coll_nosort->append(std::move(gap_fill.entities)); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 336fca463..dbc0563a4 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -277,7 +277,7 @@ static constexpr const char* OBJECT_ID_ATTR = "object_id"; static constexpr const char* INSTANCEID_ATTR = "instance_id"; static constexpr const char* IDENTIFYID_ATTR = "identify_id"; static constexpr const char* PLATERID_ATTR = "plater_id"; -static constexpr const char* PLATER_NAME_ATTR = "plater_name"; +static constexpr const char* PLATER_NAME_ATTR = "plater_name"; static constexpr const char* PLATE_IDX_ATTR = "index"; static constexpr const char* SLICE_PREDICTION_ATTR = "prediction"; static constexpr const char* SLICE_WEIGHT_ATTR = "weight"; @@ -910,7 +910,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool m_load_restore = false; std::string m_backup_path; std::string m_origin_file; - // Semantic version of Orca Slicer, that generated this 3MF. + // Semantic version of Bambu Studio, that generated this 3MF. boost::optional m_bambuslicer_generator_version; unsigned int m_fdm_supports_painting_version = 0; unsigned int m_seam_painting_version = 0; @@ -1769,7 +1769,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) lock.close(); if (!m_is_bbl_3mf) { - // if the 3mf was not produced by OrcaSlicer and there is more than one instance, + // if the 3mf was not produced by BambuStudio and there is more than one instance, // split the object in as many objects as instances BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", found 3mf from other vendor, split as instance"); for (const IdToModelObjectMap::value_type& object : m_objects) { @@ -2046,7 +2046,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } plate_data_list[it->first-1]->locked = it->second->locked; plate_data_list[it->first-1]->plate_index = it->second->plate_index-1; - plate_data_list[it->first-1]->plate_name = it->second->plate_name; + plate_data_list[it->first-1]->plate_name = it->second->plate_name; plate_data_list[it->first-1]->obj_inst_map = it->second->obj_inst_map; plate_data_list[it->first-1]->gcode_file = (m_load_restore || it->second->gcode_file.empty()) ? it->second->gcode_file : m_backup_path + "/" + it->second->gcode_file; plate_data_list[it->first-1]->gcode_prediction = it->second->gcode_prediction; @@ -2616,7 +2616,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } } } - + void _BBS_3MF_Importer::_extract_layer_config_ranges_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, ConfigSubstitutionContext& config_substitutions) { if (stat.m_uncomp_size > 0) { @@ -3121,7 +3121,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } if (!m_is_bbl_3mf) { - // if the 3mf was not produced by OrcaSlicer and there is only one object, + // if the 3mf was not produced by BambuStudio and there is only one object, // set the object name to match the filename if (m_model->objects.size() == 1) m_model->objects.front()->name = m_name; @@ -3522,23 +3522,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_is_bbl_3mf = true; m_bambuslicer_generator_version = Semver::parse(m_curr_characters.substr(12)); } - else if (boost::starts_with(m_curr_characters, "OrcaSlicer-")) { - m_is_bbl_3mf = true; - m_bambuslicer_generator_version = Semver::parse(m_curr_characters.substr(11)); - } //TODO: currently use version 0, no need to load&&save this string /*} else if (m_curr_metadata_name == BBS_FDM_SUPPORTS_PAINTING_VERSION) { m_fdm_supports_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_fdm_supports_painting_version, FDM_SUPPORTS_PAINTING_VERSION, - _(L("The selected 3MF contains FDM supports painted object using a newer version of OrcaSlicer and is not compatible."))); + _(L("The selected 3MF contains FDM supports painted object using a newer version of BambuStudio and is not compatible."))); } else if (m_curr_metadata_name == BBS_SEAM_PAINTING_VERSION) { m_seam_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_seam_painting_version, SEAM_PAINTING_VERSION, - _(L("The selected 3MF contains seam painted object using a newer version of OrcaSlicer and is not compatible."))); + _(L("The selected 3MF contains seam painted object using a newer version of BambuStudio and is not compatible."))); } else if (m_curr_metadata_name == BBS_MM_PAINTING_VERSION) { m_mm_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_mm_painting_version, MM_PAINTING_VERSION, - _(L("The selected 3MF contains multi-material painted object using a newer version of OrcaSlicer and is not compatible.")));*/ + _(L("The selected 3MF contains multi-material painted object using a newer version of BambuStudio and is not compatible.")));*/ } else if (m_curr_metadata_name == BBL_MODEL_ID_TAG) { m_model_id = xml_unescape(m_curr_characters); } else if (m_curr_metadata_name == BBL_MODEL_NAME_TAG) { @@ -3838,9 +3834,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { m_curr_plater->plate_index = atoi(value.c_str()); } - else if(key == PLATER_NAME_ATTR) - { - m_curr_plater->plate_name = value.c_str(); + else if (key == PLATER_NAME_ATTR) { + m_curr_plater->plate_name = xml_unescape(value.c_str()); } else if (key == LOCK_ATTR) { @@ -4548,7 +4543,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) TriangleMesh triangle_mesh(std::move(its), volume_data.mesh_stats); if (!m_is_bbl_3mf) { - // if the 3mf was not produced by OrcaSlicer and there is only one instance, + // if the 3mf was not produced by BambuStudio and there is only one instance, // bake the transformation into the geometry to allow the reload from disk command // to work properly if (object.instances.size() == 1) { @@ -5419,7 +5414,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } // Adds content types file ("[Content_Types].xml";). - // The content of this file is the same for each OrcaSlicer 3mf. + // The content of this file is the same for each BambuStudio 3mf. if (!_add_content_types_file_to_archive(archive)) { return false; } @@ -5774,7 +5769,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } // Adds relationships file ("_rels/.rels"). - // The content of this file is the same for each OrcaSlicer 3mf. + // The content of this file is the same for each BambuStudio 3mf. // The relationshis file contains a reference to the geometry file "3D/3dmodel.model", the name was chosen to be compatible with CURA. if (!_add_relationships_file_to_archive(archive, {}, {}, {}, temp_data, export_plate_idx)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", _add_relationships_file_to_archive failed\n"); @@ -5939,7 +5934,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) int i = 0; for (auto & path : targets) { for (auto & type : types) - stream << " \n"; + stream << " \n"; } } stream << ""; @@ -6074,8 +6069,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) date = date.substr(0, 10); metadata_item_map[BBL_CREATION_DATE_TAG] = date; metadata_item_map[BBL_MODIFICATION_TAG] = date; - //SoftFever: write BambuStudio tag to keep it compatible - metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % SLIC3R_APP_KEY % SLIC3R_VERSION).str(); } metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); @@ -7029,7 +7023,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << PLATE_TAG << ">\n"; //plate index stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATERID_ATTR << "\" " << VALUE_ATTR << "=\"" << plate_data->plate_index + 1 << "\"/>\n"; - stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATER_NAME_ATTR << "\" " << VALUE_ATTR << "=\"" << xml_escape(plate_data->plate_name) << "\"/>\n"; + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATER_NAME_ATTR << "\" " << VALUE_ATTR << "=\"" << xml_escape(plate_data->plate_name.c_str()) << "\"/>\n"; stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << LOCK_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha<< plate_data->locked<< "\"/>\n"; ConfigOption* bed_type_opt = plate_data->config.option("curr_bed_type"); t_config_enum_names bed_type_names = ConfigOptionEnum::get_enum_names(); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 991a0926d..223771568 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1,6 +1,3 @@ -#include "BoundingBox.hpp" -#include "Polygon.hpp" -#include "PrintConfig.hpp" #include "libslic3r.h" #include "I18N.hpp" #include "GCode.hpp" @@ -17,14 +14,11 @@ #include "libslic3r.h" #include "LocalesUtils.hpp" #include "libslic3r/format.hpp" -#include "Time.hpp" -#include "GCode/ExtrusionProcessor.hpp" + #include #include #include #include -#include -#include #include #include @@ -42,7 +36,7 @@ #include "SVG.hpp" #include -#include "calib.hpp" + // Intel redesigned some TBB interface considerably when merging TBB with their oneAPI set of libraries, see GH #7332. // We are using quite an old TBB 2017 U7. Before we update our build servers, let's use the old API, which is deprecated in up to date TBB. #if ! defined(TBB_VERSION_MAJOR) @@ -84,7 +78,7 @@ namespace Slic3r { static const float g_min_purge_volume = 100.f; static const float g_purge_volume_one_time = 135.f; static const int g_max_flush_count = 4; -// static const size_t g_max_label_object = 64; +static const size_t g_max_label_object = 64; Vec2d travel_point_1; Vec2d travel_point_2; @@ -298,11 +292,8 @@ static std::vector get_path_of_change_filament(const Print& print) /* Reduce feedrate a bit; travel speed is often too high to move on existing material. Too fast = ripping of existing material; too slow = short wipe path, thus more blob. */ - double _wipe_speed = gcodegen.config().get_abs_value("wipe_speed");// gcodegen.writer().config.travel_speed.value * 0.8; - if(gcodegen.config().role_based_wipe_speed) - _wipe_speed = gcodegen.writer().get_current_speed() / 60.0; - if(_wipe_speed < 10) - _wipe_speed = 10; + //OrcaSlicer + double wipe_speed = gcodegen.writer().config.travel_speed.value * gcodegen.config().wipe_speed.value / 100; // get the retraction length double length = toolchange @@ -311,9 +302,7 @@ static std::vector get_path_of_change_filament(const Print& print) // Shorten the retraction length by the amount already retracted before wipe. length *= (1. - gcodegen.writer().extruder()->retract_before_wipe()); - //SoftFever: allow 100% retract before wipe - if (length >= 0) - { + if (length >= 0) { /* Calculate how long we need to travel in order to consume the required amount of retraction. In other words, how far do we move in XY at wipe_speed for the time needed to consume retraction_length at retraction_speed? */ @@ -343,12 +332,7 @@ static std::vector get_path_of_change_filament(const Print& print) // add tag for processor gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start) + "\n"; //BBS: don't need to enable cooling makers when this is the last wipe. Because no more cooling layer will clean this "_WIPE" - //Softfever: - std::string cooling_mark = ""; - if (gcodegen.enable_cooling_markers() && !is_last) - cooling_mark = /*gcodegen.config().role_based_wipe_speed ? ";_EXTERNAL_PERIMETER" : */";_WIPE"; - - gcode += gcodegen.writer().set_speed(_wipe_speed * 60, "", cooling_mark); + gcode += gcodegen.writer().set_speed(wipe_speed * 60, "", (gcodegen.enable_cooling_markers() && !is_last) ? ";_WIPE" : ""); for (const Line& line : wipe_path.lines()) { double segment_length = line.length(); /* Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one @@ -597,10 +581,9 @@ static std::vector get_path_of_change_filament(const Print& print) gcode += tcr_gcode; check_add_eol(toolchange_gcode_str); - //SoftFever: set new PA for new filament - if (gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { + //OrcaSlicer: set new PA for new filament. BBS: never use for Bambu Printer + if (!gcodegen.is_BBL_Printer() && gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); - } // A phony move to the end position at the wipe tower. gcodegen.writer().travel_to_xy((end_pos + plate_origin_2d).cast()); @@ -832,7 +815,7 @@ std::vector GCode::collect_layers_to_print(const PrintObjec // first layer may result in skirt/brim in the air and maybe other issues. if (layers_to_print.size() == 1u) { if (!has_extrusions) - throw Slic3r::SlicingError(_(L("One object has empty initial layer and can't be printed. Please Cut the bottom or enable supports.")), object.id().id); + throw Slic3r::SlicingError(_(L("The following object(s) have empty initial layer and can't be printed. Please Cut the bottom or enable supports.")), object.id().id); } // In case there are extrusions on this layer, check there is a layer to lay it on. @@ -1065,7 +1048,7 @@ namespace DoExport { bool GCode::is_BBL_Printer() { if (m_curr_print) - return m_curr_print->is_BBL_printer(); + return m_curr_print->is_BBL_Printer(); return false; } @@ -1076,7 +1059,6 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu // BBS m_curr_print = print; - GCodeWriter::full_gcode_comment = print->config().gcode_comments; CNumericLocalesSetter locales_setter; // Does the file exist? If so, we hope that it is still valid. @@ -1084,7 +1066,6 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu return; BOOST_LOG_TRIVIAL(info) << boost::format("Will export G-code to %1% soon")%path; - GCodeProcessor::s_IsBBLPrinter = print->is_BBL_printer(); print->set_started(psGCodeExport); // check if any custom gcode contains keywords used by the gcode processor to @@ -1175,9 +1156,8 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu BOOST_LOG_TRIVIAL(info) << "Exporting G-code finished" << log_memory_info(); print->set_done(psGCodeExport); - - if(is_BBL_Printer()) - result->label_object_enabled = m_enable_exclude_object; + //BBS: set enable_label_object + result->label_object_enabled = m_enable_label_object; // Write the profiler measurements to file PROFILE_UPDATE(); @@ -1346,10 +1326,10 @@ namespace DoExport { print_statistics.clear(); print_statistics.total_toolchanges = std::max(0, wipe_tower_data.number_of_toolchanges); if (! extruders.empty()) { - std::pair out_filament_used_mm ("; filament used [mm] = ", 0); - std::pair out_filament_used_cm3("; filament used [cm3] = ", 0); - std::pair out_filament_used_g ("; filament used [g] = ", 0); - std::pair out_filament_cost ("; filament cost = ", 0); + //std::pair out_filament_used_mm ("; filament used [mm] = ", 0); + //std::pair out_filament_used_cm3("; filament used [cm3] = ", 0); + //std::pair out_filament_used_g ("; filament used [g] = ", 0); + //std::pair out_filament_cost ("; filament cost = ", 0); for (const Extruder &extruder : extruders) { double used_filament = extruder.used_filament() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] : 0.f); double extruded_volume = extruder.extruded_volume() + (has_wipe_tower ? wipe_tower_data.used_filament[extruder.id()] * 2.4052f : 0.f); // assumes 1.75mm filament diameter @@ -1369,14 +1349,14 @@ namespace DoExport { dst.first += buf; ++ dst.second; }; - append(out_filament_used_mm, "%.2lf", used_filament); - append(out_filament_used_cm3, "%.2lf", extruded_volume * 0.001); + //append(out_filament_used_mm, "%.2lf", used_filament); + //append(out_filament_used_cm3, "%.2lf", extruded_volume * 0.001); if (filament_weight > 0.) { print_statistics.total_weight = print_statistics.total_weight + filament_weight; - append(out_filament_used_g, "%.2lf", filament_weight); + //append(out_filament_used_g, "%.2lf", filament_weight); if (filament_cost > 0.) { print_statistics.total_cost = print_statistics.total_cost + filament_cost; - append(out_filament_cost, "%.2lf", filament_cost); + //append(out_filament_cost, "%.2lf", filament_cost); } } print_statistics.total_used_filament += used_filament; @@ -1384,12 +1364,12 @@ namespace DoExport { print_statistics.total_wipe_tower_filament += has_wipe_tower ? used_filament - extruder.used_filament() : 0.; print_statistics.total_wipe_tower_cost += has_wipe_tower ? (extruded_volume - extruder.extruded_volume())* extruder.filament_density() * 0.001 * extruder.filament_cost() * 0.001 : 0.; } - filament_stats_string_out += out_filament_used_mm.first; - filament_stats_string_out += "\n" + out_filament_used_cm3.first; - if (out_filament_used_g.second) - filament_stats_string_out += "\n" + out_filament_used_g.first; - if (out_filament_cost.second) - filament_stats_string_out += "\n" + out_filament_cost.first; + //filament_stats_string_out += out_filament_used_mm.first; + //filament_stats_string_out += "\n" + out_filament_used_cm3.first; + //if (out_filament_used_g.second) + //filament_stats_string_out += "\n" + out_filament_used_g.first; + //if (out_filament_cost.second) + // filament_stats_string_out += "\n" + out_filament_cost.first; } return filament_stats_string_out; } @@ -1467,23 +1447,15 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // modifies m_silent_time_estimator_enabled DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled); - const bool is_bbl_printers = print.is_BBL_printer(); - m_calib_config.clear(); // resets analyzer's tracking data m_last_height = 0.f; m_last_layer_z = 0.f; m_max_layer_z = 0.f; m_last_width = 0.f; - m_is_overhang_fan_on = false; - m_is_supp_interface_fan_on = false; #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_last_mm3_per_mm = 0.; #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING - m_fan_mover.release(); - - m_writer.set_is_bbl_machine(is_bbl_printers); - // How many times will be change_layer() called? // change_layer() in turn increments the progress bar status. m_layer_count = 0; @@ -1549,74 +1521,59 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write_format("; HEADER_BLOCK_START\n"); // Write information on the generator. - file.write_format("; generated by %s on %s\n", Slic3r::header_slic3r_generated().c_str(), Slic3r::Utils::local_timestamp().c_str()); - if (is_bbl_printers) - file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str()); + file.write_format("; %s\n", Slic3r::header_slic3r_generated().c_str()); + //BBS: total estimated printing time + file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str()); //BBS: total layer number file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Total_Layer_Number_Placeholder).c_str()); - m_enable_exclude_object = config().exclude_object; - //Orca: extra check for bbl printer - if (is_bbl_printers) { - if (print.extruders(true).size() == 1 && // Don't support multi-color - print.calib_params().mode == CalibMode::Calib_None) { // Don't support skipping in cali mode - // list all label_object_id with sorted order here - m_enable_exclude_object = true; - m_label_objects_ids.clear(); - m_label_objects_ids.reserve(print.num_object_instances()); - for (const PrintObject *print_object : print.objects()) - for (const PrintInstance &print_instance : print_object->instances()) - m_label_objects_ids.push_back(print_instance.model_instance->get_labeled_id()); + //BBS: judge whether support skipping, if yes, list all label_object_id with sorted order here + if (print.num_object_instances() <= g_max_label_object && //Don't support too many objects on one plate + print.calib_params().mode == CalibMode::Calib_None) { //Don't support skipping in cali mode + m_enable_label_object = true; + m_label_objects_ids.clear(); + m_label_objects_ids.reserve(print.num_object_instances()); + for (const PrintObject* print_object : print.objects()) + for (const PrintInstance& print_instance : print_object->instances()) + m_label_objects_ids.push_back(print_instance.model_instance->get_labeled_id()); - std::sort(m_label_objects_ids.begin(), m_label_objects_ids.end()); + std::sort(m_label_objects_ids.begin(), m_label_objects_ids.end()); - std::string objects_id_list = "; model label id: "; - for (auto it = m_label_objects_ids.begin(); it != m_label_objects_ids.end(); it++) - objects_id_list += (std::to_string(*it) + (it != m_label_objects_ids.end() - 1 ? "," : "\n")); - file.writeln(objects_id_list); - } else { - m_enable_exclude_object = false; - m_label_objects_ids.clear(); - } + std::string objects_id_list = "; model label id: "; + for (auto it = m_label_objects_ids.begin(); it != m_label_objects_ids.end(); it++) + objects_id_list += (std::to_string(*it) + (it != m_label_objects_ids.end() - 1 ? "," : "\n")); + file.writeln(objects_id_list); + } + else { + m_enable_label_object = false; + m_label_objects_ids.clear(); } file.write_format("; HEADER_BLOCK_END\n\n"); - - // BBS: write global config at the beginning of gcode file because printer - // need these config information - // Append full config, delimited by two 'phony' configuration keys - // CONFIG_BLOCK_START and CONFIG_BLOCK_END. The delimiters are structured - // as configuration key / value pairs to be parsable by older versions of - // PrusaSlicer G-code viewer. + //BBS: write global config at the beginning of gcode file because printer need these config information + // Append full config, delimited by two 'phony' configuration keys CONFIG_BLOCK_START and CONFIG_BLOCK_END. + // The delimiters are structured as configuration key / value pairs to be parsable by older versions of PrusaSlicer G-code viewer. { - if (is_bbl_printers) { file.write("; CONFIG_BLOCK_START\n"); std::string full_config; append_full_config(print, full_config); if (!full_config.empty()) - file.write(full_config); - - // SoftFever: write compatiple image - int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); - file.write_format("; first_layer_bed_temperature = %d\n", - first_layer_bed_temperature); - file.write_format( - "; first_layer_temperature = %d\n", - print.config().nozzle_temperature_initial_layer.get_at(0)); + file.write(full_config); file.write("; CONFIG_BLOCK_END\n\n"); - } else { - DoExport::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - [&file](const char *sz) { file.write(sz); }, - [&print]() { print.throw_if_canceled(); }); - } } - + + //BBS: add plate id into thumbnail render logic + //DoExport::export_thumbnails_to_file(thumbnail_cb, print.get_plate_index(), THUMBNAIL_SIZE, + // [&file](const char* sz) { file.write(sz); }, + // [&print]() { print.throw_if_canceled(); }); + // Write some terse information on the slicing parameters. const PrintObject *first_object = print.objects().front(); const double layer_height = first_object->config().layer_height.value; const double initial_layer_print_height = print.config().initial_layer_print_height.value; + //BBS: remove useless information in gcode file +#if 0 for (size_t region_id = 0; region_id < print.num_print_regions(); ++ region_id) { const PrintRegion ®ion = print.get_print_region(region_id); file.write_format("; external perimeters extrusion width = %.2fmm\n", region.flow(*first_object, frExternalPerimeter, layer_height).width()); @@ -1630,11 +1587,14 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write_format("; first layer extrusion width = %.2fmm\n", region.flow(*first_object, frPerimeter, initial_layer_print_height, true).width()); file.write_format("\n"); } + print.throw_if_canceled(); +#endif file.write_format("; EXECUTABLE_BLOCK_START\n"); - // SoftFever - file.write(set_object_info(&print)); + // OrcaSlicer: Orca's implementation for skipping object, for klipper firmware printer only + if (this->config().exclude_object && print.config().gcode_flavor.value == gcfKlipper) + file.write(set_object_info(&print)); // adds tags for time estimators file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::First_Line_M73_Placeholder).c_str()); @@ -1768,7 +1728,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->print_machine_envelope(file, print); // Disable fan. - if (m_config.auxiliary_fan.value && print.config().close_fan_the_first_x_layers.get_at(initial_extruder_id)) { + if (print.config().close_fan_the_first_x_layers.get_at(initial_extruder_id)) { file.write(m_writer.set_fan(0)); //BBS: disable additional fan file.write(m_writer.set_additional_fan(0)); @@ -1789,55 +1749,35 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_placeholder_parser.set("has_wipe_tower", has_wipe_tower); //m_placeholder_parser.set("has_single_extruder_multi_material_priming", has_wipe_tower && print.config().single_extruder_multi_material_priming); m_placeholder_parser.set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change). - - // PlaceholderParser currently substitues non-existent vector values with the zero'th value, which is harmful in the - // case of "is_extruder_used[]" as Slicer may lie about availability of such non-existent extruder. We rather - // sacrifice 256B of memory before we change the behavior of the PlaceholderParser, which should really only fill in - // the non-existent vector elements for filament parameters. - std::vector is_extruder_used(std::max(size_t(255), print.config().filament_diameter.size()), 0); - for (unsigned int extruder : tool_ordering.all_extruders()) - is_extruder_used[extruder] = true; - m_placeholder_parser.set("is_extruder_used", new ConfigOptionBools(is_extruder_used)); - + Vec2f plate_offset = m_writer.get_xy_offset(); { - BoundingBoxf bbox_bed(print.config().printable_area.values); - m_placeholder_parser.set("print_bed_min", new ConfigOptionFloats({ bbox_bed.min.x(), bbox_bed.min.y()})); - m_placeholder_parser.set("print_bed_max", new ConfigOptionFloats({ bbox_bed.max.x(), bbox_bed.max.y()})); - m_placeholder_parser.set("print_bed_size", new ConfigOptionFloats({ bbox_bed.size().x(), bbox_bed.size().y() })); - - BoundingBoxf bbox; + BoundingBoxf bbox(print.config().printable_area.values); + m_placeholder_parser.set("print_bed_min", new ConfigOptionFloats({ bbox.min.x() - plate_offset.x(), bbox.min.y() - plate_offset.y() })); + m_placeholder_parser.set("print_bed_max", new ConfigOptionFloats({ bbox.max.x() - plate_offset.x(), bbox.max.y() - plate_offset.y() })); + m_placeholder_parser.set("print_bed_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() })); + } + { + // Convex hull of the 1st layer extrusions, for bed leveling and placing the initial purge line. + // It encompasses the object extrusions, support extrusions, skirt, brim, wipe tower. + // It does NOT encompass user extrusions generated by custom G-code, + // therefore it does NOT encompass the initial purge line. + // It does NOT encompass MMU/MMU2 starting (wipe) areas. auto pts = std::make_unique(); - if (print.calib_mode() == CalibMode::Calib_PA_Line || print.calib_mode() == CalibMode::Calib_PA_Pattern) { - bbox = bbox_bed; - bbox.offset(-5.0); - // add 4 corner points of bbox into pts - pts->values.reserve(4); - pts->values.emplace_back(bbox.min.x(), bbox.min.y()); - pts->values.emplace_back(bbox.max.x(), bbox.min.y()); - pts->values.emplace_back(bbox.max.x(), bbox.max.y()); - pts->values.emplace_back(bbox.min.x(), bbox.max.y()); - - } else { - // Convex hull of the 1st layer extrusions, for bed leveling and placing the initial purge line. - // It encompasses the object extrusions, support extrusions, skirt, brim, wipe tower. - // It does NOT encompass user extrusions generated by custom G-code, - // therefore it does NOT encompass the initial purge line. - // It does NOT encompass MMU/MMU2 starting (wipe) areas. - pts->values.reserve(print.first_layer_convex_hull().size()); - for (const Point &pt : print.first_layer_convex_hull().points) - pts->values.emplace_back(print.translate_to_print_space(pt)); - bbox = BoundingBoxf((pts->values)); - } - + pts->values.reserve(print.first_layer_convex_hull().size()); + for (const Point &pt : print.first_layer_convex_hull().points) + pts->values.emplace_back(unscale(pt)); + BoundingBoxf bbox(pts->values); m_placeholder_parser.set("first_layer_print_convex_hull", pts.release()); - m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({bbox.min.x(), bbox.min.y()})); - m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({bbox.max.x(), bbox.max.y()})); + m_placeholder_parser.set("first_layer_print_min", new ConfigOptionFloats({bbox.min.x() - plate_offset.x(), bbox.min.y() - plate_offset.y()})); + m_placeholder_parser.set("first_layer_print_max", new ConfigOptionFloats({bbox.max.x() - plate_offset.x(), bbox.max.y() - plate_offset.y()})); m_placeholder_parser.set("first_layer_print_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() })); } - float outer_wall_volumetric_speed = 0.0f; + { int curr_bed_type = m_config.curr_bed_type.getInt(); + int max_chamber_temp = *std::max_element(m_config.chamber_temperatures.values.begin(), m_config.chamber_temperatures.values.end()); + std::string first_layer_bed_temp_str; const ConfigOptionInts* first_bed_temp_opt = m_config.option(get_bed_temp_1st_layer_key((BedType)curr_bed_type)); const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key((BedType)curr_bed_type)); @@ -1846,29 +1786,25 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_placeholder_parser.set("bed_temperature", new ConfigOptionInts(*bed_temp_opt)); m_placeholder_parser.set("bed_temperature_initial_layer_single", new ConfigOptionInt(first_bed_temp_opt->get_at(initial_extruder_id))); m_placeholder_parser.set("bed_temperature_initial_layer_vector", new ConfigOptionString("")); - m_placeholder_parser.set("chamber_temperature",new ConfigOptionInts(m_config.chamber_temperature)); + m_placeholder_parser.set("chamber_temperature", new ConfigOptionInts({max_chamber_temp})); - // SoftFever: support variables `first_layer_temperature` and `first_layer_bed_temperature` + //support variables `first_layer_temperature` and `first_layer_bed_temperature` m_placeholder_parser.set("first_layer_bed_temperature", new ConfigOptionInts(*first_bed_temp_opt)); m_placeholder_parser.set("first_layer_temperature", new ConfigOptionInts(m_config.nozzle_temperature_initial_layer)); - m_placeholder_parser.set("max_print_height",new ConfigOptionInt(m_config.printable_height)); + m_placeholder_parser.set("max_print_height", new ConfigOptionInt(m_config.printable_height)); m_placeholder_parser.set("z_offset", new ConfigOptionFloat(0.0f)); m_placeholder_parser.set("plate_name", new ConfigOptionString(print.get_plate_name())); - m_placeholder_parser.set("first_layer_height", new ConfigOptionFloat(m_config.initial_layer_print_height.value)); - //BBS: calculate the volumetric speed of outer wall. Ignore pre-object setting and multi-filament, and just use the default setting { - float filament_max_volumetric_speed = m_config.option("filament_max_volumetric_speed")->get_at(initial_non_support_extruder_id); - const double nozzle_diameter = m_config.nozzle_diameter.get_at(initial_non_support_extruder_id); - float outer_wall_line_width = this->config().get_abs_value("outer_wall_line_width", nozzle_diameter); + float outer_wall_line_width = print.default_region_config().outer_wall_line_width.value; if (outer_wall_line_width == 0.0) { - float default_line_width = this->config().get_abs_value("line_width", nozzle_diameter); - outer_wall_line_width = default_line_width == 0.0 ? nozzle_diameter : default_line_width; + float default_line_width = print.default_object_config().line_width.value; + outer_wall_line_width = default_line_width == 0.0 ? m_config.nozzle_diameter.get_at(initial_non_support_extruder_id) : default_line_width; } Flow outer_wall_flow = Flow(outer_wall_line_width, m_config.layer_height, m_config.nozzle_diameter.get_at(initial_non_support_extruder_id)); float outer_wall_speed = print.default_region_config().outer_wall_speed.value; - outer_wall_volumetric_speed = outer_wall_speed * outer_wall_flow.mm3_per_mm(); + float outer_wall_volumetric_speed = outer_wall_speed * outer_wall_flow.mm3_per_mm(); if (outer_wall_volumetric_speed > filament_max_volumetric_speed) outer_wall_volumetric_speed = filament_max_volumetric_speed; m_placeholder_parser.set("outer_wall_volumetric_speed", new ConfigOptionFloat(outer_wall_volumetric_speed)); @@ -1882,21 +1818,15 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Set extruder(s) temperature before and after start G-code. this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, false); } - // adds tag for processor file.write_format(";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), ExtrusionEntity::role_to_string(erCustom).c_str()); // Write the custom start G-code file.writeln(machine_start_gcode); - //BBS: gcode writer doesn't know where the real position of extruder is after inserting custom gcode m_writer.set_current_position_clear(false); m_start_gcode_filament = GCodeProcessor::get_gcode_last_filament(machine_start_gcode); - //flush FanMover buffer to avoid modifying the start gcode if it's manual. - if (!machine_start_gcode.empty() && this->m_fan_mover.get() != nullptr) - file.write(this->m_fan_mover.get()->process_gcode("", true)); - // Process filament-specific gcode. /* if (has_wipe_tower) { // Wipe tower will control the extruder switching, it will call the filament_start_gcode. @@ -1906,8 +1836,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.writeln(this->placeholder_parser_process("filament_start_gcode", print.config().filament_start_gcode.values[initial_extruder_id], initial_extruder_id, &config)); } */ - if (is_bbl_printers) - this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, true); + this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, true); print.throw_if_canceled(); // Set other general things. @@ -1949,53 +1878,50 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } if (this->m_objsWithBrim.empty() && this->m_objSupportsWithBrim.empty()) m_brim_done = true; - // SoftFever: calib + // OrcaSlicer: calib if (print.calib_params().mode == CalibMode::Calib_PA_Line) { std::string gcode; if ((m_config.default_acceleration.value > 0 && m_config.outer_wall_acceleration.value > 0)) { - gcode += m_writer.set_acceleration((unsigned int)floor(m_config.outer_wall_acceleration.value + 0.5)); + gcode += m_writer.set_acceleration((unsigned int) floor(m_config.outer_wall_acceleration.value + 0.5)); } - if (m_config.default_jerk.value > 0) { + if (m_config.default_jerk.value > 0 && !this->is_BBL_Printer()) { double jerk = m_config.outer_wall_jerk.value; gcode += m_writer.set_jerk_xy(jerk); } - auto params = print.calib_params(); - CalibPressureAdvanceLine pa_test(this); - - auto fast_speed = CalibPressureAdvance::find_optimal_PA_speed(print.full_print_config(), pa_test.line_width(), 0.2); - auto slow_speed = std::max(20.0, fast_speed / 10.0); - + double filament_max_volumetric_speed = m_config.option("filament_max_volumetric_speed")->get_at(initial_extruder_id); + Flow pattern_line = Flow(pa_test.line_width(), 0.2, m_config.nozzle_diameter.get_at(0)); + auto fast_speed = std::min(print.default_region_config().outer_wall_speed.value, filament_max_volumetric_speed / pattern_line.mm3_per_mm()); + auto slow_speed = std::max(20.0, fast_speed / 10.0); pa_test.set_speed(fast_speed, slow_speed); pa_test.draw_numbers() = print.calib_params().print_numbers; - + auto params = print.calib_params(); gcode += pa_test.generate_test(params.start, params.step, std::llround(std::ceil((params.end - params.start) / params.step))); file.write(gcode); - } else { - //BBS: open spaghetti detector - if (is_bbl_printers) { - // if (print.config().spaghetti_detector.value) - file.write("M981 S1 P20000 ;open spaghetti detector\n"); - } + } + else { + // BBS: open spaghetti detector + // if (print.config().spaghetti_detector.value) + if (print.is_BBL_Printer()) file.write("M981 S1 P20000 ;open spaghetti detector\n"); // Do all objects for each layer. if (print.config().print_sequence == PrintSequence::ByObject && !has_wipe_tower) { - size_t finished_objects = 0; - const PrintObject *prev_object = (*print_object_instance_sequential_active)->print_object; - for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++ print_object_instance_sequential_active) { + size_t finished_objects = 0; + const PrintObject *prev_object = (*print_object_instance_sequential_active)->print_object; + for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++print_object_instance_sequential_active) { const PrintObject &object = *(*print_object_instance_sequential_active)->print_object; if (&object != prev_object || tool_ordering.first_extruder() != final_extruder_id) { - tool_ordering = ToolOrdering(object, final_extruder_id); + tool_ordering = ToolOrdering(object, final_extruder_id); unsigned int new_extruder_id = tool_ordering.first_extruder(); - if (new_extruder_id == (unsigned int)-1) + if (new_extruder_id == (unsigned int) -1) // Skip this object. continue; initial_extruder_id = new_extruder_id; final_extruder_id = tool_ordering.last_extruder(); - assert(final_extruder_id != (unsigned int)-1); + assert(final_extruder_id != (unsigned int) -1); } print.throw_if_canceled(); this->set_origin(unscale((*print_object_instance_sequential_active)->shift)); @@ -2009,12 +1935,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_avoid_crossing_perimeters.use_external_mp_once(); // BBS. change tool before moving to origin point. if (m_writer.need_toolchange(initial_extruder_id)) { - const PrintObjectConfig& object_config = object.config(); - coordf_t initial_layer_print_height = print.config().initial_layer_print_height.value; + const PrintObjectConfig &object_config = object.config(); + coordf_t initial_layer_print_height = print.config().initial_layer_print_height.value; file.write(this->set_extruder(initial_extruder_id, initial_layer_print_height)); prime_extruder = true; - } - else { + } else { file.write(this->retract()); } file.write(m_writer.travel_to_z(m_max_layer_z)); @@ -2026,8 +1951,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // another one, set first layer temperatures. This happens before the Z move // is triggered, so machine has more time to reach such temperatures. m_placeholder_parser.set("current_object_idx", int(finished_objects)); - //BBS: remove printing_by_object_gcode - //std::string printing_by_object_gcode = this->placeholder_parser_process("printing_by_object_gcode", print.config().printing_by_object_gcode.value, initial_extruder_id); + // BBS: remove printing_by_object_gcode + // std::string printing_by_object_gcode = this->placeholder_parser_process("printing_by_object_gcode", print.config().printing_by_object_gcode.value, + // initial_extruder_id); std::string printing_by_object_gcode; // Set first layer bed and extruder temperatures, don't wait for it to reach the temperature. this->_print_first_layer_bed_temperature(file, print, printing_by_object_gcode, initial_extruder_id, false); @@ -2040,94 +1966,95 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Process all layers of a single object instance (sequential mode) with a parallel pipeline: // Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser // and export G-code into file. - this->process_layers(print, tool_ordering, collect_layers_to_print(object), *print_object_instance_sequential_active - object.instances().data(), file, prime_extruder); - //BBS: close powerlost recovery + this->process_layers(print, tool_ordering, collect_layers_to_print(object), *print_object_instance_sequential_active - object.instances().data(), file, + prime_extruder); + // BBS: close powerlost recovery { - if (is_bbl_printers && m_second_layer_things_done) { + if (m_second_layer_things_done && print.is_BBL_Printer()) { file.write("; close powerlost recovery\n"); file.write("M1003 S0\n"); } } - #ifdef HAS_PRESSURE_EQUALIZER - if (m_pressure_equalizer) - file.write(m_pressure_equalizer->process("", true)); - #endif /* HAS_PRESSURE_EQUALIZER */ - ++ finished_objects; +#ifdef HAS_PRESSURE_EQUALIZER + if (m_pressure_equalizer) file.write(m_pressure_equalizer->process("", true)); +#endif /* HAS_PRESSURE_EQUALIZER */ + ++finished_objects; // Flag indicating whether the nozzle temperature changes from 1st to 2nd layer were performed. // Reset it when starting another object from 1st layer. m_second_layer_things_done = false; - prev_object = &object; + prev_object = &object; } } else { // Sort layers by Z. // All extrusion moves with the same top layer height are extruded uninterrupted. std::vector>> layers_to_print = collect_layers_to_print(print); // Prusa Multi-Material wipe tower. - if (has_wipe_tower && ! layers_to_print.empty()) { - m_wipe_tower.reset(new WipeTowerIntegration(print.config(), print.get_plate_index(), print.get_plate_origin(), * print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); - //BBS - //file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); + if (has_wipe_tower && !layers_to_print.empty()) { + m_wipe_tower.reset(new WipeTowerIntegration(print.config(), print.get_plate_index(), print.get_plate_origin(), *print.wipe_tower_data().priming.get(), + print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); + // BBS + // file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); file.write(m_writer.travel_to_z(initial_layer_print_height, "Move to the first layer height")); - #if 0 - if (print.config().single_extruder_multi_material_priming) { - file.write(m_wipe_tower->prime(*this)); - // Verify, whether the print overaps the priming extrusions. - BoundingBoxf bbox_print(get_print_extrusions_extents(print)); - coordf_t twolayers_printz = ((layers_to_print.size() == 1) ? layers_to_print.front() : layers_to_print[1]).first + EPSILON; - for (const PrintObject *print_object : print.objects()) - bbox_print.merge(get_print_object_extrusions_extents(*print_object, twolayers_printz)); - bbox_print.merge(get_wipe_tower_extrusions_extents(print, twolayers_printz)); - BoundingBoxf bbox_prime(get_wipe_tower_priming_extrusions_extents(print)); - bbox_prime.offset(0.5f); - bool overlap = bbox_prime.overlap(bbox_print); +#if 0 + if (print.config().single_extruder_multi_material_priming) { + file.write(m_wipe_tower->prime(*this)); + // Verify, whether the print overaps the priming extrusions. + BoundingBoxf bbox_print(get_print_extrusions_extents(print)); + coordf_t twolayers_printz = ((layers_to_print.size() == 1) ? layers_to_print.front() : layers_to_print[1]).first + EPSILON; + for (const PrintObject *print_object : print.objects()) + bbox_print.merge(get_print_object_extrusions_extents(*print_object, twolayers_printz)); + bbox_print.merge(get_wipe_tower_extrusions_extents(print, twolayers_printz)); + BoundingBoxf bbox_prime(get_wipe_tower_priming_extrusions_extents(print)); + bbox_prime.offset(0.5f); + bool overlap = bbox_prime.overlap(bbox_print); - if (print.config().gcode_flavor == gcfMarlinLegacy || print.config().gcode_flavor == gcfMarlinFirmware) { - file.write(this->retract()); - file.write("M300 S800 P500\n"); // Beep for 500ms, tone 800Hz. - if (overlap) { - // Wait for the user to remove the priming extrusions. - file.write("M1 Remove priming towers and click button.\n"); - } else { - // Just wait for a bit to let the user check, that the priming succeeded. - //TODO Add a message explaining what the printer is waiting for. This needs a firmware fix. - file.write("M1 S10\n"); - } + if (print.config().gcode_flavor == gcfMarlinLegacy || print.config().gcode_flavor == gcfMarlinFirmware) { + file.write(this->retract()); + file.write("M300 S800 P500\n"); // Beep for 500ms, tone 800Hz. + if (overlap) { + // Wait for the user to remove the priming extrusions. + file.write("M1 Remove priming towers and click button.\n"); + } else { + // Just wait for a bit to let the user check, that the priming succeeded. + //TODO Add a message explaining what the printer is waiting for. This needs a firmware fix. + file.write("M1 S10\n"); } - //BBS: only support Marlin - //else { - // This is not Marlin, M1 command is probably not supported. - //if (overlap) { - // print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, - // _(L("Your print is very close to the priming regions. " - // "Make sure there is no collision."))); - //} else { - // // Just continue printing, no action necessary. - //} - //} } - #endif + //BBS: only support Marlin + //else { + // This is not Marlin, M1 command is probably not supported. + //if (overlap) { + // print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, + // _(L("Your print is very close to the priming regions. " + // "Make sure there is no collision."))); + //} else { + // // Just continue printing, no action necessary. + //} + //} + } +#endif print.throw_if_canceled(); } // Process all layers of all objects (non-sequential mode) with a parallel pipeline: // Generate G-code, run the filters (vase mode, cooling buffer), run the G-code analyser // and export G-code into file. this->process_layers(print, tool_ordering, print_object_instances_ordering, layers_to_print, file); - //BBS: close powerlost recovery + // BBS: close powerlost recovery { - if (is_bbl_printers && m_second_layer_things_done) { + if (m_second_layer_things_done && print.is_BBL_Printer()) { file.write("; close powerlost recovery\n"); file.write("M1003 S0\n"); } } - #ifdef HAS_PRESSURE_EQUALIZER - if (m_pressure_equalizer) - file.write(m_pressure_equalizer->process("", true)); - #endif /* HAS_PRESSURE_EQUALIZER */ +#ifdef HAS_PRESSURE_EQUALIZER + if (m_pressure_equalizer) file.write(m_pressure_equalizer->process("", true)); +#endif /* HAS_PRESSURE_EQUALIZER */ if (m_wipe_tower) // Purge the extruder, pull out the active filament. file.write(m_wipe_tower->finalize(*this)); } } + //BBS: the last retraction // Write end commands to file. file.write(this->retract(false, true)); @@ -2141,14 +2068,12 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write(m_writer.set_fan(0)); //BBS: make sure the additional fan is closed when end - if(m_config.auxiliary_fan.value) - file.write(m_writer.set_additional_fan(0)); - if (is_bbl_printers) { - //BBS: close spaghetti detector - //Note: M981 is also used to tell xcam the last layer is finished, so we need always send it even if spaghetti option is disabled. - //if (print.config().spaghetti_detector.value) + file.write(m_writer.set_additional_fan(0)); + //BBS: close spaghetti detector + //Note: M981 is also used to tell xcam the last layer is finished, so we need always send it even if spaghetti option is disabled. + //if (print.config().spaghetti_detector.value) + if (print.is_BBL_Printer()) file.write("M981 S0 P20000 ; close spaghetti detector\n"); - } // adds tag for processor file.write_format(";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), ExtrusionEntity::role_to_string(erCustom).c_str()); @@ -2191,41 +2116,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_writer.extruders(), // Modifies print.m_print_statistics)); - if (!is_bbl_printers) { - file.write_format("; total filament used [g] = %.2lf\n", - print.m_print_statistics.total_weight); - file.write_format("; total filament cost = %.2lf\n", - print.m_print_statistics.total_cost); - if (print.m_print_statistics.total_toolchanges > 0) - file.write_format("; total filament change = %i\n", - print.m_print_statistics.total_toolchanges); - file.write_format("; total layers count = %i\n", m_layer_count); - file.write_format( - ";%s\n", - GCodeProcessor::reserved_tag( - GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder) - .c_str()); - file.write("\n"); - file.write("; CONFIG_BLOCK_START\n"); - std::string full_config; - append_full_config(print, full_config); - if (!full_config.empty()) - file.write(full_config); - - // SoftFever: write compatiple info - int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); - file.write_format("; first_layer_bed_temperature = %d\n", first_layer_bed_temperature); - file.write_format("; bed_shape = %s\n", print.full_print_config().opt_serialize("printable_area").c_str()); - file.write_format("; first_layer_temperature = %d\n", print.config().nozzle_temperature_initial_layer.get_at(0)); - file.write_format("; first_layer_height = %.3f\n", print.config().initial_layer_print_height.value); - - //SF TODO -// file.write_format("; variable_layer_height = %d\n", print.ad.adaptive_layer_height ? 1 : 0); - - file.write("; CONFIG_BLOCK_END\n\n"); - - } - file.write("\n"); + //file.write("\n"); + //file.write_format("; total filament weight [g] = %.2lf\n", print.m_print_statistics.total_weight); + //file.write_format("; total filament cost = %.2lf\n", print.m_print_statistics.total_cost); + //if (print.m_print_statistics.total_toolchanges > 0) + // file.write_format("; total filament change = %i\n", print.m_print_statistics.total_toolchanges); print.throw_if_canceled(); } @@ -2285,30 +2180,11 @@ void GCode::process_layers( [&output_stream](std::string s) { output_stream.write(s); } ); - const auto fan_mover = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order, - [&fan_mover = this->m_fan_mover, &config = this->config(), &writer = this->m_writer](std::string in)->std::string { - CNumericLocalesSetter locales_setter; - - if (config.fan_speedup_time.value != 0 || config.fan_kickstart.value > 0) { - if (fan_mover.get() == nullptr) - fan_mover.reset(new Slic3r::FanMover( - writer, - std::abs((float)config.fan_speedup_time.value), - config.fan_speedup_time.value > 0, - config.use_relative_e_distances.value, - config.fan_speedup_overhangs.value, - (float)config.fan_kickstart.value)); - //flush as it's a whole layer - return fan_mover->process_gcode(in, true); - } - return in; - }); - // The pipeline elements are joined using const references, thus no copying is performed. if (m_spiral_vase) - tbb::parallel_pipeline(12, generator & spiral_mode & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & spiral_mode & cooling & output); else - tbb::parallel_pipeline(12, generator & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & cooling & output); } // Process all layers of a single object instance (sequential mode) with a parallel pipeline: @@ -2352,29 +2228,11 @@ void GCode::process_layers( [&output_stream](std::string s) { output_stream.write(s); } ); - const auto fan_mover = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order, - [&fan_mover = this->m_fan_mover, &config = this->config(), &writer = this->m_writer](std::string in)->std::string { - - if (config.fan_speedup_time.value != 0 || config.fan_kickstart.value > 0) { - if (fan_mover.get() == nullptr) - fan_mover.reset(new Slic3r::FanMover( - writer, - std::abs((float)config.fan_speedup_time.value), - config.fan_speedup_time.value > 0, - config.use_relative_e_distances.value, - config.fan_speedup_overhangs.value, - (float)config.fan_kickstart.value)); - //flush as it's a whole layer - return fan_mover->process_gcode(in, true); - } - return in; - }); - // The pipeline elements are joined using const references, thus no copying is performed. if (m_spiral_vase) - tbb::parallel_pipeline(12, generator & spiral_mode & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & spiral_mode & cooling & output); else - tbb::parallel_pipeline(12, generator & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & cooling & output); } std::string GCode::placeholder_parser_process(const std::string &name, const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override) @@ -2464,45 +2322,40 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc // Do not process this piece of G-code by the time estimator, it already knows the values through another sources. void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print) { - const auto flavor = print.config().gcode_flavor.value; - if (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware) { - int factor = flavor == gcfRepRapFirmware ? 60 : 1; // RRF M203 and M566 are in mm/min + if (print.config().gcode_flavor.value == gcfMarlinLegacy || print.config().gcode_flavor.value == gcfMarlinFirmware) { file.write_format("M201 X%d Y%d Z%d E%d\n", int(print.config().machine_max_acceleration_x.values.front() + 0.5), int(print.config().machine_max_acceleration_y.values.front() + 0.5), int(print.config().machine_max_acceleration_z.values.front() + 0.5), int(print.config().machine_max_acceleration_e.values.front() + 0.5)); file.write_format("M203 X%d Y%d Z%d E%d\n", - int(print.config().machine_max_speed_x.values.front() * factor + 0.5), - int(print.config().machine_max_speed_y.values.front() * factor + 0.5), - int(print.config().machine_max_speed_z.values.front() * factor + 0.5), - int(print.config().machine_max_speed_e.values.front() * factor + 0.5)); + int(print.config().machine_max_speed_x.values.front() + 0.5), + int(print.config().machine_max_speed_y.values.front() + 0.5), + int(print.config().machine_max_speed_z.values.front() + 0.5), + int(print.config().machine_max_speed_e.values.front() + 0.5)); // Now M204 - acceleration. This one is quite hairy thanks to how Marlin guys care about // Legacy Marlin should export travel acceleration the same as printing acceleration. // MarlinFirmware has the two separated. - int travel_acc = flavor == gcfMarlinLegacy + int travel_acc = print.config().gcode_flavor == gcfMarlinLegacy ? int(print.config().machine_max_acceleration_extruding.values.front() + 0.5) : int(print.config().machine_max_acceleration_travel.values.front() + 0.5); - if (flavor == gcfRepRapFirmware) - file.write_format("M204 P%d T%d ; sets acceleration (P, T), mm/sec^2\n", - int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), - travel_acc); - else - file.write_format("M204 P%d R%d T%d\n", - int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), - int(print.config().machine_max_acceleration_retracting.values.front() + 0.5), - travel_acc); + file.write_format("M204 P%d R%d T%d\n", + int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), + int(print.config().machine_max_acceleration_retracting.values.front() + 0.5), + travel_acc); + assert(is_decimal_separator_point()); - file.write_format(flavor == gcfRepRapFirmware - ? "M566 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/min\n" - : "M205 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/sec\n", - print.config().machine_max_jerk_x.values.front() * factor, - print.config().machine_max_jerk_y.values.front() * factor, - print.config().machine_max_jerk_z.values.front() * factor, - print.config().machine_max_jerk_e.values.front() * factor); - + file.write_format("M205 X%.2lf Y%.2lf Z%.2lf E%.2lf\n", + print.config().machine_max_jerk_x.values.front(), + print.config().machine_max_jerk_y.values.front(), + print.config().machine_max_jerk_z.values.front(), + print.config().machine_max_jerk_e.values.front()); + //BBS: don't support M205 Sx Tx + //file.write_format("M205 S%d T%d\n", + // int(print.config().machine_min_extruding_rate.values.front() + 0.5), + // int(print.config().machine_min_travel_rate.values.front() + 0.5)); } } @@ -2815,15 +2668,15 @@ namespace Skirt { } // namespace Skirt -inline std::string get_instance_name(const PrintObject *object, size_t inst_id) { +inline std::string get_instance_name(const PrintObject* object, size_t inst_id) { auto obj_name = object->model_object()->name; // replace space in obj_name with '-' std::replace(obj_name.begin(), obj_name.end(), ' ', '_'); - return (boost::format("%1%_id_%2%_copy_%3%") % obj_name % object->get_id() % inst_id).str(); + return (boost::format("%1%_id_%2%_copy_%3%") % obj_name % object->get_klipper_object_id() % inst_id).str(); } -inline std::string get_instance_name(const PrintObject *object, const PrintInstance &inst) { +inline std::string get_instance_name(const PrintObject* object, const PrintInstance& inst) { return get_instance_name(object, inst.id); } @@ -2882,7 +2735,6 @@ GCode::LayerResult GCode::process_layer( //support is attached above the object, and support layers has independent layer height, then the lowest support //interface layer id is 0. bool first_layer = (layer.id() == 0 && abs(layer.bottom_z()) < EPSILON); - m_writer.set_is_first_layer(first_layer); unsigned int first_extruder_id = layer_tools.extruders.front(); // Initialize config with the 1st object to be printed at this layer. @@ -2914,7 +2766,7 @@ GCode::LayerResult GCode::process_layer( gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Layer_Change) + "\n"; // export layer z char buf[64]; - sprintf(buf, print.is_BBL_printer() ? "; Z_HEIGHT: %g\n" : ";Z:%g\n", print_z); + sprintf(buf, "; Z_HEIGHT: %g\n", print_z); gcode += buf; // export layer height float height = first_layer ? static_cast(print_z) : static_cast(print_z) - m_last_layer_z; @@ -2936,29 +2788,8 @@ GCode::LayerResult GCode::process_layer( + "\n"; } - if (print.calib_mode() == CalibMode::Calib_PA_Tower) { - gcode += writer().set_pressure_advance(print.calib_params().start + static_cast(print_z) * print.calib_params().step); - } else if (print.calib_mode() == CalibMode::Calib_Temp_Tower) { - auto offset = static_cast(print_z / 10.001) * 5; - gcode += writer().set_temperature(print.calib_params().start - offset); - } else if (print.calib_mode() == CalibMode::Calib_VFA_Tower) { - auto _speed = print.calib_params().start + std::floor(print_z / 5.0) * print.calib_params().step; - m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); - } else if (print.calib_mode() == CalibMode::Calib_Vol_speed_Tower) { - auto _speed = print.calib_params().start + print_z * print.calib_params().step; - m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); - } - else if (print.calib_mode() == CalibMode::Calib_Retraction_tower) { - auto _length = print.calib_params().start + std::floor(std::max(0.0,print_z-0.4)) * print.calib_params().step; - DynamicConfig _cfg; - _cfg.set_key_value("retraction_length", new ConfigOptionFloats{_length}); - writer().config.apply(_cfg); - sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length); - gcode += buf; - } - // BBS: don't use lazy_raise when enable spiral vase - gcode += this->change_layer(print_z, !m_spiral_vase); // this will increase m_layer_index + gcode += this->change_layer(print_z); // this will increase m_layer_index m_layer = &layer; m_object_layer_over_raft = false; if (! print.config().layer_change_gcode.value.empty()) { @@ -2970,43 +2801,70 @@ GCode::LayerResult GCode::process_layer( + "\n"; config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); } + //BBS: set layer time fan speed after layer change gcode + gcode += ";_SET_FAN_SPEED_CHANGING_LAYER\n"; + + if (print.calib_mode() == CalibMode::Calib_PA_Tower) { + gcode += writer().set_pressure_advance(print.calib_params().start + static_cast(print_z) * print.calib_params().step); + } + else if (print.calib_mode() == CalibMode::Calib_Temp_Tower) { + auto offset = static_cast(print_z / 10.001) * 5; + gcode += writer().set_temperature(print.calib_params().end - offset); + } + else if (print.calib_mode() == CalibMode::Calib_Vol_speed_Tower) { + auto _speed = print.calib_params().start + print_z * print.calib_params().step; + m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); + } + else if (print.calib_mode() == CalibMode::Calib_VFA_Tower) { + auto _speed = print.calib_params().start + std::floor(print_z / 5.0) * print.calib_params().step; + m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); + } + else if (print.calib_mode() == CalibMode::Calib_Retraction_tower) { + auto _length = print.calib_params().start + std::floor(std::max(0.0, print_z - 0.4)) * print.calib_params().step; + DynamicConfig _cfg; + _cfg.set_key_value("retraction_length", new ConfigOptionFloats{_length}); + writer().config.apply(_cfg); + sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length); + gcode += buf; + } //BBS if (first_layer) { + //BBS: set first layer global acceleration if (m_config.default_acceleration.value > 0 && m_config.initial_layer_acceleration.value > 0) { - gcode += m_writer.set_acceleration((unsigned int)floor(m_config.initial_layer_acceleration.value + 0.5)); + double acceleration = m_config.initial_layer_acceleration.value; + gcode += m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5)); } - if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0) { + if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0 && !this->is_BBL_Printer()) gcode += m_writer.set_jerk_xy(m_config.initial_layer_jerk.value); - } - } if (! first_layer && ! m_second_layer_things_done) { - if (print.is_BBL_printer()) { - // BBS: open powerlost recovery + //BBS: open powerlost recovery { - gcode += "; open powerlost recovery\n"; - gcode += "M1003 S1\n"; + if (print.is_BBL_Printer()) { + gcode += "; open powerlost recovery\n"; + gcode += "M1003 S1\n"; + } } // BBS: open first layer inspection at second layer if (print.config().scan_first_layer.value) { - // BBS: retract first to avoid droping when scan model - gcode += this->retract(); - gcode += "M976 S1 P1 ; scan model before printing 2nd layer\n"; - gcode += "M400 P100\n"; - gcode += this->unretract(); + // BBS: retract first to avoid droping when scan model + gcode += this->retract(); + gcode += "M976 S1 P1 ; scan model before printing 2nd layer\n"; + gcode += "M400 P100\n"; + gcode += this->unretract(); } - } - // BBS: reset acceleration at sencond layer - if (m_config.default_acceleration.value > 0 && m_config.initial_layer_acceleration.value > 0) { - gcode += m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5)); - } - if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0) { - gcode += m_writer.set_jerk_xy(m_config.default_jerk.value); - } + //BBS: reset acceleration at sencond layer + if (m_config.default_acceleration.value > 0 && m_config.initial_layer_acceleration.value > 0) { + double acceleration = m_config.default_acceleration.value; + gcode += m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5)); + } + + if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0 && !this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.default_jerk.value); // Transition from 1st to 2nd layer. Adjust nozzle temperatures as prescribed by the nozzle dependent // nozzle_temperature_initial_layer vs. temperature settings. @@ -3039,13 +2897,6 @@ GCode::LayerResult GCode::process_layer( Skirt::make_skirt_loops_per_extruder_1st_layer(print, layer_tools, m_skirt_done) : Skirt::make_skirt_loops_per_extruder_other_layers(print, layer_tools, m_skirt_done); - 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); - } - } - // Group extrusions by an extruder, then by an object, an island and a region. std::map> by_extruder; bool is_anything_overridden = const_cast(layer_tools).wiping_extrusions().is_anything_overridden(); @@ -3344,28 +3195,23 @@ GCode::LayerResult GCode::process_layer( m_object_layer_over_raft = object_layer_over_raft; if (m_config.reduce_crossing_wall) m_avoid_crossing_perimeters.init_layer(*m_layer); - - if (this->config().gcode_label_objects) { - gcode += std::string("; printing object ") + instance_to_print.print_object.model_object()->name + - " id:" + std::to_string(instance_to_print.print_object.get_id()) + " copy " + - std::to_string(inst.id) + "\n"; - } - // exclude objects - if (m_enable_exclude_object) { - if (is_BBL_Printer()) { - m_writer.set_object_start_str( - std::string("; start printing object, unique label id: ") + - std::to_string(instance_to_print.label_object_id) + "\n" + "M624 " + - _encode_label_ids_to_base64({instance_to_print.label_object_id}) + "\n"); - } else if (print.config().gcode_flavor.value == gcfKlipper) { - m_writer.set_object_start_str(std::string("EXCLUDE_OBJECT_START NAME=") + - get_instance_name(&instance_to_print.print_object, inst.id) + - "\n"); + if (m_enable_label_object) { + std::string start_str = std::string("; start printing object, unique label id: ") + std::to_string(instance_to_print.label_object_id) + "\n"; + if (print.is_BBL_Printer()) { + start_str += ("M624 " + _encode_label_ids_to_base64({ instance_to_print.label_object_id })); + start_str += "\n"; } + m_writer.set_object_start_str(start_str); } - - if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic) - m_extrusion_quality_estimator.set_current_object(&instance_to_print.print_object); + //Orca's implementation for skipping object, for klipper firmware printer only + bool reset_e = false; + if (this->config().exclude_object && print.config().gcode_flavor.value == gcfKlipper) { + gcode += std::string("EXCLUDE_OBJECT_START NAME=") + + get_instance_name(&instance_to_print.print_object, inst.id) + "\n"; + reset_e = true; + } + if (reset_e && !m_config.use_relative_e_distances) + gcode += m_writer.reset_e(true); // 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; @@ -3438,8 +3284,8 @@ GCode::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 = print.default_region_config().wall_infill_order == WallInfillOrder::InfillInnerOuter || - print.default_region_config().wall_infill_order == WallInfillOrder::InfillOuterInner; + bool is_infill_first = print.config().wall_infill_order == WallInfillOrder::InfillInnerOuter || + print.config().wall_infill_order == WallInfillOrder::InfillOuterInner; //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) { @@ -3452,27 +3298,23 @@ GCode::LayerResult GCode::process_layer( // ironing gcode += this->extrude_infill(print,by_region_specific, true); } - - if (this->config().gcode_label_objects) { - gcode += std::string("; stop printing object ") + - instance_to_print.print_object.model_object()->name + - " id:" + std::to_string(instance_to_print.print_object.get_id()) + " copy " + - std::to_string(inst.id) + "\n"; - } - // exclude objects // Don't set m_gcode_label_objects_end if you don't had to write the m_gcode_label_objects_start. - if (!m_writer.is_object_start_str_empty()) { + if (!m_writer.empty_object_start_str()) { m_writer.set_object_start_str(""); - } else if (m_enable_exclude_object) { - if (is_BBL_Printer()) { - m_writer.set_object_end_str(std::string("; stop printing object, unique label id: ") + - std::to_string(instance_to_print.label_object_id) + "\n" + - "M625\n"); - } else if (print.config().gcode_flavor.value == gcfKlipper) { - m_writer.set_object_end_str(std::string("EXCLUDE_OBJECT_END NAME=") + - get_instance_name(&instance_to_print.print_object, inst.id) + "\n"); - } + } else if (m_enable_label_object) { + std::string end_str = std::string("; stop printing object, unique label id: ") + std::to_string(instance_to_print.label_object_id) + "\n"; + if (print.is_BBL_Printer()) + end_str += "M625\n"; + m_writer.set_object_end_str(end_str); } + //Orca's implementation for skipping object, for klipper firmware printer only + if (this->config().exclude_object && print.config().gcode_flavor.value == gcfKlipper) { + gcode += std::string("EXCLUDE_OBJECT_END NAME=") + + get_instance_name(&instance_to_print.print_object, inst.id) + "\n"; + reset_e = true; + } + if (reset_e && !m_config.use_relative_e_distances) + gcode += m_writer.reset_e(true); } } } @@ -3530,17 +3372,9 @@ void GCode::append_full_config(const Print &print, std::string &str) auto is_banned = [](const std::string &key) { return std::binary_search(banned_keys.begin(), banned_keys.end(), key); }; - std::ostringstream ss; - for (const std::string& key : cfg.keys()) { - if (!is_banned(key) && !cfg.option(key)->is_nil()) { - if (key == "wipe_tower_x" || key == "wipe_tower_y") { - ss << std::fixed << std::setprecision(3) << "; " << key << " = " << dynamic_cast(cfg.option(key))->get_at(print.get_plate_index()) << "\n"; - } - else - ss << "; " << key << " = " << cfg.opt_serialize(key) << "\n"; - } - } - str += ss.str(); + for (const std::string &key : cfg.keys()) + if (! is_banned(key) && ! cfg.option(key)->is_nil()) + str += "; " + key + " = " + cfg.opt_serialize(key) + "\n"; } void GCode::set_extruders(const std::vector &extruder_ids) @@ -3583,7 +3417,7 @@ std::string GCode::preamble() } // called by GCode::process_layer() -std::string GCode::change_layer(coordf_t print_z, bool lazy_raise) +std::string GCode::change_layer(coordf_t print_z) { std::string gcode; if (m_layer_count > 0) @@ -3597,14 +3431,16 @@ std::string GCode::change_layer(coordf_t print_z, bool lazy_raise) //BBS: force to use SpiralLift when change layer if lift type is auto gcode += this->retract(false, false, ZHopType(EXTRUDER_CONFIG(z_hop_types)) == ZHopType::zhtAuto ? LiftType::SpiralLift : lift_type); } - + m_writer.add_object_change_labels(gcode); - if (!lazy_raise) { + if (m_spiral_vase) { + //BBS: force to normal lift immediately in spiral vase mode std::ostringstream comment; comment << "move to next layer (" << m_layer_index << ")"; gcode += m_writer.travel_to_z(z, comment.str()); - } else { + } + else { //BBS: set m_need_change_layer_lift_z to be true so that z lift can be done in travel_to() function m_need_change_layer_lift_z = true; } @@ -3657,8 +3493,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou if (!m_config.spiral_mode && description == "perimeter") { assert(m_layer != nullptr); bool is_outer_wall_first = m_config.wall_infill_order == WallInfillOrder::OuterInnerInfill - || m_config.wall_infill_order == WallInfillOrder::InfillOuterInner - || m_config.wall_infill_order == WallInfillOrder::InnerOuterInnerInfill; + || m_config.wall_infill_order == WallInfillOrder::InfillOuterInner; m_seam_placer.place_seam(m_layer, loop, is_outer_wall_first, this->last_pos()); } else loop.split_at(last_pos, false); @@ -3667,29 +3502,37 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // if polyline was shorter than the clipping distance we'd get a null polyline, so // we discard it in that case double clip_length = m_enable_loop_clipping ? - scale_(m_config.seam_gap.get_abs_value(EXTRUDER_CONFIG(nozzle_diameter))) : 0; + scale_(EXTRUDER_CONFIG(nozzle_diameter)) * ( m_config.seam_gap.value / 100 ) : + 0; // get paths ExtrusionPaths paths; loop.clip_end(clip_length, &paths); if (paths.empty()) return ""; - // SoftFever: check loop lenght for small perimeter. - double small_peri_speed = -1; - if (speed == -1 && loop.length() <= SMALL_PERIMETER_LENGTH(m_config.small_perimeter_threshold.value)) - small_peri_speed = m_config.small_perimeter_speed.get_abs_value(m_config.outer_wall_speed); + // BBS: remove small small_perimeter_speed config, and will absolutely + // remove related code if no other issue in the coming release. + // apply the small perimeter speed + //if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1) + // speed = m_config.small_perimeter_speed.get_abs_value(m_config.inner_wall_speed); // extrude along the path std::string gcode; - bool is_small_peri = false; for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) { // description += ExtrusionLoop::role_to_string(loop.loop_role()); // description += ExtrusionEntity::role_to_string(path->role); - // don't apply small perimeter setting for overhangs/bridges/non-perimeters - is_small_peri = is_perimeter(path->role()) && !is_bridge(path->role()) && small_peri_speed > 0 && (path->get_overhang_degree() == 0 || path->get_overhang_degree() > 5); - gcode += this->_extrude(*path, description, is_small_peri ? small_peri_speed : speed); + gcode += this->_extrude(*path, description, speed); } + //BBS: don't reset acceleration when printing first layer. During first layer, acceleration is always same value. + if (!this->on_first_layer()) { + // reset acceleration + gcode += m_writer.set_acceleration((unsigned int) (m_config.default_acceleration.value + 0.5)); + if (!this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.default_jerk.value); + } + + // BBS if (m_wipe.enable) { m_wipe.path = Polyline(); @@ -3703,50 +3546,45 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou } } - // make a little move inwards before leaving loop - if (m_config.wipe_on_loops.value && paths.back().role() == erExternalPerimeter && m_layer != NULL && m_config.wall_loops.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { - // detect angle between last and first segment - // the side depends on the original winding order of the polygon (left for contours, right for holes) - //FIXME improve the algorithm in case the loop is tiny. - //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query). - Point a = paths.front().polyline.points[1]; // second point - Point b = *(paths.back().polyline.points.end()-3); // second to last point - if (was_clockwise) { - // swap points - Point c = a; a = b; b = c; + //BBS. move the travel path before wipe to improve the seam + //// make a little move inwards before leaving loop + //if (paths.back().role() == erExternalPerimeter && m_layer != NULL && m_config.wall_loops.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { + // // detect angle between last and first segment + // // the side depends on the original winding order of the polygon (left for contours, right for holes) + // //FIXME improve the algorithm in case the loop is tiny. + // //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query). + // Point a = paths.front().polyline.points[1]; // second point + // Point b = *(paths.back().polyline.points.end()-3); // second to last point + // if (was_clockwise) { + // // swap points + // Point c = a; a = b; b = c; + // } // double angle = paths.front().first_point().ccw_angle(a, b) / 3; // // turn left if contour, turn right if hole // if (was_clockwise) angle *= -1; - } - - double angle = paths.front().first_point().ccw_angle(a, b) / 3; - - // turn left if contour, turn right if hole - if (was_clockwise) angle *= -1; - - // create the destination point along the first segment and rotate it - // we make sure we don't exceed the segment length because we don't know - // the rotation of the second segment so we might cross the object boundary - Vec2d p1 = paths.front().polyline.points.front().cast(); - Vec2d p2 = paths.front().polyline.points[1].cast(); - Vec2d v = p2 - p1; - double nd = scale_(EXTRUDER_CONFIG(nozzle_diameter)); - double l2 = v.squaredNorm(); - // Shift by no more than a nozzle diameter. - //FIXME Hiding the seams will not work nicely for very densely discretized contours! - //BBS. shorten the travel distant before the wipe path - double threshold = 0.2; - Point pt = (p1 + v * threshold).cast(); - if (nd * nd < l2) - pt = (p1 + threshold * v * (nd / sqrt(l2))).cast(); - //Point pt = ((nd * nd >= l2) ? (p1+v*0.4): (p1 + 0.2 * v * (nd / sqrt(l2)))).cast(); - pt.rotate(angle, paths.front().polyline.points.front()); - // generate the travel move - gcode += m_writer.extrude_to_xy(this->point_to_gcode(pt), 0,"move inwards before travel",true); - } + // // create the destination point along the first segment and rotate it + // // we make sure we don't exceed the segment length because we don't know + // // the rotation of the second segment so we might cross the object boundary + // Vec2d p1 = paths.front().polyline.points.front().cast(); + // Vec2d p2 = paths.front().polyline.points[1].cast(); + // Vec2d v = p2 - p1; + // double nd = scale_(EXTRUDER_CONFIG(nozzle_diameter)); + // double l2 = v.squaredNorm(); + // // Shift by no more than a nozzle diameter. + // //FIXME Hiding the seams will not work nicely for very densely discretized contours! + // //BBS. shorten the travel distant before the wipe path + // double threshold = 0.2; + // Point pt = (p1 + v * threshold).cast(); + // if (nd * nd < l2) + // pt = (p1 + threshold * v * (nd / sqrt(l2))).cast(); + // //Point pt = ((nd * nd >= l2) ? (p1+v*0.4): (p1 + 0.2 * v * (nd / sqrt(l2)))).cast(); + // pt.rotate(angle, paths.front().polyline.points.front()); + // // generate the travel move + // gcode += m_writer.travel_to_xy(this->point_to_gcode(pt), "move inwards before travel"); + //} return gcode; } @@ -3771,7 +3609,13 @@ std::string GCode::extrude_multi_path(ExtrusionMultiPath multipath, std::string } m_wipe.path.reverse(); } - + //BBS: don't reset acceleration when printing first layer. During first layer, acceleration is always same value. + if (!this->on_first_layer()) { + // reset acceleration + gcode += m_writer.set_acceleration((unsigned int) floor(m_config.default_acceleration.value + 0.5)); + if (!this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.default_jerk.value); + } return gcode; } @@ -3796,7 +3640,13 @@ std::string GCode::extrude_path(ExtrusionPath path, std::string description, dou m_wipe.path = std::move(path.polyline); m_wipe.path.reverse(); } - + //BBS: don't reset acceleration when printing first layer. During first layer, acceleration is always same value. + if (!this->on_first_layer()) { + // reset acceleration + gcode += m_writer.set_acceleration((unsigned int) floor(m_config.default_acceleration.value + 0.5)); + if (!this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.default_jerk.value); + } return gcode; } @@ -3986,6 +3836,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, // compensate retraction gcode += this->unretract(); m_config.apply(m_calib_config); + // adjust acceleration if (m_config.default_acceleration.value > 0) { double acceleration; @@ -3994,52 +3845,49 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, #if 0 } else if (this->object_layer_over_raft() && m_config.first_layer_acceleration_over_raft.value > 0) { acceleration = m_config.first_layer_acceleration_over_raft.value; + } else if (m_config.bridge_acceleration.value > 0 && is_bridge(path.role())) { + acceleration = m_config.bridge_acceleration.value; #endif - } else if (m_config.get_abs_value("bridge_acceleration") > 0 && is_bridge(path.role())) { - acceleration = m_config.get_abs_value("bridge_acceleration"); - } else if (m_config.get_abs_value("sparse_infill_acceleration") > 0 && (path.role() == erInternalInfill)) { - acceleration = m_config.get_abs_value("sparse_infill_acceleration"); - } else if (m_config.get_abs_value("internal_solid_infill_acceleration") > 0 && (path.role() == erSolidInfill)) { - acceleration = m_config.get_abs_value("internal_solid_infill_acceleration"); - } else if (m_config.outer_wall_acceleration.value > 0 && is_external_perimeter(path.role())) { + } else if (m_config.outer_wall_acceleration.value > 0 + //BBS: FIXME, in fact,we only need to set acceleration for outer wall. But we don't know + //whether the overhang perimeter is outer or not. So using specific acceleration together. + && (path.role() == erExternalPerimeter || path.role() == erOverhangPerimeter)) { acceleration = m_config.outer_wall_acceleration.value; - } else if (m_config.inner_wall_acceleration.value > 0 && is_internal_perimeter(path.role())) { - acceleration = m_config.inner_wall_acceleration.value; } else if (m_config.top_surface_acceleration.value > 0 && is_top_surface(path.role())) { acceleration = m_config.top_surface_acceleration.value; + } else if (m_config.inner_wall_acceleration.value > 0 && path.role() == erPerimeter) { + acceleration = m_config.inner_wall_acceleration.value; + } else if (m_config.get_abs_value("sparse_infill_acceleration") > 0 && (path.role() == erInternalInfill)) { + acceleration = m_config.get_abs_value("sparse_infill_acceleration"); } else { acceleration = m_config.default_acceleration.value; } gcode += m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5)); } - // adjust X Y jerk - if (m_config.default_jerk.value > 0) { - double jerk; - if (this->on_first_layer() && m_config.initial_layer_jerk.value > 0) { + if (m_config.default_jerk.value > 0 && !this->is_BBL_Printer()) { + double jerk = m_config.default_jerk.value; + if (this->on_first_layer() && m_config.initial_layer_jerk.value > 0) jerk = m_config.initial_layer_jerk.value; - } else if (m_config.outer_wall_jerk.value > 0 && is_external_perimeter(path.role())) { - jerk = m_config.outer_wall_jerk.value; - } else if (m_config.inner_wall_jerk.value > 0 && is_internal_perimeter(path.role())) { + else if (m_config.outer_wall_jerk.value > 0 && path.role() == erExternalPerimeter) + jerk = m_config.outer_wall_jerk.value; + else if (m_config.inner_wall_jerk.value > 0 && path.role() == erPerimeter) jerk = m_config.inner_wall_jerk.value; - } else if (m_config.top_surface_jerk.value > 0 && is_top_surface(path.role())) { - jerk = m_config.top_surface_jerk.value; - } else if (m_config.infill_jerk.value > 0 && is_infill(path.role())) { + else if (m_config.infill_jerk.value > 0 && is_infill(path.role())) jerk = m_config.infill_jerk.value; - } - else { - jerk = m_config.default_jerk.value; - } + else if (m_config.top_surface_jerk.value > 0 && is_top_surface(path.role())) + jerk = m_config.top_surface_jerk.value; + gcode += m_writer.set_jerk_xy(jerk); } + // calculate extrusion length per distance unit + auto _mm3_per_mm = path.mm3_per_mm * double(m_curr_print->calib_mode() == CalibMode::Calib_Flow_Rate ? this->config().print_flow_ratio.value : 1); // calculate extrusion length per distance unit - auto _mm3_per_mm = path.mm3_per_mm * this->config().print_flow_ratio; - if (path.role() == erTopSolidInfill) - _mm3_per_mm *= m_config.top_solid_infill_flow_ratio; - else if (path.role() == erBottomSurface) - _mm3_per_mm *= m_config.bottom_solid_infill_flow_ratio; - + if( path.role() == erTopSolidInfill ) + _mm3_per_mm *= m_config.top_solid_infill_flow_ratio.value; + else if (this->on_first_layer()) + _mm3_per_mm *= m_config.initial_layer_flow_ratio.value; double e_per_mm = m_writer.extruder()->e_per_mm3() * _mm3_per_mm; @@ -4049,22 +3897,17 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, int overhang_degree = path.get_overhang_degree(); if (path.role() == erPerimeter) { speed = m_config.get_abs_value("inner_wall_speed"); - if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value && overhang_degree > 0 && - overhang_degree <= 5) { + if (m_config.enable_overhang_speed.value && overhang_degree > 0 && overhang_degree <= 5) { double new_speed = m_config.get_abs_value(overhang_speed_key_map[overhang_degree].c_str()); speed = new_speed == 0.0 ? speed : new_speed; } } else if (path.role() == erExternalPerimeter) { speed = m_config.get_abs_value("outer_wall_speed"); - if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value && - overhang_degree > 0 && overhang_degree <= 5) { + if (m_config.enable_overhang_speed.value && overhang_degree > 0 && overhang_degree <= 5) { double new_speed = m_config.get_abs_value(overhang_speed_key_map[overhang_degree].c_str()); speed = new_speed == 0.0 ? speed : new_speed; } - } - else if(path.role() == erInternalBridgeInfill) { - speed = m_config.get_abs_value("internal_bridge_speed"); - } else if (path.role() == erOverhangPerimeter || path.role() == erSupportTransition || path.role() == erBridgeInfill) { + } else if (path.role() == erOverhangPerimeter || path.role() == erBridgeInfill || path.role() == erSupportTransition) { speed = m_config.get_abs_value("bridge_speed"); } else if (path.role() == erInternalInfill) { speed = m_config.get_abs_value("sparse_infill_speed"); @@ -4089,35 +3932,19 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } } //BBS: if not set the speed, then use the filament_max_volumetric_speed directly - if (speed == 0) - speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + if( speed == 0 ) + { + if (_mm3_per_mm>0) + speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + else + speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm; + } if (this->on_first_layer()) { //BBS: for solid infill of initial layer, speed can be higher as long as //wall lines have be attached if (path.role() != erBottomSurface) speed = m_config.get_abs_value("initial_layer_speed"); } - else if(m_config.slow_down_layers > 1){ - const auto _layer = layer_id() + 1; - if (_layer > 0 && _layer < m_config.slow_down_layers) { - const auto first_layer_speed = - is_perimeter(path.role()) - ? m_config.get_abs_value("initial_layer_speed") - : m_config.get_abs_value("initial_layer_infill_speed"); - if (first_layer_speed < speed) { - speed = std::min( - speed, - Slic3r::lerp(first_layer_speed, speed, - (double)_layer / m_config.slow_down_layers)); - } - } - } - // Override skirt speed if set - if (path.role() == erSkirt) { - const double skirt_speed = m_config.get_abs_value("skirt_speed"); - if (skirt_speed > 0.0) - speed = skirt_speed; - } //BBS: remove this config //else if (this->object_layer_over_raft()) // speed = m_config.get_abs_value("first_layer_speed_over_raft", speed); @@ -4125,60 +3952,34 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, // // cap speed with max_volumetric_speed anyway (even if user is not using autospeed) // speed = std::min( // speed, - // m_config.max_volumetric_speed.value / _mm3_per_mm + // m_config.max_volumetric_speed.value / path.mm3_per_mm // ); //} if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { + double extrude_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm; + if (_mm3_per_mm > 0) + extrude_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + // cap speed with max_volumetric_speed anyway (even if user is not using autospeed) - speed = std::min( - speed, - EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm - ); + speed = std::min(speed, extrude_speed); } - - - bool variable_speed = false; - std::vector new_points {}; - - if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic && !this->on_first_layer() && - (is_bridge(path.role()) || is_perimeter(path.role()))) { - ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13,12.99,0}); - ConfigOptionFloatsOrPercents dynamic_overhang_speeds( - {(m_config.get_abs_value("overhang_1_4_speed") < 0.5) - ? FloatOrPercent{100, true} - : FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed"), false}, - (m_config.get_abs_value("overhang_2_4_speed") < 0.5) - ? FloatOrPercent{100, true} - : FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed"), false}, - (m_config.get_abs_value("overhang_3_4_speed") < 0.5) - ? FloatOrPercent{100, true} - : FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed"), false}, - (m_config.get_abs_value("overhang_4_4_speed") < 0.5) - ? FloatOrPercent{100, true} - : FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed"), false}, - FloatOrPercent{m_config.get_abs_value("bridge_speed"), false}, - FloatOrPercent{m_config.get_abs_value("bridge_speed"), false}}); - - new_points = m_extrusion_quality_estimator.estimate_extrusion_quality( - path, overhang_overlap_levels, dynamic_overhang_speeds, m_config.get_abs_value("outer_wall_speed"), speed); - - variable_speed = std::any_of(new_points.begin(), new_points.end(), - [speed](const ProcessedPoint &p) { return p.speed != speed; }); - } - double F = speed * 60; // convert mm/sec to mm/min // extrude arc or line - if (m_enable_extrusion_role_markers) { - if (path.role() != m_last_extrusion_role) { - char buf[32]; - sprintf(buf, ";_EXTRUSION_ROLE:%d\n", int(path.role())); - gcode += buf; - } + if (m_enable_extrusion_role_markers) + { + if (path.role() != m_last_extrusion_role) + { + m_last_extrusion_role = path.role(); + if (m_enable_extrusion_role_markers) + { + char buf[32]; + sprintf(buf, ";_EXTRUSION_ROLE:%d\n", int(m_last_extrusion_role)); + gcode += buf; + } + } } - m_last_extrusion_role = path.role(); - // adds processor tags and updates processor tracking data // PrusaMultiMaterial::Writer may generate GCodeProcessor::Height_Tag lines without updating m_last_height // so, if the last role was erWipeTower we force export of GCodeProcessor::Height_Tag lines @@ -4212,202 +4013,106 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, gcode += buf; } - auto overhang_fan_threshold = EXTRUDER_CONFIG(overhang_fan_threshold); - auto enable_overhang_bridge_fan = EXTRUDER_CONFIG(enable_overhang_bridge_fan); - - auto supp_interface_fan_speed = EXTRUDER_CONFIG(support_material_interface_fan_speed); - - - // { "0%", Overhang_threshold_none }, - // { "5%", Overhang_threshold_1_4 }, - // { "25%", Overhang_threshold_2_4 }, - // { "50%", Overhang_threshold_3_4 }, - // { "75%", Overhang_threshold_4_4 }, - // { "95%", Overhang_threshold_bridge } - auto check_overhang_fan = [&overhang_fan_threshold](float overlap) { - switch (overhang_fan_threshold) { - case (int)Overhang_threshold_1_4: - return overlap <= 0.95f; - break; - case (int)Overhang_threshold_2_4: - return overlap <= 0.75f; - break; - case (int)Overhang_threshold_3_4: - return overlap <= 0.5f; - break; - case (int)Overhang_threshold_4_4: - return overlap <= 0.25f; - break; - case (int)Overhang_threshold_bridge: - return overlap <= 0.1f; - break; - case (int)Overhang_threshold_none: - return true; - break; - default: - return false; - } - }; - std::string comment; if (m_enable_cooling_markers) { - comment = ";_EXTRUDE_SET_SPEED"; - if (is_external_perimeter(path.role())) + if (EXTRUDER_CONFIG(enable_overhang_bridge_fan)) { + //BBS: Overhang_threshold_none means Overhang_threshold_1_4 and forcing cooling for all external perimeter + int overhang_threshold = EXTRUDER_CONFIG(overhang_fan_threshold) == Overhang_threshold_none ? + Overhang_threshold_none : EXTRUDER_CONFIG(overhang_fan_threshold) - 1; + if ((EXTRUDER_CONFIG(overhang_fan_threshold) == Overhang_threshold_none && path.role() == erExternalPerimeter)) { + gcode += ";_OVERHANG_FAN_START\n"; + comment = ";_EXTRUDE_SET_SPEED"; + } else if (path.get_overhang_degree() > overhang_threshold || + is_bridge(path.role())) + gcode += ";_OVERHANG_FAN_START\n"; + else + comment = ";_EXTRUDE_SET_SPEED"; + } + else { + comment = ";_EXTRUDE_SET_SPEED"; + } + + if (path.role() == erExternalPerimeter) comment += ";_EXTERNAL_PERIMETER"; } - if (!variable_speed) { - // F is mm per minute. - gcode += m_writer.set_speed(F, "", comment); - double path_length = 0.; - { - if (m_enable_cooling_markers) { - if (enable_overhang_bridge_fan) { - // BBS: Overhang_threshold_none means Overhang_threshold_1_4 and forcing cooling for all external - // perimeter - int overhang_threshold = overhang_fan_threshold == Overhang_threshold_none ? Overhang_threshold_none - : overhang_fan_threshold - 1; - if ((overhang_fan_threshold == Overhang_threshold_none && is_perimeter(path.role())) || - (path.get_overhang_degree() > overhang_threshold || is_bridge(path.role()))) { - if (!m_is_overhang_fan_on) { - gcode += ";_OVERHANG_FAN_START\n"; - m_is_overhang_fan_on = true; - } - } else { - if (m_is_overhang_fan_on) { - m_is_overhang_fan_on = false; - gcode += ";_OVERHANG_FAN_END\n"; - } - } - } - if (supp_interface_fan_speed >= 0 && path.role() == erSupportMaterialInterface) { - if (!m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_START\n"; - m_is_supp_interface_fan_on = true; - } - } else { - if (m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_END\n"; - m_is_supp_interface_fan_on = false; - } - } + // F is mm per minute. + gcode += m_writer.set_speed(F, "", comment); + double path_length = 0.; + { + std::string comment = GCodeWriter::full_gcode_comment ? description : ""; + //BBS: use G1 if not enable arc fitting or has no arc fitting result or in spiral_mode mode + //Attention: G2 and G3 is not supported in spiral_mode mode + if (!m_config.enable_arc_fitting || + path.polyline.fitting_result.empty() || + m_config.spiral_mode) { + for (const Line& line : path.polyline.lines()) { + const double line_length = line.length() * SCALING_FACTOR; + path_length += line_length; + gcode += m_writer.extrude_to_xy( + this->point_to_gcode(line.b), + e_per_mm * line_length, + comment); } - // BBS: use G1 if not enable arc fitting or has no arc fitting result or in spiral_mode mode - // Attention: G2 and G3 is not supported in spiral_mode mode - if (!m_config.enable_arc_fitting || path.polyline.fitting_result.empty() || m_config.spiral_mode) { - for (const Line& line : path.polyline.lines()) { - const double line_length = line.length() * SCALING_FACTOR; - path_length += line_length; - gcode += m_writer.extrude_to_xy( - this->point_to_gcode(line.b), - e_per_mm * line_length, - GCodeWriter::full_gcode_comment ? description : "", path.is_force_no_extrusion()); - } - } else { - // BBS: start to generate gcode from arc fitting data which includes line and arc - const std::vector& fitting_result = path.polyline.fitting_result; - for (size_t fitting_index = 0; fitting_index < fitting_result.size(); fitting_index++) { - switch (fitting_result[fitting_index].path_type) { - case EMovePathType::Linear_move: { - size_t start_index = fitting_result[fitting_index].start_point_index; - size_t end_index = fitting_result[fitting_index].end_point_index; - for (size_t point_index = start_index + 1; point_index < end_index + 1; point_index++) { - const Line line = Line(path.polyline.points[point_index - 1], path.polyline.points[point_index]); - const double line_length = line.length() * SCALING_FACTOR; - path_length += line_length; - gcode += m_writer.extrude_to_xy( - this->point_to_gcode(line.b), - e_per_mm * line_length, - GCodeWriter::full_gcode_comment ? description : "", path.is_force_no_extrusion()); - } - break; + } else { + // BBS: start to generate gcode from arc fitting data which includes line and arc + const std::vector& fitting_result = path.polyline.fitting_result; + for (size_t fitting_index = 0; fitting_index < fitting_result.size(); fitting_index++) { + switch (fitting_result[fitting_index].path_type) { + case EMovePathType::Linear_move: { + size_t start_index = fitting_result[fitting_index].start_point_index; + size_t end_index = fitting_result[fitting_index].end_point_index; + for (size_t point_index = start_index + 1; point_index < end_index + 1; point_index++) { + const Line line = Line(path.polyline.points[point_index - 1], path.polyline.points[point_index]); + const double line_length = line.length() * SCALING_FACTOR; + path_length += line_length; + gcode += m_writer.extrude_to_xy( + this->point_to_gcode(line.b), + e_per_mm * line_length, + comment, path.is_force_no_extrusion()); } - case EMovePathType::Arc_move_cw: - case EMovePathType::Arc_move_ccw: { - const ArcSegment& arc = fitting_result[fitting_index].arc_data; - const double arc_length = fitting_result[fitting_index].arc_data.length * SCALING_FACTOR; - const Vec2d center_offset = this->point_to_gcode(arc.center) - this->point_to_gcode(arc.start_point); - path_length += arc_length; - gcode += m_writer.extrude_arc_to_xy( + break; + } + case EMovePathType::Arc_move_cw: + case EMovePathType::Arc_move_ccw: { + const ArcSegment& arc = fitting_result[fitting_index].arc_data; + const double arc_length = fitting_result[fitting_index].arc_data.length * SCALING_FACTOR; + const Vec2d center_offset = this->point_to_gcode(arc.center) - this->point_to_gcode(arc.start_point); + path_length += arc_length; + gcode += m_writer.extrude_arc_to_xy( this->point_to_gcode(arc.end_point), center_offset, e_per_mm * arc_length, arc.direction == ArcDirection::Arc_Dir_CCW, - GCodeWriter::full_gcode_comment ? description : "", path.is_force_no_extrusion()); - break; - } - default: - // BBS: should never happen that a empty path_type has been stored - assert(0); - break; - } + comment, path.is_force_no_extrusion()); + break; + } + default: + //BBS: should never happen that a empty path_type has been stored + assert(0); + break; } } } - } else { - double last_set_speed = std::max((float)EXTRUDER_CONFIG(slow_down_min_speed), new_points[0].speed) * 60.0; - - gcode += m_writer.set_speed(last_set_speed, "", comment); - Vec2d prev = this->point_to_gcode_quantized(new_points[0].p); - bool pre_fan_enabled = false; - bool cur_fan_enabled = false; - if( m_enable_cooling_markers && enable_overhang_bridge_fan) - pre_fan_enabled = check_overhang_fan(new_points[0].overlap); - - for (size_t i = 1; i < new_points.size(); i++) { - const ProcessedPoint &processed_point = new_points[i]; - const ProcessedPoint &pre_processed_point = new_points[i-1]; - Vec2d p = this->point_to_gcode_quantized(processed_point.p); - if (m_enable_cooling_markers) { - if (enable_overhang_bridge_fan) { - cur_fan_enabled = check_overhang_fan(processed_point.overlap); - if (is_bridge(path.role()) || - (is_perimeter(path.role()) && - pre_fan_enabled && pre_fan_enabled)) { - if (!m_is_overhang_fan_on) { - gcode += ";_OVERHANG_FAN_START\n"; - m_is_overhang_fan_on = true; - } - } else { - if (m_is_overhang_fan_on) { - m_is_overhang_fan_on = false; - gcode += ";_OVERHANG_FAN_END\n"; - } - } - pre_fan_enabled = cur_fan_enabled; - } - if (supp_interface_fan_speed >= 0 && path.role() == erSupportMaterialInterface) { - if (!m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_START\n"; - m_is_supp_interface_fan_on = true; - } - } else { - if (m_is_supp_interface_fan_on) { - gcode += ";_SUPP_INTERFACE_FAN_END\n"; - m_is_supp_interface_fan_on = false; - } - } - } - - const double line_length = (p - prev).norm(); - double new_speed = std::max((float)EXTRUDER_CONFIG(slow_down_min_speed), pre_processed_point.speed) * 60.0; - if (last_set_speed != new_speed) { - gcode += m_writer.set_speed(new_speed, "", comment); - last_set_speed = new_speed; - } - gcode += - m_writer.extrude_to_xy(p, e_per_mm * line_length, GCodeWriter::full_gcode_comment ? description : ""); - - prev = p; - - } } if (m_enable_cooling_markers) { - gcode += ";_EXTRUDE_END\n"; - } + if (EXTRUDER_CONFIG(enable_overhang_bridge_fan)) { + //BBS: Overhang_threshold_none means Overhang_threshold_1_4 and forcing cooling for all external perimeter + int overhang_threshold = EXTRUDER_CONFIG(overhang_fan_threshold) == Overhang_threshold_none ? + Overhang_threshold_none : EXTRUDER_CONFIG(overhang_fan_threshold) - 1; + if ((EXTRUDER_CONFIG(overhang_fan_threshold) == Overhang_threshold_none && path.role() == erExternalPerimeter)) { + gcode += ";_EXTRUDE_END\n"; + gcode += ";_OVERHANG_FAN_END\n"; - if (path.role() != ExtrusionRole::erGapFill) { - m_last_notgapfill_extrusion_role = path.role(); + } else if (path.get_overhang_degree() > overhang_threshold || + is_bridge(path.role())) + gcode += ";_OVERHANG_FAN_END\n"; + else + gcode += ";_EXTRUDE_END\n"; + } + else { + gcode += ";_EXTRUDE_END\n"; + } } this->set_last_pos(path.last_point()); @@ -4460,25 +4165,7 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string bool could_be_wipe_disabled = false; // Save state of use_external_mp_once for the case that will be needed to call twice m_avoid_crossing_perimeters.travel_to. const bool used_external_mp_once = m_avoid_crossing_perimeters.used_external_mp_once(); - std::string gcode; - // SoftFever - if (this->on_first_layer()) { - if (m_config.default_acceleration.value > 0 && m_config.initial_layer_acceleration.value > 0) { - gcode += m_writer.set_acceleration((unsigned int)floor(m_config.initial_layer_acceleration.value + 0.5)); - } - if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0) { - gcode += m_writer.set_jerk_xy(m_config.initial_layer_jerk.value); - } - } else { - if (m_config.default_acceleration.value > 0 && m_config.travel_acceleration.value > 0) { - gcode += m_writer.set_acceleration((unsigned int)floor(m_config.travel_acceleration.value + 0.5)); - } - - if (m_config.default_jerk.value > 0 && m_config.travel_jerk.value > 0) { - gcode += m_writer.set_jerk_xy(m_config.travel_jerk.value); - } - } // if a retraction would be needed, try to use reduce_crossing_wall to plan a // multi-hop travel path inside the configuration space if (needs_retraction @@ -4496,6 +4183,7 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string m_avoid_crossing_perimeters.reset_once_modifiers(); // generate G-code for the travel move + std::string gcode; if (needs_retraction) { if (m_config.reduce_crossing_wall && could_be_wipe_disabled) m_wipe.reset_path(); @@ -4523,19 +4211,27 @@ std::string GCode::travel_to(const Point &point, ExtrusionRole role, std::string // use G1 because we rely on paths being straight (G0 may make round paths) if (travel.size() >= 2) { + // OrcaSlicer + if (this->on_first_layer()) { + if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0 && !this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.initial_layer_jerk.value); + } else if (m_config.default_jerk.value > 0 && m_config.travel_jerk.value > 0 && !this->is_BBL_Printer()) + gcode += m_writer.set_jerk_xy(m_config.travel_jerk.value); + for (size_t i = 1; i < travel.size(); ++ i) { // BBS. Process lazy layer change, but don't do lazy layer change when enable spiral vase Vec3d curr_pos = m_writer.get_position(); if (i == 1 && !m_spiral_vase) { Vec2d dest2d = this->point_to_gcode(travel.points[i]); Vec3d dest3d(dest2d(0), dest2d(1), m_nominal_z); - gcode += m_writer.travel_to_xyz(dest3d, comment+" travel_to_xyz"); + gcode += m_writer.travel_to_xyz(dest3d, comment); } else { - gcode += m_writer.travel_to_xy(this->point_to_gcode(travel.points[i]), comment+" travel_to_xy"); + gcode += m_writer.travel_to_xy(this->point_to_gcode(travel.points[i]), comment); } } this->set_last_pos(travel.points.back()); } + return gcode; } @@ -4623,6 +4319,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp for (int i = 0; i < m_config.z_hop.size(); i++) max_z_hop = std::max(max_z_hop, (float)m_config.z_hop.get_at(i)); float travel_len_thresh = max_z_hop / tan(GCodeWriter::slope_threshold); + float accum_len = 0.f; Polyline clipped_travel; @@ -4698,35 +4395,10 @@ std::string GCode::retract(bool toolchange, bool is_last_retraction, LiftType li gcode += toolchange ? m_writer.retract_for_toolchange() : m_writer.retract(); gcode += m_writer.reset_e(); - - // check if should + can lift (roughly from SuperSlicer) - RetractLiftEnforceType retract_lift_type = RetractLiftEnforceType(EXTRUDER_CONFIG(retract_lift_enforce)); - - bool needs_lift = toolchange - || m_writer.extruder()->retraction_length() > 0 - || m_config.use_firmware_retraction; - - bool last_fill_extrusion_role_top_infill = (this->m_last_notgapfill_extrusion_role == ExtrusionRole::erTopSolidInfill || this->m_last_notgapfill_extrusion_role == ExtrusionRole::erIroning); - - // assume we can lift on retraction; conditions left explicit - bool can_lift = true; - - if (retract_lift_type == RetractLiftEnforceType::rletAllSurfaces) { - can_lift = true; - } - else if (this->m_layer_index == 0 && (retract_lift_type == RetractLiftEnforceType::rletBottomOnly || retract_lift_type == RetractLiftEnforceType::rletTopAndBottom)) { - can_lift = true; - } - else if (retract_lift_type == RetractLiftEnforceType::rletTopOnly || retract_lift_type == RetractLiftEnforceType::rletTopAndBottom) { - can_lift = last_fill_extrusion_role_top_infill; - } - else { - can_lift = false; - } - - if (needs_lift && can_lift) { - size_t extruder_id = m_writer.extruder()->id(); - gcode += m_writer.lift(!m_spiral_vase ? lift_type : LiftType::NormalLift); + //BBS + if (m_writer.extruder()->retraction_length() > 0) { + // BBS: force to use normal lift for spiral vase mode + gcode += m_writer.lift(lift_type, m_spiral_vase != nullptr); } return gcode; @@ -4749,9 +4421,9 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) gcode += this->placeholder_parser_process("filament_start_gcode", filament_start_gcode, extruder_id); check_add_eol(gcode); } - if (m_config.enable_pressure_advance.get_at(extruder_id)) { + //BBS: never use for Bambu Printer + if (!this->is_BBL_Printer() && m_config.enable_pressure_advance.get_at(extruder_id)) gcode += m_writer.set_pressure_advance(m_config.pressure_advance.get_at(extruder_id)); - } gcode += m_writer.toolchange(extruder_id); return gcode; @@ -4931,62 +4603,45 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) // Set the new extruder to the operating temperature. if (m_ooze_prevention.enable) gcode += m_ooze_prevention.post_toolchange(*this); - - if (m_config.enable_pressure_advance.get_at(extruder_id)) { + //BBS: never use for Bambu Printer + if (!this->is_BBL_Printer() && m_config.enable_pressure_advance.get_at(extruder_id)) gcode += m_writer.set_pressure_advance(m_config.pressure_advance.get_at(extruder_id)); - } return gcode; } -inline std::string polygon_to_string(const Polygon &polygon, Print *print, bool is_print_space = false) { +inline std::string polygon_to_string(const Polygon& polygon, Print* print) { std::ostringstream gcode; gcode << "["; - for (const Point &p : polygon.points) { - const auto v = is_print_space ? Vec2d(p.x(), p.y()) : print->translate_to_print_space(p); + for (const Point& p : polygon.points) { + const auto v = print->translate_to_print_space(p); gcode << "[" << v.x() << "," << v.y() << "],"; } - const auto first_v = is_print_space ? Vec2d(polygon.points.front().x(), polygon.points.front().y()) - : print->translate_to_print_space(polygon.points.front()); + const auto first_v = print->translate_to_print_space(polygon.points.front()); gcode << "[" << first_v.x() << "," << first_v.y() << "]"; gcode << "]"; return gcode.str(); } // this function iterator PrintObject and assign a seqential id to each object. // this id is used to generate unique object id for each object. -std::string GCode::set_object_info(Print *print) { +std::string GCode::set_object_info(Print* print) +{ std::ostringstream gcode; size_t object_id = 0; - // Orca: check if we are in pa calib mode - if (print->calib_mode() == CalibMode::Calib_PA_Line || print->calib_mode() == CalibMode::Calib_PA_Pattern) { - BoundingBoxf bbox_bed(print->config().printable_area.values); - bbox_bed.offset(-5.0); - Polygon polygon_bed; - polygon_bed.append(Point(bbox_bed.min.x(), bbox_bed.min.y())); - polygon_bed.append(Point(bbox_bed.max.x(), bbox_bed.min.y())); - polygon_bed.append(Point(bbox_bed.max.x(), bbox_bed.max.y())); - polygon_bed.append(Point(bbox_bed.min.x(), bbox_bed.max.y())); - gcode << "EXCLUDE_OBJECT_DEFINE NAME=" - << "Orca-PA-Calibration-Test" - << " CENTER=" << 0 << "," << 0 << " POLYGON=" << polygon_to_string(polygon_bed, print, true) << "\n"; - } else { - for (PrintObject *object : print->objects()) { - object->set_id(object_id++); - size_t inst_id = 0; - for (PrintInstance &inst : object->instances()) { - inst.id = inst_id++; - if (this->config().exclude_object && print->config().gcode_flavor.value == gcfKlipper) { - auto bbox = inst.get_bounding_box(); - auto center = print->translate_to_print_space(Vec2d(bbox.center().x(), bbox.center().y())); - - gcode << "EXCLUDE_OBJECT_DEFINE NAME=" << get_instance_name(object, inst) - << " CENTER=" << center.x() << "," << center.y() - << " POLYGON=" << polygon_to_string(inst.get_convex_hull_2d(), print) << "\n"; - } + for (PrintObject* object : print->objects()) { + object->set_klipper_object_id(object_id++); + size_t inst_id = 0; + for (PrintInstance& inst : object->instances()) { + inst.id = inst_id++; + if (this->config().exclude_object && print->config().gcode_flavor.value == gcfKlipper) { + auto bbox = inst.get_bounding_box(); + auto center = print->translate_to_print_space(Vec2d(bbox.center().x(), bbox.center().y())); + gcode << "EXCLUDE_OBJECT_DEFINE NAME=" << get_instance_name(object, inst) << " CENTER=" << center.x() + << "," << center.y() << " POLYGON=" << polygon_to_string(inst.get_convex_hull_2d(), print) + << "\n"; } } } - return gcode.str(); } @@ -5006,13 +4661,6 @@ Point GCode::gcode_to_point(const Vec2d &point) const scale_(point(1) - m_origin(1) + extruder_offset(1))); } -Vec2d GCode::point_to_gcode_quantized(const Point& point) const -{ - Vec2d p = this->point_to_gcode(point); - return { GCodeFormatter::quantize_xyzf(p.x()), GCodeFormatter::quantize_xyzf(p.y()) }; -} - - // Goes through by_region std::vector and returns reference to a subvector of entities, that are to be printed // during infill/perimeter wiping, or normally (depends on wiping_entities parameter) // Fills in by_region_per_copy_cache and returns its reference. @@ -5096,9 +4744,9 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr // First we append the entities, there are eec->entities.size() of them: size_t old_size = perimeters_or_infills->size(); - size_t new_size = old_size + (eec->can_reverse() ? eec->entities.size() : 1); + size_t new_size = old_size + (eec->can_sort() ? eec->entities.size() : 1); perimeters_or_infills->reserve(new_size); - if (eec->can_reverse()) { + if (eec->can_sort()) { for (auto* ee : eec->entities) perimeters_or_infills->emplace_back(ee); } else @@ -5113,9 +4761,4 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr } } - -// Index into std::vector, which contains Object and Support layers for the current print_z, collected for -// a single object, or for possibly multiple objects with multiple instances. - - -} // namespace Slic3r +} // namespace Slic3r diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 4a25ad274..5f7b00154 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -10,7 +10,6 @@ #include "PrintConfig.hpp" #include "GCode/AvoidCrossingPerimeters.hpp" #include "GCode/CoolingBuffer.hpp" -#include "GCode/FanMover.hpp" #include "GCode/RetractWhenCrossingPerimeters.hpp" #include "GCode/SpiralVase.hpp" #include "GCode/ToolOrdering.hpp" @@ -20,7 +19,6 @@ #include "EdgeGrid.hpp" #include "GCode/ThumbnailData.hpp" #include "libslic3r/ObjectID.hpp" -#include "GCode/ExtrusionProcessor.hpp" #include #include @@ -181,7 +179,6 @@ public: const Point& last_pos() const { return m_last_pos; } Vec2d point_to_gcode(const Point &point) const; Point gcode_to_point(const Vec2d &point) const; - Vec2d point_to_gcode_quantized(const Point& point) const; const FullPrintConfig &config() const { return m_config; } const Layer* layer() const { return m_layer; } GCodeWriter& writer() { return m_writer; } @@ -198,19 +195,19 @@ public: void set_layer_count(unsigned int value) { m_layer_count = value; } void apply_print_config(const PrintConfig &print_config); - std::string travel_to(const Point& point, ExtrusionRole role, std::string comment); - bool needs_retraction(const Polyline& travel, ExtrusionRole role, LiftType& lift_type); - std::string retract(bool toolchange = false, bool is_last_retraction = false, LiftType lift_type = LiftType::SpiralLift); - std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } - std::string set_extruder(unsigned int extruder_id, double print_z); - bool is_BBL_Printer(); - - // SoftFever + // OrcaSlicer std::string set_object_info(Print* print); // append full config to the given string static void append_full_config(const Print& print, std::string& str); + // BBS: detect lift type in needs_retraction + bool needs_retraction(const Polyline &travel, ExtrusionRole role, LiftType &lift_type); + std::string retract(bool toolchange = false, bool is_last_retraction = false, LiftType lift_type = LiftType::SpiralLift); + std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } + //BBS + bool is_BBL_Printer(); + // Object and support extrusions of the same PrintObject at the same print_z. // public, so that it could be accessed by free helper functions from GCode.cpp struct LayerToPrint @@ -335,7 +332,7 @@ private: void set_extruders(const std::vector &extruder_ids); std::string preamble(); // BBS - std::string change_layer(coordf_t print_z, bool lazy_raise = false); + std::string change_layer(coordf_t print_z); std::string extrude_entity(const ExtrusionEntity &entity, std::string description = "", double speed = -1.); std::string extrude_loop(ExtrusionLoop loop, std::string description, double speed = -1.); std::string extrude_multi_path(ExtrusionMultiPath multipath, std::string description = "", double speed = -1.); @@ -406,21 +403,20 @@ 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_infill(const Print& print, const std::vector& by_region, bool ironing); - std::string extrude_support(const ExtrusionEntityCollection& support_fills); + std::string extrude_perimeters(const Print &print, const std::vector &by_region); + std::string extrude_infill(const Print &print, const std::vector &by_region, bool ironing); + std::string extrude_support(const ExtrusionEntityCollection &support_fills); + std::string travel_to(const Point &point, ExtrusionRole role, std::string comment); // BBS LiftType to_lift_type(ZHopType z_hop_types); + std::string set_extruder(unsigned int extruder_id, double print_z); std::set m_objsWithBrim; // indicates the objs with brim std::set m_objSupportsWithBrim; // indicates the objs' supports with brim // Cache for custom seam enforcers/blockers for each layer. SeamPlacer m_seam_placer; - ExtrusionQualityEstimator m_extrusion_quality_estimator; - - /* Origin of print coordinates expressed in unscaled G-code coordinates. This affects the input arguments supplied to the extrude*() and travel_to() methods. */ @@ -444,13 +440,6 @@ private: // of the G-code lines: _EXTRUDE_SET_SPEED, _WIPE, _OVERHANG_FAN_START, _OVERHANG_FAN_END // Those comments are received and consumed (removed from the G-code) by the CoolingBuffer.pm Perl module. bool m_enable_cooling_markers; - - bool m_enable_exclude_object; - std::vector m_label_objects_ids; - std::string _encode_label_ids_to_base64(std::vector ids); - // Orca - bool m_is_overhang_fan_on; - bool m_is_supp_interface_fan_on; // Markers for the Pressure Equalizer to recognize the extrusion type. // The Pressure Equalizer removes the markers from the final G-code. bool m_enable_extrusion_role_markers; @@ -469,8 +458,6 @@ private: //double m_volumetric_speed; // Support for the extrusion role markers. Which marker is active? ExtrusionRole m_last_extrusion_role; - // To ignore gapfill role for retract_lift_enforce - ExtrusionRole m_last_notgapfill_extrusion_role; // Support for G-Code Processor float m_last_height{ 0.0f }; float m_last_layer_z{ 0.0f }; @@ -498,15 +485,16 @@ private: bool m_second_layer_things_done; // Index of a last object copy extruded. std::pair m_last_obj_copy; + //BBS + bool m_enable_label_object; + std::vector m_label_objects_ids; + std::string _encode_label_ids_to_base64(std::vector ids); bool m_silent_time_estimator_enabled; // Processor GCodeProcessor m_processor; - //some post-processing on the file, with their data class - std::unique_ptr m_fan_mover; - // BBS Print* m_curr_print = nullptr; unsigned int m_toolchange_count; @@ -523,12 +511,7 @@ private: void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); // On the first printing layer. This flag triggers first layer speeds. //BBS - bool on_first_layer() const { return m_layer != nullptr && m_layer->id() == 0 && abs(m_layer->bottom_z()) < EPSILON; } - int layer_id() const { - if (m_layer == nullptr) - return -1; - return m_layer->id(); - } + bool on_first_layer() const { return m_layer != nullptr && m_layer->id() == 0 && abs(m_layer->bottom_z()) < EPSILON; } // To control print speed of 1st object layer over raft interface. bool object_layer_over_raft() const { return m_object_layer_over_raft; } diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 44fc25bf4..1d35b2ec5 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #if 0 #define DEBUG @@ -62,8 +61,7 @@ struct CoolingLine TYPE_G2 = 1 << 12, TYPE_G3 = 1 << 13, TYPE_FORCE_RESUME_FAN = 1 << 14, - TYPE_SUPPORT_INTERFACE_FAN_START = 1 << 15, - TYPE_SUPPORT_INTERFACE_FAN_END = 1 << 16, + TYPE_SET_FAN_CHANGING_LAYER = 1 << 15, }; CoolingLine(unsigned int type, size_t line_start, size_t line_end) : @@ -482,10 +480,6 @@ std::vector CoolingBuffer::parse_layer_gcode(const std:: line.type = CoolingLine::TYPE_OVERHANG_FAN_START; } else if (boost::starts_with(sline, ";_OVERHANG_FAN_END")) { line.type = CoolingLine::TYPE_OVERHANG_FAN_END; - } else if (boost::starts_with(sline, ";_SUPP_INTERFACE_FAN_START")) { - line.type = CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START; - } else if (boost::starts_with(sline, ";_SUPP_INTERFACE_FAN_END")) { - line.type = CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_END; } else if (boost::starts_with(sline, "G4 ")) { // Parse the wait time. line.type = CoolingLine::TYPE_G4; @@ -497,6 +491,8 @@ std::vector CoolingBuffer::parse_layer_gcode(const std:: (pos_P > 0) ? atof(sline.c_str() + pos_P + 1) * 0.001 : 0.); } else if (boost::starts_with(sline, ";_FORCE_RESUME_FAN_SPEED")) { line.type = CoolingLine::TYPE_FORCE_RESUME_FAN; + } else if (boost::starts_with(sline, ";_SET_FAN_SPEED_CHANGING_LAYER")) { + line.type = CoolingLine::TYPE_SET_FAN_CHANGING_LAYER; } if (line.type != 0) adjustment->lines.emplace_back(std::move(line)); @@ -729,9 +725,14 @@ std::string CoolingBuffer::apply_layer_cooldown( new_gcode.reserve(gcode.size() * 2); bool overhang_fan_control= false; int overhang_fan_speed = 0; - bool supp_interface_fan_control= false; - int supp_interface_fan_speed = 0; - auto change_extruder_set_fan = [ this, layer_id, layer_time, &new_gcode, &overhang_fan_control, &overhang_fan_speed, &supp_interface_fan_control, &supp_interface_fan_speed](bool immediately_apply) { + + enum class SetFanType { + sfChangingLayer = 0, + sfChangingFilament, + sfImmediatelyApply + }; + + auto change_extruder_set_fan = [ this, layer_id, layer_time, &new_gcode, &overhang_fan_control, &overhang_fan_speed](SetFanType type) { #define EXTRUDER_CONFIG(OPT) m_config.OPT.get_at(m_current_extruder) int fan_min_speed = EXTRUDER_CONFIG(fan_min_speed); int fan_speed_new = EXTRUDER_CONFIG(reduce_fan_stop_start_freq) ? fan_min_speed : 0; @@ -740,8 +741,6 @@ std::string CoolingBuffer::apply_layer_cooldown( int close_fan_the_first_x_layers = EXTRUDER_CONFIG(close_fan_the_first_x_layers); // Is the fan speed ramp enabled? int full_fan_speed_layer = EXTRUDER_CONFIG(full_fan_speed_layer); - supp_interface_fan_speed = EXTRUDER_CONFIG(support_material_interface_fan_speed); - if (close_fan_the_first_x_layers <= 0 && full_fan_speed_layer > 0) { // When ramping up fan speed from close_fan_the_first_x_layers to full_fan_speed_layer, force close_fan_the_first_x_layers above zero, // so there will be a zero fan speed at least at the 1st layer. @@ -770,9 +769,6 @@ std::string CoolingBuffer::apply_layer_cooldown( fan_speed_new = std::clamp(int(float(fan_speed_new) * factor + 0.5f), 0, 255); overhang_fan_speed = std::clamp(int(float(overhang_fan_speed) * factor + 0.5f), 0, 255); } - supp_interface_fan_speed = EXTRUDER_CONFIG(support_material_interface_fan_speed); - supp_interface_fan_control = supp_interface_fan_speed >= 0; - #undef EXTRUDER_CONFIG overhang_fan_control= overhang_fan_speed > fan_speed_new; } else { @@ -780,34 +776,34 @@ std::string CoolingBuffer::apply_layer_cooldown( overhang_fan_speed = 0; fan_speed_new = 0; additional_fan_speed_new = 0; - supp_interface_fan_control= false; - supp_interface_fan_speed = 0; } if (fan_speed_new != m_fan_speed) { m_fan_speed = fan_speed_new; + //BBS m_current_fan_speed = fan_speed_new; - if (immediately_apply) + if (type == SetFanType::sfImmediatelyApply) new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed); + else if (type == SetFanType::sfChangingLayer) + this->m_set_fan_changing_layer = true; + //BBS: don't need to handle change filament, because we are always force to resume fan speed when filament change is finished } //BBS if (additional_fan_speed_new != m_additional_fan_speed) { m_additional_fan_speed = additional_fan_speed_new; - if (immediately_apply && m_config.auxiliary_fan.value) + if (type == SetFanType::sfImmediatelyApply) new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed); + else if (type == SetFanType::sfChangingLayer) + this->m_set_addition_fan_changing_layer = true; + //BBS: don't need to handle change filament, because we are always force to resume fan speed when filament change is finished } }; const char *pos = gcode.c_str(); int current_feedrate = 0; - change_extruder_set_fan(true); - - // Reduce set fan commands by deferring the GCodeWriter::set_fan calls. Inspired by SuperSlicer - // define fan_speed_change_requests and initialize it with all possible types fan speed change requests - std::unordered_map fan_speed_change_requests = {{CoolingLine::TYPE_OVERHANG_FAN_START, false}, - {CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START, false}, - {CoolingLine::TYPE_FORCE_RESUME_FAN, false}}; - bool need_set_fan = false; - + //BBS + m_set_fan_changing_layer = false; + m_set_addition_fan_changing_layer = false; + change_extruder_set_fan(SetFanType::sfChangingLayer); for (const CoolingLine *line : lines) { const char *line_start = gcode.c_str() + line->line_start; const char *line_end = gcode.c_str() + line->line_end; @@ -817,37 +813,37 @@ std::string CoolingBuffer::apply_layer_cooldown( unsigned int new_extruder = (unsigned int)atoi(line_start + m_toolchange_prefix.size()); if (new_extruder != m_current_extruder) { m_current_extruder = new_extruder; - change_extruder_set_fan(false); //BBS: will force to resume fan speed when filament change is finished + change_extruder_set_fan(SetFanType::sfChangingFilament); //BBS: will force to resume fan speed when filament change is finished } new_gcode.append(line_start, line_end - line_start); } else if (line->type & CoolingLine::TYPE_OVERHANG_FAN_START) { - if (overhang_fan_control && !fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START]) { - need_set_fan = true; - fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START] = true; - } + if (overhang_fan_control) { + //BBS + m_current_fan_speed = overhang_fan_speed; + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, overhang_fan_speed); + } } else if (line->type & CoolingLine::TYPE_OVERHANG_FAN_END) { - if (overhang_fan_control && fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START]) { - fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START] = false; + if (overhang_fan_control) { + //BBS + m_current_fan_speed = m_fan_speed; + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed); } - need_set_fan = true; - } else if (line->type & CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START) { - if (supp_interface_fan_control && !fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START]) { - fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START] = true; - need_set_fan = true; - } - } else if (line->type & CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_END && fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START]) { - if (supp_interface_fan_control) { - fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START] = false; - } - need_set_fan = true; } else if (line->type & CoolingLine::TYPE_FORCE_RESUME_FAN) { - // check if any fan speed change request is active - if (m_fan_speed != -1 && !std::any_of(fan_speed_change_requests.begin(), fan_speed_change_requests.end(), [](const std::pair& p) { return p.second; })){ - fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] = true; - need_set_fan = true; - } - if (m_additional_fan_speed != -1 && m_config.auxiliary_fan.value) + //BBS: force to write a fan speed command again + if (m_current_fan_speed != -1) + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed); + if (m_additional_fan_speed != -1) new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed); + } else if (line->type & CoolingLine::TYPE_SET_FAN_CHANGING_LAYER) { + //BBS: check whether fan speed need to changed when change layer + if (m_current_fan_speed != -1 && m_set_fan_changing_layer) { + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed); + m_set_fan_changing_layer = false; + } + if (m_additional_fan_speed != -1 && m_set_addition_fan_changing_layer) { + new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed); + m_set_addition_fan_changing_layer = false; + } } else if (line->type & CoolingLine::TYPE_EXTRUDE_END) { // Just remove this comment. @@ -933,24 +929,6 @@ std::string CoolingBuffer::apply_layer_cooldown( } else { new_gcode.append(line_start, line_end - line_start); } - - if (need_set_fan) { - if (fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, overhang_fan_speed); - m_current_fan_speed = overhang_fan_speed; - } - else if (fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, supp_interface_fan_speed); - m_current_fan_speed = supp_interface_fan_speed; - } - else if(fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] && m_current_fan_speed != -1){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed); - fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] = false; - } - else - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed); - need_set_fan = false; - } pos = line_end; } const char *gcode_end = gcode.c_str() + gcode.size(); diff --git a/src/libslic3r/GCode/CoolingBuffer.hpp b/src/libslic3r/GCode/CoolingBuffer.hpp index 7fb55985f..90c60e5b1 100644 --- a/src/libslic3r/GCode/CoolingBuffer.hpp +++ b/src/libslic3r/GCode/CoolingBuffer.hpp @@ -59,6 +59,9 @@ private: bool m_cooling_logic_proportional = false; //BBS: current fan speed int m_current_fan_speed; + //BBS: + bool m_set_fan_changing_layer = false; + bool m_set_addition_fan_changing_layer = false; }; } diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index b6643443d..71e6c32af 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1,4 +1,3 @@ -#include "ExtrusionEntity.hpp" #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" #include "libslic3r/Print.hpp" @@ -17,7 +16,6 @@ #include #include -#include #if __has_include() #include @@ -62,23 +60,6 @@ const std::vector GCodeProcessor::Reserved_Tags = { "_GP_TOTAL_LAYER_NUMBER_PLACEHOLDER" }; -const std::vector GCodeProcessor::Reserved_Tags_compatible = { - "TYPE:", - "WIPE_START", - "WIPE_END", - "HEIGHT:", - "WIDTH:", - "LAYER_CHANGE", - "COLOR_CHANGE", - "PAUSE_PRINT", - "CUSTOM_GCODE", - "_GP_FIRST_LINE_M73_PLACEHOLDER", - "_GP_LAST_LINE_M73_PLACEHOLDER", - "_GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER", - "_GP_TOTAL_LAYER_NUMBER_PLACEHOLDER" -}; - - const std::string GCodeProcessor::Flush_Start_Tag = " FLUSH_START"; const std::string GCodeProcessor::Flush_End_Tag = " FLUSH_END"; @@ -92,8 +73,6 @@ const std::map GCodeProcessor::Nozzle_Type_To_HRC={ const float GCodeProcessor::Wipe_Width = 0.05f; const float GCodeProcessor::Wipe_Height = 0.05f; -bool GCodeProcessor::s_IsBBLPrinter = true; - #if ENABLE_GCODE_VIEWER_DATA_CHECKING const std::string GCodeProcessor::Mm3_Per_Mm_Tag = "MM3_PER_MM:"; #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -122,16 +101,16 @@ static float intersection_distance(float initial_rate, float final_rate, float a static float speed_from_distance(float initial_feedrate, float distance, float acceleration) { - // to avoid invalid negative numbers due to numerical errors + // to avoid invalid negative numbers due to numerical errors float value = std::max(0.0f, sqr(initial_feedrate) + 2.0f * acceleration * distance); return ::sqrt(value); } -// Calculates the maximum allowable speed at this point when you must be able to reach target_velocity using the +// Calculates the maximum allowable speed at this point when you must be able to reach target_velocity using the // acceleration within the allotted distance. static float max_allowable_speed(float acceleration, float target_velocity, float distance) { - // to avoid invalid negative numbers due to numerical errors + // to avoid invalid negative numbers due to numerical errors float value = std::max(0.0f, sqr(target_velocity) - 2.0f * acceleration * distance); return std::sqrt(value); } @@ -182,7 +161,7 @@ void GCodeProcessor::TimeBlock::calculate_trapezoid() float cruise_distance = distance - accelerate_distance - decelerate_distance; // Not enough space to reach the nominal feedrate. - // This means no cruising, and we'll have to use intersection_distance() to calculate when to abort acceleration + // This means no cruising, and we'll have to use intersection_distance() to calculate when to abort acceleration // and start braking in order to reach the exit_feedrate exactly at the end of this block. if (cruise_distance < 0.0f) { accelerate_distance = std::clamp(intersection_distance(feedrate_profile.entry, feedrate_profile.exit, acceleration, distance), 0.0f, distance); @@ -491,17 +470,12 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st PrintEstimatedStatistics::ETimeMode mode = static_cast(i); if (mode == PrintEstimatedStatistics::ETimeMode::Normal || machine.enabled) { char buf[128]; - if(!s_IsBBLPrinter) - // SoftFever: compatibility with klipper_estimator - sprintf(buf, "; estimated printing time (normal mode) = %s\n", get_time_dhms(machine.time).c_str()); - else { //sprintf(buf, "; estimated printing time (%s mode) = %s\n", // (mode == PrintEstimatedStatistics::ETimeMode::Normal) ? "normal" : "silent", // get_time_dhms(machine.time).c_str()); sprintf(buf, "; model printing time: %s; total estimated time: %s\n", get_time_dhms(machine.time - machine.prepare_time).c_str(), get_time_dhms(machine.time).c_str()); - } ret += buf; } } @@ -662,7 +636,7 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st if (processed && lines_added_count > 0) offsets.push_back({ line_id, lines_added_count }); if (! processed && ! is_temporary_decoration(gcode_line) && - (GCodeReader::GCodeLine::cmd_is(gcode_line, "G1") || + (GCodeReader::GCodeLine::cmd_is(gcode_line, "G1") || GCodeReader::GCodeLine::cmd_is(gcode_line, "G2") || GCodeReader::GCodeLine::cmd_is(gcode_line, "G3"))) { // remove temporary lines, add lines M73 where needed @@ -677,7 +651,7 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st gcode_line.clear(); } // Skip EOL. - it = it_end; + it = it_end; if (it != it_bufend && *it == '\r') ++ it; if (it != it_bufend && *it == '\n') @@ -848,12 +822,10 @@ void GCodeProcessorResult::reset() { #endif // ENABLE_GCODE_VIEWER_STATISTICS const std::vector> GCodeProcessor::Producers = { - //BBS: OrcaSlicer is also "bambu". Otherwise the time estimation didn't work. + //BBS: BambuStudio is also "bambu". Otherwise the time estimation didn't work. //FIXME: Workaround and should be handled when do removing-bambu - { EProducer::OrcaSlicer, SLIC3R_APP_NAME }, - { EProducer::OrcaSlicer, "generated by OrcaSlicer" }, - { EProducer::OrcaSlicer, "generated by BambuStudio" }, - { EProducer::OrcaSlicer, "BambuStudio" } + { EProducer::BambuStudio, SLIC3R_APP_NAME }, + { EProducer::BambuStudio, "generated by BambuStudio" } //{ EProducer::Slic3rPE, "generated by Slic3r Bambu Edition" }, //{ EProducer::Slic3r, "generated by Slic3r" }, //{ EProducer::SuperSlicer, "generated by SuperSlicer" }, @@ -871,12 +843,11 @@ bool GCodeProcessor::contains_reserved_tag(const std::string& gcode, std::string bool ret = false; GCodeReader parser; - auto& _tags = s_IsBBLPrinter ? Reserved_Tags : Reserved_Tags_compatible; - parser.parse_buffer(gcode, [&ret, &found_tag, _tags](GCodeReader& parser, const GCodeReader::GCodeLine& line) { + parser.parse_buffer(gcode, [&ret, &found_tag](GCodeReader& parser, const GCodeReader::GCodeLine& line) { std::string comment = line.raw(); if (comment.length() > 2 && comment.front() == ';') { comment = comment.substr(1); - for (const std::string& s : _tags) { + for (const std::string& s : Reserved_Tags) { if (boost::starts_with(comment, s)) { ret = true; found_tag = comment; @@ -899,12 +870,11 @@ bool GCodeProcessor::contains_reserved_tags(const std::string& gcode, unsigned i CNumericLocalesSetter locales_setter; GCodeReader parser; - auto& _tags = s_IsBBLPrinter ? Reserved_Tags : Reserved_Tags_compatible; - parser.parse_buffer(gcode, [&ret, &found_tag, max_count, _tags](GCodeReader& parser, const GCodeReader::GCodeLine& line) { + parser.parse_buffer(gcode, [&ret, &found_tag, max_count](GCodeReader& parser, const GCodeReader::GCodeLine& line) { std::string comment = line.raw(); if (comment.length() > 2 && comment.front() == ';') { comment = comment.substr(1); - for (const std::string& s : _tags) { + for (const std::string& s : Reserved_Tags) { if (boost::starts_with(comment, s)) { ret = true; found_tag.push_back(comment); @@ -947,7 +917,6 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.filament_densities.resize(extruders_count); m_result.filament_vitrification_temperature.resize(extruders_count); m_extruder_temps.resize(extruders_count); - m_result.nozzle_hrc = static_cast(config.nozzle_hrc.getInt()); m_result.nozzle_type = config.nozzle_type; for (size_t i = 0; i < extruders_count; ++ i) { m_extruder_offsets[i] = to_3d(config.extruder_offset.get_at(i).cast().eval(), 0.f); @@ -958,17 +927,12 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.filament_vitrification_temperature[i] = static_cast(config.temperature_vitrification.get_at(i)); } - if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper || m_flavor == gcfRepRapFirmware) { + if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { m_time_processor.machine_limits = reinterpret_cast(config); if (m_flavor == gcfMarlinLegacy) { // Legacy Marlin does not have separate travel acceleration, it uses the 'extruding' value instead. m_time_processor.machine_limits.machine_max_acceleration_travel = m_time_processor.machine_limits.machine_max_acceleration_extruding; } - if (m_flavor == gcfRepRapFirmware) { - // RRF does not support setting min feedrates. Set them to zero. - m_time_processor.machine_limits.machine_min_travel_rate.values.assign(m_time_processor.machine_limits.machine_min_travel_rate.size(), 0.); - m_time_processor.machine_limits.machine_min_extruding_rate.values.assign(m_time_processor.machine_limits.machine_min_extruding_rate.size(), 0.); - } } // Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful. @@ -1009,9 +973,6 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) if (nozzle_volume != nullptr) m_nozzle_volume = nozzle_volume->value; - const ConfigOptionInt *nozzle_HRC = config.option("nozzle_hrc"); - if (nozzle_HRC != nullptr) m_result.nozzle_hrc = nozzle_HRC->value; - const ConfigOptionEnum* nozzle_type = config.option>("nozzle_type"); if (nozzle_type != nullptr) m_result.nozzle_type=nozzle_type->value; @@ -1119,7 +1080,7 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) } } } - + if (m_extruder_offsets.size() < m_result.extruders_count) { for (size_t i = m_extruder_offsets.size(); i < m_result.extruders_count; ++i) { m_extruder_offsets.emplace_back(DEFAULT_EXTRUDER_OFFSET); @@ -1394,12 +1355,12 @@ void GCodeProcessor::process_file(const std::string& filename, std::functionprocess_gcode_line(line, false); }); } @@ -1491,7 +1452,7 @@ void GCodeProcessor::finalize(bool post_process) else m_result.moves[i].layer_duration = 0; } - + #if ENABLE_GCODE_VIEWER_DATA_CHECKING std::cout << "\n"; m_mm3_per_mm_compare.output(); @@ -1647,7 +1608,7 @@ void GCodeProcessor::apply_config_simplify3d(const std::string& filename) } return false; }; - + begin = skip_whitespaces(begin, end); end = remove_eols(begin, end); if (begin != end) { @@ -1705,6 +1666,7 @@ void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line, bool m_start_position = m_end_position; const std::string_view cmd = line.cmd(); + //OrcaSlicer if (m_flavor == gcfKlipper) { if (boost::iequals(cmd, "SET_VELOCITY_LIMIT")) @@ -1728,7 +1690,7 @@ void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line, bool case '2': case '3': { process_G2_G3(line); break; } // Move //BBS - case 4: { process_G4(line); break; } // Delay + case '4': { process_G4(line); break; } // Delay default: break; } break; @@ -1928,7 +1890,7 @@ template auto str_end = sv.data() + sv.size(); auto [end_ptr, error_code] = std::from_chars(sv.data(), str_end, out); return error_code == std::errc() && end_ptr == str_end; - } + } else #endif { @@ -2081,7 +2043,7 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers return; } - if (!producers_enabled || m_producer == EProducer::OrcaSlicer) { + if (!producers_enabled || m_producer == EProducer::BambuStudio) { // height tag if (boost::starts_with(comment, reserved_tag(ETags::Height))) { if (!parse_number(comment.substr(reserved_tag(ETags::Height).size()), m_forced_height)) @@ -2219,9 +2181,9 @@ bool GCodeProcessor::process_producers_tags(const std::string_view comment) switch (m_producer) { case EProducer::Slic3rPE: - case EProducer::Slic3r: + case EProducer::Slic3r: case EProducer::SuperSlicer: - case EProducer::OrcaSlicer: { return process_bambuslicer_tags(comment); } + case EProducer::BambuStudio: { return process_bambuslicer_tags(comment); } case EProducer::Cura: { return process_cura_tags(comment); } case EProducer::Simplify3D: { return process_simplify3d_tags(comment); } case EProducer::CraftWare: { return process_craftware_tags(comment); } @@ -2326,7 +2288,7 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment) set_extrusion_role(erSkirt); return true; } - + // ; outer perimeter pos = cmt.find(" outer perimeter"); if (pos == 0) { @@ -2370,13 +2332,6 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment) return true; } - // ; internal bridge - pos = cmt.find(" internal bridge"); - if (pos == 0) { - set_extrusion_role(erInternalBridgeInfill); - return true; - } - // ; support pos = cmt.find(" support"); if (pos == 0) { @@ -2528,8 +2483,6 @@ bool GCodeProcessor::process_ideamaker_tags(const std::string_view comment) set_extrusion_role(erInternalInfill); else if (type == "BRIDGE") set_extrusion_role(erBridgeInfill); - else if (type == "INTERNAL BRIDGE") - set_extrusion_role(erInternalBridgeInfill); else if (type == "SUPPORT") set_extrusion_role(erSupportMaterial); else { @@ -2729,7 +2682,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) type = (delta_pos[Z] == 0.0f) ? EMoveType::Unretract : EMoveType::Travel; else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f) type = EMoveType::Extrude; - } + } else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) type = EMoveType::Travel; @@ -2802,7 +2755,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) else if (m_extrusion_role == erExternalPerimeter) // cross section: rectangle m_width = delta_pos[E] * static_cast(M_PI * sqr(1.05f * filament_radius)) / (delta_xyz * m_height); - else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erInternalBridgeInfill || m_extrusion_role == erNone) + else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone) // cross section: circle m_width = static_cast(m_result.filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz); else @@ -2927,7 +2880,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) } // calculates block acceleration - float acceleration = + float acceleration = (type == EMoveType::Travel) ? get_travel_acceleration(static_cast(i)) : (is_extrusion_only_move(delta_pos) ? get_retract_acceleration(static_cast(i)) : @@ -3259,7 +3212,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) else if (m_extrusion_role == erExternalPerimeter) //BBS: cross section: rectangle m_width = delta_pos[E] * static_cast(M_PI * sqr(1.05f * filament_radius)) / (delta_xyz * m_height); - else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erInternalBridgeInfill || m_extrusion_role == erNone) + else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone) //BBS: cross section: circle m_width = static_cast(m_result.filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz); else @@ -3402,7 +3355,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) } else if (a == Y || a == Z) { continue; - } + } else { float v_exit = prev.axis_feedrate[a]; float v_entry = curr.axis_feedrate[a]; @@ -3625,7 +3578,7 @@ void GCodeProcessor::process_G92(const GCodeReader::GCodeLine& line) simulate_st_synchronize(); if (!any_found && !line.has_unknown_axis()) { - // The G92 may be called for axes that PrusaSlicer does not recognize, for example see GH issue #3510, + // The G92 may be called for axes that PrusaSlicer does not recognize, for example see GH issue #3510, // where G92 A0 B0 is called although the extruder axis is till E. for (unsigned char a = X; a <= E; ++a) { m_origin[a] = m_end_position[a]; @@ -3873,7 +3826,7 @@ void GCodeProcessor::process_SET_VELOCITY_LIMIT(const GCodeReader::GCodeLine& li { _jerk = std::stof(matches[1]); } - catch (...){} + catch (...) {} for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { set_option_value(m_time_processor.machine_limits.machine_max_jerk_x, i, _jerk); set_option_value(m_time_processor.machine_limits.machine_max_jerk_y, i, _jerk); @@ -3903,8 +3856,8 @@ void GCodeProcessor::process_SET_VELOCITY_LIMIT(const GCodeReader::GCodeLine& li } catch (...) {} for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { - set_option_value(m_time_processor.machine_limits.machine_max_speed_x, i, _speed); - set_option_value(m_time_processor.machine_limits.machine_max_speed_y, i, _speed); + set_option_value(m_time_processor.machine_limits.machine_max_speed_x, i, _speed); + set_option_value(m_time_processor.machine_limits.machine_max_speed_y, i, _speed); } } @@ -4336,9 +4289,7 @@ void GCodeProcessor::update_slice_warnings() warning.params.clear(); warning.level=1; - int nozzle_hrc = m_result.nozzle_hrc; - if(nozzle_hrc <= 0) - nozzle_hrc = Nozzle_Type_To_HRC.find(m_result.nozzle_type)->second; + int nozzle_hrc = Nozzle_Type_To_HRC.find(m_result.nozzle_type)->second; if (nozzle_hrc!=0) { for (size_t i = 0; i < used_extruders.size(); i++) { int HRC=0; @@ -4359,3 +4310,4 @@ void GCodeProcessor::update_slice_warnings() } } /* namespace Slic3r */ + diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index f78ddd350..09e6d1164 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -97,11 +97,11 @@ namespace Slic3r { { std::string _objName1; std::string _objName2; - double _height; + float _height; const void *_obj1; // nullptr means wipe tower const void *_obj2; int layer = -1; - ConflictResult(const std::string &objName1, const std::string &objName2, double height, const void *obj1, const void *obj2) + ConflictResult(const std::string &objName1, const std::string &objName2, float height, const void *obj1, const void *obj2) : _objName1(objName1), _objName2(objName2), _height(height), _obj1(obj1), _obj2(obj2) {} ConflictResult() = default; @@ -192,7 +192,6 @@ namespace Slic3r { std::vector>> spiral_vase_layers; //BBS std::vector warnings; - int nozzle_hrc; NozzleType nozzle_type; BedType bed_type = BedType::btCount; #if ENABLE_GCODE_VIEWER_STATISTICS @@ -236,7 +235,6 @@ namespace Slic3r { class GCodeProcessor { static const std::vector Reserved_Tags; - static const std::vector Reserved_Tags_compatible; static const std::string Flush_Start_Tag; static const std::string Flush_End_Tag; static const std::mapNozzle_Type_To_HRC; @@ -258,8 +256,8 @@ namespace Slic3r { Total_Layer_Number_Placeholder }; - static const std::string& reserved_tag(ETags tag) { return s_IsBBLPrinter ? Reserved_Tags[static_cast(tag)] : Reserved_Tags_compatible[static_cast(tag)]; } - // checks the given gcode for reserved tags and returns true when finding the 1st (which is returned into found_tag) + static const std::string& reserved_tag(ETags tag) { return Reserved_Tags[static_cast(tag)]; } + // checks the given gcode for reserved tags and returns true when finding the 1st (which is returned into found_tag) static bool contains_reserved_tag(const std::string& gcode, std::string& found_tag); // checks the given gcode for reserved tags and returns true when finding any // (the first max_count found tags are returned into found_tag) @@ -271,8 +269,6 @@ namespace Slic3r { static const float Wipe_Width; static const float Wipe_Height; - static bool s_IsBBLPrinter; - #if ENABLE_GCODE_VIEWER_DATA_CHECKING static const std::string Mm3_Per_Mm_Tag; #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -369,7 +365,7 @@ namespace Slic3r { AxisCoords axis_feedrate; // mm/s AxisCoords abs_axis_feedrate; // mm/s - //BBS: unit vector of enter speed and exit speed in x-y-z space. + //BBS: unit vector of enter speed and exit speed in x-y-z space. //For line move, there are same. For arc move, there are different. Vec3f enter_direction; Vec3f exit_direction; @@ -673,7 +669,7 @@ namespace Slic3r { enum class EProducer { Unknown, - OrcaSlicer, + BambuStudio, Slic3rPE, Slic3r, SuperSlicer, diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index fd51f7cf7..f88e0d56a 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -128,9 +128,9 @@ public: } WipeTowerWriter& disable_linear_advance() { - if(m_gcode_flavor == gcfKlipper) + if (m_gcode_flavor == gcfKlipper) m_gcode += "SET_PRESSURE_ADVANCE ADVANCE=0\n"; - else if(m_gcode_flavor == gcfRepRapFirmware) + else if (m_gcode_flavor == gcfRepRapFirmware) m_gcode += std::string("M572 D") + std::to_string(m_current_tool) + " S0\n"; else m_gcode += "M900 K0\n"; diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index e28e142d0..8a9f3488b 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -15,21 +15,18 @@ namespace Slic3r { -bool GCodeWriter::full_gcode_comment = true; +const bool GCodeWriter::full_gcode_comment = false; const double GCodeWriter::slope_threshold = 3 * PI / 180; void GCodeWriter::apply_print_config(const PrintConfig &print_config) { this->config.apply(print_config, true); m_single_extruder_multi_material = print_config.single_extruder_multi_material.value; - bool use_mach_limits = print_config.gcode_flavor.value == gcfMarlinLegacy || - print_config.gcode_flavor.value == gcfMarlinFirmware || - print_config.gcode_flavor.value == gcfKlipper || - print_config.gcode_flavor.value == gcfRepRapFirmware; - m_max_acceleration = std::lrint(use_mach_limits ? print_config.machine_max_acceleration_extruding.values.front() : 0); - m_max_jerk = std::lrint(use_mach_limits ? std::min(print_config.machine_max_jerk_x.values.front(), print_config.machine_max_jerk_y.values.front()) : 0); - m_max_jerk_z = print_config.machine_max_jerk_z.values.front(); - m_max_jerk_e = print_config.machine_max_jerk_e.values.front(); + bool is_marlin = print_config.gcode_flavor.value == gcfMarlinLegacy + || print_config.gcode_flavor.value == gcfMarlinFirmware + || print_config.gcode_flavor.value == gcfKlipper; + m_max_acceleration = std::lrint(is_marlin ? print_config.machine_max_acceleration_extruding.values.front() : 0); + m_max_jerk = std::lrint(is_marlin ? std::min(print_config.machine_max_jerk_x.values.front(), print_config.machine_max_jerk_y.values.front()) : 0); } void GCodeWriter::set_extruders(std::vector extruder_ids) @@ -176,16 +173,15 @@ std::string GCodeWriter::set_acceleration(unsigned int acceleration) // This is new MarlinFirmware with separated print/retraction/travel acceleration. // Use M204 P, we don't want to override travel acc by M204 S (which is deprecated anyway). gcode << "M204 P" << acceleration; - } else if (FLAVOR_IS(gcfKlipper)) { - gcode << "SET_VELOCITY_LIMIT ACCEL=" << acceleration; - if (this->config.accel_to_decel_enable) { - gcode << " ACCEL_TO_DECEL=" << acceleration * this->config.accel_to_decel_factor / 100; - if (GCodeWriter::full_gcode_comment) - gcode << " ; adjust ACCEL_TO_DECEL"; - } - } else + } else if (FLAVOR_IS(gcfKlipper) && this->config.accel_to_decel_enable) { + gcode << "SET_VELOCITY_LIMIT ACCEL_TO_DECEL=" << acceleration * this->config.accel_to_decel_factor / 100; + if (GCodeWriter::full_gcode_comment) gcode << " ; adjust ACCEL_TO_DECEL"; + gcode << "\nM204 S" << acceleration; + // Set max accel to decel to half of acceleration + } else { + // M204: Set default acceleration gcode << "M204 S" << acceleration; - + } //BBS if (GCodeWriter::full_gcode_comment) gcode << " ; adjust acceleration"; gcode << "\n"; @@ -193,55 +189,45 @@ std::string GCodeWriter::set_acceleration(unsigned int acceleration) return gcode.str(); } +std::string GCodeWriter::set_pressure_advance(double pa) const +{ + std::ostringstream gcode; + if (pa < 0) return gcode.str(); + if (false) { // todo: bbl printer + // OrcaSlicer: set L1000 to use linear model + gcode << "M900 K" << std::setprecision(4) << pa << " L1000 M10 ; Override pressure advance value\n"; + } else { + if (this->config.gcode_flavor == gcfKlipper) + gcode << "SET_PRESSURE_ADVANCE ADVANCE=" << std::setprecision(4) << pa << "; Override pressure advance value\n"; + else if (this->config.gcode_flavor == gcfRepRapFirmware) + gcode << ("M572 D0 S") << std::setprecision(4) << pa << "; Override pressure advance value\n"; + else + gcode << "M900 K" << std::setprecision(4) << pa << "; Override pressure advance value\n"; + } + return gcode.str(); +} + std::string GCodeWriter::set_jerk_xy(double jerk) { // Clamp the jerk to the allowed maximum. - if (m_max_jerk > 0 && jerk > m_max_jerk) - jerk = m_max_jerk; + if (m_max_jerk > 0 && jerk > m_max_jerk) jerk = m_max_jerk; + + if (jerk < 0.01 || is_approx(jerk, m_last_jerk)) return std::string(); - if (jerk < 0.01 || is_approx(jerk, m_last_jerk)) - return std::string(); - m_last_jerk = jerk; - + std::ostringstream gcode; - if(FLAVOR_IS(gcfKlipper)) + if (FLAVOR_IS(gcfKlipper)) gcode << "SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=" << jerk; else gcode << "M205 X" << jerk << " Y" << jerk; - - if (m_is_bbl_printers) - gcode << std::setprecision(2) << " Z" << m_max_jerk_z << " E" << m_max_jerk_e; if (GCodeWriter::full_gcode_comment) gcode << " ; adjust jerk"; gcode << "\n"; return gcode.str(); - } -std::string GCodeWriter::set_pressure_advance(double pa) const -{ - std::ostringstream gcode; - if (pa < 0) - return gcode.str(); - if(m_is_bbl_printers){ - //SoftFever: set L1000 to use linear model - gcode << "M900 K" <reset_E(); } - if (! this->config.use_relative_e_distances) { + if (!this->config.use_relative_e_distances) { std::ostringstream gcode; gcode << "G92 E0"; //BBS @@ -310,12 +296,11 @@ std::string GCodeWriter::toolchange(unsigned int extruder_id) return gcode.str(); } -std::string GCodeWriter::set_speed(double F, const std::string &comment, const std::string &cooling_marker) +std::string GCodeWriter::set_speed(double F, const std::string &comment, const std::string &cooling_marker) const { assert(F > 0.); assert(F < 100000.); - - m_current_speed = F; + GCodeG1Formatter w; w.emit_f(F); //BBS @@ -335,9 +320,7 @@ std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &com GCodeG1Formatter w; w.emit_xy(point_on_plate); - auto speed = m_is_first_layer - ? this->config.get_abs_value("initial_layer_travel_speed") : this->config.travel_speed.value; - w.emit_f(speed * 60.0); + w.emit_f(this->config.travel_speed.value * 60.0); //BBS w.emit_comment(GCodeWriter::full_gcode_comment, comment); return w.string(); @@ -356,8 +339,6 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co used for unlift. */ // BBS Vec3d dest_point = point; - auto travel_speed = - m_is_first_layer ? this->config.get_abs_value("initial_layer_travel_speed") : this->config.travel_speed.value; //BBS: a z_hop need to be handle when travel if (std::abs(m_to_lift) > EPSILON) { assert(std::abs(m_lifted) < EPSILON); @@ -399,9 +380,9 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co Vec3d slope_top_point = Vec3d(temp(0), temp(1), delta(2)) + source; GCodeG1Formatter w0; w0.emit_xyz(slope_top_point); - w0.emit_f(travel_speed * 60.0); + w0.emit_f(this->config.travel_speed.value * 60.0); //BBS - w0.emit_comment(GCodeWriter::full_gcode_comment, comment); + w0.emit_comment(GCodeWriter::full_gcode_comment, "slope lift Z"); slop_move = w0.string(); } else if (m_to_lift_type == LiftType::NormalLift) { @@ -414,13 +395,13 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co GCodeG1Formatter w0; if (this->is_current_position_clear()) { w0.emit_xyz(target); - w0.emit_f(travel_speed * 60.0); + w0.emit_f(this->config.travel_speed.value * 60.0); w0.emit_comment(GCodeWriter::full_gcode_comment, comment); xy_z_move = w0.string(); } else { w0.emit_xy(Vec2d(target.x(), target.y())); - w0.emit_f(travel_speed * 60.0); + w0.emit_f(this->config.travel_speed.value * 60.0); w0.emit_comment(GCodeWriter::full_gcode_comment, comment); xy_z_move = w0.string() + _travel_to_z(target.z(), comment); } @@ -494,10 +475,8 @@ std::string GCodeWriter::_travel_to_z(double z, const std::string &comment) m_pos(2) = z; double speed = this->config.travel_speed_z.value; - if (speed == 0.) { - speed = m_is_first_layer ? this->config.get_abs_value("initial_layer_travel_speed") - : this->config.travel_speed.value; - } + if (speed == 0.) + speed = this->config.travel_speed.value; GCodeG1Formatter w; w.emit_z(z); @@ -512,10 +491,8 @@ std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, c m_pos(2) = z; double speed = this->config.travel_speed_z.value; - if (speed == 0.) { - speed = m_is_first_layer ? this->config.get_abs_value("initial_layer_travel_speed") - : this->config.travel_speed.value; - } + if (speed == 0.) + speed = this->config.travel_speed.value; std::string output = "G17\n"; GCodeG2G3Formatter w(true); @@ -548,9 +525,6 @@ std::string GCodeWriter::extrude_to_xy(const Vec2d &point, double dE, const std: { m_pos(0) = point(0); m_pos(1) = point(1); - if(std::abs(dE) <= std::numeric_limits::epsilon()) - force_no_extrusion = true; - if (!force_no_extrusion) m_extruder->extrude(dE); @@ -631,26 +605,15 @@ std::string GCodeWriter::retract_for_toolchange(bool before_wipe) std::string GCodeWriter::_retract(double length, double restart_extra, const std::string &comment) { - /* If firmware retraction is enabled, we use a fake value of 1 - since we ignore the actual configured retract_length which - might be 0, in which case the retraction logic gets skipped. */ - if (this->config.use_firmware_retraction) - length = 1; - std::string gcode; if (double dE = m_extruder->retract(length, restart_extra); dE != 0) { - if (this->config.use_firmware_retraction) { - gcode = FLAVOR_IS(gcfMachinekit) ? "G22 ; retract\n" : "G10 ; retract\n"; - } - else { - // BBS - GCodeG1Formatter w; - w.emit_e(m_extruder->E()); - w.emit_f(m_extruder->retract_speed() * 60.); - // BBS - w.emit_comment(GCodeWriter::full_gcode_comment, comment); - gcode = w.string(); - } + //BBS + GCodeG1Formatter w; + w.emit_e(m_extruder->E()); + w.emit_f(m_extruder->retract_speed() * 60.); + //BBS + w.emit_comment(GCodeWriter::full_gcode_comment, comment); + gcode = w.string(); } if (FLAVOR_IS(gcfMakerWare)) @@ -667,20 +630,14 @@ std::string GCodeWriter::unretract() gcode = "M101 ; extruder on\n"; if (double dE = m_extruder->unretract(); dE != 0) { - if (this->config.use_firmware_retraction) { - gcode += FLAVOR_IS(gcfMachinekit) ? "G23 ; unretract\n" : "G11 ; unretract\n"; - gcode += this->reset_e(); - } - else { - //BBS - // use G1 instead of G0 because G0 will blend the restart with the previous travel move - GCodeG1Formatter w; - w.emit_e(m_extruder->E()); - w.emit_f(m_extruder->deretract_speed() * 60.); - //BBS - w.emit_comment(GCodeWriter::full_gcode_comment, " ; unretract"); - gcode += w.string(); - } + //BBS + // use G1 instead of G0 because G0 will blend the restart with the previous travel move + GCodeG1Formatter w; + w.emit_e(m_extruder->E()); + w.emit_f(m_extruder->deretract_speed() * 60.); + //BBS + w.emit_comment(GCodeWriter::full_gcode_comment, " ; unretract"); + gcode += w.string(); } return gcode; @@ -694,10 +651,8 @@ std::string GCodeWriter::lift(LiftType lift_type, bool spiral_vase) // check whether the above/below conditions are met double target_lift = 0; { - double above = this->config.retract_lift_above.get_at(m_extruder->id()); - double below = this->config.retract_lift_below.get_at(m_extruder->id()); - if (m_pos(2) >= above && (below == 0 || m_pos(2) <= below)) - target_lift = this->config.z_hop.get_at(m_extruder->id()); + //BBS + target_lift = this->config.z_hop.get_at(m_extruder->id()); } // BBS if (m_lifted == 0 && m_to_lift == 0 && target_lift > 0) { @@ -747,9 +702,9 @@ std::string GCodeWriter::set_fan(const GCodeFlavor gcode_flavor, unsigned int sp gcode << "M126"; break; case gcfMach3: case gcfMachinekit: - gcode << "M106 P" << static_cast(255.5 * speed / 100.0); break; + gcode << "M106 P" << 255.0 * speed / 100.0; break; default: - gcode << "M106 S" << static_cast(255.5 * speed / 100.0); break; + gcode << "M106 S" << 255.0 * speed / 100.0; break; } if (GCodeWriter::full_gcode_comment) gcode << " ; enable fan"; @@ -793,11 +748,6 @@ void GCodeWriter::add_object_end_labels(std::string& gcode) if (!m_gcode_label_objects_end.empty()) { gcode += m_gcode_label_objects_end; m_gcode_label_objects_end = ""; - - // Orca: reset E so that e value remain correct after skipping the object - // ref to: https://github.com/SoftFever/OrcaSlicer/pull/205/commits/7f1fe0bd544077626080aa1a9a0576aa735da1a4#r1083470162 - if (!this->config.use_relative_e_distances) - gcode += reset_e(true); } } diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index 53ce7b9a8..63765ecfa 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -11,6 +11,12 @@ namespace Slic3r { +enum class LiftType { + NormalLift, + LazyLift, + SpiralLift +}; + class GCodeWriter { public: GCodeConfig config; @@ -24,8 +30,7 @@ public: /*m_last_bed_temperature(0), */m_last_bed_temperature_reached(true), m_lifted(0), m_to_lift(0), - m_to_lift_type(LiftType::NormalLift), - m_current_speed(3600), m_is_first_layer(true) + m_to_lift_type(LiftType::NormalLift) {} Extruder* extruder() { return m_extruder; } const Extruder* extruder() const { return m_extruder; } @@ -46,8 +51,8 @@ public: std::string set_temperature(unsigned int temperature, bool wait = false, int tool = -1) const; std::string set_bed_temperature(int temperature, bool wait = false); std::string set_acceleration(unsigned int acceleration); - std::string set_jerk_xy(double jerk); std::string set_pressure_advance(double pa) const; + std::string set_jerk_xy(double jerk); std::string reset_e(bool force = false); std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const; // return false if this extruder was already selected @@ -59,9 +64,7 @@ public: // printed with the same extruder. std::string toolchange_prefix() const; std::string toolchange(unsigned int extruder_id); - std::string set_speed(double F, const std::string &comment = std::string(), const std::string &cooling_marker = std::string()); - // SoftFever NOTE: the returned speed is mm/minute - double get_current_speed() const { return m_current_speed;} + std::string set_speed(double F, const std::string &comment = std::string(), const std::string &cooling_marker = std::string()) const; std::string travel_to_xy(const Vec2d &point, const std::string &comment = std::string()); std::string travel_to_xyz(const Vec3d &point, const std::string &comment = std::string()); std::string travel_to_z(double z, const std::string &comment = std::string()); @@ -90,26 +93,22 @@ public: static std::string set_additional_fan(unsigned int speed); //BBS void set_object_start_str(std::string start_string) { m_gcode_label_objects_start = start_string; } - bool is_object_start_str_empty() { return m_gcode_label_objects_start.empty(); } + bool empty_object_start_str() { return m_gcode_label_objects_start.empty(); } void set_object_end_str(std::string end_string) { m_gcode_label_objects_end = end_string; } - bool is_object_end_str_empty() { return m_gcode_label_objects_end.empty(); } - void add_object_start_labels(std::string &gcode); - void add_object_end_labels(std::string &gcode); + bool empty_object_end_str() { return m_gcode_label_objects_end.empty(); } + void add_object_start_labels(std::string& gcode); + void add_object_end_labels(std::string& gcode); void add_object_change_labels(std::string& gcode); //BBS: void set_current_position_clear(bool clear) { m_is_current_pos_clear = clear; }; bool is_current_position_clear() const { return m_is_current_pos_clear; }; //BBS: - static bool full_gcode_comment; + static const bool full_gcode_comment; //Radian threshold of slope for lazy lift and spiral lift; static const double slope_threshold; - //SoftFever - void set_is_bbl_machine(bool bval) {m_is_bbl_printers = bval;} - const bool is_bbl_printers() const {return m_is_bbl_printers;} - void set_is_first_layer(bool bval) { m_is_first_layer = bval; } - private: +private: // Extruders are sorted by their ID, so that binary search is possible. std::vector m_extruders; bool m_single_extruder_multi_material; @@ -118,15 +117,8 @@ public: // Limit for setting the acceleration, to respect the machine limits set for the Marlin firmware. // If set to zero, the limit is not in action. unsigned int m_max_acceleration; - double m_max_jerk; double m_last_jerk; - double m_max_jerk_z; - double m_max_jerk_e; - - unsigned int m_travel_acceleration; - unsigned int m_travel_jerk; - - + double m_max_jerk; //BBS unsigned int m_last_additional_fan_speed; int m_last_bed_temperature; @@ -144,15 +136,10 @@ public: //BBS: x, y offset for gcode generated double m_x_offset{ 0 }; double m_y_offset{ 0 }; - + std::string m_gcode_label_objects_start; std::string m_gcode_label_objects_end; - //SoftFever - bool m_is_bbl_printers = false; - double m_current_speed; - bool m_is_first_layer = true; - std::string _travel_to_z(double z, const std::string &comment); std::string _spiral_travel_to_z(double z, const Vec2d &ij_offset, const std::string &comment); std::string _retract(double length, double restart_extra, const std::string &comment); @@ -184,13 +171,6 @@ public: // static constexpr const int XYZF_EXPORT_DIGITS = 6; // static constexpr const int E_EXPORT_DIGITS = 9; #endif - static constexpr const std::array pow_10 { 1., 10., 100., 1000., 10000., 100000., 1000000., 10000000., 100000000., 1000000000. }; - static constexpr const std::array pow_10_inv { 1. / 1., 1. / 10., 1. / 100., 1. / 1000., 1. / 10000., 1. / 100000., 1. / 1000000., 1. / 10000000., 1. / 100000000., 1. / 1000000000. }; - - // Quantize doubles to a resolution of the G-code. - static double quantize(double v, size_t ndigits) { return std::round(v * pow_10[ndigits]) * pow_10_inv[ndigits]; } - static double quantize_xyzf(double v) { return quantize(v, XYZF_EXPORT_DIGITS); } - static double quantize_e(double v) { return quantize(v, E_EXPORT_DIGITS); } void emit_axis(const char axis, const double v, size_t digits); diff --git a/src/libslic3r/I18N.hpp b/src/libslic3r/I18N.hpp index db4fd22df..5d2068a3d 100644 --- a/src/libslic3r/I18N.hpp +++ b/src/libslic3r/I18N.hpp @@ -3,6 +3,12 @@ #include +#ifdef SLIC3R_CURRENTLY_COMPILING_GUI_MODULE + #ifndef SLIC3R_ALLOW_LIBSLIC3R_I18N_IN_SLIC3R + #error You included libslic3r/I18N.hpp into a file belonging to slic3r module. + #endif +#endif + namespace Slic3r { namespace I18N { @@ -15,4 +21,17 @@ namespace I18N { } // namespace Slic3r +// When this is included from slic3r, better do not define the translation functions. +// Macros from slic3r/GUI/I18N.hpp should be used there. +#ifndef SLIC3R_CURRENTLY_COMPILING_GUI_MODULE + #ifdef L + #error L macro is defined where it shouldn't be. Didn't you include slic3r/GUI/I18N.hpp in libslic3r by mistake? + #endif + namespace { + [[maybe_unused]] const char* L(const char* s) { return s; } + [[maybe_unused]] const char* L_CONTEXT(const char* s, const char* context) { return s; } + [[maybe_unused]] std::string _u8L(const char* s) { return Slic3r::I18N::translate(s); } + } +#endif + #endif /* slic3r_I18N_hpp_ */ diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 6a0cf9cfb..e8da20dfb 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -174,6 +174,7 @@ void Layer::make_perimeters() && config.gap_infill_speed.value == other_config.gap_infill_speed.value && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value && config.detect_overhang_wall == other_config.detect_overhang_wall + && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value && config.opt_serialize("inner_wall_line_width") == other_config.opt_serialize("inner_wall_line_width") && config.opt_serialize("outer_wall_line_width") == other_config.opt_serialize("outer_wall_line_width") && config.detect_thin_wall == other_config.detect_thin_wall diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 573d1791e..d123e0f34 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -71,12 +71,9 @@ Model& Model::assign_copy(const Model &rhs) // BBS this->plates_custom_gcodes = rhs.plates_custom_gcodes; this->curr_plate_index = rhs.curr_plate_index; - this->calib_pa_pattern.reset(); if (rhs.calib_pa_pattern) { - this->calib_pa_pattern = std::make_unique( - CalibPressureAdvancePattern(*rhs.calib_pa_pattern) - ); + this->calib_pa_pattern = std::make_unique(CalibPressureAdvancePattern(*rhs.calib_pa_pattern)); } // BBS: for design info @@ -107,8 +104,7 @@ Model& Model::assign_copy(Model &&rhs) // BBS this->plates_custom_gcodes = std::move(rhs.plates_custom_gcodes); this->curr_plate_index = rhs.curr_plate_index; - this->calib_pa_pattern.reset(); - this->calib_pa_pattern.swap(rhs.calib_pa_pattern); + this->calib_pa_pattern = std::move(rhs.calib_pa_pattern); //BBS: add auxiliary path logic // BBS: backup, all in one temp dir @@ -814,7 +810,7 @@ std::string Model::get_backup_path() std::time_t t = std::time(0); std::tm* now_time = std::localtime(&t); std::stringstream buf; - buf << "/orcaslicer_model/"; + buf << "/bamboo_model/"; buf << std::put_time(now_time, "%a_%b_%d/%H_%M_%S#"); buf << pid << "#"; buf << this->id().id; @@ -1382,11 +1378,19 @@ const BoundingBoxf3& ModelObject::raw_bounding_box() const } // This returns an accurate snug bounding box of the transformed object instance, without the translation applied. -BoundingBoxf3 ModelObject::instance_bounding_box(size_t instance_idx, bool dont_translate) const { - return instance_bounding_box(*this->instances[instance_idx], dont_translate); +BoundingBoxf3 ModelObject::instance_bounding_box(size_t instance_idx, bool dont_translate) const +{ + BoundingBoxf3 bb; + const Transform3d& inst_matrix = this->instances[instance_idx]->get_transformation().get_matrix(dont_translate); + for (ModelVolume *v : this->volumes) + { + if (v->is_model_part()) + bb.merge(v->mesh().transformed_bounding_box(inst_matrix * v->get_matrix())); + } + return bb; } -BoundingBoxf3 ModelObject::instance_bounding_box(const ModelInstance &instance, bool dont_translate) const { +BoundingBoxf3 ModelObject::instance_bounding_box(const ModelInstance& instance, bool dont_translate) const { BoundingBoxf3 bbox; const auto& inst_mat = instance.get_transformation().get_matrix(dont_translate); for (auto vol : this->volumes) { @@ -1396,7 +1400,6 @@ BoundingBoxf3 ModelObject::instance_bounding_box(const ModelInstance &instance, return bbox; } - //BBS: add convex bounding box BoundingBoxf3 ModelObject::instance_convex_hull_bounding_box(size_t instance_idx, bool dont_translate) const { @@ -2458,6 +2461,7 @@ void ModelObject::bake_xy_rotation_into_meshes(size_t instance_idx) assert(instance_idx < this->instances.size()); const Geometry::Transformation reference_trafo = this->instances[instance_idx]->get_transformation(); + if (Geometry::is_rotation_ninety_degrees(reference_trafo.get_rotation())) // nothing to do, scaling in the world coordinate space is possible in the representation of Geometry::Transformation. return; @@ -3246,7 +3250,6 @@ double Model::findMaxSpeed(const ModelObject* object) { double solidInfillSpeedObj = Model::printSpeedMap.solidInfillSpeed; double topSolidInfillSpeedObj = Model::printSpeedMap.topSolidInfillSpeed; double supportSpeedObj = Model::printSpeedMap.supportSpeed; - double smallPerimeterSpeedObj = Model::printSpeedMap.smallPerimeterSpeed; for (std::string objectKey : objectKeys) { if (objectKey == "inner_wall_speed"){ perimeterSpeedObj = object->config.opt_float(objectKey); @@ -3262,10 +3265,8 @@ double Model::findMaxSpeed(const ModelObject* object) { supportSpeedObj = object->config.opt_float(objectKey); if (objectKey == "outer_wall_speed") externalPerimeterSpeedObj = object->config.opt_float(objectKey); - if (objectKey == "small_perimeter_speed") - smallPerimeterSpeedObj = object->config.opt_float(objectKey); } - objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, std::max(smallPerimeterSpeedObj, objMaxSpeed))))))); + objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, objMaxSpeed)))))); if (objMaxSpeed <= 0) objMaxSpeed = 250.; return objMaxSpeed; } diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 36e4186f2..4f9fd54dd 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -22,6 +22,8 @@ //BBS: add stl #include "Format/STL.hpp" +#include "Calib.hpp" + #include #include #include diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index e424e0db8..cc61e7599 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1,6 +1,5 @@ #include "PerimeterGenerator.hpp" #include "ClipperUtils.hpp" -#include "ExtrusionEntity.hpp" #include "ExtrusionEntityCollection.hpp" #include "ShortestPath.hpp" #include "VariableWidth.hpp" @@ -276,7 +275,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime Polylines remain_polines; //BBS: don't calculate overhang degree when enable fuzzy skin. It's unmeaning - if (perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { + if (perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { for (auto it = lower_polygons_series->begin(); it != lower_polygons_series->end(); it++) { @@ -323,12 +322,31 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter if (remain_polines.size() != 0) { - extrusion_paths_append(paths, std::move(remain_polines), overhang_sampling_number - 1, int(0), - erOverhangPerimeter, perimeter_generator.mm3_per_mm_overhang(), - perimeter_generator.overhang_flow.width(), - perimeter_generator.overhang_flow.height()); - } + if (!((perimeter_generator.object_config->enable_support || perimeter_generator.object_config->enforce_support_layers > 0) + && perimeter_generator.object_config->support_top_z_distance.value == 0)) { + extrusion_paths_append( + paths, + std::move(remain_polines), + overhang_sampling_number - 1, + int(0), + erOverhangPerimeter, + perimeter_generator.mm3_per_mm_overhang(), + perimeter_generator.overhang_flow.width(), + perimeter_generator.overhang_flow.height()); + } else { + extrusion_paths_append( + paths, + std::move(remain_polines), + overhang_sampling_number - 1, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float)perimeter_generator.layer_height); + } + } + // Reapply the nearest point search for starting point. // We allow polyline reversal because Clipper may have randomly reversed polylines during clipping. chain_and_reorder_extrusion_paths(paths, &paths.front().first_point()); @@ -395,22 +413,38 @@ static ClipperLib_Z::Paths clip_extrusion(const ClipperLib_Z::Path& subject, con ClipperLib_Z::Clipper clipper; clipper.ZFillFunction([](const ClipperLib_Z::IntPoint& e1bot, const ClipperLib_Z::IntPoint& e1top, const ClipperLib_Z::IntPoint& e2bot, const ClipperLib_Z::IntPoint& e2top, ClipperLib_Z::IntPoint& pt) { + // The clipping contour may be simplified by clipping it with a bounding box of "subject" path. + // The clipping function used may produce self intersections outside of the "subject" bounding box. Such self intersections are + // harmless to the result of the clipping operation, + // Both ends of each edge belong to the same source: Either they are from subject or from clipping path. + assert(e1bot.z() >= 0 && e1top.z() >= 0); + assert(e2bot.z() >= 0 && e2top.z() >= 0); + assert((e1bot.z() == 0) == (e1top.z() == 0)); + assert((e2bot.z() == 0) == (e2top.z() == 0)); + + // Start & end points of the clipped polyline (extrusion path with a non-zero width). ClipperLib_Z::IntPoint start = e1bot; ClipperLib_Z::IntPoint end = e1top; - if (start.z() <= 0 && end.z() <= 0) { start = e2bot; end = e2top; } - assert(start.z() > 0 && end.z() > 0); + if (start.z() <= 0 && end.z() <= 0) { + // Self intersection on the source contour. + assert(start.z() == 0 && end.z() == 0); + pt.z() = 0; + } + else { + // Interpolate extrusion line width. + assert(start.z() > 0 && end.z() > 0); - // Interpolate extrusion line width. - double length_sqr = (end - start).cast().squaredNorm(); - double dist_sqr = (pt - start).cast().squaredNorm(); - double t = std::sqrt(dist_sqr / length_sqr); + double length_sqr = (end - start).cast().squaredNorm(); + double dist_sqr = (pt - start).cast().squaredNorm(); + double t = std::sqrt(dist_sqr / length_sqr); - pt.z() = start.z() + coord_t((end.z() - start.z()) * t); + pt.z() = start.z() + coord_t((end.z() - start.z()) * t); + } }); clipper.AddPath(subject, ClipperLib_Z::ptSubject, false); @@ -577,7 +611,9 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p ExtrusionPaths paths; // detect overhanging/bridging perimeters - if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) { + if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers + && !((perimeter_generator.object_config->enable_support || perimeter_generator.object_config->enforce_support_layers > 0) && + perimeter_generator.object_config->support_top_z_distance.value == 0)) { ClipperLib_Z::Path extrusion_path; extrusion_path.reserve(extrusion->size()); BoundingBox extrusion_path_bbox; @@ -609,7 +645,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p extrusion_paths_append(temp_paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); - if (perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { + if (perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { Flow flow = is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow; std::map> clipper_serise; @@ -759,100 +795,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p return extrusion_coll; } -void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, - ExPolygons &non_top_polygons, ExPolygons &fill_clip) const { - // other perimeters - coord_t perimeter_width = this->perimeter_flow.scaled_width(); - coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing(); - // external perimeters - coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width(); - coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing(); - - bool has_gap_fill = this->config->gap_infill_speed.value > 0; - - // split the polygons with top/not_top - // get the offset from solid surface anchor - coord_t offset_top_surface = - scale_(1.5 * (config->wall_loops.value == 0 - ? 0. - : unscaled(double(ext_perimeter_width + - perimeter_spacing * int(int(config->wall_loops.value) - int(1)))))); - // if possible, try to not push the extra perimeters inside the sparse infill - if (offset_top_surface > - 0.9 * (config->wall_loops.value <= 1 ? 0. : (perimeter_spacing * (config->wall_loops.value - 1)))) - offset_top_surface -= - coord_t(0.9 * (config->wall_loops.value <= 1 ? 0. : (perimeter_spacing * (config->wall_loops.value - 1)))); - else - offset_top_surface = 0; - // don't takes into account too thin areas - // skip if the exposed area is smaller than "min_width_top_surface" - double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), config->min_width_top_surface.get_abs_value(perimeter_width)); - - Polygons grown_upper_slices = offset(*this->upper_slices, min_width_top_surface); - - // get boungding box of last - BoundingBox last_box = get_extents(orig_polygons); - last_box.offset(SCALED_EPSILON); - - // get the Polygons upper the polygon this layer - Polygons upper_polygons_series_clipped = - ClipperUtils::clip_clipper_polygons_with_subject_bbox(grown_upper_slices, last_box); - - // set the clip to a virtual "second perimeter" - fill_clip = offset_ex(orig_polygons, -double(ext_perimeter_spacing)); - // get the real top surface - ExPolygons grown_lower_slices; - ExPolygons bridge_checker; - auto nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->wall_filament - 1); - // Check whether surface be bridge or not - if (this->lower_slices != NULL) { - // BBS: get the Polygons below the polygon this layer - Polygons lower_polygons_series_clipped = - ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->lower_slices, last_box); - double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width))); - // SoftFever: improve bridging - const float bridge_margin = - std::min(float(scale_(BRIDGE_INFILL_MARGIN)), float(scale_(nozzle_diameter * BRIDGE_INFILL_MARGIN / 0.4))); - bridge_checker = offset_ex(diff_ex(orig_polygons, lower_polygons_series_clipped, ApplySafetyOffset::Yes), - 1.5 * bridge_offset + bridge_margin + perimeter_spacing / 2); - } - ExPolygons delete_bridge = diff_ex(orig_polygons, bridge_checker, ApplySafetyOffset::Yes); - - ExPolygons top_polygons = diff_ex(delete_bridge, upper_polygons_series_clipped, ApplySafetyOffset::Yes); - // get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the - // min_width_top_surface we removed a bit before) - ExPolygons temp_gap = diff_ex(top_polygons, fill_clip); - ExPolygons inner_polygons = - diff_ex(orig_polygons, - offset_ex(top_polygons, offset_top_surface + min_width_top_surface - double(ext_perimeter_spacing / 2)), - ApplySafetyOffset::Yes); - // get the enlarged top surface, by using inner_polygons instead of upper_slices, and clip it for it to be exactly - // the polygons to fill. - top_polygons = diff_ex(fill_clip, inner_polygons, ApplySafetyOffset::Yes); - // increase by half peri the inner space to fill the frontier between last and stored. - top_fills = union_ex(top_fills, top_polygons); - //set the clip to the external wall but go back inside by infill_extrusion_width/2 to be sure the extrusion won't go outside even with a 100% overlap. - double infill_spacing_unscaled = this->config->sparse_infill_line_width.get_abs_value(nozzle_diameter); - if (infill_spacing_unscaled == 0) infill_spacing_unscaled = Flow::auto_extrusion_width(frInfill, nozzle_diameter); - fill_clip = offset_ex(orig_polygons, double(ext_perimeter_spacing / 2) - scale_(infill_spacing_unscaled / 2)); - // ExPolygons oldLast = last; - - non_top_polygons = intersection_ex(inner_polygons, orig_polygons); - if (has_gap_fill) - non_top_polygons = union_ex(non_top_polygons, temp_gap); - //{ - // std::stringstream stri; - // stri << this->layer_id << "_1_"<< i <<"_only_one_peri"<< ".svg"; - // SVG svg(stri.str()); - // svg.draw(to_polylines(top_fills), "green"); - // svg.draw(to_polylines(inner_polygons), "yellow"); - // svg.draw(to_polylines(top_polygons), "cyan"); - // svg.draw(to_polylines(oldLast), "orange"); - // svg.draw(to_polylines(last), "red"); - // svg.Close(); - //} -} void PerimeterGenerator::process_classic() { @@ -860,17 +803,12 @@ void PerimeterGenerator::process_classic() m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); coord_t perimeter_width = this->perimeter_flow.scaled_width(); 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; - if(config->precise_outer_wall) - ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.width() + this->perimeter_flow.width())); - else - ext_perimeter_spacing2 = scaled(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.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(); @@ -913,13 +851,17 @@ void PerimeterGenerator::process_classic() // 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->config->fuzzy_skin == FuzzySkinType::None) ? 0.2 * m_scaled_resolution : m_scaled_resolution; - for (const Surface &surface : this->slices->surfaces) { + //BBS: reorder the surface to reduce the travel time + ExPolygons surface_exp; + for (const Surface &surface : this->slices->surfaces) + surface_exp.push_back(surface.expolygon); + std::vector surface_order = chain_expolygons(surface_exp); + for (size_t order_idx = 0; order_idx < surface_order.size(); order_idx++) { + const Surface &surface = this->slices->surfaces[surface_order[order_idx]]; // detect how many perimeters must be generated for this island int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops - if (this->layer_id == 0 && this->config->only_one_wall_first_layer) - loop_number = 0; - //BBS: set the topmost layer to be one wall - if (loop_number > 0 && config->only_one_wall_top && this->upper_slices == nullptr) + //BBS: set the topmost and bottom most layer to be one wall + if (loop_number > 0 && ((this->object_config->top_one_wall_type != TopOneWallType::None && this->upper_slices == nullptr) || (this->object_config->only_one_wall_first_layer && layer_id == 0))) loop_number = 0; ExPolygons last = union_ex(surface.expolygon.simplify_p(surface_simplify_resolution)); @@ -1066,8 +1008,68 @@ void PerimeterGenerator::process_classic() //BBS: refer to superslicer //store surface for top infill if only_one_wall_top - if (i == 0 && i!=loop_number && config->only_one_wall_top && this->upper_slices != NULL) { - this->split_top_surfaces(last, top_fills, last, fill_clip); + if (i == 0 && i != loop_number && this->object_config->top_one_wall_type == TopOneWallType::Alltop && this->upper_slices != NULL) { + //split the polygons with top/not_top + //get the offset from solid surface anchor + coord_t offset_top_surface = scale_(1.5 * (config->wall_loops.value == 0 ? 0. : unscaled(double(ext_perimeter_width + perimeter_spacing * int(int(config->wall_loops.value) - int(1)))))); + // if possible, try to not push the extra perimeters inside the sparse infill + if (offset_top_surface > 0.9 * (config->wall_loops.value <= 1 ? 0. : (perimeter_spacing * (config->wall_loops.value - 1)))) + offset_top_surface -= coord_t(0.9 * (config->wall_loops.value <= 1 ? 0. : (perimeter_spacing * (config->wall_loops.value - 1)))); + else + offset_top_surface = 0; + //don't takes into account too thin areas + double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), 1.0 * (double(perimeter_width))); + + //BBS: get boungding box of last + BoundingBox last_box = get_extents(last); + last_box.offset(SCALED_EPSILON); + + // BBS: get the Polygons upper the polygon this layer + Polygons upper_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->upper_slices, last_box); + upper_polygons_series_clipped = offset(upper_polygons_series_clipped, min_width_top_surface); + + //set the clip to a virtual "second perimeter" + fill_clip = offset_ex(last, -double(ext_perimeter_spacing)); + // get the real top surface + ExPolygons grown_lower_slices; + ExPolygons bridge_checker; + // BBS: check whether surface be bridge or not + if (this->lower_slices != NULL) { + // BBS: get the Polygons below the polygon this layer + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->lower_slices, last_box); + + double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width))); + bridge_checker = offset_ex(diff_ex(last, lower_polygons_series_clipped, ApplySafetyOffset::Yes), 1.5 * bridge_offset); + } + ExPolygons delete_bridge = diff_ex(last, bridge_checker, ApplySafetyOffset::Yes); + + ExPolygons top_polygons = diff_ex(delete_bridge, upper_polygons_series_clipped, ApplySafetyOffset::Yes); + //get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the min_width_top_surface we removed a bit before) + ExPolygons temp_gap = diff_ex(top_polygons, fill_clip); + ExPolygons inner_polygons = diff_ex(last, + offset_ex(top_polygons, offset_top_surface + min_width_top_surface - double(ext_perimeter_spacing / 2)), + ApplySafetyOffset::Yes); + // get the enlarged top surface, by using inner_polygons instead of upper_slices, and clip it for it to be exactly the polygons to fill. + top_polygons = diff_ex(fill_clip, inner_polygons, ApplySafetyOffset::Yes); + // increase by half peri the inner space to fill the frontier between last and stored. + top_fills = union_ex(top_fills, top_polygons); + //set the clip to the external wall but go back inside by infill_extrusion_width/2 to be sure the extrusion won't go outside even with a 100% overlap. + double infill_spacing_unscaled = this->config->sparse_infill_line_width.value; + fill_clip = offset_ex(last, double(ext_perimeter_spacing / 2) - scale_(infill_spacing_unscaled / 2)); + last = intersection_ex(inner_polygons, last); + if (has_gap_fill) + last = union_ex(last,temp_gap); + //{ + // std::stringstream stri; + // stri << this->layer->id() << "_1_"<< i <<"_only_one_peri"<< ".svg"; + // SVG svg(stri.str()); + // svg.draw(to_polylines(top_fills), "green"); + // svg.draw(to_polylines(inner_polygons), "yellow"); + // svg.draw(to_polylines(top_polygons), "cyan"); + // svg.draw(to_polylines(oldLast), "orange"); + // svg.draw(to_polylines(last), "red"); + // svg.Close(); + //} } if (i == loop_number && (! has_gap_fill || this->config->sparse_infill_density.value == 0)) { @@ -1133,21 +1135,20 @@ void PerimeterGenerator::process_classic() } // at this point, all loops should be in contours[0] ExtrusionEntityCollection entities = traverse_loops(*this, contours.front(), thin_walls); - // if brim will be printed, reverse the order of perimeters so that // we continue inwards after having finished the brim // TODO: add test for perimeter order - bool is_outer_wall_first = - this->config->wall_infill_order == WallInfillOrder::OuterInnerInfill || - this->config->wall_infill_order == WallInfillOrder::InfillOuterInner; + bool is_outer_wall_first = + this->print_config->wall_infill_order == WallInfillOrder::OuterInnerInfill || + this->print_config->wall_infill_order == WallInfillOrder::InfillOuterInner; if (is_outer_wall_first || //BBS: always print outer wall first when there indeed has brim. (this->layer_id == 0 && - this->object_config->brim_type == BrimType::btOuterOnly && - this->object_config->brim_width.value > 0)) + this->object_config->brim_type == BrimType::btOuterOnly && + this->object_config->brim_width.value > 0)) entities.reverse(); - // SoftFever: sandwich mode - else if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) + //BBS. adjust wall generate seq + else if (this->print_config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) if (entities.entities.size() > 1){ int last_outer=0; int outer = 0; @@ -1160,7 +1161,6 @@ void PerimeterGenerator::process_classic() // append perimeters for this slice as a collection if (! entities.empty()) this->loops->append(entities); - } // for each loop of an island // fill gaps @@ -1194,12 +1194,10 @@ void PerimeterGenerator::process_classic() ++ irun; } #endif - // SoftFever: filter out tiny gap fills - polylines.erase(std::remove_if(polylines.begin(), polylines.end(), - [&](const ThickPolyline& p) { - return p.length() < scale_(config->filter_out_gap_fill.value); - }), polylines.end()); - + // OrcaSlicer: filter out tiny gap fills + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), [&](const ThickPolyline &p) { + return p.length()< scale_(this->config->filter_out_gap_fill.value); + }), polylines.end()); if (! polylines.empty()) { ExtrusionEntityCollection gap_fill; @@ -1213,8 +1211,7 @@ void PerimeterGenerator::process_classic() //FIXME Vojtech: This grows by a rounded extrusion width, not by line spacing, // therefore it may cover the area, but no the volume. last = diff_ex(last, gap_fill.polygons_covered_by_width(10.f)); - this->gap_fill->append(std::move(gap_fill.entities)); - + this->gap_fill->append(std::move(gap_fill.entities)); } } @@ -1275,6 +1272,39 @@ void PerimeterGenerator::process_classic() } // for each island } +//BBS: +void PerimeterGenerator::add_infill_contour_for_arachne( ExPolygons infill_contour, + int loops, + coord_t ext_perimeter_spacing, + coord_t perimeter_spacing, + coord_t min_perimeter_infill_spacing, + coord_t spacing, + bool is_inner_part) +{ + 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 insert = (loops < 0) ? 0: ext_perimeter_spacing; + if (is_inner_part || loops > 0) + insert = perimeter_spacing; + + insert = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(insert)))); + + Polygons inner_pp; + for (ExPolygon &ex : infill_contour) + ex.simplify_p(m_scaled_resolution, &inner_pp); + + this->fill_surfaces->append(offset2_ex(union_ex(inner_pp), float(-min_perimeter_infill_spacing / 2.), float(insert + min_perimeter_infill_spacing / 2.)), stInternal); + + append(*this->fill_no_overlap, offset2_ex(union_ex(inner_pp), float(-min_perimeter_infill_spacing / 2.), float(+min_perimeter_infill_spacing / 2.))); +} + // 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() @@ -1288,6 +1318,7 @@ void PerimeterGenerator::process_arachne() 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(); @@ -1309,20 +1340,15 @@ void PerimeterGenerator::process_arachne() // we need to process each island separately because we might have different // extra perimeters for each one for (const Surface& surface : this->slices->surfaces) { - coord_t bead_width_0 = ext_perimeter_spacing; - if (config->precise_outer_wall) - bead_width_0 = ext_perimeter_width + this->perimeter_flow.scaled_width() - perimeter_spacing; // detect how many perimeters must be generated for this island - int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops - if (this->layer_id == 0 && this->config->only_one_wall_first_layer) + int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops + if (loop_number > 0 && this->object_config->only_one_wall_first_layer && layer_id == 0 || + (this->object_config->top_one_wall_type == TopOneWallType::Topmost && this->upper_slices == nullptr)) loop_number = 0; - // BBS: set the topmost layer to be one wall - if (loop_number > 0 && config->only_one_wall_top && this->upper_slices == nullptr) - loop_number = 0; - ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), - config->precise_outer_wall ? -float(ext_perimeter_width / 2. - bead_width_0 / 2.) - : -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); - + + ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); + Polygons last_p = to_polygons(last); + double min_nozzle_diameter = *std::min_element(print_config->nozzle_diameter.values.begin(), print_config->nozzle_diameter.values.end()); Arachne::WallToolPathsParams input_params; { @@ -1341,67 +1367,76 @@ void PerimeterGenerator::process_arachne() input_params.wall_transition_angle = this->object_config->wall_transition_angle.value; input_params.wall_distribution_count = this->object_config->wall_distribution_count.value; } - coord_t wall_0_inset = 0; - //if (config->precise_outer_wall) - // wall_0_inset = 0.5 * (ext_perimeter_width + this->perimeter_flow.scaled_width() - ext_perimeter_spacing - - // perimeter_spacing); - std::vector out_shell; - ExPolygons top_fills; - ExPolygons fill_clip; - if (loop_number > 0 && config->only_one_wall_top && this->upper_slices != nullptr) { - // Check if current layer has surfaces that are not covered by upper layer (i.e., top surfaces) - ExPolygons non_top_polygons; - this->split_top_surfaces(last, top_fills, non_top_polygons, fill_clip); + int remain_loops = -1; + if (this->object_config->top_one_wall_type == TopOneWallType::Alltop) { + if (this->upper_slices != nullptr) + remain_loops = loop_number - 1; - if (top_fills.empty()) { - // No top surfaces, no special handling needed - } else { - // First we slice the outer shell - Polygons last_p = to_polygons(last); - Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, perimeter_spacing, coord_t(1), - wall_0_inset, layer_height, input_params); - out_shell = wallToolPaths.getToolPaths(); - // Make sure infill not overlap with wall - top_fills = intersection_ex(top_fills, wallToolPaths.getInnerContour()); - - if (!top_fills.empty()) { - // Then get the inner part that needs more walls - last = intersection_ex(non_top_polygons, wallToolPaths.getInnerContour()); - loop_number--; - } else { - // Give up the outer shell because we don't have any meaningful top surface - out_shell.clear(); - } - } + loop_number = 0; } - 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); - + Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), 0, layer_height, input_params); std::vector perimeters = wallToolPaths.getToolPaths(); + loop_number = int(perimeters.size()) - 1; - if (!out_shell.empty()) { - // Combine outer shells - size_t inset_offset = 0; - for (auto &p : out_shell) { - for (auto &l : p) { - if (l.inset_idx + 1 > inset_offset) { - inset_offset = l.inset_idx + 1; + //BBS: top one wall for arachne + ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); + ExPolygons inner_infill_contour; + + if( remain_loops >= 0 ) + { + ExPolygons the_layer_surface = infill_contour; + // BBS: get boungding box of last + BoundingBox infill_contour_box = get_extents(infill_contour); + infill_contour_box.offset(SCALED_EPSILON); + + // BBS: get the Polygons upper the polygon this layer + Polygons upper_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->upper_slices, infill_contour_box); + + infill_contour = diff_ex(infill_contour, upper_polygons_series_clipped); + + coord_t perimeter_width = this->perimeter_flow.scaled_width(); + //BBS: add bridge area + if (this->lower_slices != nullptr) { + BoundingBox infill_contour_box = get_extents(infill_contour); + infill_contour_box.offset(SCALED_EPSILON); + // BBS: get the Polygons below the polygon this layer + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->lower_slices, infill_contour_box); + + ExPolygons bridge_area = offset_ex(diff_ex(infill_contour, lower_polygons_series_clipped), std::max(ext_perimeter_spacing, perimeter_width)); + infill_contour = diff_ex(infill_contour, bridge_area); + } + //BBS: filter small area and extend top surface a bit to hide the wall line + double min_width_top_surface = std::max(double(ext_perimeter_spacing / 4 + 10), double(perimeter_width / 4)); + infill_contour = offset2_ex(infill_contour, -min_width_top_surface, min_width_top_surface + perimeter_width); + + //BBS: get the inner surface that not export to top + ExPolygons surface_not_export_to_top = diff_ex(the_layer_surface, infill_contour); + + //BBS: get real top surface + infill_contour = intersection_ex(infill_contour, the_layer_surface); + Polygons surface_not_export_to_top_p = to_polygons(surface_not_export_to_top); + Arachne::WallToolPaths innerWallToolPaths(surface_not_export_to_top_p, ext_perimeter_spacing, perimeter_spacing, coord_t(remain_loops + 1), 0, layer_height, input_params); + + std::vector perimeters_inner = innerWallToolPaths.getToolPaths(); + remain_loops = int(perimeters_inner.size()) - 1; + + //BBS: set wall's perporsity + if (!perimeters.empty()) { + for (int perimeter_idx = 0; perimeter_idx < perimeters_inner.size(); perimeter_idx++) { + if (perimeters_inner[perimeter_idx].empty()) continue; + + for (Arachne::ExtrusionLine &wall : perimeters_inner[perimeter_idx]) { + // BBS: 0 means outer wall + wall.inset_idx++; } } } - for (auto &p : perimeters) { - for (auto &l : p) { - l.inset_idx += inset_offset; - } - } + perimeters.insert(perimeters.end(), perimeters_inner.begin(), perimeters_inner.end()); - perimeters.insert(perimeters.begin(), out_shell.begin(), out_shell.end()); + inner_infill_contour = union_ex(innerWallToolPaths.getInnerContour()); } - loop_number = int(perimeters.size()) - 1; #ifdef ARACHNE_DEBUG { @@ -1426,9 +1461,8 @@ void PerimeterGenerator::process_arachne() int direction = -1; bool is_outer_wall_first = - this->config->wall_infill_order == WallInfillOrder::OuterInnerInfill || - this->config->wall_infill_order == WallInfillOrder::InfillOuterInner || - this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill; + this->print_config->wall_infill_order == WallInfillOrder::OuterInnerInfill || + this->print_config->wall_infill_order == WallInfillOrder::InfillOuterInner; if (is_outer_wall_first) { start_perimeter = 0; end_perimeter = int(perimeters.size()); @@ -1554,102 +1588,32 @@ void PerimeterGenerator::process_arachne() } } } - - - if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) { - 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 = 0; // index to run through the walls - int outer, first_internal, second_internal; // allocate index values - // run the re-ordering for all wall loops in the same island - while (position < ordered_extrusions.size()) { - outer = first_internal = second_internal = -1; // initialise all index values to -1 - // 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 - for (arr_i = position; arr_i < ordered_extrusions.size(); ++arr_i) { - switch (ordered_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) - first_internal = arr_i; - break; - case 2: // second internal wall - if (ordered_extrusions[arr_i].extrusion->inset_idx == 2 && second_internal == -1 && - arr_i > first_internal) - second_internal = arr_i; - break; - } - if (second_internal != -1) - break; // found all three perimeters to re-order + // BBS. adjust wall generate seq + if (this->print_config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) + if (ordered_extrusions.size() > 1) { + int last_outer = 0; + int outer = 0; + for (; outer < ordered_extrusions.size(); ++outer) + if (ordered_extrusions[outer].extrusion->inset_idx == 0 && outer - last_outer > 1) { + std::swap(ordered_extrusions[outer], ordered_extrusions[outer - 1]); + last_outer = outer; } - if (outer > -1 && first_internal > -1 && second_internal > -1) { // found perimeters to re-order? - const auto temp = ordered_extrusions[second_internal]; - ordered_extrusions[second_internal] = ordered_extrusions[first_internal]; - ordered_extrusions[first_internal] = ordered_extrusions[outer]; - ordered_extrusions[outer] = temp; - } else - break; // did not find any more candidates to re-order, so stop the while loop early - // go to the next perimeter to continue scanning for external walls in the same island - position = arr_i + 1; - } } - } - if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions); !extrusion_coll.empty()) this->loops->append(extrusion_coll); - ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); 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; - - 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_fills.empty()) { - infill_exp = union_ex(infill_exp, offset_ex(top_fills, double(inset))); - } - this->fill_surfaces->append(infill_exp, stInternal); + add_infill_contour_for_arachne(infill_contour, loop_number, ext_perimeter_spacing, perimeter_spacing, min_perimeter_infill_spacing, spacing, false); + + //BBS: add infill_contour of top one wall part + if( !inner_infill_contour.empty() ) + add_infill_contour_for_arachne(inner_infill_contour, remain_loops, ext_perimeter_spacing, perimeter_spacing, min_perimeter_infill_spacing, spacing, true); - // 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_fills.empty()) - polyWithoutOverlap = union_ex(polyWithoutOverlap, top_fills); - this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); - } } } @@ -1680,7 +1644,6 @@ std::map PerimeterGenerator::generate_lower_polygons_series(float // BBS: increase start_offset a little to avoid to calculate 90 degree as overhang offset_series[0] = start_offset + 0.5 * (end_offset - start_offset) / (overhang_sampling_number - 1); offset_series[overhang_sampling_number - 2] = end_offset; - offset_series.back() = 0.1 * nozzle_diameter; std::map lower_polygons_series; if (this->lower_slices == NULL) { diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index 5a23ed88c..7436359fc 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -69,6 +69,8 @@ public: void process_classic(); void process_arachne(); + void add_infill_contour_for_arachne( ExPolygons infill_contour, int loops, coord_t ext_perimeter_spacing, coord_t perimeter_spacing, coord_t min_perimeter_infill_spacing, coord_t spacing, bool is_inner_part ); + double ext_mm3_per_mm() const { return m_ext_mm3_per_mm; } double mm3_per_mm() const { return m_mm3_per_mm; } double mm3_per_mm_overhang() const { return m_mm3_per_mm_overhang; } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 74a0a7442..d5daf3ee1 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1,6 +1,5 @@ #include -#include "Config.hpp" #include "Exception.hpp" #include "Preset.hpp" #include "PresetBundle.hpp" @@ -678,6 +677,25 @@ std::string Preset::get_current_printer_type(PresetBundle *preset_bundle) return ""; } +bool Preset::has_lidar(PresetBundle *preset_bundle) +{ + bool has_lidar = false; + if (preset_bundle) { + auto config = &preset_bundle->printers.get_edited_preset().config; + std::string vendor_name; + for (auto vendor_profile : preset_bundle->vendors) { + for (auto vendor_model : vendor_profile.second.models) + if (vendor_model.name == config->opt_string("printer_model")) { + vendor_name = vendor_profile.first; + break; + } + } + if (!vendor_name.empty()) + has_lidar = vendor_name.compare("BBL") == 0 ? true : false; + } + return has_lidar; +} + bool Preset::is_custom_defined() { if (custom_defined == "1") @@ -685,9 +703,9 @@ bool Preset::is_custom_defined() return false; } -bool Preset::has_lidar(PresetBundle *preset_bundle) +bool Preset::is_bbl_vendor_preset(PresetBundle *preset_bundle) { - bool has_lidar = false; + bool is_bbl_vendor_preset = true; if (preset_bundle) { auto config = &preset_bundle->printers.get_edited_preset().config; std::string vendor_name; @@ -700,9 +718,9 @@ bool Preset::has_lidar(PresetBundle *preset_bundle) } } if (!vendor_name.empty()) - has_lidar = vendor_name.compare("BBL") == 0 ? true : false; + is_bbl_vendor_preset = vendor_name.compare("BBL") == 0 ? true : false; } - return has_lidar; + return is_bbl_vendor_preset; } BedType Preset::get_default_bed_type(PresetBundle* preset_bundle) @@ -739,10 +757,10 @@ static std::vector s_Preset_print_options { "layer_height", "initial_layer_print_height", "wall_loops", "slice_closing_radius", "spiral_mode", "slicing_mode", "top_shell_layers", "top_shell_thickness", "bottom_shell_layers", "bottom_shell_thickness", "ensure_vertical_shell_thickness", "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", - "seam_position", "staggered_inner_seams", "wall_infill_order", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", - "infill_direction", - "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern", - "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", + "seam_position", "wall_infill_order", "sparse_infill_density", "sparse_infill_pattern", "sparse_infill_anchor", "sparse_infill_anchor_max", + "top_surface_pattern", "bottom_surface_pattern", "internal_solid_infill_pattern", "infill_direction", "bridge_angle", + "minimum_sparse_infill_area", "reduce_infill_retraction", "ironing_pattern", "ironing_type", + "ironing_flow", "ironing_speed", "ironing_spacing", "max_travel_detour_distance", "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", #ifdef HAS_PRESSURE_EQUALIZER @@ -750,15 +768,19 @@ static std::vector s_Preset_print_options { #endif /* HAS_PRESSURE_EQUALIZER */ "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", - "outer_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "skirt_loops", "skirt_speed", "skirt_distance", "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", + "bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", "outer_wall_acceleration", + "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "inner_wall_acceleration", "sparse_infill_acceleration", + "accel_to_decel_enable", "accel_to_decel_factor", "skirt_loops", "skirt_distance", + "skirt_height", "draft_shield", + "brim_width", "brim_object_gap", "brim_type", "enable_support", "support_type", "support_threshold_angle", "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", + // BBS "independent_support_layer_height", "support_angle", "support_interface_top_layers", "support_interface_bottom_layers", "support_interface_pattern", "support_interface_spacing", "support_interface_loop_pattern", - "support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "bridge_no_support", "thick_bridges", "max_bridge_length", "print_sequence", "support_remove_small_overhang", + "support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "support_remove_small_overhang", + "bridge_no_support", "thick_bridges", "max_bridge_length", "print_sequence", "filename_format", "wall_filament", "support_bottom_z_distance", "sparse_infill_filament", "solid_infill_filament", "support_filament", "support_interface_filament", "ooze_prevention", "standby_temperature_delta", "interface_shells", "line_width", "initial_layer_line_width", @@ -768,25 +790,23 @@ static std::vector s_Preset_print_options { "prime_tower_width", "prime_tower_brim_width", "prime_volume", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", "flush_into_infill", "flush_into_objects", "flush_into_support", + // BBS "tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", - "tree_support_branch_diameter", + "tree_support_branch_diameter","tree_support_brim_width", "detect_narrow_internal_solid_infill", "gcode_add_line_number", "enable_arc_fitting", "infill_combination", /*"adaptive_layer_height",*/ "support_bottom_interface_spacing", "enable_overhang_speed", "overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed", - "initial_layer_infill_speed", "only_one_wall_top", + "initial_layer_infill_speed", "top_one_wall_type", "only_one_wall_first_layer", "timelapse_type", "internal_bridge_support_thickness", "wall_generator", "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "wall_distribution_count", "min_feature_size", "min_bead_width", "post_process", - "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", "min_width_top_surface", - "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk", - "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap", - "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", - "bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration", - "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", - "tree_support_brim_width", "gcode_comments", "gcode_label_objects", - "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max", - "make_overhang_printable", "make_overhang_printable_angle", "make_overhang_printable_hole_size" - + "seam_gap", "wipe_speed", "top_solid_infill_flow_ratio", "initial_layer_flow_ratio", + "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk", "travel_jerk", + "filter_out_gap_fill", + // calib + "print_flow_ratio", + //Orca + "exclude_object" }; static std::vector s_Preset_filament_options { @@ -802,15 +822,15 @@ static std::vector s_Preset_filament_options { "fan_max_speed", "enable_overhang_bridge_fan", "overhang_fan_speed", "overhang_fan_threshold", "close_fan_the_first_x_layers", "full_fan_speed_layer", "fan_cooling_layer_time", "slow_down_layer_time", "slow_down_min_speed", "filament_start_gcode", "filament_end_gcode", // Retract overrides - "filament_retraction_length", "filament_z_hop", "filament_z_hop_types", "filament_retract_lift_above", "filament_retract_lift_below", "filament_retract_lift_enforce", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", "filament_retraction_minimum_travel", + "filament_retraction_length", "filament_z_hop", "filament_z_hop_types", "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", "filament_retraction_minimum_travel", "filament_retract_when_changing_layer", "filament_wipe", "filament_retract_before_wipe", // Profile compatibility "filament_vendor", "compatible_prints", "compatible_prints_condition", "compatible_printers", "compatible_printers_condition", "inherits", //BBS "filament_wipe_distance", "additional_cooling_fan_speed", "bed_temperature_difference", "nozzle_temperature_range_low", "nozzle_temperature_range_high", - //SoftFever - "enable_pressure_advance", "pressure_advance","chamber_temperature", "filament_shrink", "support_material_interface_fan_speed" /*,"filament_seam_gap"*/ + //OrcaSlicer + "enable_pressure_advance", "pressure_advance", "chamber_temperatures" }; static std::vector s_Preset_machine_limits_options { @@ -824,20 +844,20 @@ static std::vector s_Preset_machine_limits_options { static std::vector s_Preset_printer_options { "printer_technology", "printable_area", "bed_exclude_area","bed_custom_texture", "bed_custom_model", "gcode_flavor", - "fan_kickstart", "fan_speedup_time", "fan_speedup_overhangs", "single_extruder_multi_material", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "layer_change_gcode", "change_filament_gcode", - "printer_model", "printer_variant", "printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "printer_model", "printer_variant", "printable_height", "extruder_clearance_radius", "extruder_clearance_max_radius","extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "default_print_profile", "inherits", "silent_mode", // BBS "scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "machine_pause_gcode", "template_custom_gcode", - "nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", "retract_lift_enforce", - //SoftFever + "nozzle_type","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", + //OrcaSlicer "host_type", "print_host", "printhost_apikey", "print_host_webui", "printhost_cafile","printhost_port","printhost_authorization_type", - "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", - "use_firmware_retraction", "use_relative_e_distances", "bbl_calib_mark_logo"}; + "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", + "use_relative_e_distances", "extruder_type" +}; static std::vector s_Preset_sla_print_options { "layer_height", @@ -1725,14 +1745,12 @@ std::pair PresetCollection::load_external_preset( { // Load the preset over a default preset, so that the missing fields are filled in from the default preset. DynamicPrintConfig cfg(this->default_preset_for(combined_config).config); - // SoftFever: ignore print connection info from project - auto keys = cfg.keys(); - keys.erase(std::remove_if(keys.begin(), keys.end(), - [](std::string &val) { - return val == "print_host" || val == "print_host_webui" || val == "printhost_apikey" || - val == "printhost_cafile"; - }), - keys.end()); + // OrcaSlicer: ignore print connection info from project + cfg.erase("print_host"); + cfg.erase("print_host_webui"); + cfg.erase("printhost_apikey"); + cfg.erase("printhost_cafile"); + const auto &keys = cfg.keys(); cfg.apply_only(combined_config, keys, true); std::string &inherits = Preset::inherits(cfg); @@ -2345,7 +2363,7 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi if (this_opt != nullptr && other_opt != nullptr && *this_opt != *other_opt) { //BBS: add bed_exclude_area - if (opt_key == "printable_area" || opt_key == "bed_exclude_area" || opt_key == "compatible_prints" || opt_key == "compatible_printers" || opt_key == "thumbnails") { + if (opt_key == "printable_area" || opt_key == "bed_exclude_area" || opt_key == "compatible_prints" || opt_key == "compatible_printers") { // Scalar variable, or a vector variable, which is independent from number of extruders, // thus the vector is presented to the user as a single input. diff.emplace_back(opt_key); @@ -2667,7 +2685,6 @@ static std::vector s_PhysicalPrinter_opts { "printer_technology", "host_type", "print_host", - "print_host_webui", "printhost_apikey", "printhost_cafile", "printhost_port", @@ -2839,8 +2856,6 @@ void PhysicalPrinterCollection::load_printers( // see https://github.com/prusa3d/PrusaSlicer/issues/732 boost::filesystem::path dir = boost::filesystem::absolute(boost::filesystem::path(dir_path) / subdir).make_preferred(); m_dir_path = dir.string(); - if(!boost::filesystem::exists(dir)) - return; std::string errors_cummulative; // Store the loaded printers into a new vector, otherwise the binary search for already existing presets would be broken. std::deque printers_loaded; @@ -3220,9 +3235,6 @@ namespace PresetUtils { if (!boost::filesystem::exists(boost::filesystem::path(out))) out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->hotend_model; } - - if (out.empty() ||!boost::filesystem::exists(boost::filesystem::path(out))) - out = Slic3r::resources_dir() + "/profiles/hotend.stl"; return out; } } // namespace PresetUtils diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 6ccf9331b..b3a5d775b 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -300,9 +300,11 @@ public: std::string get_filament_type(std::string &display_filament_type); std::string get_printer_type(PresetBundle *preset_bundle); // get edited preset type std::string get_current_printer_type(PresetBundle *preset_bundle); // get current preset type - bool is_custom_defined(); bool has_lidar(PresetBundle *preset_bundle); + bool is_custom_defined(); + + bool is_bbl_vendor_preset(PresetBundle *preset_bundle); BedType get_default_bed_type(PresetBundle *preset_bundle); bool has_cali_lines(PresetBundle* preset_bundle); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 61c59e5ab..037504f32 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -42,10 +42,10 @@ static std::vector s_project_options { }; //BBS: add BBL as default -const char *PresetBundle::BBL_BUNDLE = "Custom"; -const char *PresetBundle::BBL_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; +const char *PresetBundle::BBL_BUNDLE = "BBL"; +const char *PresetBundle::BBL_DEFAULT_PRINTER_MODEL = "Bambu Lab X1 Carbon"; const char *PresetBundle::BBL_DEFAULT_PRINTER_VARIANT = "0.4"; -const char *PresetBundle::BBL_DEFAULT_FILAMENT = "My Generic PLA"; +const char *PresetBundle::BBL_DEFAULT_FILAMENT = "Generic PLA"; PresetBundle::PresetBundle() : prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast(FullPrintConfig::defaults())) @@ -88,7 +88,7 @@ PresetBundle::PresetBundle() for (size_t i = 0; i < 1; ++i) { // The following ugly switch is to avoid printers.preset(0) to return the edited instance, as the 0th default is the current one. Preset &preset = this->printers.default_preset(i); - for (const char *key : {"printer_settings_id", "printer_model", "printer_variant", "thumbnails"}) preset.config.optptr(key, true); + for (const char *key : {"printer_settings_id", "printer_model", "printer_variant"}) preset.config.optptr(key, true); //if (i == 0) { preset.config.optptr("default_print_profile", true); preset.config.option("default_filament_profile", true); @@ -512,9 +512,6 @@ std::string PresetBundle::get_hotend_model_for_printer_model(std::string model_n out = Slic3r::resources_dir() + "/profiles/" + vendor_name + "/" + hotend_stl; } - if (out.empty() ||!boost::filesystem::exists(boost::filesystem::path(out))) - out = Slic3r::resources_dir() + "/profiles/hotend.stl"; - return out; } @@ -919,7 +916,7 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::mapis_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { + if (it->is_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":prints erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_print_name) need_reset_print_preset = true; @@ -939,7 +936,7 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::mapis_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { + if (it->is_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":filaments erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_filament_name) need_reset_filament_preset = true; @@ -1267,72 +1264,6 @@ void PresetBundle::load_installed_sla_materials(AppConfig &config) preset.set_visible_from_appconfig(config); } -void PresetBundle::update_selections(AppConfig &config) -{ - std::string initial_printer_profile_name = printers.get_selected_preset_name(); - // Orca: load from orca_presets - std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); - std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); - - // Selects the profiles, which were selected at the last application close. - prints.select_preset_by_name_strict(initial_print_profile_name); - filaments.select_preset_by_name_strict(initial_filament_profile_name); - - // Load the names of the other filament profiles selected for a multi-material printer. - // Load it even if the current printer technology is SLA. - // The possibly excessive filament names will be later removed with this->update_multi_material_filament_presets() - // once the FFF technology gets selected. - this->filament_presets = { filaments.get_selected_preset_name() }; - for (unsigned int i = 1; i < 1000; ++ i) { - char name[64]; - sprintf(name, "filament_%02u", i); - auto f_name = config.get_printer_setting(initial_printer_profile_name, name); - if (f_name.empty()) - break; - this->filament_presets.emplace_back(remove_ini_suffix(f_name)); - } - std::vector filament_colors; - auto f_colors = config.get_printer_setting(initial_printer_profile_name, "filament_colors"); - if (!f_colors.empty()) { - boost::algorithm::split(filament_colors, f_colors, boost::algorithm::is_any_of(",")); - } - filament_colors.resize(filament_presets.size(), "#FF8040"); - project_config.option("filament_colour")->values = filament_colors; - std::vector matrix; - if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_matrix")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); - auto flush_volumes_matrix = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), flush_volumes_matrix.end()); - } - if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_vector")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), boost::algorithm::is_any_of("|")); - auto flush_volumes_vector = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), flush_volumes_vector.end()); - } - if (config.has("app", "flush_multiplier")) { - std::string str_flush_multiplier = config.get("app", "flush_multiplier"); - if (!str_flush_multiplier.empty()) - project_config.option("flush_multiplier")->set(new ConfigOptionFloat(std::stof(str_flush_multiplier))); - } - - // Update visibility of presets based on their compatibility with the active printer. - // Always try to select a compatible print and filament preset to the current printer preset, - // as the application may have been closed with an active "external" preset, which does not - // exist. - this->update_compatible(PresetSelectCompatibleType::Always); - this->update_multi_material_filament_presets(); - - std::string first_visible_filament_name; - for (auto & fp : filament_presets) { - if (auto it = filaments.find_preset_internal(fp); it == filaments.end() || !it->is_visible || !it->is_compatible) { - if (first_visible_filament_name.empty()) - first_visible_filament_name = filaments.first_compatible().name; - fp = first_visible_filament_name; - } - } - -} - // Load selections (current print, current filaments, current printer) from config.ini // This is done on application start up or after updates are applied. void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& preferred_selection/* = PresetPreferences()*/) @@ -1346,8 +1277,10 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p this->load_installed_sla_materials(config); // Parse the initial print / filament / printer profile names. - // std::string initial_sla_print_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_PRINT_NAME)); - // std::string initial_sla_material_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_MATERIALS_NAME)); + std::string initial_print_profile_name = remove_ini_suffix(config.get("presets", PRESET_PRINT_NAME)); + std::string initial_sla_print_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_PRINT_NAME)); + std::string initial_filament_profile_name = remove_ini_suffix(config.get("presets", PRESET_FILAMENT_NAME)); + std::string initial_sla_material_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_MATERIALS_NAME)); std::string initial_printer_profile_name = remove_ini_suffix(config.get("presets", PRESET_PRINTER_NAME)); // Activate print / filament / printer profiles from either the config, @@ -1361,11 +1294,6 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant); printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true); - // Orca: load from orca_presets - // const auto os_presets = config.get_machine_settings(initial_printer_profile_name); - std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); - std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); - //BBS: set default print/filament profiles to BBL's default setting if (preferred_printer) { @@ -1381,8 +1309,8 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p // Selects the profile, leaves it to -1 if the initial profile name is empty or if it was not found. prints.select_preset_by_name_strict(initial_print_profile_name); filaments.select_preset_by_name_strict(initial_filament_profile_name); - // sla_prints.select_preset_by_name_strict(initial_sla_print_profile_name); - // sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name); + sla_prints.select_preset_by_name_strict(initial_sla_print_profile_name); + sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name); // Load the names of the other filament profiles selected for a multi-material printer. // Load it even if the current printer technology is SLA. @@ -1392,26 +1320,24 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p for (unsigned int i = 1; i < 1000; ++ i) { char name[64]; sprintf(name, "filament_%02u", i); - auto f_name = config.get_printer_setting(initial_printer_profile_name, name); - if (f_name.empty()) + if (! config.has("presets", name)) break; - this->filament_presets.emplace_back(remove_ini_suffix(f_name)); + this->filament_presets.emplace_back(remove_ini_suffix(config.get("presets", name))); } std::vector filament_colors; - auto f_colors = config.get_printer_setting(initial_printer_profile_name, "filament_colors"); - if (!f_colors.empty()) { - boost::algorithm::split(filament_colors, f_colors, boost::algorithm::is_any_of(",")); + if (config.has("presets", "filament_colors")) { + boost::algorithm::split(filament_colors, config.get("presets", "filament_colors"), boost::algorithm::is_any_of(",")); } - filament_colors.resize(filament_presets.size(), "#FF8040"); + filament_colors.resize(filament_presets.size(), "#00AE42"); project_config.option("filament_colour")->values = filament_colors; std::vector matrix; - if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_matrix")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); + if (config.has("presets", "flush_volumes_matrix")) { + boost::algorithm::split(matrix, config.get("presets", "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); auto flush_volumes_matrix = matrix | boost::adaptors::transformed(boost::lexical_cast); project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), flush_volumes_matrix.end()); } - if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_vector")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), boost::algorithm::is_any_of("|")); + if (config.has("presets", "flush_volumes_vector")) { + boost::algorithm::split(matrix, config.get("presets", "flush_volumes_vector"), boost::algorithm::is_any_of("|")); auto flush_volumes_vector = matrix | boost::adaptors::transformed(boost::lexical_cast); project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), flush_volumes_vector.end()); } @@ -1473,32 +1399,27 @@ void PresetBundle::export_selections(AppConfig &config) assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() >= 1); //assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front()); config.clear_section("presets"); - auto printer_name = printers.get_selected_preset_name(); - config.set("presets", PRESET_PRINTER_NAME, printer_name); - - config.clear_printer_settings(printer_name); - config.set_printer_setting(printer_name, PRESET_PRINTER_NAME, printer_name); - config.set_printer_setting(printer_name, PRESET_PRINT_NAME, prints.get_selected_preset_name()); - config.set_printer_setting(printer_name, PRESET_FILAMENT_NAME, filament_presets.front()); - config.set_printer_setting(printer_name, "curr_bed_type", config.get("curr_bed_type")); + config.set("presets", PRESET_PRINT_NAME, prints.get_selected_preset_name()); + config.set("presets", PRESET_FILAMENT_NAME, filament_presets.front()); for (unsigned i = 1; i < filament_presets.size(); ++i) { char name[64]; assert(!filament_presets[i].empty()); sprintf(name, "filament_%02u", i); - config.set_printer_setting(printer_name, name, filament_presets[i]); + config.set("presets", name, filament_presets[i]); } CNumericLocalesSetter locales_setter; std::string filament_colors = boost::algorithm::join(project_config.option("filament_colour")->values, ","); - config.set_printer_setting(printer_name, "filament_colors", filament_colors); + config.set("presets", "filament_colors", filament_colors); std::string flush_volumes_matrix = boost::algorithm::join(project_config.option("flush_volumes_matrix")->values | boost::adaptors::transformed(static_cast(std::to_string)), "|"); - config.set_printer_setting(printer_name, "flush_volumes_matrix", flush_volumes_matrix); + config.set("presets", "flush_volumes_matrix", flush_volumes_matrix); std::string flush_volumes_vector = boost::algorithm::join(project_config.option("flush_volumes_vector")->values | boost::adaptors::transformed(static_cast(std::to_string)), "|"); - config.set_printer_setting(printer_name, "flush_volumes_vector", flush_volumes_vector); + config.set("presets", "flush_volumes_vector", flush_volumes_vector); + config.set("presets", PRESET_PRINTER_NAME, printers.get_selected_preset_name()); auto flush_multi_opt = project_config.option("flush_multiplier"); config.set("flush_multiplier", std::to_string(flush_multi_opt ? flush_multi_opt->getFloat() : 1.0f)); @@ -1539,7 +1460,8 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns) { std::vector filament_presets; std::vector filament_colors; - for (auto &ams : filament_ams_list) { + for (auto &entry : filament_ams_list) { + auto & ams = entry.second; auto filament_id = ams.opt_string("filament_id", 0u); auto filament_color = ams.opt_string("filament_colour", 0u); auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); @@ -1552,10 +1474,14 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns) auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == filament_id; }); if (iter == filaments.end()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; - auto filament_type = "Generic " + ams.opt_string("filament_type", 0u); - iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { return f.is_compatible && f.is_system + auto filament_type = ams.opt_string("filament_type", 0u); + if (!filament_type.empty()) { + filament_type = "Generic " + filament_type; + iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { + return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); }); + } if (iter == filaments.end()) iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { return f.is_compatible && f.is_system; }); if (iter == filaments.end()) @@ -1637,11 +1563,11 @@ DynamicPrintConfig PresetBundle::full_config() const DynamicPrintConfig PresetBundle::full_config_secure() const { DynamicPrintConfig config = this->full_config(); - //FIXME legacy, the keys should not be there after conversion to a Physical Printer profile. - config.erase("print_host"); + //BBS example: config.erase("print_host"); config.erase("print_host_webui"); config.erase("printhost_apikey"); - config.erase("printhost_cafile"); return config; + config.erase("printhost_cafile"); + return config; } const std::set ignore_settings_list ={ @@ -3645,9 +3571,9 @@ std::vector PresetBundle::export_current_configs(const std::string if (overwrite == 0) overwrite = 1; if (boost::filesystem::exists(file) && overwrite < 2) { overwrite = override_confirm(preset->name); - if (overwrite == 0 || overwrite == 2) - continue; } + if (overwrite == 0 || overwrite == 2) + continue; preset->config.save_to_json(file, preset->name, "", preset->version.to_string()); result.push_back(file); } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index f9f507182..d28ccc1e0 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -86,8 +86,6 @@ public: //BBS: check whether this is the only edited filament bool is_the_only_edited_filament(unsigned int filament_index); - // Orca: update selected filament and print - void update_selections(AppConfig &config); void set_calibrate_printer(std::string name); PresetCollection prints; @@ -102,7 +100,7 @@ public: // extruders.size() should be the same as printers.get_edited_preset().config.nozzle_diameter.size() std::vector filament_presets; // BBS: ams - std::vector filament_ams_list; + std::map filament_ams_list; // Calibrate Preset const * calibrate_printer = nullptr; std::set calibrate_filaments; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index bea38502c..de2f02a32 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -23,7 +23,6 @@ #include #include #include -#include //BBS: add json support #include "nlohmann/json.hpp" @@ -80,7 +79,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "before_layer_change_gcode", "enable_pressure_advance", "pressure_advance", - "enable_overhang_bridge_fan", + "enable_overhang_bridge_fan" "overhang_fan_speed", "overhang_fan_threshold", "slow_down_for_layer_cooling", @@ -93,28 +92,23 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid", "extruder_clearance_radius", + "extruder_clearance_max_radius", "extruder_colour", "extruder_offset", "filament_flow_ratio", "reduce_fan_stop_start_freq", "fan_cooling_layer_time", "full_fan_speed_layer", - "fan_kickstart", - "fan_speedup_overhangs", - "fan_speedup_time", "filament_colour", "default_filament_colour", "filament_diameter", "filament_density", "filament_cost", - "outer_wall_acceleration", - "inner_wall_acceleration", "initial_layer_acceleration", + "outer_wall_acceleration", "top_surface_acceleration", - "bridge_acceleration", - "travel_acceleration", - "sparse_infill_acceleration", - "internal_solid_infill_acceleration" + "accel_to_decel_enable", + "accel_to_decel_factor", // BBS "cool_plate_temp_initial_layer", "eng_plate_temp_initial_layer", @@ -137,14 +131,10 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "retract_when_changing_layer", "retraction_length", "retract_length_toolchange", - "z_hop", - "retract_lift_above", - "retract_lift_below", - "retract_lift_enforce", + "z_hop", "retract_restart_extra", "retract_restart_extra_toolchange", "retraction_speed", - "use_firmware_retraction", "slow_down_layer_time", "standby_temperature_delta", "machine_start_gcode", @@ -155,23 +145,23 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "wipe_distance", "curr_bed_type", "nozzle_volume", - "chamber_temperature", - "thumbnails", - "nozzle_hrc", + "chamber_temperatures", "required_nozzle_HRC", "upward_compatible_machine", - // SoftFever + //OrcaSlicer "seam_gap", - "role_based_wipe_speed", - "wipe_speed", - "use_relative_e_distances", - "accel_to_decel_enable", - "accel_to_decel_factor", - "wipe_on_loops", - "gcode_comments", - "gcode_label_objects", + "wipe_speed" + "default_jerk", + "outer_wall_jerk", + "inner_wall_jerk", + "infill_jerk", + "top_surface_jerk", + "initial_layer_jerk", + "travel_jerk", + "inner_wall_acceleration", + "sparse_infill_acceleration", "exclude_object", - "support_material_interface_fan_speed" + "use_relative_e_distances" }; static std::unordered_set steps_ignore; @@ -189,7 +179,6 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n // These steps have no influence on the G-code whatsoever. Just ignore them. } else if ( opt_key == "skirt_loops" - || opt_key == "skirt_speed" || opt_key == "skirt_height" || opt_key == "draft_shield" || opt_key == "skirt_distance" @@ -201,7 +190,6 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n } else if ( opt_key == "initial_layer_print_height" || opt_key == "nozzle_diameter" - || opt_key == "filament_shrink" || opt_key == "resolution" // Spiral Vase forces different kind of slicing than the normal model: // In Spiral Vase mode, holes are closed and only the largest area contour is kept at each layer. @@ -210,8 +198,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n osteps.emplace_back(posSlice); } else if ( opt_key == "print_sequence" + || opt_key == "chamber_temperatures" || opt_key == "filament_type" - || opt_key == "chamber_temperature" || opt_key == "nozzle_temperature_initial_layer" || opt_key == "filament_minimal_purge_on_wipe_tower" || opt_key == "filament_max_volumetric_speed" @@ -236,9 +224,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "initial_layer_infill_speed" || opt_key == "travel_speed" || opt_key == "travel_speed_z" - || opt_key == "initial_layer_speed" - || opt_key == "initial_layer_travel_speed" - || opt_key == "slow_down_layers") { + || opt_key == "initial_layer_speed") { //|| opt_key == "z_offset") { steps.emplace_back(psWipeTower); steps.emplace_back(psSkirtBrim); @@ -262,7 +248,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n osteps.emplace_back(posPerimeters); osteps.emplace_back(posInfill); osteps.emplace_back(posSupportMaterial); - osteps.emplace_back(posSimplifyPath); + osteps.emplace_back(posSimplifyWall); osteps.emplace_back(posSimplifyInfill); osteps.emplace_back(posSimplifySupportPath); steps.emplace_back(psSkirtBrim); @@ -288,9 +274,9 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n return invalidated; } -void Print::set_calib_params(const Calib_Params& params) { - m_calib_params = params; - m_calib_params.mode = params.mode; +void Print::set_calib_params(const Calib_Params ¶ms) +{ + m_calib_params = params; } bool Print::invalidate_step(PrintStep step) @@ -541,7 +527,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print auto tmp = offset(convex_hull_no_offset, // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. - float(scale_(0.5 * print.config().extruder_clearance_radius.value - EPSILON)), + float(scale_(0.5 * print.config().extruder_clearance_max_radius.value - EPSILON)), jtRound, scale_(0.1)); if (!tmp.empty()) { // tmp may be empty due to clipper's bug, see STUDIO-2452 convex_hull = tmp.front(); @@ -954,10 +940,6 @@ StringObjectException Print::check_multi_filament_valid(const Print& print) return {std::string()}; } -// Orca: this g92e0 regex is used copied from PrusaSlicer -// Matches "G92 E0" with various forms of writing the zero and with an optional comment. -boost::regex regex_g92e0 { "^[ \\t]*[gG]92[ \\t]*[eE](0(\\.0*)?|\\.0+)[ \\t]*(;.*)?$" }; - // Precondition: Print::validate() requires the Print::apply() to be called its invocation. //BBS: refine seq-print validation logic StringObjectException Print::validate(StringObjectException *warning, Polygons* collison_polygons, std::vector>* height_polygons) const @@ -1138,15 +1120,19 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* return ("One or more object were assigned an extruder that the printer does not have."); #endif - auto validate_extrusion_width = [min_nozzle_diameter, max_nozzle_diameter](const ConfigBase &config, const char *opt_key, double layer_height, std::string &err_msg) -> bool { - double extrusion_width_min = config.get_abs_value(opt_key, min_nozzle_diameter); - double extrusion_width_max = config.get_abs_value(opt_key, max_nozzle_diameter); + auto validate_extrusion_width = [/*min_nozzle_diameter,*/ max_nozzle_diameter](const ConfigBase &config, const char *opt_key, double layer_height, std::string &err_msg) -> bool { + // This may change in the future, if we switch to "extrusion width wrt. nozzle diameter" + // instead of currently used logic "extrusion width wrt. layer height", see GH issues #1923 #2829. +// double extrusion_width_min = config.get_abs_value(opt_key, min_nozzle_diameter); +// double extrusion_width_max = config.get_abs_value(opt_key, max_nozzle_diameter); + double extrusion_width_min = config.get_abs_value(opt_key); + double extrusion_width_max = config.get_abs_value(opt_key); if (extrusion_width_min == 0) { // Default "auto-generated" extrusion width is always valid. } else if (extrusion_width_min <= layer_height) { err_msg = L("Too small line width"); return false; - } else if (extrusion_width_max > max_nozzle_diameter * 5) { + } else if (extrusion_width_max >= max_nozzle_diameter * 2.5) { err_msg = L("Too large line width"); return false; } @@ -1232,56 +1218,33 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } } - // Orca: G92 E0 is not supported when using absolute extruder addressing - // This check is copied from PrusaSlicer, the original author is Vojtech Bubnik - { - bool before_layer_gcode_resets_extruder = - boost::regex_search(m_config.before_layer_change_gcode.value, regex_g92e0); - bool layer_gcode_resets_extruder = boost::regex_search(m_config.layer_change_gcode.value, regex_g92e0); - if (m_config.use_relative_e_distances) { - // See GH issues #6336 #5073 - if ((m_config.gcode_flavor == gcfMarlinLegacy || m_config.gcode_flavor == gcfMarlinFirmware) && - !before_layer_gcode_resets_extruder && !layer_gcode_resets_extruder) - return {L("Relative extruder addressing requires resetting the extruder position at each layer to " - "prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode."), - nullptr, "before_layer_change_gcode"}; - } else if (before_layer_gcode_resets_extruder) - return {L("\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder " - "addressing."), - nullptr, "before_layer_change_gcode"}; - else if (layer_gcode_resets_extruder) - return {L("\"G92 E0\" was found in layer_gcode, which is incompatible with absolute extruder addressing."), - nullptr, "layer_change_gcode"}; - } const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); - if (is_BBL_printer()) { - const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; - for (unsigned int extruder_id : extruders) { - const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); - for (unsigned int extruder_id : extruders) { - int curr_bed_temp = bed_temp_opt->get_at(extruder_id); - if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { - std::string bed_type_name; - for (auto item : *bed_type_keys_map) { - if (item.second == m_config.curr_bed_type) { - bed_type_name = item.first; - break; - } - } + const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; + for (unsigned int extruder_id : extruders) { + const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); + for (unsigned int extruder_id : extruders) { + int curr_bed_temp = bed_temp_opt->get_at(extruder_id); + if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { + std::string bed_type_name; + for (auto item : *bed_type_keys_map) { + if (item.second == m_config.curr_bed_type) { + bed_type_name = item.first; + break; + } + } - StringObjectException except; - except.string = format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); - except.string += "\n"; - except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; - except.params.push_back(std::to_string(this->get_plate_index() + 1)); - except.params.push_back(L(bed_type_name)); - except.params.push_back(std::to_string(extruder_id+1)); - except.object = nullptr; - return except; - } + StringObjectException except; + except.string = format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); + except.string += "\n"; + except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; + except.params.push_back(std::to_string(this->get_plate_index() + 1)); + except.params.push_back(L(bed_type_name)); + except.params.push_back(std::to_string(extruder_id+1)); + except.object = nullptr; + return except; } } } @@ -1353,10 +1316,10 @@ double Print::skirt_first_layer_height() const Flow Print::brim_flow() const { - ConfigOptionFloatOrPercent width = m_config.initial_layer_line_width; - if (width.value <= 0) + ConfigOptionFloat width = m_config.initial_layer_line_width; + if (width.value == 0) width = m_print_regions.front()->config().inner_wall_line_width; - if (width.value <= 0) + if (width.value == 0) width = m_objects.front()->config().line_width; /* We currently use a random region's perimeter extruder. @@ -1366,7 +1329,6 @@ Flow Print::brim_flow() const generation as well. */ return Flow::new_from_config_width( frPerimeter, - // Flow::new_from_config_width takes care of the percent to value substitution width, (float)m_config.nozzle_diameter.get_at(m_print_regions.front()->config().wall_filament-1), (float)this->skirt_first_layer_height()); @@ -1374,8 +1336,8 @@ Flow Print::brim_flow() const Flow Print::skirt_flow() const { - ConfigOptionFloatOrPercent width = m_config.initial_layer_line_width; - if (width.value <= 0) + ConfigOptionFloat width = m_config.initial_layer_line_width; + if (width.value == 0) width = m_objects.front()->config().line_width; /* We currently use a random object's support material extruder. @@ -1385,7 +1347,6 @@ Flow Print::skirt_flow() const generation as well. */ return Flow::new_from_config_width( frPerimeter, - // Flow::new_from_config_width takes care of the percent to value substitution width, (float)m_config.nozzle_diameter.get_at(m_objects.front()->config().support_filament-1), (float)this->skirt_first_layer_height()); @@ -1776,7 +1737,7 @@ void Print::process(bool use_cache) // BBS: m_brimMap and m_supportBrimMap are used instead of m_brim to generate brim of objs and supports seperately m_brimMap.clear(); m_supportBrimMap.clear(); - m_first_layer_convex_hull.points.clear(); + m_first_layer_convex_hull.points.clear(); // BBS: plate offset is contained in this convexhull if (this->has_brim()) { Polygons islands_area; make_brim(*this, this->make_try_cancel(), islands_area, m_brimMap, @@ -1805,8 +1766,8 @@ void Print::process(bool use_cache) obj->simplify_extrusion_path(); } else { - if (obj->set_started(posSimplifyPath)) - obj->set_done(posSimplifyPath); + if (obj->set_started(posSimplifyWall)) + obj->set_done(posSimplifyWall); if (obj->set_started(posSimplifyInfill)) obj->set_done(posSimplifyInfill); if (obj->set_started(posSimplifySupportPath)) @@ -2109,15 +2070,16 @@ std::vector Print::first_layer_wipe_tower_corners(bool check_wipe_tower_e return corners; } -//SoftFever -Vec2d Print::translate_to_print_space(const Vec2d &point) const { +//OrcaSlicer +Vec2d Print::translate_to_print_space(const Vec2d& point) const { //const BoundingBoxf bed_bbox(config().printable_area.values); return Vec2d(point(0) - m_origin(0), point(1) - m_origin(1)); } -Vec2d Print::translate_to_print_space(const Point &point) const { +Vec2d Print::translate_to_print_space(const Point& point) const { return Vec2d(unscaled(point.x()) - m_origin(0), unscaled(point.y()) - m_origin(1)); } + void Print::finalize_first_layer_convex_hull() { append(m_first_layer_convex_hull.points, m_skirt_convex_hull); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 83ccfbaa6..5a98909be 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -14,14 +14,14 @@ #include "GCode/ThumbnailData.hpp" #include "GCode/GCodeProcessor.hpp" #include "MultiMaterialSegmentation.hpp" + #include "libslic3r.h" #include #include #include - -#include "calib.hpp" +#include "Calib.hpp" namespace Slic3r { @@ -87,9 +87,9 @@ enum PrintStep { enum PrintObjectStep { posSlice, posPerimeters, posPrepareInfill, - posInfill, posIroning, posSupportMaterial, posSimplifyPath, posSimplifySupportPath, + posInfill, posIroning, posSupportMaterial, // BBS - posSimplifyInfill, + posSimplifyWall, posSimplifyInfill, posSimplifySupportPath, posDetectOverhangsForLift, posCount, }; @@ -194,11 +194,11 @@ struct PrintInstance const ModelInstance *model_instance; // Shift of this instance's center into the world coordinates. Point shift; - + BoundingBoxf3 get_bounding_box(); Polygon get_convex_hull_2d(); - // SoftFever - // + // OrcaSlicer + // // instance id size_t id; @@ -305,7 +305,7 @@ public: Transform3d trafo_centered() const { Transform3d t = this->trafo(); t.pretranslate(Vec3d(- unscale(m_center_offset.x()), - unscale(m_center_offset.y()), 0)); return t; } const PrintInstances& instances() const { return m_instances; } - PrintInstances &instances() { return m_instances; } + PrintInstances& instances() { return m_instances; } // Whoever will get a non-const pointer to PrintObject will be able to modify its layers. LayerPtrs& layers() { return m_layers; } @@ -434,11 +434,11 @@ public: // BBS: Boundingbox of the first layer BoundingBox firstLayerObjectBrimBoundingBox; - // SoftFever - size_t get_id() const { return m_id; } - void set_id(size_t id) { m_id = id; } + // OrcaSlicer + size_t get_klipper_object_id() const { return m_klipper_object_id; } + void set_klipper_object_id(size_t id) { m_klipper_object_id = id; } - private: +private: // to be called from Print only. friend class Print; @@ -522,12 +522,10 @@ private: PrintObject* m_shared_object{ nullptr }; - - // SoftFever - // - // object id - size_t m_id; - void apply_conical_overhang(); + // OrcaSlicer + // + // object id for klipper firmware only + size_t m_klipper_object_id; public: //BBS: When printing multi-material objects, this settings will make slicer to clip the overlapping object parts one by the other. @@ -739,7 +737,7 @@ public: const PrintConfig& config() const { return m_config; } const PrintObjectConfig& default_object_config() const { return m_default_object_config; } - const PrintRegionConfig& default_region_config() const { return m_default_region_config; } + const PrintRegionConfig& default_region_config() const { return m_default_region_config; } ConstPrintObjectPtrsAdaptor objects() const { return ConstPrintObjectPtrsAdaptor(&m_objects); } PrintObject* get_object(size_t idx) { return const_cast(m_objects[idx]); } const PrintObject* get_object(size_t idx) const { return m_objects[idx]; } @@ -797,6 +795,8 @@ public: int get_modified_count() const {return m_modified_count;} //BBS: add status for whether support used bool is_support_used() const {return m_support_used;} + bool is_BBL_Printer() const { return m_isBBLPrinter;} + void set_BBL_Printer(const bool isBBL) { m_isBBLPrinter = isBBL;} std::string get_conflict_string() const { std::string result; @@ -806,28 +806,23 @@ public: return result; } - //BBS static StringObjectException sequential_print_clearance_valid(const Print &print, Polygons *polygons = nullptr, std::vector>* height_polygons = nullptr); - ConflictResultOpt get_conflict_result() const { return m_conflict_result; } // Return 4 wipe tower corners in the world coordinates (shifted and rotated), including the wipe tower brim. std::vector first_layer_wipe_tower_corners(bool check_wipe_tower_existance=true) const; - - //SoftFever - bool &is_BBL_printer() { return m_isBBLPrinter; } - const bool is_BBL_printer() const { return m_isBBLPrinter; } - CalibMode& calib_mode() { return m_calib_params.mode; } - const CalibMode calib_mode() const { return m_calib_params.mode; } - void set_calib_params(const Calib_Params& params); + //OrcaSlicer + CalibMode & calib_mode() { return m_calib_params.mode; } + const CalibMode& calib_mode() const { return m_calib_params.mode; } + void set_calib_params(const Calib_Params ¶ms); const Calib_Params& calib_params() const { return m_calib_params; } - Vec2d translate_to_print_space(const Vec2d &point) const; + Vec2d translate_to_print_space(const Vec2d& point) const; // scaled point - Vec2d translate_to_print_space(const Point &point) const; + Vec2d translate_to_print_space(const Point& point) const; static bool check_multi_filaments_compatibility(const std::vector& filament_types); - protected: +protected: // Invalidates the step, and its depending steps in Print. bool invalidate_step(PrintStep step); @@ -849,10 +844,8 @@ private: PrintRegionConfig m_default_region_config; PrintObjectPtrs m_objects; PrintRegionPtrs m_print_regions; - - //SoftFever - bool m_isBBLPrinter; - + //BBS. + bool m_isBBLPrinter = false; // Ordered collections of extrusion paths to build skirt loops and brim. ExtrusionEntityCollection m_skirt; // BBS: collecting extrusion paths to build brim by objs @@ -881,8 +874,8 @@ private: //BBS ConflictResultOpt m_conflict_result; FakeWipeTower m_fake_wipe_tower; - - //SoftFever: calibration + + // OrcaSlicer: calibration Calib_Params m_calib_params; // To allow GCode to set the Print's GCodeExport step status. diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index 45e0dd932..9804dd45c 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -581,7 +581,7 @@ static void transformed_its_bboxes_in_z_ranges( if (p2->z() <= z_range.first || p1->z() >= z_range.second) { // Out of this slab. } else if (p1->z() < z_range.first) { - if (p1->z() > z_range.second) { + if (p2->z() > z_range.second) { // Two intersections. float zspan = p2->z() - p1->z(); float t1 = (z_range.first - p1->z()) / zspan; diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index e70d52e2c..1343a6a2a 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -516,9 +516,9 @@ public: bool get_no_check_flag() const { return m_no_check; } void set_no_check_flag(bool no_check) { m_no_check = no_check; } - //SoftFever plate name std::string get_plate_name() const { return m_plate_name; } - void set_plate_name(const std::string& name) { m_plate_name = name; } + void set_plate_name(const std::string &name) { m_plate_name = name; } + protected: friend class PrintObjectBase; friend class BackgroundSlicingProcess; @@ -554,9 +554,8 @@ protected: int m_plate_index{ 0 }; bool m_no_check = false; - // SoftFever: current plate name - std::string m_plate_name; - + // current plate name + std::string m_plate_name; // utf8 string // Callback to be evoked regularly to update state of the UI thread. status_callback_type m_status_callback; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 54bb06c70..b6f309449 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -72,7 +72,7 @@ static t_config_enum_values s_keys_map_PrinterTechnology { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrinterTechnology) -static t_config_enum_values s_keys_map_PrintHostType { +static t_config_enum_values s_keys_map_PrintHostType{ { "prusalink", htPrusaLink }, { "octoprint", htOctoPrint }, { "duet", htDuet }, @@ -83,7 +83,7 @@ static t_config_enum_values s_keys_map_PrintHostType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrintHostType) -static t_config_enum_values s_keys_map_AuthorizationType { +static t_config_enum_values s_keys_map_AuthorizationType{ { "key", atKeyPassword }, { "user", atUserPassword } }; @@ -91,6 +91,7 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(AuthorizationType) static t_config_enum_values s_keys_map_GCodeFlavor { { "marlin", gcfMarlinLegacy }, + { "klipper", gcfKlipper }, { "reprap", gcfRepRapSprinter }, { "reprapfirmware", gcfRepRapFirmware }, { "repetier", gcfRepetier }, @@ -98,7 +99,6 @@ static t_config_enum_values s_keys_map_GCodeFlavor { { "makerware", gcfMakerWare }, { "marlin2", gcfMarlinFirmware }, { "sailfish", gcfSailfish }, - { "klipper", gcfKlipper }, { "smoothie", gcfSmoothie }, { "mach3", gcfMach3 }, { "machinekit", gcfMachinekit }, @@ -106,7 +106,6 @@ static t_config_enum_values s_keys_map_GCodeFlavor { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(GCodeFlavor) - static t_config_enum_values s_keys_map_FuzzySkinType { { "none", int(FuzzySkinType::None) }, { "external", int(FuzzySkinType::External) }, @@ -146,11 +145,18 @@ static t_config_enum_values s_keys_map_IroningType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(IroningType) +//BBS: +static t_config_enum_values s_keys_map_TopOneWallType { + {"not apply", int(TopOneWallType::None)}, + {"all top", int(TopOneWallType::Alltop)}, + {"topmost", int(TopOneWallType::Topmost)} +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TopOneWallType) + //BBS static t_config_enum_values s_keys_map_WallInfillOrder { { "inner wall/outer wall/infill", int(WallInfillOrder::InnerOuterInfill) }, { "outer wall/inner wall/infill", int(WallInfillOrder::OuterInnerInfill) }, - { "inner-outer-inner wall/infill", int(WallInfillOrder::InnerOuterInnerInfill) }, { "infill/inner wall/outer wall", int(WallInfillOrder::InfillInnerOuter) }, { "infill/outer wall/inner wall", int(WallInfillOrder::InfillOuterInner) }, { "inner-outer-inner wall/infill", int(WallInfillOrder::InnerOuterInnerInfill)} @@ -240,8 +246,7 @@ static const t_config_enum_values s_keys_map_BrimType = { {"outer_only", btOuterOnly}, {"inner_only", btInnerOnly}, {"outer_and_inner", btOuterAndInner}, - {"auto_brim", btAutoBrim}, // BBS - {"brim_ears", btEar}, // Orca + {"auto_brim", btAutoBrim} // BBS }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BrimType) @@ -308,13 +313,11 @@ static const t_config_enum_values s_keys_map_ZHopType = { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(ZHopType) -static const t_config_enum_values s_keys_map_RetractLiftEnforceType = { - {"All Surfaces", rletAllSurfaces}, - {"Top Only", rletTopOnly}, - {"Bottom Only", rletBottomOnly}, - {"Top and Bottom", rletTopAndBottom} +static const t_config_enum_values s_keys_map_ExtruderType = { + { "DirectDrive", etDirectDrive }, + { "Bowden", etBowden } }; -CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(RetractLiftEnforceType) +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(ExtruderType) static void assign_printer_technology_to_unknown(t_optiondef_map &options, PrinterTechnology printer_technology) { @@ -350,7 +353,7 @@ void PrintConfigDef::init_common_params() def = this->add("printable_area", coPoints); def->label = L("Printable area"); //BBS - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionPoints{ Vec2d(0, 0), Vec2d(200, 0), Vec2d(200, 200), Vec2d(0, 200) }); //BBS: add "bed_exclude_area" @@ -394,7 +397,7 @@ void PrintConfigDef::init_common_params() def->tooltip = L("Maximum printable height which is limited by mechanism of printer"); def->sidetext = L("mm"); def->min = 0; - def->max = 2000; + def->max = 1000; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(100.0)); @@ -532,7 +535,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("°C"); def->full_label = L("Bed temperature"); def->min = 0; - def->max = 300; + def->max = 120; def->set_default_value(new ConfigOptionInts{ 35 }); def = this->add("eng_plate_temp", coInts); @@ -542,7 +545,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("°C"); def->full_label = L("Bed temperature"); def->min = 0; - def->max = 300; + def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); def = this->add("hot_plate_temp", coInts); @@ -552,7 +555,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("°C"); def->full_label = L("Bed temperature"); def->min = 0; - def->max = 300; + def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); def = this->add("textured_plate_temp", coInts); @@ -562,7 +565,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("°C"); def->full_label = L("Bed temperature"); def->min = 0; - def->max = 300; + def->max = 120; def->set_default_value(new ConfigOptionInts{45}); def = this->add("cool_plate_temp_initial_layer", coInts); @@ -582,7 +585,7 @@ void PrintConfigDef::init_fff_params() "Value 0 means the filament does not support to print on the Engineering Plate"); def->sidetext = L("°C"); def->min = 0; - def->max = 300; + def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); def = this->add("hot_plate_temp_initial_layer", coInts); @@ -591,7 +594,8 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the High Temp Plate"); def->sidetext = L("°C"); - def->max = 300; + def->min = 0; + def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); def = this->add("textured_plate_temp_initial_layer", coInts); @@ -600,8 +604,8 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the Textured PEI Plate"); def->sidetext = L("°C"); - def->max = 0; - def->max = 300; + def->min = 0; + def->max = 120; def->set_default_value(new ConfigOptionInts{45}); def = this->add("curr_bed_type", coEnum); @@ -613,7 +617,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.emplace_back("Engineering Plate"); def->enum_values.emplace_back("High Temp Plate"); def->enum_values.emplace_back("Textured PEI Plate"); - def->enum_labels.emplace_back(L("Cool Plate")); + def->enum_labels.emplace_back(L("Cool Plate / PLA Plate")); def->enum_labels.emplace_back(L("Engineering Plate")); def->enum_labels.emplace_back(L("High Temp Plate")); def->enum_labels.emplace_back(L("Textured PEI Plate")); @@ -632,7 +636,7 @@ void PrintConfigDef::init_fff_params() def->multiline = true; def->full_width = true; def->height = 5; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionString("")); def = this->add("bottom_shell_layers", coInt); @@ -695,7 +699,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionEnumsGeneric{ (int)Overhang_threshold_bridge }); def = this->add("bridge_angle", coFloat); - def->label = L("Bridge infill direction"); + def->label = L("Bridge direction"); def->category = L("Strength"); def->tooltip = L("Bridging angle override. If left to zero, the bridging angle will be calculated " "automatically. Otherwise the provided angle will be used for external bridges. " @@ -705,16 +709,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.)); - def = this->add("bridge_density", coPercent); - def->label = L("Bridge density"); - def->category = L("Strength"); - def->tooltip = L("Density of external bridges. 100% means solid bridge. Default is 100%."); - def->sidetext = L("%"); - def->min = 10; - def->max = 100; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionPercent(100)); - def = this->add("bridge_flow", coFloat); def->label = L("Bridge flow"); def->category = L("Quality"); @@ -727,64 +721,40 @@ void PrintConfigDef::init_fff_params() def = this->add("top_solid_infill_flow_ratio", coFloat); def->label = L("Top surface flow ratio"); - def->category = L("Advanced"); def->tooltip = L("This factor affects the amount of material for top solid infill. " - "You can decrease it slightly to have smooth surface finish"); + "You can decrease it slightly to have smooth surface finish"); def->min = 0; def->max = 2; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(1)); - def = this->add("bottom_solid_infill_flow_ratio", coFloat); - def->label = L("Bottom surface flow ratio"); - def->category = L("Advanced"); - def->tooltip = L("This factor affects the amount of material for bottom solid infill"); + def = this->add("initial_layer_flow_ratio", coFloat); + def->label = L("Initial layer flow ratio"); + def->tooltip = L("This factor affects the amount of material for the initial layer"); def->min = 0; def->max = 2; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(1)); - - def = this->add("precise_outer_wall",coBool); - def->label = L("Precise wall(experimental)"); - def->category = L("Quality"); - def->tooltip = L("Improve shell precision by adjusting outer wall spacing. This also improves layer consistency."); - def->set_default_value(new ConfigOptionBool{false}); - - def = this->add("only_one_wall_top", coBool); + def = this->add("top_one_wall_type", coEnum); def->label = L("Only one wall on top surfaces"); def->category = L("Quality"); - def->tooltip = L("Use only one wall on flat top surface, to give more space to the top infill pattern"); - def->set_default_value(new ConfigOptionBool(false)); + def->tooltip = L("Use only one wall on flat top surface, to give more space to the top infill pattern. Could be applyed on topmost surface or all top surface."); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("not apply"); + def->enum_values.push_back("all top"); + def->enum_values.push_back("topmost"); + def->enum_labels.push_back(L("Not apply")); + def->enum_labels.push_back(L("Top surfaces")); + def->enum_labels.push_back(L("Topmost surface")); + def->set_default_value(new ConfigOptionEnum(TopOneWallType::Alltop)); - // the tooltip is copied from SuperStudio - def = this->add("min_width_top_surface", coFloatOrPercent); - def->label = L("One wall threshold"); + def = this->add("only_one_wall_first_layer", coBool); + def->label = L("Only one wall on first layer"); def->category = L("Quality"); - def->tooltip = L("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." - "\nWarning: If enabled, artifacts can be created is you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts."); - def->sidetext = L("mm or %"); - def->ratio_over = "inner_wall_line_width"; - def->min = 0; - def->max_literal = 15; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(300, true)); - - def = this->add("only_one_wall_first_layer", coBool); - def->label = L("Only one wall on first layer"); - def->category = L("Quality"); - def->tooltip = L("Use only one wall on first layer, to give more space to the bottom infill pattern"); + def->tooltip = L("Use only one wall on the first layer of model"); def->set_default_value(new ConfigOptionBool(false)); - def = this->add("overhang_speed_classic", coBool); - def->label = L("Classic mode"); - def->category = L("Speed"); - def->tooltip = L("Enable this option to use classic mode"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool{ false }); - def = this->add("enable_overhang_speed", coBool); def->label = L("Slow down for overhang"); def->category = L("Speed"); @@ -792,54 +762,50 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool{ true }); - def = this->add("overhang_1_4_speed", coFloatOrPercent); + def = this->add("overhang_1_4_speed", coFloat); def->label = "(10%, 25%)"; def->category = L("Speed"); def->full_label = "(10%, 25%)"; //def->tooltip = L("Speed for line of wall which has degree of overhang between 10% and 25% line width. " // "0 means using original wall speed"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "outer_wall_speed"; + def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); + def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("overhang_2_4_speed", coFloatOrPercent); + def = this->add("overhang_2_4_speed", coFloat); def->label = "[25%, 50%)"; def->category = L("Speed"); def->full_label = "[25%, 50%)"; //def->tooltip = L("Speed for line of wall which has degree of overhang between 25% and 50% line width. " // "0 means using original wall speed"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "outer_wall_speed"; + def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); + def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("overhang_3_4_speed", coFloatOrPercent); + def = this->add("overhang_3_4_speed", coFloat); def->label = "[50%, 75%)"; def->category = L("Speed"); def->full_label = "[50%, 75%)"; //def->tooltip = L("Speed for line of wall which has degree of overhang between 50% and 75% line width. 0 means using original wall speed"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "outer_wall_speed"; + def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); + def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("overhang_4_4_speed", coFloatOrPercent); + def = this->add("overhang_4_4_speed", coFloat); def->label = "[75%, 100%)"; def->category = L("Speed"); def->full_label = "[75%, 100%)"; //def->tooltip = L("Speed for line of wall which has degree of overhang between 75% and 100% line width. 0 means using original wall speed"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "outer_wall_speed"; + def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); + def->set_default_value(new ConfigOptionFloat(0)); def = this->add("bridge_speed", coFloat); - def->label = L("External"); + def->label = L("Bridge"); def->category = L("Speed"); def->tooltip = L("Speed of bridge and completely overhang wall"); def->sidetext = L("mm/s"); @@ -847,16 +813,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(25)); - def = this->add("internal_bridge_speed", coFloatOrPercent); - def->label = L("Internal"); - def->category = L("Speed"); - def->tooltip = L("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%."); - def->sidetext = L("mm/s or %"); - def->ratio_over = "bridge_speed"; - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(150, true)); - def = this->add("brim_width", coFloat); def->label = L("Brim width"); def->category = L("Support"); @@ -874,17 +830,23 @@ void PrintConfigDef::init_fff_params() "Auto means the brim width is analysed and calculated automatically."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.emplace_back("auto_brim"); - def->enum_values.emplace_back("brim_ears"); def->enum_values.emplace_back("outer_only"); +#if 1 //!BBL_RELEASE_TO_PUBLIC + // BBS: The following two types are disabled def->enum_values.emplace_back("inner_only"); def->enum_values.emplace_back("outer_and_inner"); +#endif def->enum_values.emplace_back("no_brim"); + def->enum_labels.emplace_back(L("Auto")); - def->enum_labels.emplace_back(L("Mouse ear")); def->enum_labels.emplace_back(L("Outer brim only")); +#if 1 //!BBL_RELEASE_TO_PUBLIC + // BBS: The following two types are disabled def->enum_labels.emplace_back(L("Inner brim only")); def->enum_labels.emplace_back(L("Outer and inner brim")); +#endif def->enum_labels.emplace_back(L("No-brim")); + def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(btAutoBrim)); @@ -898,35 +860,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.)); - def = this->add("brim_ears", coBool); - def->label = L("Brim ears"); - def->category = L("Support"); - def->tooltip = L("Only draw brim over the sharp edges of the model."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - - def = this->add("brim_ears_max_angle", coFloat); - def->label = L("Brim ear max angle"); - def->category = L("Support"); - def->tooltip = L("Maximum angle to let a brim ear appear. \nIf set to 0, no brim will be created. \nIf set to " - "~180, brim will be created on everything but straight sections."); - def->sidetext = L("°"); - def->min = 0; - def->max = 180; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(125)); - - def = this->add("brim_ears_detection_length", coFloat); - def->label = L("Brim ear detection radius"); - def->category = L("Support"); - def->tooltip = L("The geometry will be decimated before dectecting sharp angles. This parameter indicates the " - "minimum length of the deviation for the decimation." - "\n0 to deactivate"); - def->sidetext = L("mm"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(1)); - def = this->add("compatible_printers", coStrings); def->label = L("Compatible machine"); def->mode = comDevelop; @@ -1084,7 +1017,7 @@ void PrintConfigDef::init_fff_params() def = this->add("internal_bridge_support_thickness", coFloat); def->label = L("Internal bridge support thickness"); def->category = L("Strength"); - def->tooltip = L("If enabled, support loops will be generated under the contours of internal bridges." + def->tooltip = L("If enabled, Studio will generate support loops 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"); def->sidetext = L("mm"); @@ -1114,7 +1047,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); - def->set_default_value(new ConfigOptionEnum(ipMonotonic)); + def->set_default_value(new ConfigOptionEnum(ipRectilinear)); def = this->add("bottom_surface_pattern", coEnum); def->label = L("Bottom surface pattern"); @@ -1123,28 +1056,25 @@ void PrintConfigDef::init_fff_params() def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values = def_top_fill_pattern->enum_values; def->enum_labels = def_top_fill_pattern->enum_labels; - def->set_default_value(new ConfigOptionEnum(ipMonotonic)); + def->set_default_value(new ConfigOptionEnum(ipRectilinear)); - def = this->add("internal_solid_infill_pattern", coEnum); + def = this->add("internal_solid_infill_pattern", coEnum); def->label = L("Internal solid infill pattern"); def->category = L("Strength"); def->tooltip = L("Line pattern of internal solid infill. if the detect nattow internal solid infill be enabled, the concentric pattern will be used for the small area."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values = def_top_fill_pattern->enum_values; def->enum_labels = def_top_fill_pattern->enum_labels; - def->set_default_value(new ConfigOptionEnum(ipMonotonic)); - - def = this->add("outer_wall_line_width", coFloatOrPercent); + def->set_default_value(new ConfigOptionEnum(ipRectilinear)); + + def = this->add("outer_wall_line_width", coFloat); def->label = L("Outer wall"); def->category = L("Quality"); - def->tooltip = L("Line width of outer wall. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of outer wall"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0)); def = this->add("outer_wall_speed", coFloat); def->label = L("Outer wall"); @@ -1156,27 +1086,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(60)); - def = this->add("small_perimeter_speed", coFloatOrPercent); - def->label = L("Small perimeters"); - def->category = L("Speed"); - def->tooltip = L("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."); - def->sidetext = L("mm/s or %"); - def->ratio_over = "outer_wall_speed"; - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(50, true)); - - def = this->add("small_perimeter_threshold", coFloat); - def->label = L("Small perimeters threshold"); - def->category = L("Speed"); - def->tooltip = L("This sets the threshold for small perimeter length. Default threshold is 0mm"); - def->sidetext = L("mm"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("wall_infill_order", coEnum); def->label = L("Order of inner wall/outer wall/infil"); def->category = L("Quality"); @@ -1208,7 +1117,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("3"); def->enum_labels.push_back("4"); def->enum_labels.push_back("5"); - def->mode = comAdvanced; + def->mode = comDevelop; def = this->add("extruder_clearance_height_to_rod", coFloat); def->label = L("Height to rod"); @@ -1237,12 +1146,20 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(40)); + def = this->add("extruder_clearance_max_radius", coFloat); + def->label = L("Max Radius"); + def->tooltip = L("Max clearance radius around extruder. Used for collision avoidance in by-object printing."); + def->sidetext = L("mm"); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(68)); + def = this->add("extruder_colour", coStrings); def->label = L("Extruder Color"); def->tooltip = L("Only used as a visual help on UI"); def->gui_type = ConfigOptionDef::GUIType::color; // Empty string means no color assigned yet. - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionStrings { "" }); def = this->add("extruder_offset", coPoints); @@ -1265,40 +1182,35 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 1. }); - def = this->add("print_flow_ratio", coFloat); - def->label = L("Flow ratio"); - def->tooltip = L("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"); - def->mode = comAdvanced; - def->max = 2; - def->min = 0.01; + def = this->add("print_flow_ratio", coFloat); + def->label = L("Object flow ratio"); + def->tooltip = L("The flow ratio set by object, the meaning is the same as flow ratio."); + def->mode = comDevelop; + def->max = 2; + def->min = 0.01; def->set_default_value(new ConfigOptionFloat(1)); def = this->add("enable_pressure_advance", coBools); def->label = L("Enable pressure advance"); - def->tooltip = L("Enable pressure advance, auto calibration result will be overwriten once enabled."); + def->tooltip = L("Enable pressure advance, auto calibration result will be overwriten once enabled. Useless for Bambu Printer"); def->set_default_value(new ConfigOptionBools{ false }); def = this->add("pressure_advance", coFloats); def->label = L("Pressure advance"); - def->tooltip = L("Pressure advance(Klipper) AKA Linear advance factor(Marlin)"); + def->tooltip = L("Pressure advance(Klipper) AKA Linear advance factor(Marlin). Useless for Bambu Printer"); def->max = 2; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats { 0.02 }); + def->set_default_value(new ConfigOptionFloats{ 0.02 }); - def = this->add("line_width", coFloatOrPercent); + def = this->add("line_width", coFloat); def->label = L("Default"); def->category = L("Quality"); - def->tooltip = L("Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Default line width if some line width is set to be zero"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; + def->max = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0, false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("reduce_fan_stop_start_freq", coBools); def->label = L("Keep fan always on"); @@ -1306,7 +1218,7 @@ void PrintConfigDef::init_fff_params() "at minimum speed to reduce the frequency of starting and stoping"); def->set_default_value(new ConfigOptionBools { false }); - def = this->add("fan_cooling_layer_time", coFloats); + def = this->add("fan_cooling_layer_time", coInts); def->label = L("Layer time"); def->tooltip = L("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"); @@ -1314,7 +1226,7 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1000; def->mode = comSimple; - def->set_default_value(new ConfigOptionFloats{ 60.0f }); + def->set_default_value(new ConfigOptionInts { 60 }); def = this->add("default_filament_colour", coStrings); def->label = L("Default color"); @@ -1327,8 +1239,8 @@ void PrintConfigDef::init_fff_params() def->label = L("Color"); def->tooltip = L("Only used as a visual help on UI"); def->gui_type = ConfigOptionDef::GUIType::color; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionStrings{ "#F2754E" }); + def->mode = comDevelop; + def->set_default_value(new ConfigOptionStrings{ "#00AE42" }); //bbs def = this->add("required_nozzle_HRC", coInts); @@ -1346,19 +1258,19 @@ void PrintConfigDef::init_fff_params() "Can't be zero"); def->sidetext = L("mm³/s"); def->min = 0; - def->max = 200; + def->max = 50; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 2. }); def = this->add("filament_minimal_purge_on_wipe_tower", coFloats); def->label = L("Minimal purge on wipe tower"); - def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside " - "the nozzle may not be known, and the filament pressure is likely not yet stable. " - "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime " - "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."); + //def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside " + // "the nozzle may not be known, and the filament pressure is likely not yet stable. " + // "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime " + // "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."); def->sidetext = L("mm³"); def->min = 0; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloats { 15. }); def = this->add("machine_load_filament_time", coFloat); @@ -1384,18 +1296,6 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->set_default_value(new ConfigOptionFloats { 1.75 }); - def = this->add("filament_shrink", coPercents); - def->label = L("Shrinkage"); - def->tooltip = L("Enter the shrinkage percentage that the filament will get after cooling (94% if you measure 94mm instead of 100mm)." - " The part will be scaled in xy to compensate." - " Only the filament used for the perimeter is taken into account." - "\nBe sure to allow enough space between objects, as this compensation is done after the checks."); - def->sidetext = L("%"); - def->ratio_over = ""; - def->min = 10; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionPercents{ 100 }); - def = this->add("filament_density", coFloats); def->label = L("Density"); def->tooltip = L("Filament density. For statistics only"); @@ -1429,13 +1329,13 @@ void PrintConfigDef::init_fff_params() def = this->add("filament_soluble", coBools); def->label = L("Soluble material"); def->tooltip = L("Soluble material is commonly used to print support and support interface"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionBools { false }); def = this->add("filament_is_support", coBools); def->label = L("Support material"); def->tooltip = L("Support material is commonly used to print support and support interface"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionBools { false }); // BBS @@ -1529,79 +1429,6 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Lightning")); def->set_default_value(new ConfigOptionEnum(ipCubic)); - auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent); - def->label = L("Sparse infill anchor length"); - def->category = L("Strength"); - def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. " - "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " - "shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side " - "and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. " - "\nSet this parameter to zero to disable anchoring perimeters connected to a single infill line."); - def->sidetext = L("mm or %"); - def->ratio_over = "sparse_infill_line_width"; - def->max_literal = 1000; - def->gui_type = ConfigOptionDef::GUIType::f_enum_open; - def->enum_values.push_back("0"); - def->enum_values.push_back("1"); - def->enum_values.push_back("2"); - def->enum_values.push_back("5"); - def->enum_values.push_back("10"); - def->enum_values.push_back("1000"); - def->enum_labels.push_back(L("0 (no open anchors)")); - def->enum_labels.push_back("1 mm"); - def->enum_labels.push_back("2 mm"); - def->enum_labels.push_back("5 mm"); - def->enum_labels.push_back("10 mm"); - def->enum_labels.push_back(L("1000 (unlimited)")); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(400, true)); - - def = this->add("infill_anchor_max", coFloatOrPercent); - def->label = L("Maximum length of the infill anchor"); - def->category = L("Strength"); - def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. " - "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment " - "shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side " - "and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. " - "\nIf set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0."); - def->sidetext = def_infill_anchor_min->sidetext; - def->ratio_over = def_infill_anchor_min->ratio_over; - def->gui_type = def_infill_anchor_min->gui_type; - def->enum_values = def_infill_anchor_min->enum_values; - def->max_literal = def_infill_anchor_min->max_literal; - def->enum_labels.push_back(L("0 (Simple connect)")); - def->enum_labels.push_back("1 mm"); - def->enum_labels.push_back("2 mm"); - def->enum_labels.push_back("5 mm"); - def->enum_labels.push_back("10 mm"); - def->enum_labels.push_back(L("1000 (unlimited)")); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(20, false)); - - def = this->add("outer_wall_acceleration", coFloat); - def->label = L("Outer wall"); - def->tooltip = L("Acceleration of outer walls"); - def->sidetext = L("mm/s²"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(10000)); - - def = this->add("inner_wall_acceleration", coFloat); - def->label = L("Inner wall"); - def->tooltip = L("Acceleration of inner walls"); - def->sidetext = L("mm/s²"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(10000)); - - def = this->add("travel_acceleration", coFloat); - def->label = L("Travel"); - def->tooltip = L("Acceleration of travel moves"); - def->sidetext = L("mm/s²"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(10000)); - def = this->add("top_surface_acceleration", coFloat); def->label = L("Top surface"); def->tooltip = L("Acceleration of top surface infill. Using a lower value may improve top surface quality"); @@ -1618,30 +1445,20 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(500)); - def = this->add("bridge_acceleration", coFloatOrPercent); - def->label = L("Bridge"); - def->tooltip = L("Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration."); - def->sidetext = L("mm/s² or %"); + def = this->add("inner_wall_acceleration", coFloat); + def->label = L("Inner wall"); + def->tooltip = L("Acceleration of inner walls. 0 means using normal printing acceleration"); + def->sidetext = L("mm/s²"); def->min = 0; def->mode = comAdvanced; - def->ratio_over = "outer_wall_acceleration"; - def->set_default_value(new ConfigOptionFloatOrPercent(50,true)); + def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("sparse_infill_acceleration", coFloatOrPercent); - def->label = L("Sparse infill"); - def->tooltip = L("Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration."); - def->sidetext = L("mm/s² or %"); - def->min = 0; - def->mode = comAdvanced; - def->ratio_over = "default_acceleration"; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); - - def = this->add("internal_solid_infill_acceleration", coFloatOrPercent); - def->label = L("Internal solid infill"); - def->tooltip = L("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."); - def->sidetext = L("mm/s² or %"); - def->min = 0; - def->mode = comAdvanced; + def = this->add("sparse_infill_acceleration", coFloatOrPercent); + def->label = L("Sparse infill"); + def->tooltip = L("Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration."); + def->sidetext = L("mm/s² or %"); + def->min = 0; + def->mode = comAdvanced; def->ratio_over = "default_acceleration"; def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); @@ -1657,8 +1474,8 @@ void PrintConfigDef::init_fff_params() def->label = L("Enable accel_to_decel"); def->tooltip = L("Klipper's max_accel_to_decel will be adjusted automatically"); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); - + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("accel_to_decel_factor", coPercent); def->label = L("accel_to_decel"); def->tooltip = L("Klipper's max_accel_to_decel will be adjusted to this % of acceleration"); @@ -1667,10 +1484,10 @@ void PrintConfigDef::init_fff_params() def->max = 100; def->mode = comAdvanced; def->set_default_value(new ConfigOptionPercent(50)); - + def = this->add("default_jerk", coFloat); def->label = L("Default"); - def->tooltip = L("Default"); + def->tooltip = L("Default jerk"); def->sidetext = L("mm/s"); def->min = 0; def->mode = comAdvanced; @@ -1692,50 +1509,46 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(9)); - def = this->add("top_surface_jerk", coFloat); - def->label = L("Top surface"); - def->tooltip = L("Jerk for top surface"); - def->sidetext = L("mm/s"); - def->min = 1; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(9)); - def = this->add("infill_jerk", coFloat); def->label = L("Infill"); - def->tooltip = L("Jerk for infill"); + def->tooltip = L("Jerk of infill"); def->sidetext = L("mm/s"); - def->min = 1; + def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(9)); - def = this->add("initial_layer_jerk", coFloat); - def->label = L("Initial layer"); - def->tooltip = L("Jerk for initial layer"); + def = this->add("top_surface_jerk", coFloat); + def->label = L("Top surface"); + def->tooltip = L("Jerk of top surface"); def->sidetext = L("mm/s"); - def->min = 1; - def->mode = comAdvanced; + def->min = 0; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(9)); - def = this->add("travel_jerk", coFloat); - def->label = L("Travel"); - def->tooltip = L("Jerk for travel"); + def = this->add("initial_layer_jerk", coFloat); + def->label = L("First layer"); + def->tooltip = L("Jerk of first layer"); def->sidetext = L("mm/s"); - def->min = 1; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(12)); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(9)); - def = this->add("initial_layer_line_width", coFloatOrPercent); + def = this->add("travel_jerk", coFloat); + def->label = L("Travel"); + def->tooltip = L("Jerk of travel"); + def->sidetext = L("mm/s"); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(9)); + + def = this->add("initial_layer_line_width", coFloat); def->label = L("Initial layer"); def->category = L("Quality"); - def->tooltip = L("Line width of initial layer. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of initial layer"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); - + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("initial_layer_print_height", coFloat); def->label = L("Initial layer height"); @@ -1769,25 +1582,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(60.0)); - def = this->add("initial_layer_travel_speed", coFloatOrPercent); - def->label = L("Initial layer travel speed"); - def->tooltip = L("Travel speed of initial layer"); - def->category = L("Speed"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "travel_speed"; - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); - - def = this->add("slow_down_layers", coInt); - def->label = L("Number of slow layers"); - def->tooltip = L("The first few layers are printed slower than normal. " - "The speed is gradually increased in a linear fashion over the specified number of layers."); - def->category = L("Speed"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionInt(0)); - def = this->add("nozzle_temperature_initial_layer", coInts); def->label = L("Initial layer"); def->full_label = L("Initial layer nozzle temperature"); @@ -1799,26 +1593,14 @@ void PrintConfigDef::init_fff_params() def = this->add("full_fan_speed_layer", coInts); def->label = L("Full fan speed at layer"); - def->tooltip = L("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."); + //def->tooltip = L("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."); def->min = 0; def->max = 1000; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionInts { 0 }); - - def = this->add("support_material_interface_fan_speed", coInts); - def->label = L("Support interface fan speed"); - def->tooltip = L("This fan speed is enforced during all support interfaces, to be able to weaken their bonding with a high fan speed." - "\nSet to -1 to disable this override." - "\nCan only be overriden by disable_fan_first_layers."); - def->sidetext = L("%"); - def->min = -1; - def->max = 100; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionInts{ -1 }); - def = this->add("fuzzy_skin", coEnum); def->label = L("Fuzzy Skin"); @@ -1857,13 +1639,12 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(0.8)); - def = this->add("filter_out_gap_fill", coFloat); - def->label = L("Filter out tiny gaps"); - def->category = L("Layers and Perimeters"); - def->tooltip = L("Filter out gaps smaller than the threshold specified. This setting won't affect top/bottom layers"); - def->mode = comAdvanced; + def = this->add("filter_out_gap_fill", coFloat); + def->label = L("Filter out tiny gaps"); + def->tooltip = L("Filter out gaps smaller than the threshold specified. This setting won't affact top/bottom layers"); + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); - + def = this->add("gap_infill_speed", coFloat); def->label = L("Gap infill"); def->category = L("Speed"); @@ -1891,7 +1672,7 @@ void PrintConfigDef::init_fff_params() def = this->add("scan_first_layer", coBool); def->label = L("Scan first layer"); def->tooltip = L("Enable this to enable the camera on printer to check the quality of first layer"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionBool(false)); //BBS // def = this->add("spaghetti_detector", coBool); @@ -1913,61 +1694,23 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Hardened steel")); def->enum_labels.push_back(L("Stainless steel")); def->enum_labels.push_back(L("Brass")); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionEnum(ntUndefine)); - def = this->add("nozzle_hrc", coInt); - def->label = L("Nozzle HRC"); - def->tooltip = L("The nozzle's hardness. Zero means no checking for nozzle's hardness during slicing."); - def->sidetext = L("HRC"); - def->min = 0; - def->max = 500; - def->mode = comDevelop; - def->set_default_value(new ConfigOptionInt{0}); - def = this->add("auxiliary_fan", coBool); def->label = L("Auxiliary part cooling fan"); def->tooltip = L("Enable this option if machine has auxiliary part cooling fan"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionBool(false)); - def = this->add("fan_speedup_time", coFloat); - // Label is set in Tab.cpp in the Line object. - //def->label = L("Fan speed-up time"); - def->tooltip = L("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)." - "\nIt won't move fan comands from custom gcodes (they act as a sort of 'barrier')." - "\nIt won't move fan comands into the start gcode if the 'only custom start gcode' is activated." - "\nUse 0 to deactivate."); - def->sidetext = L("s"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0)); - - def = this->add("fan_speedup_overhangs", coBool); - def->label = L("Only overhangs"); - def->tooltip = L("Will only take into account the delay for the cooling of overhangs."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); - - def = this->add("fan_kickstart", coFloat); - def->label = L("Fan kick-start time"); - def->tooltip = L("Emit a max fan speed command for this amount of seconds before reducing to target speed to kick-start the cooling fan." - "\nThis is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to " - "get the fan up to speed faster." - "\nSet to 0 to deactivate."); - def->sidetext = L("s"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("gcode_flavor", coEnum); def->label = L("G-code flavor"); def->tooltip = L("What kind of gcode the printer is compatible with"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("marlin"); def->enum_values.push_back("klipper"); - def->enum_values.push_back("reprapfirmware"); + //def->enum_values.push_back("reprap"); + //def->enum_values.push_back("reprapfirmware"); //def->enum_values.push_back("repetier"); //def->enum_values.push_back("teacup"); //def->enum_values.push_back("makerware"); @@ -1978,9 +1721,9 @@ void PrintConfigDef::init_fff_params() //def->enum_values.push_back("smoothie"); //def->enum_values.push_back("no-extrusion"); def->enum_labels.push_back("Marlin(legacy)"); - def->enum_labels.push_back(L("Klipper")); - def->enum_labels.push_back("RepRapFirmware"); + def->enum_labels.push_back("Klipper"); //def->enum_labels.push_back("RepRap/Sprinter"); + //def->enum_labels.push_back("RepRapFirmware"); //def->enum_labels.push_back("Repetier"); //def->enum_labels.push_back("Teacup"); //def->enum_labels.push_back("MakerWare (MakerBot)"); @@ -1994,28 +1737,13 @@ void PrintConfigDef::init_fff_params() def->readonly = false; def->set_default_value(new ConfigOptionEnum(gcfMarlinLegacy)); - def = this->add("gcode_label_objects", coBool); - def->label = L("Label objects"); - def->tooltip = L("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."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(1)); - + //OrcaSlicer def = this->add("exclude_object", coBool); def->label = L("Exclude objects"); - def->tooltip = L("Enable this option to add EXCLUDE OBJECT command in g-code"); + def->tooltip = L("Enable this option to add EXCLUDE OBJECT command in g-code for klipper firmware printer"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(1)); - def = this->add("gcode_comments", coBool); - def->label = L("Verbose G-code"); - def->tooltip = L("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."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(0)); - //BBS def = this->add("infill_combination", coBool); def->label = L("Infill combination"); @@ -2025,6 +1753,62 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + auto def_infill_anchor_min = def = this->add("sparse_infill_anchor", coFloatOrPercent); + def->label = L("Length of sparse infill anchor"); + def->category = L("Strength"); + def->tooltip = L("Connect a sparse infill line to an internal perimeter with a short segment of an additional perimeter. " + "If expressed as percentage (example: 15%) it is calculated over sparse infill line width. " + "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. " + "Set this parameter to zero to disable anchoring perimeters connected to a single infill line."); + def->sidetext = L("mm or %"); + def->ratio_over = "sparse_infill_line_width"; + def->max_literal = 1000; + def->gui_type = ConfigOptionDef::GUIType::f_enum_open; + def->enum_values.push_back("0"); + def->enum_values.push_back("1"); + def->enum_values.push_back("2"); + def->enum_values.push_back("5"); + def->enum_values.push_back("10"); + def->enum_values.push_back("1000"); + def->enum_labels.push_back(L("0 (no open anchors)")); + def->enum_labels.push_back("1 mm"); + def->enum_labels.push_back("2 mm"); + def->enum_labels.push_back("5 mm"); + def->enum_labels.push_back("10 mm"); + def->enum_labels.push_back(L("1000 (unlimited)")); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloatOrPercent(400, true)); + + def = this->add("sparse_infill_anchor_max", coFloatOrPercent); + def->label = L("Maximum length of sparse infill anchor"); + def->category = def_infill_anchor_min->category; + def->tooltip = L("Connect a sparse infill line to an internal perimeter with a short segment of an additional perimeter. " + "If expressed as percentage (example: 15%) it is calculated over sparse infill line width. " + "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. " + "Set this parameter to zero to disable anchoring."); + def->sidetext = def_infill_anchor_min->sidetext; + def->ratio_over = def_infill_anchor_min->ratio_over; + def->max_literal = def_infill_anchor_min->max_literal; + def->gui_type = def_infill_anchor_min->gui_type; + def->enum_values.push_back("0"); + def->enum_values.push_back("1"); + def->enum_values.push_back("2"); + def->enum_values.push_back("5"); + def->enum_values.push_back("10"); + def->enum_values.push_back("1000"); + def->enum_labels.push_back(L("0 (not anchored)")); + def->enum_labels.push_back("1 mm"); + def->enum_labels.push_back("2 mm"); + def->enum_labels.push_back("5 mm"); + def->enum_labels.push_back("10 mm"); + def->enum_labels.push_back(L("1000 (unlimited)")); + def->mode = def_infill_anchor_min->mode; + def->set_default_value(new ConfigOptionFloatOrPercent(20, false)); + def = this->add("sparse_infill_filament", coInt); def->label = L("Infill"); def->category = L("Extruders"); @@ -2033,17 +1817,14 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("sparse_infill_line_width", coFloatOrPercent); + def = this->add("sparse_infill_line_width", coFloat); def->label = L("Sparse infill"); def->category = L("Quality"); - def->tooltip = L("Line width of internal sparse infill. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of internal sparse infill"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("infill_wall_overlap", coPercent); def->label = L("Infill/Wall overlap"); @@ -2080,13 +1861,13 @@ void PrintConfigDef::init_fff_params() def->cli = ConfigOptionDef::nocli; def = this->add("interface_shells", coBool); - def->label = L("Interface shells"); + //def->label = L("Interface shells"); def->label = "Interface shells"; - def->tooltip = L("Force the generation of solid shells between adjacent materials/volumes. " - "Useful for multi-extruder prints with translucent materials or manual soluble " - "support material"); + //def->tooltip = L("Force the generation of solid shells between adjacent materials/volumes. " + // "Useful for multi-extruder prints with translucent materials or manual soluble " + // "support material"); def->category = L("Quality"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionBool(false)); def = this->add("ironing_type", coEnum); @@ -2116,7 +1897,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Rectilinear")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(ipRectilinear)); - + def = this->add("ironing_flow", coPercent); def->label = L("Ironing flow"); def->category = L("Quality"); @@ -2306,7 +2087,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Maximum acceleration for travel (M204 T)"); def->sidetext = L("mm/s²"); def->min = 0; - def->readonly = false; + def->readonly = true; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloats{ 1500., 1250. }); @@ -2394,13 +2175,13 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Diameter of nozzle"); def->sidetext = L("mm"); def->mode = comAdvanced; - def->max = 100; + def->max = 1.0; def->set_default_value(new ConfigOptionFloats { 0.4 }); def = this->add("host_type", coEnum); def->label = L("Host Type"); def->tooltip = L("Slic3r can upload G-code files to a printer host. This field must contain " - "the kind of the host."); + "the kind of the host."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("prusalink"); def->enum_values.push_back("octoprint"); @@ -2410,7 +2191,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("repetier"); def->enum_values.push_back("mks"); def->enum_labels.push_back("PrusaLink"); - def->enum_labels.push_back("Octo/Klipper"); + def->enum_labels.push_back("OctoPrint"); def->enum_labels.push_back("Duet"); def->enum_labels.push_back("FlashAir"); def->enum_labels.push_back("AstroBox"); @@ -2419,14 +2200,13 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->cli = ConfigOptionDef::nocli; def->set_default_value(new ConfigOptionEnum(htOctoPrint)); - def = this->add("nozzle_volume", coFloat); def->label = L("Nozzle volume"); def->tooltip = L("Volume of nozzle between the cutter and the end of nozzle"); def->sidetext = L("mm³"); - def->mode = comAdvanced; - def->readonly = false; + def->mode = comDevelop; + def->readonly = true; def->set_default_value(new ConfigOptionFloat { 0.0 }); def = this->add("start_end_points", coPoints); @@ -2457,44 +2237,15 @@ void PrintConfigDef::init_fff_params() def->label = L("Filename format"); def->tooltip = L("User can self-define the project file name when export"); def->full_width = true; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionString("{input_filename_base}_{filament_type[0]}_{print_time}.gcode")); - - def = this->add("make_overhang_printable", coBool); - def->label = L("Make overhang printable"); - def->category = L("Quality"); - def->tooltip = L("Modify the geometry to print overhangs without support material."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - - def = this->add("make_overhang_printable_angle", coFloat); - def->label = L("Make overhang printable maximum angle"); - def->category = L("Quality"); - def->tooltip = L("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."); - def->sidetext = L("°"); - def->mode = comAdvanced; - def->min = 0.; - def->max = 90.; - def->set_default_value(new ConfigOptionFloat(55.)); - - def = this->add("make_overhang_printable_hole_size", coFloat); - def->label = L("Make overhang printable hole area"); - def->category = L("Quality"); - def->tooltip = L("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."); - def->sidetext = L("mm²"); - def->mode = comAdvanced; - def->min = 0.; - def->set_default_value(new ConfigOptionFloat(0.)); + def->mode = comDevelop; + def->set_default_value(new ConfigOptionString("[input_filename_base].gcode")); def = this->add("detect_overhang_wall", coBool); def->label = L("Detect overhang wall"); def->category = L("Quality"); def->tooltip = L("Detect the overhang percentage relative to line width and use different speed to print. " - "For 100%% overhang, bridge speed is used."); - def->mode = comAdvanced; + "For 100 percent overhang, bridge speed is used."); + def->mode = comDevelop; def->set_default_value(new ConfigOptionBool(true)); def = this->add("wall_filament", coInt); @@ -2508,17 +2259,14 @@ void PrintConfigDef::init_fff_params() def->mode = comDevelop; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("inner_wall_line_width", coFloatOrPercent); + def = this->add("inner_wall_line_width", coFloat); def->label = L("Inner wall"); def->category = L("Quality"); - def->tooltip = L("Line width of inner wall. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of inner wall"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("inner_wall_speed", coFloat); def->label = L("Inner wall"); @@ -2537,20 +2285,20 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1000; def->set_default_value(new ConfigOptionInt(2)); - + def = this->add("post_process", coStrings); def->label = L("Post-processing Scripts"); def->tooltip = L("If you want to process the output G-code through custom scripts, " - "just list their absolute paths here. Separate multiple scripts with a semicolon. " - "Scripts will be passed the absolute path to the G-code file as the first argument, " - "and they can access the Slic3r config settings by reading environment variables."); + "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 variables of settings also can be read"); def->gui_flags = "serialized"; def->multiline = true; def->full_width = true; def->height = 6; def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings()); - + def = this->add("printer_model", coString); //def->label = L("Printer type"); //def->tooltip = L("Type of the printer"); @@ -2671,7 +2419,7 @@ void PrintConfigDef::init_fff_params() // "by the specified amount (the length is measured on raw filament, before it enters " // "the extruder)."); def->sidetext = L("mm"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloats { 10. }); def = this->add("z_hop", coFloats); @@ -2684,8 +2432,8 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloats { 0.4 }); def = this->add("z_hop_types", coEnums); - def->label = L("Z hop type"); - def->tooltip = L("Z hop type"); + def->label = L("Z Hop Type"); + def->tooltip = L(""); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("Auto Lift"); def->enum_values.push_back("Normal Lift"); @@ -2696,51 +2444,35 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Slope")); def->enum_labels.push_back(L("Spiral")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionEnumsGeneric{ ZHopType::zhtNormal }); + def->set_default_value(new ConfigOptionEnumsGeneric{ ZHopType::zhtSpiral }); - def = this->add("retract_lift_above", coFloats); - def->label = L("Only lift Z above"); - def->tooltip = L("If you set this to a positive value, Z lift will only take place above the specified absolute Z."); - def->sidetext = L("mm"); + def = this->add("extruder_type", coEnums); + def->label = L("Type"); + def->tooltip = ("This setting is only used for initial value of manual calibration of presure advance. Bowden extruder usually has larger pa value. This setting doesn't influence normal slicing"); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("DirectDrive"); + def->enum_values.push_back("Bowden"); + def->enum_labels.push_back(L("Direct drive")); + def->enum_labels.push_back(L("Bowden")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats{0.}); - - def = this->add("retract_lift_below", coFloats); - def->label = L("Only lift Z below"); - def->tooltip = L("If you set this to a positive value, Z lift will only take place below the specified absolute Z."); - def->sidetext = L("mm"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats{0.}); - - def = this->add("retract_lift_enforce", coEnums); - def->label = L("On surfaces"); - def->tooltip = L("Enforce Z Hop behavior. This setting is impacted by the above settings (Only lift Z above/below)."); - def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); - def->enum_values.push_back("All Surfaces"); - def->enum_values.push_back("Top Only"); - def->enum_values.push_back("Bottom Only"); - def->enum_values.push_back("Top and Bottom"); - def->enum_labels.push_back(L("All Surfaces")); - def->enum_labels.push_back(L("Top Only")); - def->enum_labels.push_back(L("Bottom Only")); - def->enum_labels.push_back(L("Top and Bottom")); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionEnumsGeneric{RetractLiftEnforceType ::rletAllSurfaces}); + def->set_default_value(new ConfigOptionEnumsGeneric{ ExtruderType::etDirectDrive }); def = this->add("retract_restart_extra", coFloats); - def->label = L("Extra length on restart"); - def->tooltip = L("When the retraction is compensated after the travel move, the extruder will push " - "this additional amount of filament. This setting is rarely needed."); + //def->label = L("Extra length on restart"); + def->label = "Extra length on restart"; + //def->tooltip = L("When the retraction is compensated after the travel move, the extruder will push " + // "this additional amount of filament. This setting is rarely needed."); def->sidetext = L("mm"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloats { 0. }); def = this->add("retract_restart_extra_toolchange", coFloats); - def->label = L("Extra length on restart"); - def->tooltip = L("When the retraction is compensated after changing tool, the extruder will push " - "this additional amount of filament."); + //def->label = L("Extra length on restart"); + def->label = "Extra length on restart"; + //def->tooltip = L("When the retraction is compensated after changing tool, the extruder will push " + // "this additional amount of filament."); def->sidetext = L("mm"); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloats { 0. }); def = this->add("retraction_speed", coFloats); @@ -2759,19 +2491,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 0. }); - def = this->add("use_firmware_retraction", coBool); - def->label = L("Use firmware retraction"); - def->tooltip = L("This experimental setting uses G10 and G11 commands to have the firmware " - "handle the retraction. This is only supported in recent Marlin."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - - def = this->add("bbl_calib_mark_logo", coBool); - def->label = L("Show auto-calibration marks"); - def->tooltip = ""; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); - def = this->add("seam_position", coEnum); def->label = L("Seam position"); def->category = L("Quality"); @@ -2788,52 +2507,29 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(spAligned)); - def = this->add("staggered_inner_seams", coBool); - def->label = L("Staggered inner seams"); - def->tooltip = L("This option causes the inner seams to be shifted backwards based on their depth, forming a zigzag pattern."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - - def = this->add("seam_gap", coFloatOrPercent); + def = this->add("seam_gap", coPercent); def->label = L("Seam gap"); - def->tooltip = L("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%."); - def->sidetext = L("mm or %"); + def->tooltip = L("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 as a percentage of the current extruder diameter. The default value for this parameter is 15"); + def->sidetext = L("%"); def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(10,true)); + def->mode = comDevelop; + def->set_default_value(new ConfigOptionPercent(15)); - def = this->add("role_based_wipe_speed", coBool); - def->label = L("Role base wipe speed"); - def->tooltip = L("The wipe speed is determined by the speed of the current extrusion role." - "e.g. 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."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); - - def = this->add("wipe_on_loops", coBool); - def->label = L("Wipe on loops"); - def->tooltip = L("To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); - - def = this->add("wipe_speed", coFloatOrPercent); + def = this->add("wipe_speed", coPercent); def->label = L("Wipe speed"); - def->tooltip = L("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%"); - def->sidetext = L("mm/s or %"); - def->ratio_over = "travel_speed"; - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(80,true)); - + def->tooltip = L("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%"); + def->sidetext = L("%"); + def->min = 0.01; + def->mode = comDevelop; + def->set_default_value(new ConfigOptionPercent(80)); + def = this->add("skirt_distance", coFloat); def->label = L("Skirt distance"); def->tooltip = L("Distance from skirt to brim or object"); def->sidetext = L("mm"); def->min = 0; def->max = 10; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(2)); def = this->add("skirt_height", coInt); @@ -2871,16 +2567,7 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("skirt_speed", coFloat); - def->label = L("Skirt speed"); - def->full_label = L("Skirt speed"); - def->tooltip = L("Speed of skirt, in mm/s. Zero means use default layer extrusion speed."); - def->min = 0; - def->sidetext = L("mm/s"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(0.0)); - - def = this->add("slow_down_layer_time", coFloats); + def = this->add("slow_down_layer_time", coInts); def->label = L("Layer time"); def->tooltip = L("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"); @@ -2888,7 +2575,7 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1000; def->mode = comSimple; - def->set_default_value(new ConfigOptionFloats { 5.0f }); + def->set_default_value(new ConfigOptionInts { 5 }); def = this->add("minimum_sparse_infill_area", coFloat); def->label = L("Minimum sparse infill threshold"); @@ -2910,17 +2597,14 @@ void PrintConfigDef::init_fff_params() def->mode = comDevelop; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("internal_solid_infill_line_width", coFloatOrPercent); + def = this->add("internal_solid_infill_line_width", coFloat); def->label = L("Internal solid infill"); def->category = L("Quality"); - def->tooltip = L("Line width of internal solid infill. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of internal solid infill"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("internal_solid_infill_speed", coFloat); def->label = L("Internal solid infill"); @@ -3142,17 +2826,14 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("support_line_width", coFloatOrPercent); + def = this->add("support_line_width", coFloat); def->label = L("Support"); def->category = L("Quality"); - def->tooltip = L("Line width of support. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width of support"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("support_interface_loop_pattern", coBool); def->label = L("Interface use loop pattern"); @@ -3202,7 +2883,7 @@ void PrintConfigDef::init_fff_params() //TRN To be shown in Print Settings "Bottom interface layers". Have to be as short as possible def->enum_labels.push_back("-1"); append(def->enum_labels, support_interface_top_layers->enum_labels); - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionInt(0)); def = this->add("support_interface_spacing", coFloat); @@ -3221,7 +2902,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Spacing of bottom interface lines. Zero means solid interface"); def->sidetext = L("mm"); def->min = 0; - def->mode = comAdvanced; + def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0.5)); def = this->add("support_interface_speed", coFloat); @@ -3363,25 +3044,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(5.)); - def = this->add("tree_support_adaptive_layer_height", coBool); - def->label = L("Adaptive layer height"); - def->category = L("Quality"); - def->tooltip = L("Enabling this option means the height of tree support layer except the first will be automatically calculated "); - def->set_default_value(new ConfigOptionBool(1)); - - def = this->add("tree_support_auto_brim", coBool); - def->label = L("Auto brim width"); - def->category = L("Quality"); - def->tooltip = L("Enabling this option means the width of the brim for tree support will be automatically calculated"); - def->set_default_value(new ConfigOptionBool(1)); - - def = this->add("tree_support_brim_width", coFloat); - def->label = L("Tree support brim width"); - def->category = L("Quality"); - def->min = 0.0; - def->tooltip = L("Distance from tree branch to the outermost brim line"); - def->set_default_value(new ConfigOptionFloat(3)); - def = this->add("tree_support_branch_diameter", coFloat); def->label = L("Tree support branch diameter"); def->category = L("Support"); @@ -3400,20 +3062,23 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("tree_support_with_infill", coBool); - def->label = L("Tree support with infill"); + def = this->add("tree_support_brim_width", coFloat); + def->label = L("Tree support brim width"); def->category = L("Support"); - def->tooltip = L("This setting specifies whether to add infill inside large hollows of tree support"); + def->tooltip = L("The brim width around tree support. 0 means auto."); + def->sidetext = L("mm"); + def->min = 0; + def->max = 100; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); + def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("chamber_temperature", coInts); + def = this->add("chamber_temperatures", coInts); def->label = L("Chamber temperature"); def->tooltip = L("Target chamber temperature"); def->sidetext = L("°C"); def->full_label = L("Chamber temperature"); def->min = 0; - def->max = max_temp; + def->max = 60; def->set_default_value(new ConfigOptionInts{0}); def = this->add("nozzle_temperature", coInts); @@ -3468,17 +3133,14 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionString("")); - def = this->add("top_surface_line_width", coFloatOrPercent); + def = this->add("top_surface_line_width", coFloat); def->label = L("Top surface"); def->category = L("Quality"); - def->tooltip = L("Line width for top surfaces. If expressed as a %, it will be computed over the nozzle diameter."); - def->sidetext = L("mm or %"); - def->ratio_over = "nozzle_diameter"; + def->tooltip = L("Line width for top surfaces"); + def->sidetext = L("mm"); def->min = 0; - def->max = 1000; - def->max_literal = 10; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(0., false)); + def->set_default_value(new ConfigOptionFloat(0.4)); def = this->add("top_surface_speed", coFloat); def->label = L("Top surface"); @@ -3528,6 +3190,13 @@ void PrintConfigDef::init_fff_params() def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0.)); + def = this->add("use_relative_e_distances", coBool); + def->label = L("Use relative E distances"); + def->tooltip = L("If your firmware requires relative E values, check this, " + "otherwise leave it unchecked. Must use relative e distance for Bambu printer"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("wipe", coBools); def->label = L("Wipe while retracting"); def->tooltip = L("Move nozzle along the last extrusion path when retracting to clean leaked material on nozzle. " @@ -3541,7 +3210,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("mm"); def->min = 0; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats { 1. }); + def->set_default_value(new ConfigOptionFloats { 2. }); def = this->add("enable_prime_tower", coBool); def->label = L("Enable"); @@ -3677,22 +3346,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); - def = this->add("thumbnails", coPoints); - def->label = L("G-code thumbnails"); - def->tooltip = L("Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the following format: \"XxY, XxY, ...\""); - def->mode = comAdvanced; - def->gui_type = ConfigOptionDef::GUIType::one_string; - def->set_default_value(new ConfigOptionPoints{Vec2d(300, 300)}); - - def = this->add("use_relative_e_distances", coBool); - def->label = L("Use relative E distances"); - def->tooltip = L("Relative extrusion is recommended when using \"label_objects\" option." - "Some extruders work better with this option unckecked (absolute extrusion mode). " - "Wipe tower is only compatible with relative mode. It is always enabled on " - "BambuLab printers. Default is checked"); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); - def = this->add("wall_generator", coEnum); def->label = L("Wall generator"); def->category = L("Quality"); @@ -3782,7 +3435,7 @@ void PrintConfigDef::init_fff_params() // Declare retract values for filament profile, overriding the printer's extruder profile. for (const char *opt_key : { // floats - "retraction_length", "z_hop", "z_hop_types", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retraction_speed", "deretraction_speed", "retract_restart_extra", "retraction_minimum_travel", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_restart_extra", "retraction_minimum_travel", // BBS: floats "wipe_distance", // bools @@ -3828,8 +3481,8 @@ void PrintConfigDef::init_extruder_option_keys() { // ConfigOptionFloats, ConfigOptionPercents, ConfigOptionBools, ConfigOptionStrings m_extruder_option_keys = { - "nozzle_diameter", "min_layer_height", "max_layer_height", "extruder_offset", - "retraction_length", "z_hop", "z_hop_types", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retraction_speed", "deretraction_speed", + "extruder_type", "nozzle_diameter", "min_layer_height", "max_layer_height", "extruder_offset", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_before_wipe", "retract_restart_extra", "retraction_minimum_travel", "wipe", "wipe_distance", "retract_when_changing_layer", "retract_length_toolchange", "retract_restart_extra_toolchange", "extruder_colour", "default_filament_profile" @@ -3838,9 +3491,6 @@ void PrintConfigDef::init_extruder_option_keys() m_extruder_retract_keys = { "deretraction_speed", "retract_before_wipe", - "retract_lift_above", - "retract_lift_below", - "retract_lift_enforce", "retract_restart_extra", "retract_when_changing_layer", "retraction_length", @@ -3858,18 +3508,15 @@ void PrintConfigDef::init_filament_option_keys() { m_filament_option_keys = { "filament_diameter", "min_layer_height", "max_layer_height", - "retraction_length", "z_hop", "z_hop_types", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retraction_speed", "deretraction_speed", + "retraction_length", "z_hop", "z_hop_types", "retraction_speed", "deretraction_speed", "retract_before_wipe", "retract_restart_extra", "retraction_minimum_travel", "wipe", "wipe_distance", "retract_when_changing_layer", "retract_length_toolchange", "retract_restart_extra_toolchange", "filament_colour", - "default_filament_profile"/*,"filament_seam_gap"*/ + "default_filament_profile" }; m_filament_retract_keys = { "deretraction_speed", "retract_before_wipe", - "retract_lift_above", - "retract_lift_below", - "retract_lift_enforce", "retract_restart_extra", "retract_when_changing_layer", "retraction_length", @@ -4521,6 +4168,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va opt_key = "enable_prime_tower"; } else if (opt_key == "wipe_tower_width") { opt_key = "prime_tower_width"; + } else if (opt_key == "bottom_solid_infill_flow_ratio") { + opt_key = "initial_layer_flow_ratio"; } else if (opt_key == "wiping_volume") { opt_key = "prime_volume"; } else if (opt_key == "wipe_tower_brim_width") { @@ -4576,6 +4225,10 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va value = "tree(auto)"; } else if (opt_key == "support_base_pattern" && value == "none") { value = "hollow"; + } else if (opt_key == "infill_anchor") { + opt_key = "sparse_infill_anchor"; + } else if (opt_key == "infill_anchor_max") { + opt_key = "sparse_infill_anchor_max"; } else if (opt_key == "different_settings_to_system") { std::string copy_value = value; copy_value.erase(std::remove(copy_value.begin(), copy_value.end(), '\"'), copy_value.end()); // remove '"' in string @@ -4589,7 +4242,7 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } } else if (opt_key == "overhang_fan_threshold" && value == "5%") { value = "10%"; - } + } // Ignore the following obsolete configuration keys: static std::set ignore = { @@ -4602,12 +4255,12 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va // BBS , "support_sharp_tails","support_remove_small_overhangs", "support_with_sheath", "tree_support_branch_diameter_angle", "tree_support_collision_resolution", "tree_support_with_infill", - "max_volumetric_speed", "max_print_speed", + "small_perimeter_speed", "max_volumetric_speed", "max_print_speed", "support_closing_radius", "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", "support_transition_line_width", "support_transition_speed", "bed_temperature", "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", - "z_hop_type", "z_lift_type" + "z_hop_type","nozzle_hrc","chamber_temperature","only_one_wall_top" }; if (ignore.find(opt_key) != ignore.end()) { @@ -5032,22 +4685,6 @@ std::map validate(const FullPrintConfig &cfg, bool und error_message.emplace("bottom_shell_layers", L("invalid value ") + std::to_string(cfg.bottom_shell_layers)); } - if (cfg.use_firmware_retraction.value && - cfg.gcode_flavor.value != gcfKlipper && - cfg.gcode_flavor.value != gcfSmoothie && - cfg.gcode_flavor.value != gcfRepRapSprinter && - cfg.gcode_flavor.value != gcfRepRapFirmware && - cfg.gcode_flavor.value != gcfMarlinLegacy && - cfg.gcode_flavor.value != gcfMarlinFirmware && - cfg.gcode_flavor.value != gcfMachinekit && - cfg.gcode_flavor.value != gcfRepetier) - error_message.emplace("use_firmware_retraction","--use-firmware-retraction is only supported by Klipper, Marlin, Smoothie, RepRapFirmware, Repetier and Machinekit firmware"); - - if (cfg.use_firmware_retraction.value) - for (unsigned char wipe : cfg.wipe.values) - if (wipe) - error_message.emplace("use_firmware_retraction", "--use-firmware-retraction is not compatible with --wipe"); - // --gcode-flavor if (! print_config_def.get("gcode_flavor")->has_enum_value(cfg.gcode_flavor.serialize())) { error_message.emplace("gcode_flavor", L("invalid value ") + cfg.gcode_flavor.serialize()); @@ -5064,7 +4701,7 @@ std::map validate(const FullPrintConfig &cfg, bool und } // --bottom-fill-pattern - if (! print_config_def.get("bottom_surface_pattern")->has_enum_value(cfg.bottom_surface_pattern.serialize())) { + if (!print_config_def.get("bottom_surface_pattern")->has_enum_value(cfg.bottom_surface_pattern.serialize())) { error_message.emplace("bottom_surface_pattern", L("invalid value ") + cfg.bottom_surface_pattern.serialize()); } @@ -5107,6 +4744,17 @@ std::map validate(const FullPrintConfig &cfg, bool und break; } + // The following test was commented out after 482841b, see also https://github.com/prusa3d/PrusaSlicer/pull/6743. + // The backend should now handle this case correctly. I.e., zero default_acceleration behaves as if all others + // were zero too. This is now consistent with what the UI said would happen. + // The UI already grays the fields out, there is no more reason to reject it here. This function validates the + // config before exporting, leaving this check in would mean that config would be rejected before export + // (although both the UI and the backend handle it). + // --default-acceleration + //if ((cfg.outer_wall_acceleration != 0. || cfg.infill_acceleration != 0. || cfg.bridge_acceleration != 0. || cfg.initial_layer_acceleration != 0.) && + // cfg.default_acceleration == 0.) + // return "Invalid zero value for --default-acceleration when using other acceleration settings"; + // --spiral-vase //for non-cli case, we will popup dialog for spiral mode correction if (cfg.spiral_mode && under_cli) { @@ -5153,7 +4801,7 @@ std::map validate(const FullPrintConfig &cfg, bool und "initial_layer_line_width" }; for (size_t i = 0; i < sizeof(widths) / sizeof(widths[i]); ++ i) { std::string key(widths[i]); - if (cfg.get_abs_value(key, max_nozzle_diameter) > 2.5 * max_nozzle_diameter) { + if (cfg.get_abs_value(key) > 2.5 * max_nozzle_diameter) { error_message.emplace(key, L("too large line width ") + std::to_string(cfg.get_abs_value(key))); //return std::string("Too Large line width: ") + key; } @@ -5499,8 +5147,8 @@ CLIMiscConfigDef::CLIMiscConfigDef() def = this->add("config_compatibility", coEnum); def->label = L("Forward-compatibility rule when loading configurations from config files and project files (3MF, AMF)."); - def->tooltip = L("This version of OrcaSlicer may not understand configurations produced by the newest OrcaSlicer versions. " - "For example, newer OrcaSlicer may extend the list of supported firmware flavors. One may decide to " + def->tooltip = L("This version of BambuStudio may not understand configurations produced by the newest BambuStudio versions. " + "For example, newer BambuStudio may extend the list of supported firmware flavors. One may decide to " "bail out or to substitute an unknown value with a default silently or verbosely."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("disable"); @@ -5546,8 +5194,8 @@ CLIMiscConfigDef::CLIMiscConfigDef() def = this->add("single_instance", coBool); def->label = L("Single instance mode"); - def->tooltip = L("If enabled, the command line arguments are sent to an existing instance of GUI OrcaSlicer, " - "or an existing OrcaSlicer window is activated. " + def->tooltip = L("If enabled, the command line arguments are sent to an existing instance of GUI BambuStudio, " + "or an existing BambuStudio window is activated. " "Overrides the \"single_instance\" configuration value from application preferences.");*/ /* @@ -5556,11 +5204,6 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->tooltip = L("Automatically export current configuration to the specified file."); */ - def = this->add("datadir", coString); - def->label = L("Data directory"); - def->tooltip = L("Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."); - - def = this->add("outputdir", coString); def->label = L("Output directory"); def->tooltip = L("Output directory for the exported files."); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 9bd397b27..02f1718c3 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -32,7 +32,7 @@ namespace Slic3r { enum GCodeFlavor : unsigned char { - gcfMarlinLegacy, gcfKlipper, gcfRepRapFirmware, gcfRepRapSprinter, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit, + gcfMarlinLegacy, gcfKlipper, gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit, gcfSmoothie, gcfNoExtrusion }; @@ -129,12 +129,6 @@ enum SeamPosition { spNearest, spAligned, spRear, spRandom }; -enum LiftType { - NormalLift, - SpiralLift, - LazyLift -}; - enum SLAMaterial { slamTough, slamFlex, @@ -156,7 +150,6 @@ enum SLAPillarConnectionMode { enum BrimType { btAutoBrim, // BBS - btEar, // Orca btOuterOnly, btInnerOnly, btOuterAndInner, @@ -181,6 +174,13 @@ enum class PerimeterGeneratorType Arachne }; +enum class TopOneWallType +{ + None, + Alltop, + Topmost +}; + // BBS enum OverhangFanThreshold { Overhang_threshold_none = 0, @@ -219,11 +219,10 @@ enum ZHopType { zhtCount }; -enum RetractLiftEnforceType { - rletAllSurfaces = 0, - rletTopOnly, - rletBottomOnly, - rletTopAndBottom +// BBS +enum ExtruderType { + etDirectDrive = 0, + etBowden }; static std::string bed_type_to_gcode_string(const BedType type) @@ -312,7 +311,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(ForwardCompatibilitySubstitutionRule) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrintHostType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(AuthorizationType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PerimeterGeneratorType) - +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(TopOneWallType) #undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS // Defines each and every confiuration option of Slic3r, including the properties of the GUI dialogs. @@ -641,12 +640,10 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, brim_object_gap)) ((ConfigOptionEnum, brim_type)) ((ConfigOptionFloat, brim_width)) - ((ConfigOptionFloat, brim_ears_detection_length)) - ((ConfigOptionFloat, brim_ears_max_angle)) ((ConfigOptionBool, bridge_no_support)) ((ConfigOptionFloat, elefant_foot_compensation)) ((ConfigOptionFloat, max_bridge_length)) - ((ConfigOptionFloatOrPercent, line_width)) + ((ConfigOptionFloat, line_width)) // Force the generation of solid shells between adjacent materials/volumes. ((ConfigOptionBool, interface_shells)) ((ConfigOptionFloat, layer_height)) @@ -656,7 +653,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, raft_first_layer_expansion)) ((ConfigOptionInt, raft_layers)) ((ConfigOptionEnum, seam_position)) - ((ConfigOptionBool, staggered_inner_seams)) ((ConfigOptionFloat, slice_closing_radius)) ((ConfigOptionEnum, slicing_mode)) ((ConfigOptionBool, enable_support)) @@ -671,7 +667,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, support_bottom_z_distance)) ((ConfigOptionInt, enforce_support_layers)) ((ConfigOptionInt, support_filament)) - ((ConfigOptionFloatOrPercent, support_line_width)) + ((ConfigOptionFloat, support_line_width)) ((ConfigOptionBool, support_interface_loop_pattern)) ((ConfigOptionInt, support_interface_filament)) ((ConfigOptionInt, support_interface_top_layers)) @@ -703,8 +699,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, tree_support_branch_diameter)) ((ConfigOptionFloat, tree_support_branch_angle)) ((ConfigOptionInt, tree_support_wall_count)) - ((ConfigOptionBool, tree_support_adaptive_layer_height)) - ((ConfigOptionBool, tree_support_auto_brim)) ((ConfigOptionFloat, tree_support_brim_width)) ((ConfigOptionBool, detect_narrow_internal_solid_infill)) // ((ConfigOptionBool, adaptive_layer_height)) @@ -717,39 +711,39 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionInt, wall_distribution_count)) ((ConfigOptionPercent, min_feature_size)) ((ConfigOptionPercent, min_bead_width)) - - // Orca - ((ConfigOptionFloat, make_overhang_printable_angle)) - ((ConfigOptionFloat, make_overhang_printable_hole_size)) + ((ConfigOptionEnum, top_one_wall_type)) + ((ConfigOptionBool, only_one_wall_first_layer)) + // OrcaSlicer + ((ConfigOptionPercent, seam_gap)) + ((ConfigOptionPercent, wipe_speed)) ) // This object is mapped to Perl as Slic3r::Config::PrintRegion. PRINT_CONFIG_CLASS_DEFINE( PrintRegionConfig, - ((ConfigOptionInt, bottom_shell_layers)) - ((ConfigOptionFloat, bottom_shell_thickness)) - ((ConfigOptionFloat, bridge_angle)) - ((ConfigOptionFloat, bridge_flow)) - ((ConfigOptionFloat, bridge_speed)) - ((ConfigOptionFloatOrPercent, internal_bridge_speed)) - ((ConfigOptionBool, ensure_vertical_shell_thickness)) - ((ConfigOptionEnum, top_surface_pattern)) - ((ConfigOptionEnum, bottom_surface_pattern)) + ((ConfigOptionInt, bottom_shell_layers)) + ((ConfigOptionFloat, bottom_shell_thickness)) + ((ConfigOptionFloat, bridge_angle)) + ((ConfigOptionFloat, bridge_flow)) + ((ConfigOptionFloat, bridge_speed)) + ((ConfigOptionBool, ensure_vertical_shell_thickness)) + ((ConfigOptionEnum, top_surface_pattern)) + ((ConfigOptionEnum, bottom_surface_pattern)) ((ConfigOptionEnum, internal_solid_infill_pattern)) - ((ConfigOptionFloatOrPercent, outer_wall_line_width)) - ((ConfigOptionFloat, outer_wall_speed)) - ((ConfigOptionFloat, infill_direction)) - ((ConfigOptionPercent, sparse_infill_density)) - ((ConfigOptionEnum, sparse_infill_pattern)) - ((ConfigOptionEnum, fuzzy_skin)) - ((ConfigOptionFloat, fuzzy_skin_thickness)) - ((ConfigOptionFloat, fuzzy_skin_point_distance)) - ((ConfigOptionFloat, gap_infill_speed)) - ((ConfigOptionInt, sparse_infill_filament)) - ((ConfigOptionFloatOrPercent, sparse_infill_line_width)) - ((ConfigOptionPercent, infill_wall_overlap)) - ((ConfigOptionFloat, sparse_infill_speed)) + ((ConfigOptionFloat, outer_wall_line_width)) + ((ConfigOptionFloat, outer_wall_speed)) + ((ConfigOptionFloat, infill_direction)) + ((ConfigOptionPercent, sparse_infill_density)) + ((ConfigOptionEnum, sparse_infill_pattern)) + ((ConfigOptionEnum, fuzzy_skin)) + ((ConfigOptionFloat, fuzzy_skin_thickness)) + ((ConfigOptionFloat, fuzzy_skin_point_distance)) + ((ConfigOptionFloat, gap_infill_speed)) + ((ConfigOptionInt, sparse_infill_filament)) + ((ConfigOptionFloat, sparse_infill_line_width)) + ((ConfigOptionPercent, infill_wall_overlap)) + ((ConfigOptionFloat, sparse_infill_speed)) //BBS ((ConfigOptionBool, infill_combination)) // Ironing options @@ -761,51 +755,34 @@ PRINT_CONFIG_CLASS_DEFINE( // Detect bridging perimeters ((ConfigOptionBool, detect_overhang_wall)) ((ConfigOptionInt, wall_filament)) - ((ConfigOptionFloatOrPercent, inner_wall_line_width)) + ((ConfigOptionFloat, inner_wall_line_width)) ((ConfigOptionFloat, inner_wall_speed)) // Total number of perimeters. ((ConfigOptionInt, wall_loops)) ((ConfigOptionFloat, minimum_sparse_infill_area)) ((ConfigOptionInt, solid_infill_filament)) - ((ConfigOptionFloatOrPercent, internal_solid_infill_line_width)) + ((ConfigOptionFloat, internal_solid_infill_line_width)) ((ConfigOptionFloat, internal_solid_infill_speed)) // Detect thin walls. ((ConfigOptionBool, detect_thin_wall)) - ((ConfigOptionFloatOrPercent, top_surface_line_width)) + ((ConfigOptionFloat, top_surface_line_width)) ((ConfigOptionInt, top_shell_layers)) ((ConfigOptionFloat, top_shell_thickness)) ((ConfigOptionFloat, top_surface_speed)) //BBS - ((ConfigOptionBool, enable_overhang_speed)) - ((ConfigOptionFloatOrPercent, overhang_1_4_speed)) - ((ConfigOptionFloatOrPercent, overhang_2_4_speed)) - ((ConfigOptionFloatOrPercent, overhang_3_4_speed)) - ((ConfigOptionFloatOrPercent, overhang_4_4_speed)) - ((ConfigOptionBool, only_one_wall_top)) - - //SoftFever - ((ConfigOptionFloatOrPercent, min_width_top_surface)) - ((ConfigOptionBool, only_one_wall_first_layer)) - ((ConfigOptionFloat, print_flow_ratio)) - ((ConfigOptionFloatOrPercent, seam_gap)) - ((ConfigOptionBool, role_based_wipe_speed)) - ((ConfigOptionFloatOrPercent, wipe_speed)) - ((ConfigOptionBool, wipe_on_loops)) - ((ConfigOptionEnum, wall_infill_order)) - ((ConfigOptionBool, precise_outer_wall)) - ((ConfigOptionBool, overhang_speed_classic)) - ((ConfigOptionPercent, bridge_density)) - ((ConfigOptionFloat, filter_out_gap_fill)) - ((ConfigOptionFloatOrPercent, small_perimeter_speed)) - ((ConfigOptionFloat, small_perimeter_threshold)) - ((ConfigOptionFloat, top_solid_infill_flow_ratio)) - ((ConfigOptionFloat, bottom_solid_infill_flow_ratio)) - ((ConfigOptionFloatOrPercent, infill_anchor)) - ((ConfigOptionFloatOrPercent, infill_anchor_max)) - - // Orca - ((ConfigOptionBool, make_overhang_printable)) -) + ((ConfigOptionBool, enable_overhang_speed)) + ((ConfigOptionFloat, overhang_1_4_speed)) + ((ConfigOptionFloat, overhang_2_4_speed)) + ((ConfigOptionFloat, overhang_3_4_speed)) + ((ConfigOptionFloat, overhang_4_4_speed)) + ((ConfigOptionFloatOrPercent, sparse_infill_anchor)) + ((ConfigOptionFloatOrPercent, sparse_infill_anchor_max)) + //OrcaSlicer + ((ConfigOptionFloat, top_solid_infill_flow_ratio)) + ((ConfigOptionFloat, initial_layer_flow_ratio)) + ((ConfigOptionFloat, filter_out_gap_fill)) + //calib + ((ConfigOptionFloat, print_flow_ratio))) PRINT_CONFIG_CLASS_DEFINE( MachineEnvelopeConfig, @@ -850,9 +827,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_flow_ratio)) ((ConfigOptionBools, enable_pressure_advance)) ((ConfigOptionFloats, pressure_advance)) - ((ConfigOptionFloat, fan_kickstart)) - ((ConfigOptionBool, fan_speedup_overhangs)) - ((ConfigOptionFloat, fan_speedup_time)) ((ConfigOptionFloats, filament_diameter)) ((ConfigOptionFloats, filament_density)) ((ConfigOptionStrings, filament_type)) @@ -872,7 +846,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, gcode_add_line_number)) ((ConfigOptionBool, bbl_bed_temperature_gcode)) ((ConfigOptionEnum, gcode_flavor)) - ((ConfigOptionString, layer_change_gcode)) //#ifdef HAS_PRESSURE_EQUALIZER // ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_positive)) @@ -884,9 +857,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, z_hop)) // BBS ((ConfigOptionEnumsGeneric, z_hop_types)) - ((ConfigOptionFloats, retract_lift_above)) - ((ConfigOptionFloats, retract_lift_below)) - ((ConfigOptionEnumsGeneric, retract_lift_enforce)) ((ConfigOptionFloats, retract_restart_extra)) ((ConfigOptionFloats, retract_restart_extra_toolchange)) ((ConfigOptionFloats, retraction_speed)) @@ -897,21 +867,16 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionString, change_filament_gcode)) ((ConfigOptionFloat, travel_speed)) ((ConfigOptionFloat, travel_speed_z)) + ((ConfigOptionBool, use_relative_e_distances)) ((ConfigOptionBool, silent_mode)) ((ConfigOptionString, machine_pause_gcode)) ((ConfigOptionString, template_custom_gcode)) //BBS ((ConfigOptionEnum, nozzle_type)) - ((ConfigOptionInt, nozzle_hrc)) ((ConfigOptionBool, auxiliary_fan)) - // SoftFever - ((ConfigOptionBool, use_firmware_retraction)) - ((ConfigOptionBool, use_relative_e_distances)) ((ConfigOptionBool, accel_to_decel_enable)) ((ConfigOptionPercent, accel_to_decel_factor)) - ((ConfigOptionFloatOrPercent, initial_layer_travel_speed)) - ((ConfigOptionBool, bbl_calib_mark_logo)) - + ((ConfigOptionEnumsGeneric, extruder_type)) ) // This object is mapped to Perl as Slic3r::Config::Print. @@ -943,39 +908,30 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionInts, first_layer_print_sequence)) ((ConfigOptionBools, slow_down_for_layer_cooling)) ((ConfigOptionFloat, default_acceleration)) + ((ConfigOptionFloat, inner_wall_acceleration)) + ((ConfigOptionFloatOrPercent, sparse_infill_acceleration)) ((ConfigOptionInts, close_fan_the_first_x_layers)) ((ConfigOptionEnum, draft_shield)) ((ConfigOptionFloat, extruder_clearance_height_to_rod))//BBs ((ConfigOptionFloat, extruder_clearance_height_to_lid))//BBS ((ConfigOptionFloat, extruder_clearance_radius)) + ((ConfigOptionFloat, extruder_clearance_max_radius)) ((ConfigOptionStrings, extruder_colour)) ((ConfigOptionPoints, extruder_offset)) ((ConfigOptionBools, reduce_fan_stop_start_freq)) - ((ConfigOptionFloats, fan_cooling_layer_time)) + ((ConfigOptionInts, fan_cooling_layer_time)) ((ConfigOptionStrings, filament_colour)) - ((ConfigOptionFloat, outer_wall_acceleration)) - ((ConfigOptionFloat, inner_wall_acceleration)) ((ConfigOptionFloat, top_surface_acceleration)) + ((ConfigOptionFloat, outer_wall_acceleration)) ((ConfigOptionFloat, initial_layer_acceleration)) - ((ConfigOptionFloatOrPercent, bridge_acceleration)) - ((ConfigOptionFloat, travel_acceleration)) - ((ConfigOptionFloatOrPercent, sparse_infill_acceleration)) - ((ConfigOptionFloatOrPercent, internal_solid_infill_acceleration)) - ((ConfigOptionFloatOrPercent, initial_layer_line_width)) + ((ConfigOptionFloat, initial_layer_line_width)) ((ConfigOptionFloat, initial_layer_print_height)) ((ConfigOptionFloat, initial_layer_speed)) - ((ConfigOptionFloat, default_jerk)) - ((ConfigOptionFloat, outer_wall_jerk)) - ((ConfigOptionFloat, inner_wall_jerk)) - ((ConfigOptionFloat, infill_jerk)) - ((ConfigOptionFloat, top_surface_jerk)) - ((ConfigOptionFloat, initial_layer_jerk)) - ((ConfigOptionFloat, travel_jerk)) - //BBS ((ConfigOptionFloat, initial_layer_infill_speed)) ((ConfigOptionInts, nozzle_temperature_initial_layer)) ((ConfigOptionInts, full_fan_speed_layer)) + ((ConfigOptionEnum,wall_infill_order)) ((ConfigOptionInts, fan_max_speed)) ((ConfigOptionFloats, max_layer_height)) ((ConfigOptionInts, fan_min_speed)) @@ -994,12 +950,11 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, skirt_distance)) ((ConfigOptionInt, skirt_height)) ((ConfigOptionInt, skirt_loops)) - ((ConfigOptionFloat, skirt_speed)) - ((ConfigOptionFloats, slow_down_layer_time)) + ((ConfigOptionInts, slow_down_layer_time)) ((ConfigOptionBool, spiral_mode)) ((ConfigOptionInt, standby_temperature_delta)) ((ConfigOptionInts, nozzle_temperature)) - ((ConfigOptionInts , chamber_temperature)) + ((ConfigOptionInts, chamber_temperatures)) ((ConfigOptionBools, wipe)) // BBS ((ConfigOptionInts, bed_temperature_difference)) @@ -1028,18 +983,17 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, nozzle_volume)) ((ConfigOptionPoints, start_end_points)) ((ConfigOptionEnum, timelapse_type)) - ((ConfigOptionPoints, thumbnails)) + ((ConfigOptionFloat, default_jerk)) + ((ConfigOptionFloat, outer_wall_jerk)) + ((ConfigOptionFloat, inner_wall_jerk)) + ((ConfigOptionFloat, infill_jerk)) + ((ConfigOptionFloat, top_surface_jerk)) + ((ConfigOptionFloat, initial_layer_jerk)) + ((ConfigOptionFloat, travel_jerk)) + // BBS: move from PrintObjectConfig - ((ConfigOptionBool, independent_support_layer_height)) - // SoftFever - ((ConfigOptionPercents, filament_shrink)) - ((ConfigOptionBool, gcode_label_objects)) - ((ConfigOptionBool, exclude_object)) - ((ConfigOptionBool, gcode_comments)) - ((ConfigOptionInt, slow_down_layers)) - ((ConfigOptionInts, support_material_interface_fan_speed)) - - + ((ConfigOptionBool, independent_support_layer_height)) + ((ConfigOptionBool, exclude_object)) ) // This object is mapped to Perl as Slic3r::Config::Full. @@ -1408,12 +1362,7 @@ public: const ConfigOption* option(const t_config_option_key &opt_key) const { return m_data.option(opt_key); } int opt_int(const t_config_option_key &opt_key) const { return m_data.opt_int(opt_key); } int extruder() const { return opt_int("extruder"); } - double opt_float(const t_config_option_key &opt_key) const { - return m_data.opt_float(opt_key); - } - double get_abs_value(const t_config_option_key &opt_key) const { - return m_data.get_abs_value(opt_key); - } + double opt_float(const t_config_option_key &opt_key) const { return m_data.opt_float(opt_key); } std::string opt_serialize(const t_config_option_key &opt_key) const { return m_data.opt_serialize(opt_key); } // Return an optional timestamp of this object. diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 28e440460..f76c0e0c6 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -423,10 +423,7 @@ static const float g_min_overhang_percent_for_lift = 0.3f; void PrintObject::detect_overhangs_for_lift() { if (this->set_started(posDetectOverhangsForLift)) { - const double nozzle_diameter = m_print->config().nozzle_diameter.get_at(0); - const coordf_t line_width = this->config().get_abs_value("line_width", nozzle_diameter); - - const float min_overlap = line_width * g_min_overhang_percent_for_lift; + const float min_overlap = m_config.line_width * g_min_overhang_percent_for_lift; size_t num_layers = this->layer_count(); size_t num_raft_layers = m_slicing_params.raft_layers(); @@ -436,18 +433,17 @@ void PrintObject::detect_overhangs_for_lift() tbb::spin_mutex layer_storage_mutex; tbb::parallel_for(tbb::blocked_range(num_raft_layers + 1, num_layers), - [this, min_overlap, line_width](const tbb::blocked_range& range) + [this, min_overlap](const tbb::blocked_range& range) { for (size_t layer_id = range.begin(); layer_id < range.end(); ++layer_id) { Layer& layer = *m_layers[layer_id]; Layer& lower_layer = *layer.lower_layer; ExPolygons overhangs = diff_ex(layer.lslices, offset_ex(lower_layer.lslices, scale_(min_overlap))); - layer.loverhangs = std::move(offset2_ex(overhangs, -0.1f * scale_(line_width), 0.1f * scale_(line_width))); + layer.loverhangs = std::move(offset2_ex(overhangs, -0.1f * scale_(m_config.line_width), 0.1f * scale_(m_config.line_width))); layer.loverhangs_bbox = get_extents(layer.loverhangs); } }); - this->set_done(posDetectOverhangsForLift); } } @@ -499,10 +495,10 @@ void PrintObject::generate_support_material() void PrintObject::simplify_extrusion_path() { - if (this->set_started(posSimplifyPath)) { + if (this->set_started(posSimplifyWall)) { m_print->set_status(75, L("Optimizing toolpath")); - BOOST_LOG_TRIVIAL(debug) << "Simplify extrusion path of object in parallel - start"; - //BBS: infill and walls + BOOST_LOG_TRIVIAL(debug) << "Simplify wall extrusion path of object in parallel - start"; + //BBS: walls tbb::parallel_for( tbb::blocked_range(0, m_layers.size()), [this](const tbb::blocked_range& range) { @@ -514,7 +510,7 @@ void PrintObject::simplify_extrusion_path() ); m_print->throw_if_canceled(); BOOST_LOG_TRIVIAL(debug) << "Simplify wall extrusion path of object in parallel - end"; - this->set_done(posSimplifyPath); + this->set_done(posSimplifyWall); } if (this->set_started(posSimplifyInfill)) { @@ -694,12 +690,8 @@ bool PrintObject::invalidate_state_by_config_options( if ( opt_key == "brim_width" || opt_key == "brim_object_gap" || opt_key == "brim_type" - || opt_key == "brim_ears_max_angle" - || opt_key == "brim_ears_detection_length" // BBS: brim generation depends on printing speed || opt_key == "outer_wall_speed" - || opt_key == "small_perimeter_speed" - || opt_key == "small_perimeter_threshold" || opt_key == "sparse_infill_speed" || opt_key == "inner_wall_speed" || opt_key == "support_speed" @@ -717,18 +709,13 @@ bool PrintObject::invalidate_state_by_config_options( } } else if ( opt_key == "wall_loops" - || opt_key == "only_one_wall_top" + || opt_key == "top_one_wall_type" || opt_key == "only_one_wall_first_layer" || opt_key == "initial_layer_line_width" || opt_key == "inner_wall_line_width" - || opt_key == "infill_wall_overlap" - || opt_key == "seam_gap" - || opt_key == "role_based_wipe_speed" - || opt_key == "wipe_on_loops" - || opt_key == "wipe_speed") { + || opt_key == "infill_wall_overlap") { steps.emplace_back(posPerimeters); - } else if (opt_key == "gap_infill_speed" - || opt_key == "filter_out_gap_fill" ) { + } else if (opt_key == "gap_infill_speed" || opt_key == "filter_out_gap_fill") { // Return true if gap-fill speed has changed from zero value to non-zero or from non-zero value to zero. auto is_gap_fill_changed_state_due_to_speed = [&opt_key, &old_config, &new_config]() -> bool { if (opt_key == "gap_infill_speed") { @@ -742,9 +729,9 @@ bool PrintObject::invalidate_state_by_config_options( }; // Filtering of unprintable regions in multi-material segmentation depends on if gap-fill is enabled or not. - // So step posSlice is invalidated when gap-fill was enabled/disabled by option "filter_out_gap_fill" or by + // So step posSlice is invalidated when gap-fill was enabled/disabled by option "gap_fill_enabled" or by // changing "gap_infill_speed" to force recomputation of the multi-material segmentation. - if (this->is_mm_painted() && (opt_key == "filter_out_gap_fill" && (opt_key == "gap_infill_speed" && is_gap_fill_changed_state_due_to_speed()))) + if (this->is_mm_painted() && ((opt_key == "gap_infill_speed" || opt_key == "filter_out_gap_fill") && is_gap_fill_changed_state_due_to_speed())) steps.emplace_back(posSlice); steps.emplace_back(posPerimeters); } else if ( @@ -752,24 +739,14 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "raft_layers" || opt_key == "raft_contact_distance" || opt_key == "slice_closing_radius" - || opt_key == "slicing_mode" - || opt_key == "make_overhang_printable" - || opt_key == "make_overhang_printable_angle" - || opt_key == "make_overhang_printable_hole_size") { + || opt_key == "slicing_mode") { steps.emplace_back(posSlice); } else if ( opt_key == "elefant_foot_compensation" || opt_key == "support_top_z_distance" || opt_key == "support_bottom_z_distance" || opt_key == "xy_hole_compensation" - || opt_key == "xy_contour_compensation" - //BBS: [Arthur] the following params affect bottomBridge surface type detection - || opt_key == "support_type" - || opt_key == "bridge_no_support" - || opt_key == "max_bridge_length" - || opt_key == "support_interface_top_layers" - || opt_key == "support_critical_regions_only" - ) { + || opt_key == "xy_contour_compensation") { steps.emplace_back(posSlice); } else if (opt_key == "enable_support") { steps.emplace_back(posSupportMaterial); @@ -809,12 +786,10 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "bridge_no_support" || opt_key == "max_bridge_length" || opt_key == "initial_layer_line_width" - || opt_key == "tree_support_adaptive_layer_height" - || opt_key == "tree_support_auto_brim" - || opt_key == "tree_support_brim_width" || opt_key == "tree_support_branch_distance" || opt_key == "tree_support_branch_diameter" || opt_key == "tree_support_branch_angle" + || opt_key == "tree_support_brim_width" || opt_key == "tree_support_wall_count") { steps.emplace_back(posSupportMaterial); } else if ( @@ -847,21 +822,19 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "sparse_infill_filament" || opt_key == "solid_infill_filament" || opt_key == "sparse_infill_line_width" - || opt_key == "infill_direction" || opt_key == "ensure_vertical_shell_thickness" || opt_key == "bridge_angle" //BBS - || opt_key == "internal_bridge_support_thickness" - || opt_key == "bridge_density") { + || opt_key == "internal_bridge_support_thickness") { steps.emplace_back(posPrepareInfill); } else if ( opt_key == "top_surface_pattern" || opt_key == "bottom_surface_pattern" || opt_key == "internal_solid_infill_pattern" || opt_key == "external_fill_link_max_length" - || opt_key == "sparse_infill_pattern" - || opt_key == "infill_anchor" - || opt_key == "infill_anchor_max" + || opt_key == "infill_direction" + || opt_key == "sparse_infill_anchor" + || opt_key == "sparse_infill_anchor_max" || opt_key == "top_surface_line_width" || opt_key == "initial_layer_line_width") { steps.emplace_back(posInfill); @@ -898,9 +871,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "detect_overhang_wall" //BBS || opt_key == "enable_overhang_speed" - || opt_key == "detect_thin_wall" - || opt_key == "precise_outer_wall" - || opt_key == "overhang_speed_classic") { + || opt_key == "detect_thin_wall") { steps.emplace_back(posPerimeters); steps.emplace_back(posSupportMaterial); } else if (opt_key == "bridge_flow") { @@ -922,6 +893,8 @@ bool PrintObject::invalidate_state_by_config_options( steps.emplace_back(posSlice); } else if ( opt_key == "seam_position" + || opt_key == "seam_gap" + || opt_key == "wipe_speed" || opt_key == "support_speed" || opt_key == "support_interface_speed" || opt_key == "overhang_1_4_speed" @@ -929,10 +902,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "overhang_3_4_speed" || opt_key == "overhang_4_4_speed" || opt_key == "bridge_speed" - || opt_key == "internal_bridge_speed" || opt_key == "outer_wall_speed" - || opt_key == "small_perimeter_speed" - || opt_key == "small_perimeter_threshold" || opt_key == "sparse_infill_speed" || opt_key == "inner_wall_speed" || opt_key == "internal_solid_infill_speed" @@ -963,15 +933,15 @@ bool PrintObject::invalidate_step(PrintObjectStep step) // propagate to dependent steps if (step == posPerimeters) { - invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill, posIroning, posSimplifyPath, posSimplifyInfill }); + invalidated |= this->invalidate_steps({ posPrepareInfill, posInfill, posIroning, posSimplifyWall, posSimplifyInfill }); invalidated |= m_print->invalidate_steps({ psSkirtBrim }); } else if (step == posPrepareInfill) { - invalidated |= this->invalidate_steps({ posInfill, posIroning, posSimplifyPath, posSimplifyInfill }); + invalidated |= this->invalidate_steps({ posInfill, posIroning, posSimplifyWall, posSimplifyInfill }); } else if (step == posInfill) { invalidated |= this->invalidate_steps({ posIroning, posSimplifyInfill }); invalidated |= m_print->invalidate_steps({ psSkirtBrim }); } else if (step == posSlice) { - invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial, posSimplifyPath, posSimplifyInfill }); + invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial, posSimplifyWall, posSimplifyInfill }); invalidated |= m_print->invalidate_steps({ psSkirtBrim }); m_slicing_params.valid = false; } else if (step == posSupportMaterial) { @@ -2646,7 +2616,6 @@ SupportNecessaryType PrintObject::is_support_necessary() #if 0 double threshold_rad = (m_config.support_threshold_angle.value < EPSILON ? 30 : m_config.support_threshold_angle.value + 1) * M_PI / 180.; int enforce_support_layers = m_config.enforce_support_layers; - // not fixing in extrusion width % PR b/c never called const coordf_t extrusion_width = m_config.line_width.value; const coordf_t extrusion_width_scaled = scale_(extrusion_width); float max_bridge_length = scale_(m_config.max_bridge_length.value); diff --git a/src/libslic3r/Slicing.cpp b/src/libslic3r/Slicing.cpp index e84d00630..f0e6db208 100644 --- a/src/libslic3r/Slicing.cpp +++ b/src/libslic3r/Slicing.cpp @@ -164,27 +164,27 @@ SlicingParameters SlicingParameters::create_from_config( // Convert layer_config_ranges to layer_height_profile. Both are referenced to z=0, meaning the raft layers are not accounted for // in the height profile and the printed object may be lifted by the raft thickness at the time of the G-code generation. std::vector layer_height_profile_from_ranges( - const SlicingParameters &slicing_params, - const t_layer_config_ranges &layer_config_ranges) + const SlicingParameters& slicing_params, + const t_layer_config_ranges& layer_config_ranges) { // 1) If there are any height ranges, trim one by the other to make them non-overlapping. Insert the 1st layer if fixed. - std::vector> ranges_non_overlapping; + std::vector> ranges_non_overlapping; ranges_non_overlapping.reserve(layer_config_ranges.size() * 4); if (slicing_params.first_object_layer_height_fixed()) - ranges_non_overlapping.push_back(std::pair( - t_layer_height_range(0., slicing_params.first_object_layer_height), + ranges_non_overlapping.push_back(std::pair( + t_layer_height_range(0., slicing_params.first_object_layer_height), slicing_params.first_object_layer_height)); // The height ranges are sorted lexicographically by low / high layer boundaries. - for (t_layer_config_ranges::const_iterator it_range = layer_config_ranges.begin(); it_range != layer_config_ranges.end(); ++ it_range) { + for (t_layer_config_ranges::const_iterator it_range = layer_config_ranges.begin(); it_range != layer_config_ranges.end(); ++it_range) { coordf_t lo = it_range->first.first; coordf_t hi = std::min(it_range->first.second, slicing_params.object_print_z_height()); coordf_t height = it_range->second.option("layer_height")->getFloat(); - if (! ranges_non_overlapping.empty()) + if (!ranges_non_overlapping.empty()) // Trim current low with the last high. lo = std::max(lo, ranges_non_overlapping.back().first.second); if (lo + EPSILON < hi) // Ignore too narrow ranges. - ranges_non_overlapping.push_back(std::pair(t_layer_height_range(lo, hi), height)); + ranges_non_overlapping.push_back(std::pair(t_layer_height_range(lo, hi), height)); } // 2) Convert the trimmed ranges to a height profile, fill in the undefined intervals between z=0 and z=slicing_params.object_print_z_max() @@ -233,7 +233,7 @@ std::vector layer_height_profile_from_ranges( lh_append(slicing_params.object_print_z_height(), slicing_params.layer_height); } - return layer_height_profile; + return layer_height_profile; } // Based on the work of @platsch diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 340b4d18b..cde600d29 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -25,7 +25,7 @@ #define TAU (2.0 * M_PI) #define NO_INDEX (std::numeric_limits::max()) -// #define SUPPORT_TREE_DEBUG_TO_SVG +//#define SUPPORT_TREE_DEBUG_TO_SVG #ifdef SUPPORT_TREE_DEBUG_TO_SVG #include "nlohmann/json.hpp" @@ -687,12 +687,12 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p m_object_config->support_interface_pattern == smipConcentric ? ipConcentric : (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); - - const auto nozzle_diameter = object.print()->config().nozzle_diameter.get_at(object.config().support_interface_filament-1); - const coordf_t extrusion_width = m_object_config->line_width.get_abs_value(nozzle_diameter); - const coordf_t support_extrusion_width = m_object_config->support_line_width.get_abs_value(nozzle_diameter); - - m_support_params.support_extrusion_width = support_extrusion_width > 0 ? support_extrusion_width : extrusion_width; + m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; + // Check if set to zero, use default if so. + if (m_support_params.support_extrusion_width <= 0.0) { + const auto nozzle_diameter = object.print()->config().nozzle_diameter.get_at(object.config().support_interface_filament - 1); + m_support_params.support_extrusion_width = Flow::auto_extrusion_width(FlowRole::frSupportMaterial, (float)nozzle_diameter); + } is_slim = is_tree_slim(support_type, support_style); is_strong = is_tree(support_type) && support_style == smsTreeStrong; MAX_BRANCH_RADIUS = 10.0; @@ -726,8 +726,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) const PrintObjectConfig& config = m_object->config(); SupportType stype = support_type; const coordf_t radius_sample_resolution = g_config_tree_support_collision_resolution; - const double nozzle_diameter = m_object->print()->config().nozzle_diameter.get_at(0); - const coordf_t extrusion_width = config.get_abs_value("line_width", nozzle_diameter); + const coordf_t extrusion_width = config.line_width.value; const coordf_t extrusion_width_scaled = scale_(extrusion_width); const coordf_t max_bridge_length = scale_(config.max_bridge_length.value); const bool bridge_no_support = max_bridge_length > 0; @@ -1405,10 +1404,6 @@ void TreeSupport::generate_toolpaths() coordf_t layer_height = object_config.layer_height.value; const size_t wall_count = object_config.tree_support_wall_count.value; - // Check if set to zero, use default if so. - if (support_extrusion_width <= 0.0) - support_extrusion_width = Flow::auto_extrusion_width(FlowRole::frSupportMaterial, (float)nozzle_diameter); - // coconut: use same intensity settings as SupportMaterial.cpp auto m_support_material_interface_flow = support_material_interface_flow(m_object, float(m_slicing_params.layer_height)); coordf_t interface_spacing = object_config.support_interface_spacing.value + m_support_material_interface_flow.spacing(); @@ -1908,10 +1903,10 @@ void TreeSupport::generate() smooth_nodes(contact_nodes); -if (!m_object->config().tree_support_adaptive_layer_height) - // Adjust support layer heights - adjust_layer_heights(contact_nodes); - +#if !USE_PLAN_LAYER_HEIGHTS + // Adjust support layer heights + adjust_layer_heights(contact_nodes); +#endif //Generate support areas. profiler.stage_start(STAGE_DRAW_CIRCLES); @@ -2116,13 +2111,11 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const size_t top_interface_layers = config.support_interface_top_layers.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; const double diameter_angle_scale_factor = tan(tree_support_branch_diameter_angle * M_PI / 180.);// * layer_height / branch_radius; //Scale factor per layer to produce the desired angle. - const double nozzle_diameter = m_object->print()->config().nozzle_diameter.get_at(0); - const coordf_t line_width = config.get_abs_value("support_line_width", nozzle_diameter); - const coordf_t line_width_scaled = scale_(line_width); const bool with_lightning_infill = m_support_params.base_fill_pattern == ipLightning; coordf_t support_extrusion_width = m_support_params.support_extrusion_width; - const size_t wall_count = config.tree_support_wall_count.value; + const coordf_t line_width_scaled = scale_(support_extrusion_width); + const float tree_brim_width = config.tree_support_brim_width.value; const PrintObjectConfig& object_config = m_object->config(); BOOST_LOG_TRIVIAL(info) << "draw_circles for object: " << m_object->model_object()->name; @@ -2212,11 +2205,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } } if (layer_nr == 0 && m_raft_layers == 0) { - double brim_width = - config.tree_support_auto_brim - ? layers_to_top * layer_height / - (scale * branch_radius) * 0.5 - : config.tree_support_brim_width; + double brim_width = tree_brim_width > 0 ? tree_brim_width : layers_to_top * layer_height / (scale * branch_radius) * 0.5; circle = offset(circle, scale_(brim_width))[0]; } area.emplace_back(ExPolygon(circle)); @@ -2301,7 +2290,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no if (SQUARE_SUPPORT) { // simplify support contours ExPolygons base_areas_simplified; - for (auto &area : base_areas) { area.simplify(scale_(line_width / 2), &base_areas_simplified); } + for (auto &area : base_areas) { area.simplify(scale_(support_extrusion_width / 2), &base_areas_simplified); } base_areas = std::move(base_areas_simplified); } //Subtract support floors. We can only compute floor_areas here instead of with roof_areas, @@ -2580,14 +2569,12 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; const size_t top_interface_layers = config.support_interface_top_layers.value; float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm - const auto nozzle_diameter = m_object->print()->config().nozzle_diameter.get_at(m_object->config().support_interface_filament-1); - const auto support_line_width = config.support_line_width.get_abs_value(nozzle_diameter); auto get_branch_angle = [this,&config](coordf_t radius) { if (config.tree_support_branch_angle.value < 30.0) return config.tree_support_branch_angle.value; return (radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; }; - auto get_max_move_dist = [this, &config, branch_radius, tip_layers, diameter_angle_scale_factor, wall_count, support_extrusion_width, support_line_width](const Node *node, int power = 1) { + auto get_max_move_dist = [this, &config, branch_radius, tip_layers, diameter_angle_scale_factor, wall_count, support_extrusion_width](const Node *node, int power = 1) { double move_dist = node->max_move_dist; if (node->max_move_dist == 0) { if (node->radius == 0) node->radius = calc_branch_radius(branch_radius, node->dist_mm_to_top, diameter_angle_scale_factor); @@ -2595,7 +2582,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (angle > 30.0 && node->radius > MIN_BRANCH_RADIUS) angle = (node->radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; double tan_angle = tan(angle * M_PI / 180); - int wall_count_ = node->radius > 2 * support_line_width ? wall_count : 1; + int wall_count_ = node->radius > 2 * support_extrusion_width ? wall_count : 1; node->max_move_dist = (angle < 90) ? (coordf_t) (tan_angle * node->height) * wall_count_ : std::numeric_limits::max(); node->max_move_dist = std::min(node->max_move_dist, support_extrusion_width); move_dist = node->max_move_dist; @@ -3075,7 +3062,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } } } - + BOOST_LOG_TRIVIAL(debug) << "after m_avoidance_cache.size()=" << m_ts_data->m_avoidance_cache.size(); for (Node *node : to_free_node_set) @@ -3282,7 +3269,7 @@ std::vector TreeSupport::plan_layer_heights(std::vector layer_heights(contact_nodes.size()); std::vector bounds; - if (!config.tree_support_adaptive_layer_height || layer_height == max_layer_height || !print_config.independent_support_layer_height) { + if (!USE_PLAN_LAYER_HEIGHTS || layer_height == max_layer_height || !print_config.independent_support_layer_height) { for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { layer_heights[layer_nr] = {m_object->get_layer(layer_nr)->print_z, m_object->get_layer(layer_nr)->height, layer_nr > 0 ? size_t(layer_nr - 1) : 0}; } diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 47a809a74..3ad5836d3 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -9,10 +9,6 @@ #include #include -#include -#include -#include "boost/date_time/posix_time/ptime.hpp" - #include #include "libslic3r.h" @@ -558,21 +554,6 @@ inline std::string get_bbl_monitor_time_dhm(float time_in_secs) return buffer; } -inline std::string get_bbl_monitor_end_time_dhm(float time_in_secs) -{ - if (time_in_secs == 0.0f) - return {}; - - std::stringstream stream; - boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); - auto endTime = now + boost::posix_time::seconds(static_cast(time_in_secs)); - auto facet = new boost::posix_time::time_facet("%H:%M");//%Y-%m-%d %H:%M:%S - stream.imbue(std::locale(std::locale::classic(), facet)); - stream << endTime; - - return stream.str(); -} - inline std::string get_bbl_remain_time_dhms(float time_in_secs) { int days = (int) (time_in_secs / 86400.0f); @@ -610,9 +591,6 @@ inline std::string filter_characters(const std::string& str, const std::string& return filteredStr; } -void copy_directory_recursively(const boost::filesystem::path &source, const boost::filesystem::path &target); - - } // namespace Slic3r #if WIN32 diff --git a/src/libslic3r/VariableWidth.cpp b/src/libslic3r/VariableWidth.cpp index f77a4a9f1..6f7407d70 100644 --- a/src/libslic3r/VariableWidth.cpp +++ b/src/libslic3r/VariableWidth.cpp @@ -2,18 +2,29 @@ namespace Slic3r { -ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline &thick_polyline, ExtrusionRole role, const Flow &flow, const float tolerance, const float merge_tolerance) +ExtrusionMultiPath thick_polyline_to_multi_path(const ThickPolyline& thick_polyline, ExtrusionRole role, const Flow& flow, const float tolerance, const float merge_tolerance) { - ExtrusionPaths paths; - ExtrusionPath path(role); - ThickLines lines = thick_polyline.thicklines(); - + ExtrusionMultiPath multi_path; + ExtrusionPath path(role); + ThickLines lines = thick_polyline.thicklines(); + for (int i = 0; i < (int)lines.size(); ++i) { const ThickLine& line = lines[i]; assert(line.a_width >= SCALED_EPSILON && line.b_width >= SCALED_EPSILON); const coordf_t line_len = line.length(); - if (line_len < SCALED_EPSILON) continue; + if (line_len < SCALED_EPSILON) { + // The line is so tiny that we don't care about its width when we connect it to another line. + if (!path.empty()) + path.polyline.points.back() = line.b; // If the variable path is non-empty, connect this tiny line to it. + else if (i + 1 < (int)lines.size()) // If there is at least one following line, connect this tiny line to it. + lines[i + 1].a = line.a; + else if (!multi_path.paths.empty()) + multi_path.paths.back().polyline.points.back() = line.b; // Connect this tiny line to the last finished path. + + // If any of the above isn't satisfied, then remove this tiny line. + continue; + } double thickness_delta = fabs(line.a_width - line.b_width); if (thickness_delta > tolerance) { @@ -73,15 +84,15 @@ ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline &thick_poly path.polyline.append(line.b); } else { // we need to initialize a new line - paths.emplace_back(std::move(path)); + multi_path.paths.emplace_back(std::move(path)); path = ExtrusionPath(role); -- i; } } } if (path.polyline.is_valid()) - paths.emplace_back(std::move(path)); - return paths; + multi_path.paths.emplace_back(std::move(path)); + return multi_path; } //BBS: new function to filter width to avoid too fragmented segments diff --git a/src/libslic3r/VariableWidth.hpp b/src/libslic3r/VariableWidth.hpp index bfca418a3..f6eca9708 100644 --- a/src/libslic3r/VariableWidth.hpp +++ b/src/libslic3r/VariableWidth.hpp @@ -6,7 +6,7 @@ #include "Flow.hpp" namespace Slic3r { - ExtrusionPaths thick_polyline_to_extrusion_paths(const ThickPolyline& thick_polyline, ExtrusionRole role, const Flow& flow, const float tolerance, const float merge_tolerance); + ExtrusionMultiPath thick_polyline_to_multi_path(const ThickPolyline& thick_polyline, ExtrusionRole role, const Flow& flow, const float tolerance, const float merge_tolerance); void variable_width(const ThickPolylines& polylines, ExtrusionRole role, const Flow& flow, std::vector& out); } diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index edcc24c58..b210d3672 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -1,23 +1,23 @@ -#include "calib.hpp" -#include "BoundingBox.hpp" +#include "Calib.hpp" #include "Config.hpp" #include "Model.hpp" +#include "GCode.hpp" #include -namespace Slic3r { -// Calculate the optimal Pressure Advance speed -float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, - int filament_idx) { - const double general_suggested_min_speed = 100.0; - double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); - Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); - auto pa_speed = std::min(std::max(general_suggested_min_speed,config.option("outer_wall_speed")->value), filament_max_volumetric_speed / pattern_line.mm3_per_mm()); +namespace Slic3r { +float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx) +{ + const double general_suggested_min_speed = 100.0; + double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); + Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); + auto pa_speed = std::min(std::max(general_suggested_min_speed, config.option("outer_wall_speed")->value), + filament_max_volumetric_speed / pattern_line.mm3_per_mm()); return std::floor(pa_speed); } -std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter& writer, std::string comment) +std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter &writer, std::string comment) { std::stringstream gcode; @@ -27,18 +27,12 @@ std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter& writer, std::st m_last_pos = Vec3d(pt.x(), pt.y(), 0); - return gcode.str(); + return gcode.str(); } -double CalibPressureAdvance::e_per_mm( - double line_width, - double layer_height, - float nozzle_diameter, - float filament_diameter, - float print_flow_ratio -) const +double CalibPressureAdvance::e_per_mm(double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const { - const Flow line_flow = Flow(line_width, layer_height, nozzle_diameter); + const Flow line_flow = Flow(line_width, layer_height, nozzle_diameter); const double filament_area = M_PI * std::pow(filament_diameter / 2, 2); return line_flow.mm3_per_mm() / filament_area * print_flow_ratio; @@ -54,19 +48,12 @@ std::string CalibPressureAdvance::convert_number_to_string(double num) const } std::string CalibPressureAdvance::draw_digit( - double startx, - double starty, - char c, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - GCodeWriter& writer -) + double startx, double starty, char c, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, GCodeWriter &writer) { const double len = m_digit_segment_len; const double gap = line_width / 2.0; - const auto dE = e_per_mm * len; + const auto dE = e_per_mm * len; const auto two_dE = dE * 2; Vec2d p0, p1, p2, p3, p4, p5; @@ -79,33 +66,33 @@ std::string CalibPressureAdvance::draw_digit( // | | | // | | | // 0-------3-------4 - p0 = Vec2d(startx, starty); + p0 = Vec2d(startx, starty); p0_5 = Vec2d(startx, starty + len / 2); - p1 = Vec2d(startx, starty + len); - p2 = Vec2d(startx + len, starty + len); - p3 = Vec2d(startx + len, starty); - p4 = Vec2d(startx + len * 2, starty); + p1 = Vec2d(startx, starty + len); + p2 = Vec2d(startx + len, starty + len); + p3 = Vec2d(startx + len, starty); + p4 = Vec2d(startx + len * 2, starty); p4_5 = Vec2d(startx + len * 2, starty + len / 2); - p5 = Vec2d(startx + len * 2, starty + len); + p5 = Vec2d(startx + len * 2, starty + len); gap_p0_toward_p3 = p0 + Vec2d(gap, 0); gap_p2_toward_p3 = p2 + Vec2d(0, gap); dot_direction = Vec2d(-len / 2, 0); } else { - // 0-------1 + // 0-------1 // | | // 3-------2 // | | // 4-------5 - p0 = Vec2d(startx, starty); + p0 = Vec2d(startx, starty); p0_5 = Vec2d(startx + len / 2, starty); - p1 = Vec2d(startx + len, starty); - p2 = Vec2d(startx + len, starty - len); - p3 = Vec2d(startx, starty - len); - p4 = Vec2d(startx, starty - len * 2); + p1 = Vec2d(startx + len, starty); + p2 = Vec2d(startx + len, starty - len); + p3 = Vec2d(startx, starty - len); + p4 = Vec2d(startx, starty - len * 2); p4_5 = Vec2d(startx + len / 2, starty - len * 2); - p5 = Vec2d(startx + len, starty - len * 2); + p5 = Vec2d(startx + len, starty - len * 2); gap_p0_toward_p3 = p0 - Vec2d(0, gap); gap_p2_toward_p3 = p2 - Vec2d(gap, 0); @@ -191,120 +178,71 @@ std::string CalibPressureAdvance::draw_digit( gcode << move_to(p4_5, writer, "Glyph: ."); gcode << writer.extrude_to_xy(p4_5 + dot_direction, dE); break; - default: - break; + default: break; } return gcode.str(); } std::string CalibPressureAdvance::draw_number( - double startx, - double starty, - double value, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - double speed, - GCodeWriter& writer -) + double startx, double starty, double value, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, double speed, GCodeWriter &writer) { - auto sNumber = convert_number_to_string(value); + auto sNumber = convert_number_to_string(value); std::stringstream gcode; gcode << writer.set_speed(speed); for (std::string::size_type i = 0; i < sNumber.length(); ++i) { - if (i > m_max_number_len) { - break; - } + if (i > m_max_number_len) { break; } switch (mode) { - case DrawDigitMode::Bottom_To_Top: - gcode << draw_digit( - startx, - starty + i * number_spacing(), - sNumber[i], - mode, - line_width, - e_per_mm, - writer - ); - break; - default: - gcode << draw_digit( - startx + i * number_spacing(), - starty, - sNumber[i], - mode, - line_width, - e_per_mm, - writer - ); + case DrawDigitMode::Bottom_To_Top: gcode << draw_digit(startx, starty + i * number_spacing(), sNumber[i], mode, line_width, e_per_mm, writer); break; + default: gcode << draw_digit(startx + i * number_spacing(), starty, sNumber[i], mode, line_width, e_per_mm, writer); } } return gcode.str(); } +CalibPressureAdvanceLine::CalibPressureAdvanceLine(GCode *gcodegen) + : mp_gcodegen(gcodegen) + , m_nozzle_diameter(gcodegen->config().nozzle_diameter.get_at(0)) +{ +} + std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, double step_pa /*= 0.002*/, int count /*= 10*/) { BoundingBoxf bed_ext = get_extents(mp_gcodegen->config().printable_area.values); - if (is_delta()) { - CalibPressureAdvanceLine::delta_scale_bed_ext(bed_ext); - } + if (is_delta()) { CalibPressureAdvanceLine::delta_scale_bed_ext(bed_ext); } - auto bed_sizes = mp_gcodegen->config().printable_area.values; - const auto &w = bed_ext.size().x(); - const auto &h = bed_ext.size().y(); - count = std::min(count, int((h - 10) / m_space_y)); + auto bed_sizes = mp_gcodegen->config().printable_area.values; + 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); auto startx = (w - m_length_short * 2 - m_length_long - 20) / 2; auto starty = (h - count * m_space_y) / 2; - if (is_delta()) { - CalibPressureAdvanceLine::delta_modify_start(startx, starty, count); - } + if (is_delta()) { CalibPressureAdvanceLine::delta_modify_start(startx, starty, count); } return print_pa_lines(startx, starty, start_pa, step_pa, count); } -bool CalibPressureAdvanceLine::is_delta() const -{ - return mp_gcodegen->config().printable_area.values.size() > 4; -} +bool CalibPressureAdvanceLine::is_delta() const { return mp_gcodegen->config().printable_area.values.size() > 4; } std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num) { - auto& writer = mp_gcodegen->writer(); - const auto& config = mp_gcodegen->config(); + auto & writer = mp_gcodegen->writer(); + const auto &config = mp_gcodegen->config(); const auto filament_diameter = config.filament_diameter.get_at(0); - const auto print_flow_ratio = config.print_flow_ratio; + const auto print_flow_ratio = config.print_flow_ratio; - const double e_per_mm = CalibPressureAdvance::e_per_mm( - m_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); - const double thin_e_per_mm = CalibPressureAdvance::e_per_mm( - m_thin_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); - const double number_e_per_mm = CalibPressureAdvance::e_per_mm( - m_number_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); + const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); + const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); + const double number_e_per_mm = CalibPressureAdvance::e_per_mm(m_number_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); - const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); - const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); + const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); + const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); std::stringstream gcode; gcode << mp_gcodegen->writer().travel_to_z(m_height_layer); double y_pos = start_y; @@ -336,47 +274,28 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 2), thin_e_per_mm * 7); for (int i = 0; i < num; i += 2) { - gcode << draw_number( - start_x + m_length_short + m_length_long + m_length_short + 3, - y_pos + i * m_space_y + m_space_y / 2, - start_pa + i * step_pa, - m_draw_digit_mode, - m_number_line_width, - number_e_per_mm, - 3600, - writer - ); + gcode << draw_number(start_x + m_length_short + m_length_long + m_length_short + 3, y_pos + i * m_space_y + m_space_y / 2, start_pa + i * step_pa, m_draw_digit_mode, + m_number_line_width, number_e_per_mm, 3600, writer); } } return gcode.str(); } -void CalibPressureAdvanceLine::delta_modify_start(double& startx, double& starty, int count) +void CalibPressureAdvanceLine::delta_modify_start(double &startx, double &starty, int count) { startx = -startx; starty = -(count * m_space_y) / 2; } -CalibPressureAdvancePattern::CalibPressureAdvancePattern( - const Calib_Params& params, - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin -) : - m_params(params) +CalibPressureAdvancePattern::CalibPressureAdvancePattern(const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin) + : m_params(params) { this->m_draw_digit_mode = DrawDigitMode::Bottom_To_Top; refresh_setup(config, is_bbl_machine, model, origin); }; -void CalibPressureAdvancePattern::generate_custom_gcodes( - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin) { std::stringstream gcode; gcode << "; start pressure advance pattern for layer\n"; @@ -390,29 +309,18 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( const DrawBoxOptArgs default_box_opt_args(*this); // create anchoring frame - gcode << draw_box( - m_starting_point.x(), - m_starting_point.y(), - print_size_x(), - frame_size_y(), - default_box_opt_args - ); + gcode << draw_box(m_starting_point.x(), m_starting_point.y(), print_size_x(), frame_size_y(), default_box_opt_args); // create tab for numbers DrawBoxOptArgs draw_box_opt_args = default_box_opt_args; - draw_box_opt_args.is_filled = true; + draw_box_opt_args.is_filled = true; draw_box_opt_args.num_perimeters = wall_count(); - gcode << draw_box( - m_starting_point.x(), - m_starting_point.y() + frame_size_y() + line_spacing_first_layer(), - glyph_tab_max_x() - m_starting_point.x(), - max_numbering_height() + line_spacing_first_layer() + m_glyph_padding_vertical * 2, - draw_box_opt_args - ); + gcode << draw_box(m_starting_point.x(), m_starting_point.y() + frame_size_y() + line_spacing_first_layer(), glyph_tab_max_x() - m_starting_point.x(), + max_numbering_height() + line_spacing_first_layer() + m_glyph_padding_vertical * 2, draw_box_opt_args); std::vector gcode_items; - const DrawLineOptArgs default_line_opt_args(*this); - const int num_patterns = get_num_patterns(); // "cache" for use in loops + const DrawLineOptArgs default_line_opt_args(*this); + const int num_patterns = get_num_patterns(); // "cache" for use in loops // draw pressure advance pattern for (int i = 0; i < m_num_layers; ++i) { @@ -420,13 +328,13 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( gcode << "; end pressure advance pattern for layer\n"; CustomGCode::Item item; item.print_z = height_first_layer() + (i - 1) * height_layer(); - item.type = CustomGCode::Type::Custom; - item.extra = gcode.str(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); gcode_items.push_back(item); gcode = std::stringstream(); // reset for next layer contents gcode << "; start pressure advance pattern for layer\n"; - + const double layer_height = height_first_layer() + (i * height_layer()); gcode << m_writer.travel_to_z(layer_height, "Move to layer height"); } @@ -435,49 +343,29 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( if (i == 1) { gcode << m_writer.set_pressure_advance(m_params.start); - double number_e_per_mm = e_per_mm( - line_width(), - height_layer(), - m_config.option("nozzle_diameter")->get_at(0), - m_config.option("filament_diameter")->get_at(0), - m_config.option("filament_flow_ratio")->get_at(0) - ); + double number_e_per_mm = e_per_mm(line_width(), height_layer(), m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); // glyph on every other line for (int j = 0; j < num_patterns; j += 2) { - gcode << draw_number( - glyph_start_x(j), - m_starting_point.y() + frame_size_y() + m_glyph_padding_vertical + line_width(), - m_params.start + (j * m_params.step), - m_draw_digit_mode, - line_width(), - number_e_per_mm, - speed_first_layer(), - m_writer - ); + gcode << draw_number(glyph_start_x(j), m_starting_point.y() + frame_size_y() + m_glyph_padding_vertical + line_width(), m_params.start + (j * m_params.step), + m_draw_digit_mode, line_width(), number_e_per_mm, speed_first_layer(), m_writer); } } DrawLineOptArgs draw_line_opt_args = default_line_opt_args; - double to_x = m_starting_point.x() + pattern_shift(); - double to_y = m_starting_point.y(); + double to_x = m_starting_point.x() + pattern_shift(); + double to_y = m_starting_point.y(); double side_length = m_wall_side_length; // shrink first layer to fit inside frame if (i == 0) { - double shrink = - ( - line_spacing_first_layer() * (wall_count() - 1) + - (line_width_first_layer() * (1 - m_encroachment)) - ) / std::sin(to_radians(m_corner_angle) / 2) - ; - side_length = m_wall_side_length - shrink; + double shrink = (line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment))) / std::sin(to_radians(m_corner_angle) / 2); + side_length = m_wall_side_length - shrink; to_x += shrink * std::sin(to_radians(90) - to_radians(m_corner_angle) / 2); - to_y += - line_spacing_first_layer() * (wall_count() - 1) + - (line_width_first_layer() * (1 - m_encroachment)) - ; + to_y += line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment)); } double initial_x = to_x; @@ -492,12 +380,12 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( for (int k = 0; k < wall_count(); ++k) { to_x += std::cos(to_radians(m_corner_angle) / 2) * side_length; to_y += std::sin(to_radians(m_corner_angle) / 2) * side_length; - - draw_line_opt_args = default_line_opt_args; - draw_line_opt_args.height = i == 0 ? height_first_layer() : height_layer(); - draw_line_opt_args.line_width = line_width(); // don't use line_width_first_layer so results are consistent across all layers - draw_line_opt_args.speed = i == 0 ? speed_adjust(speed_first_layer()) : speed_adjust(speed_perimeter()); - draw_line_opt_args.comment = "Print pattern wall"; + + draw_line_opt_args = default_line_opt_args; + draw_line_opt_args.height = i == 0 ? height_first_layer() : height_layer(); + draw_line_opt_args.line_width = line_width(); // don't use line_width_first_layer so results are consistent across all layers + draw_line_opt_args.speed = i == 0 ? speed_adjust(speed_first_layer()) : speed_adjust(speed_perimeter()); + draw_line_opt_args.comment = "Print pattern wall"; gcode << draw_line(Vec2d(to_x, to_y), draw_line_opt_args); to_x -= std::cos(to_radians(m_corner_angle) / 2) * side_length; @@ -530,23 +418,18 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( CustomGCode::Item item; item.print_z = max_layer_z(); - item.type = CustomGCode::Type::Custom; - item.extra = gcode.str(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); gcode_items.push_back(item); CustomGCode::Info info; - info.mode = CustomGCode::Mode::SingleExtruder; + info.mode = CustomGCode::Mode::SingleExtruder; info.gcodes = gcode_items; model.plates_custom_gcodes[model.curr_plate_index] = info; } -void CalibPressureAdvancePattern::refresh_setup( - const DynamicPrintConfig& config, - bool is_bbl_machine, - const Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::refresh_setup(const DynamicPrintConfig &config, bool is_bbl_machine, const Model &model, const Vec3d &origin) { m_config = config; m_config.apply(model.objects.front()->config.get(), true); @@ -558,15 +441,10 @@ void CalibPressureAdvancePattern::refresh_setup( _refresh_writer(is_bbl_machine, model, origin); } -void CalibPressureAdvancePattern::_refresh_starting_point(const Model& model) +void CalibPressureAdvancePattern::_refresh_starting_point(const Model &model) { - ModelObject* obj = model.objects.front(); - BoundingBoxf3 bbox = - obj->instance_bounding_box( - *obj->instances.front(), - false - ) - ; + ModelObject * obj = model.objects.front(); + BoundingBoxf3 bbox = obj->instance_bounding_box(*obj->instances.front(), false); m_starting_point = Vec3d(bbox.min.x(), bbox.max.y(), 0); m_starting_point.y() += m_handle_spacing; @@ -577,39 +455,28 @@ void CalibPressureAdvancePattern::_refresh_starting_point(const Model& model) } } -void CalibPressureAdvancePattern::_refresh_writer( - bool is_bbl_machine, - const Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::_refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin) { PrintConfig print_config; print_config.apply(m_config, true); m_writer.apply_print_config(print_config); m_writer.set_xy_offset(origin(0), origin(1)); - m_writer.set_is_bbl_machine(is_bbl_machine); - + //m_writer.set_is_bbl_machine(is_bbl_machine); + const unsigned int extruder_id = model.objects.front()->volumes.front()->extruder_id(); - m_writer.set_extruders({ extruder_id }); + m_writer.set_extruders({extruder_id}); m_writer.set_extruder(extruder_id); } -std::string CalibPressureAdvancePattern::draw_line( - Vec2d to_pt, - DrawLineOptArgs opt_args -) +std::string CalibPressureAdvancePattern::draw_line(Vec2d to_pt, DrawLineOptArgs opt_args) { - const double e_per_mm = CalibPressureAdvance::e_per_mm( - opt_args.line_width, - opt_args.height, - m_config.option("nozzle_diameter")->get_at(0), - m_config.option("filament_diameter")->get_at(0), - m_config.option("filament_flow_ratio")->get_at(0) - ); + const double e_per_mm = CalibPressureAdvance::e_per_mm(opt_args.line_width, opt_args.height, m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); const double length = get_distance(Vec2d(m_last_pos.x(), m_last_pos.y()), to_pt); - auto dE = e_per_mm * length; + auto dE = e_per_mm * length; std::stringstream gcode; @@ -621,40 +488,31 @@ std::string CalibPressureAdvancePattern::draw_line( return gcode.str(); } -std::string CalibPressureAdvancePattern::draw_box( - double min_x, - double min_y, - double size_x, - double size_y, - DrawBoxOptArgs opt_args -) +std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args) { std::stringstream gcode; - double x = min_x; - double y = min_y; + double x = min_x; + double y = min_y; const double max_x = min_x + size_x; const double max_y = min_y + size_y; const double spacing = opt_args.line_width - opt_args.height * (1 - M_PI / 4); // if number of perims exceeds size of box, reduce it to max - const int max_perimeters = - std::min( - // this is the equivalent of number of perims for concentric fill - std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))), - std::floor(size_y * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))) - ) - ; + const int max_perimeters = std::min( + // this is the equivalent of number of perims for concentric fill + std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))), + std::floor(size_y * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45)))); opt_args.num_perimeters = std::min(opt_args.num_perimeters, max_perimeters); gcode << move_to(Vec2d(min_x, min_y), m_writer, "Move to box start"); DrawLineOptArgs line_opt_args(*this); - line_opt_args.height = opt_args.height; + line_opt_args.height = opt_args.height; line_opt_args.line_width = opt_args.line_width; - line_opt_args.speed = opt_args.speed; + line_opt_args.speed = opt_args.speed; for (int i = 0; i < opt_args.num_perimeters; ++i) { if (i != 0) { // after first perimeter, step inwards to start next perimeter @@ -680,23 +538,18 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << draw_line(Vec2d(x, y), line_opt_args); } - if (!opt_args.is_filled) { - return gcode.str(); - } + if (!opt_args.is_filled) { return gcode.str(); } // create box infill const double spacing_45 = spacing / std::sin(to_radians(45)); - const double bound_modifier = - (spacing * (opt_args.num_perimeters - 1)) + - (opt_args.line_width * (1 - m_encroachment)) - ; - const double x_min_bound = min_x + bound_modifier; - const double x_max_bound = max_x - bound_modifier; - const double y_min_bound = min_y + bound_modifier; - const double y_max_bound = max_y - bound_modifier; - const int x_count = std::floor((x_max_bound - x_min_bound) / spacing_45); - const int y_count = std::floor((y_max_bound - y_min_bound) / spacing_45); + const double bound_modifier = (spacing * (opt_args.num_perimeters - 1)) + (opt_args.line_width * (1 - m_encroachment)); + const double x_min_bound = min_x + bound_modifier; + const double x_max_bound = max_x - bound_modifier; + const double y_min_bound = min_y + bound_modifier; + const double y_max_bound = max_y - bound_modifier; + const int x_count = std::floor((x_max_bound - x_min_bound) / spacing_45); + const int y_count = std::floor((y_max_bound - y_min_bound) / spacing_45); double x_remainder = std::fmod((x_max_bound - x_min_bound), spacing_45); double y_remainder = std::fmod((y_max_bound - y_min_bound), spacing_45); @@ -706,7 +559,8 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Move to fill start"); - for (int i = 0; i < x_count + y_count + (x_remainder + y_remainder >= spacing_45 ? 1 : 0); ++i) { // this isn't the most robust way, but less expensive than finding line intersections + for (int i = 0; i < x_count + y_count + (x_remainder + y_remainder >= spacing_45 ? 1 : 0); + ++i) { // this isn't the most robust way, but less expensive than finding line intersections if (i < std::min(x_count, y_count)) { if (i % 2 == 0) { x += spacing_45; @@ -714,7 +568,7 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); y += x - x_min_bound; - x = x_min_bound; + x = x_min_bound; line_opt_args.comment = "Fill: Print up/left"; gcode << draw_line(Vec2d(x, y), line_opt_args); } else { @@ -723,7 +577,7 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); x += y - y_min_bound; - y = y_min_bound; + y = y_min_bound; line_opt_args.comment = "Fill: Print down/right"; gcode << draw_line(Vec2d(x, y), line_opt_args); } @@ -736,7 +590,7 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); x -= y_max_bound - y_min_bound; - y = y_max_bound; + y = y_max_bound; line_opt_args.comment = "Fill: Print up/left"; gcode << draw_line(Vec2d(x, y), line_opt_args); } else { @@ -748,9 +602,9 @@ std::string CalibPressureAdvancePattern::draw_box( } y = y_max_bound; gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); - + x += y_max_bound - y_min_bound; - y = y_min_bound; + y = y_min_bound; line_opt_args.comment = "Fill: Print down/right"; gcode << draw_line(Vec2d(x, y), line_opt_args); } @@ -792,7 +646,7 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); x -= y_max_bound - y; - y = y_max_bound; + y = y_max_bound; line_opt_args.comment = "Fill: Print up/left"; gcode << draw_line(Vec2d(x, y), line_opt_args); } else { @@ -805,7 +659,7 @@ std::string CalibPressureAdvancePattern::draw_box( gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); y -= x_max_bound - x; - x = x_max_bound; + x = x_max_bound; line_opt_args.comment = "Fill: Print down/right"; gcode << draw_line(Vec2d(x, y), line_opt_args); } @@ -815,26 +669,17 @@ std::string CalibPressureAdvancePattern::draw_box( return gcode.str(); } -double CalibPressureAdvancePattern::get_distance(Vec2d from, Vec2d to) const -{ - return std::hypot((to.x() - from.x()), (to.y() - from.y())); -} +double CalibPressureAdvancePattern::get_distance(Vec2d from, Vec2d to) const { return std::hypot((to.x() - from.x()), (to.y() - from.y())); } double CalibPressureAdvancePattern::object_size_x() const { - return get_num_patterns() * ((wall_count() - 1) * line_spacing_angle()) + - (get_num_patterns() - 1) * (m_pattern_spacing + line_width()) + - std::cos(to_radians(m_corner_angle) / 2) * m_wall_side_length + - line_spacing_first_layer() * wall_count() - ; + return get_num_patterns() * ((wall_count() - 1) * line_spacing_angle()) + (get_num_patterns() - 1) * (m_pattern_spacing + line_width()) + + std::cos(to_radians(m_corner_angle) / 2) * m_wall_side_length + line_spacing_first_layer() * wall_count(); } double CalibPressureAdvancePattern::object_size_y() const { - return 2 * (std::sin(to_radians(m_corner_angle) / 2) * m_wall_side_length) + - max_numbering_height() + - m_glyph_padding_vertical * 2 + - line_width_first_layer(); + return 2 * (std::sin(to_radians(m_corner_angle) / 2) * m_wall_side_length) + max_numbering_height() + m_glyph_padding_vertical * 2 + line_width_first_layer(); } double CalibPressureAdvancePattern::glyph_start_x(int pattern_i) const @@ -843,16 +688,14 @@ double CalibPressureAdvancePattern::glyph_start_x(int pattern_i) const // align glyph's start with first perimeter of specified pattern double x = // starting offset - m_starting_point.x() + - pattern_shift() + + m_starting_point.x() + pattern_shift() + // width of pattern extrusions pattern_i * (wall_count() - 1) * line_spacing_angle() + // center to center distance of extrusions - pattern_i * line_width() + // endcaps. center to end on either side = 1 line width + pattern_i * line_width() + // endcaps. center to end on either side = 1 line width // space between each pattern - pattern_i * m_pattern_spacing - ; + pattern_i * m_pattern_spacing; // align to middle of pattern walls x += wall_count() * line_spacing_angle() / 2; @@ -873,35 +716,26 @@ double CalibPressureAdvancePattern::glyph_length_x() const double CalibPressureAdvancePattern::glyph_tab_max_x() const { // only every other glyph is shown, starting with 1 - int num = get_num_patterns(); - int max_num = - (num % 2 == 0) - ? num - 1 - : num - ; + int num = get_num_patterns(); + int max_num = (num % 2 == 0) ? num - 1 : num; // padding at end should be same as padding at start double padding = glyph_start_x(0) - m_starting_point.x(); - - return - glyph_start_x(max_num - 1) + // glyph_start_x is zero-based - (glyph_length_x() - line_width() / 2) + - padding - ; + + return glyph_start_x(max_num - 1) + // glyph_start_x is zero-based + (glyph_length_x() - line_width() / 2) + padding; } double CalibPressureAdvancePattern::max_numbering_height() const { std::string::size_type most_characters = 0; - const int num_patterns = get_num_patterns(); + const int num_patterns = get_num_patterns(); // note: only every other number is printed for (std::string::size_type i = 0; i < num_patterns; i += 2) { std::string sNumber = convert_number_to_string(m_params.start + (i * m_params.step)); - if (sNumber.length() > most_characters) { - most_characters = sNumber.length(); - } + if (sNumber.length() > most_characters) { most_characters = sNumber.length(); } } most_characters = std::min(most_characters, m_max_number_len); @@ -909,12 +743,6 @@ double CalibPressureAdvancePattern::max_numbering_height() const return (most_characters * m_digit_segment_len) + ((most_characters - 1) * m_digit_gap_len); } -double CalibPressureAdvancePattern::pattern_shift() const -{ - return - (wall_count() - 1) * line_spacing_first_layer() + - line_width_first_layer() + - m_glyph_padding_horizontal - ; -} +double CalibPressureAdvancePattern::pattern_shift() const { return (wall_count() - 1) * line_spacing_first_layer() + line_width_first_layer() + m_glyph_padding_horizontal; } } // namespace Slic3r + diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 59d671d31..9311f244a 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -1,157 +1,215 @@ #pragma once -#define calib_pressure_advance_dd -#include "GCode.hpp" #include "GCodeWriter.hpp" #include "PrintConfig.hpp" +#include "BoundingBox.hpp" namespace Slic3r { +class GCode; +class Model; + enum class CalibMode : int { Calib_None = 0, Calib_PA_Line, Calib_PA_Pattern, Calib_PA_Tower, + Calib_Flow_Rate, Calib_Temp_Tower, Calib_Vol_speed_Tower, Calib_VFA_Tower, Calib_Retraction_tower }; -struct Calib_Params { - Calib_Params() : mode(CalibMode::Calib_None) { }; +enum class CalibState { + Start = 0, + Preset, + Calibration, + CoarseSave, + FineCalibration, + Save, + Finish +}; + +struct Calib_Params +{ + Calib_Params() : mode(CalibMode::Calib_None){} double start, end, step; bool print_numbers; CalibMode mode; }; -class CalibPressureAdvance { - public: - static float find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, - int filament_idx = 0); - - protected: - CalibPressureAdvance() =default; - ~CalibPressureAdvance() =default; - - enum class DrawDigitMode { - Left_To_Right, - Bottom_To_Top +class X1CCalibInfos +{ +public: + struct X1CCalibInfo + { + int tray_id; + int bed_temp; + int nozzle_temp; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + float max_volumetric_speed; + float flow_rate = 0.98f; // for flow ratio }; - void delta_scale_bed_ext(BoundingBoxf& bed_ext) const { bed_ext.scale(1.0f / 1.41421f); } - - std::string move_to(Vec2d pt, GCodeWriter& writer, std::string comment = std::string()); - double e_per_mm( - double line_width, - double layer_height, - float nozzle_diameter, - float filament_diameter, - float print_flow_ratio - ) const; - double speed_adjust(int speed) const { return speed * 60; }; - - std::string convert_number_to_string(double num) const; - double number_spacing() const { return m_digit_segment_len + m_digit_gap_len; }; - std::string draw_digit( - double startx, - double starty, - char c, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - GCodeWriter& writer - ); - std::string draw_number( - double startx, - double starty, - double value, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - double speed, - GCodeWriter& writer - ); - - Vec3d m_last_pos; - - DrawDigitMode m_draw_digit_mode {DrawDigitMode::Left_To_Right}; - const double m_digit_segment_len {2}; - const double m_digit_gap_len {1}; - const std::string::size_type m_max_number_len {5}; + std::vector calib_datas; }; -class CalibPressureAdvanceLine : public CalibPressureAdvance { +class CaliPresetInfo +{ public: - CalibPressureAdvanceLine(GCode* gcodegen) : - mp_gcodegen(gcodegen), - m_nozzle_diameter(gcodegen->config().nozzle_diameter.get_at(0)) - { }; - ~CalibPressureAdvanceLine() { }; + int tray_id; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + std::string name; + + CaliPresetInfo &operator=(const CaliPresetInfo &other) + { + this->tray_id = other.tray_id; + this->nozzle_diameter = other.nozzle_diameter; + this->filament_id = other.filament_id; + this->setting_id = other.setting_id; + this->name = other.name; + return *this; + } +}; + +struct PrinterCaliInfo +{ + std::string dev_id; + bool cali_finished = true; + float cache_flow_ratio; + std::vector selected_presets; +}; + +class PACalibResult +{ +public: + enum CalibResult { + CALI_RESULT_SUCCESS = 0, + CALI_RESULT_PROBLEM = 1, + CALI_RESULT_FAILED = 2, + }; + int tray_id; + int cali_idx = -1; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + std::string name; + float k_value = 0.0; + float n_coef = 0.0; + int confidence = -1; // 0: success 1: uncertain 2: failed +}; + +struct PACalibIndexInfo +{ + int tray_id; + int cali_idx; + float nozzle_diameter; + std::string filament_id; +}; + +class FlowRatioCalibResult +{ +public: + int tray_id; + float nozzle_diameter; + std::string filament_id; + std::string setting_id; + float flow_ratio; + int confidence; // 0: success 1: uncertain 2: failed +}; + +class CalibPressureAdvance +{ +public: + static float find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx = 0); + +protected: + CalibPressureAdvance() = default; + ~CalibPressureAdvance() = default; + + enum class DrawDigitMode { Left_To_Right, Bottom_To_Top }; + + void delta_scale_bed_ext(BoundingBoxf &bed_ext) const { bed_ext.scale(1.0f / 1.41421f); } + + std::string move_to(Vec2d pt, GCodeWriter &writer, std::string comment = std::string()); + double e_per_mm(double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const; + double speed_adjust(int speed) const { return speed * 60; }; + + std::string convert_number_to_string(double num) const; + double number_spacing() const { return m_digit_segment_len + m_digit_gap_len; }; + std::string draw_digit(double startx, double starty, char c, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, GCodeWriter &writer); + std::string draw_number( + double startx, double starty, double value, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, double speed, GCodeWriter &writer); + + Vec3d m_last_pos; + + DrawDigitMode m_draw_digit_mode{DrawDigitMode::Left_To_Right}; + const double m_digit_segment_len{2}; + const double m_digit_gap_len{1}; + const std::string::size_type m_max_number_len{5}; +}; + +class CalibPressureAdvanceLine : public CalibPressureAdvance +{ +public: + CalibPressureAdvanceLine(GCode *gcodegen); + ~CalibPressureAdvanceLine(){}; std::string generate_test(double start_pa = 0, double step_pa = 0.002, int count = 50); - void set_speed(double fast = 100.0, double slow = 20.0) { + void set_speed(double fast = 100.0, double slow = 20.0) + { m_slow_speed = slow; m_fast_speed = fast; } - - const double& line_width() { return m_line_width; }; - bool is_delta() const; - bool& draw_numbers() { return m_draw_numbers; } + + const double &line_width() { return m_line_width; }; + bool is_delta() const; + bool & draw_numbers() { return m_draw_numbers; } private: std::string print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num); - - void delta_modify_start(double& startx, double& starty, int count); - GCode* mp_gcodegen; + void delta_modify_start(double &startx, double &starty, int count); + + GCode *mp_gcodegen; double m_nozzle_diameter; double m_slow_speed, m_fast_speed; - - const double m_height_layer {0.2}; - const double m_line_width {0.6}; - const double m_thin_line_width {0.44}; - const double m_number_line_width {0.48}; - const double m_space_y {3.5}; - double m_length_short {20.0}, m_length_long {40.0}; - bool m_draw_numbers {true}; + const double m_height_layer{0.2}; + const double m_line_width{0.6}; + const double m_thin_line_width{0.44}; + const double m_number_line_width{0.48}; + const double m_space_y{3.5}; + + double m_length_short{20.0}, m_length_long{40.0}; + bool m_draw_numbers{true}; }; -struct SuggestedConfigCalibPAPattern { - const std::vector> float_pairs { - {"initial_layer_print_height", 0.25}, - {"layer_height", 0.2}, - {"initial_layer_speed", 30} - }; +struct SuggestedConfigCalibPAPattern +{ + const std::vector> float_pairs{{"initial_layer_print_height", 0.25}, {"layer_height", 0.2}, {"initial_layer_speed", 30}}; - const std::vector> nozzle_ratio_pairs { - {"line_width", 112.5}, - {"initial_layer_line_width", 140} - }; + const std::vector> nozzle_ratio_pairs{{"line_width", 112.5}, {"initial_layer_line_width", 140}}; - const std::vector> int_pairs { - {"skirt_loops", 0}, - {"wall_loops", 3} - }; + const std::vector> int_pairs{{"skirt_loops", 0}, {"wall_loops", 3}}; - const std::pair brim_pair {"brim_type", BrimType::btNoBrim}; + const std::pair brim_pair{"brim_type", BrimType::btNoBrim}; }; -class CalibPressureAdvancePattern : public CalibPressureAdvance { -friend struct DrawLineOptArgs; -friend struct DrawBoxOptArgs; +class CalibPressureAdvancePattern : public CalibPressureAdvance +{ + friend struct DrawLineOptArgs; + friend struct DrawBoxOptArgs; public: - CalibPressureAdvancePattern( - const Calib_Params& params, - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin - ); + CalibPressureAdvancePattern(const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); double handle_xy_size() const { return m_handle_xy_size; }; double handle_spacing() const { return m_handle_spacing; }; @@ -159,85 +217,53 @@ public: double print_size_y() const { return object_size_y(); }; double max_layer_z() const { return height_first_layer() + ((m_num_layers - 1) * height_layer()); }; - void generate_custom_gcodes( - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin - ); + void generate_custom_gcodes(const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); protected: double speed_first_layer() const { return m_config.option("initial_layer_speed")->value; }; double speed_perimeter() const { return m_config.option("outer_wall_speed")->value; }; double line_width_first_layer() const { return m_config.get_abs_value("initial_layer_line_width"); }; double line_width() const { return m_config.get_abs_value("line_width"); }; - int wall_count() const { return m_config.option("wall_loops")->value; }; + int wall_count() const { return m_config.option("wall_loops")->value; }; private: - struct DrawLineOptArgs { - DrawLineOptArgs(const CalibPressureAdvancePattern& p) : - height {p.height_layer()}, - line_width {p.line_width()}, - speed {p.speed_adjust(p.speed_perimeter())} - { }; - - double height; - double line_width; - double speed; - std::string comment {"Print line"}; - }; - - struct DrawBoxOptArgs { - DrawBoxOptArgs(const CalibPressureAdvancePattern& p) : - num_perimeters {p.wall_count()}, - height {p.height_first_layer()}, - line_width {p.line_width_first_layer()}, - speed {p.speed_adjust(p.speed_first_layer())} - { }; - - bool is_filled {false}; - int num_perimeters; - double height; - double line_width; - double speed; - }; - - void refresh_setup( - const DynamicPrintConfig& config, - bool is_bbl_machine, - const Model& model, - const Vec3d& origin - ); - void _refresh_starting_point(const Model& model); - void _refresh_writer( - bool is_bbl_machine, - const Model& model, - const Vec3d& origin - ); - - double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; - double height_layer() const { return m_config.option("layer_height")->value; }; - const int get_num_patterns() const + struct DrawLineOptArgs { - return std::ceil((m_params.end - m_params.start) / m_params.step + 1); - } + DrawLineOptArgs(const CalibPressureAdvancePattern &p) : height{p.height_layer()}, line_width{p.line_width()}, speed{p.speed_adjust(p.speed_perimeter())} {}; - std::string draw_line( - Vec2d to_pt, - DrawLineOptArgs opt_args - ); - std::string draw_box( - double min_x, - double min_y, - double size_x, - double size_y, - DrawBoxOptArgs opt_args - ); + double height; + double line_width; + double speed; + std::string comment{"Print line"}; + }; + + struct DrawBoxOptArgs + { + DrawBoxOptArgs(const CalibPressureAdvancePattern &p) + : num_perimeters{p.wall_count()}, height{p.height_first_layer()}, line_width{p.line_width_first_layer()}, speed{p.speed_adjust(p.speed_first_layer())} {}; + + bool is_filled{false}; + int num_perimeters; + double height; + double line_width; + double speed; + }; + + void refresh_setup(const DynamicPrintConfig &config, bool is_bbl_machine, const Model &model, const Vec3d &origin); + void _refresh_starting_point(const Model &model); + void _refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin); + + double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; + double height_layer() const { return m_config.option("layer_height")->value; }; + const int get_num_patterns() const { return std::ceil((m_params.end - m_params.start) / m_params.step + 1); } + + std::string draw_line(Vec2d to_pt, DrawLineOptArgs opt_args); + std::string draw_box(double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args); double to_radians(double degrees) const { return degrees * M_PI / 180; }; double get_distance(Vec2d from, Vec2d to) const; - - /* + + /* from slic3r documentation: spacing = extrusion_width - layer_height * (1 - PI/4) "spacing" = center-to-center distance of adjacent extrusions, which partially overlap https://manual.slic3r.org/advanced/flow-math @@ -258,23 +284,24 @@ private: double pattern_shift() const; - const Calib_Params& m_params; + const Calib_Params &m_params; DynamicPrintConfig m_config; - GCodeWriter m_writer; - bool m_is_delta; - Vec3d m_starting_point; + GCodeWriter m_writer; + bool m_is_delta; + Vec3d m_starting_point; - const double m_handle_xy_size {5}; - const double m_handle_spacing {2}; - const int m_num_layers {4}; - - const double m_wall_side_length {30.0}; - const int m_corner_angle {90}; - const int m_pattern_spacing {2}; - const double m_encroachment {1. / 3.}; + const double m_handle_xy_size{5}; + const double m_handle_spacing{2}; + const int m_num_layers{4}; - const double m_glyph_padding_horizontal {1}; - const double m_glyph_padding_vertical {1}; + const double m_wall_side_length{30.0}; + const int m_corner_angle{90}; + const int m_pattern_spacing{2}; + const double m_encroachment{1. / 3.}; + + const double m_glyph_padding_horizontal{1}; + const double m_glyph_padding_vertical{1}; }; + } // namespace Slic3r diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index ea218dced..f764f8af9 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -89,7 +89,6 @@ static constexpr double BRIDGE_INFILL_MARGIN = 1; //BBS: some global const config which user can not change, but developer can static constexpr bool g_config_support_sharp_tails = true; -static constexpr bool g_config_remove_small_overhangs = true; static constexpr float g_config_tree_support_collision_resolution = 0.2; // Write slices as SVG images into out directory during the 2D processing of the slices. diff --git a/src/mcut/CMakeLists.txt b/src/mcut/CMakeLists.txt index 66fc300a6..c3e4dc0ac 100644 --- a/src/mcut/CMakeLists.txt +++ b/src/mcut/CMakeLists.txt @@ -297,88 +297,88 @@ endif() # TODO: package documentation files -# if(MCUT_BUILD_AS_SHARED_LIB) -# # -# # dynamic libs -# # +if(MCUT_BUILD_AS_SHARED_LIB) + # + # dynamic libs + # -# install(TARGETS ${mpn_shared_lib_name} -# LIBRARY -# DESTINATION lib/shared -# COMPONENT dynamic_libraries) -# else() -# # -# # static libs -# # + install(TARGETS ${mpn_shared_lib_name} + LIBRARY + DESTINATION lib/shared + COMPONENT dynamic_libraries) +else() + # + # static libs + # -# install(TARGETS ${mpn_static_lib_name} -# ARCHIVE -# DESTINATION lib/static -# COMPONENT static_libraries) -# endif() + install(TARGETS ${mpn_static_lib_name} + ARCHIVE + DESTINATION lib/static + COMPONENT static_libraries) +endif() # # headers # -# install(FILES ${MCUT_INCLUDE_DIR}/mcut/mcut.h ${MCUT_INCLUDE_DIR}/mcut/platform.h -# DESTINATION include/mcut -# COMPONENT headers) +install(FILES ${MCUT_INCLUDE_DIR}/mcut/mcut.h ${MCUT_INCLUDE_DIR}/mcut/platform.h + DESTINATION include/mcut + COMPONENT headers) -# install(FILES -# ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt -# ${CMAKE_CURRENT_SOURCE_DIR}/README.md -# DESTINATION ./ -# COMPONENT text_files) +install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt + ${CMAKE_CURRENT_SOURCE_DIR}/README.md + DESTINATION ./ + COMPONENT text_files) # # notify CPack of the names of all of the components in the project # -# set(CPACK_COMPONENTS_ALL static_libraries dynamic_libraries headers text_files) # applications +set(CPACK_COMPONENTS_ALL static_libraries dynamic_libraries headers text_files) # applications -# set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MCUT Application") -# set(CPACK_COMPONENT_STATIC_LIBRARIES_DISPLAY_NAME "Static Libraries") -# set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_DISPLAY_NAME "Dynamics Libraries") -# set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers") +set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MCUT Application") +set(CPACK_COMPONENT_STATIC_LIBRARIES_DISPLAY_NAME "Static Libraries") +set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_DISPLAY_NAME "Dynamics Libraries") +set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers") -# set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION -# "A simple application using MCUT") -# set(CPACK_COMPONENT_STATIC_LIBRARIES_DESCRIPTION -# "Static libraries used to build programs with MCUT") -# set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_DESCRIPTION -# "Dynamic libraries used to build programs with MCUT") -# set(CPACK_COMPONENT_HEADERS_DESCRIPTION -# "C/C++ header files for use with MCUT") +set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION + "A simple application using MCUT") +set(CPACK_COMPONENT_STATIC_LIBRARIES_DESCRIPTION + "Static libraries used to build programs with MCUT") + set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_DESCRIPTION + "Dynamic libraries used to build programs with MCUT") +set(CPACK_COMPONENT_HEADERS_DESCRIPTION + "C/C++ header files for use with MCUT") -# # -# # component dependencies -# # -# set(CPACK_COMPONENT_HEADERS_DEPENDS static_libraries dynamic_libraries) +# +# component dependencies +# +set(CPACK_COMPONENT_HEADERS_DEPENDS static_libraries dynamic_libraries) -# set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime") -# set(CPACK_COMPONENT_STATIC_LIBRARIES_GROUP "Development") -# set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_GROUP "Development") -# set(CPACK_COMPONENT_HEADERS_GROUP "Development") +set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime") +set(CPACK_COMPONENT_STATIC_LIBRARIES_GROUP "Development") +set(CPACK_COMPONENT_DYNAMIC_LIBRARIES_GROUP "Development") +set(CPACK_COMPONENT_HEADERS_GROUP "Development") -# set(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION -# "All of the tools you'll ever need to develop software") +set(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION + "All of the tools you'll ever need to develop software") -# set (CPACK_PACKAGE_NAME "MCUT") -# set (CPACK_PACKAGE_VENDOR "Floyd M. Chitalu") -# set (CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") -# set (CPACK_PACKAGE_VERSION_MAJOR "${MCUT_MAJOR}") -# set (CPACK_PACKAGE_VERSION_MINOR "${MCUT_MINOR}") -# set (CPACK_PACKAGE_VERSION_PATCH "${MCUT_PATCH}") -# #set (CPACK_PACKAGE_DESCRIPTION "MCUT (pronounced ‘emcut’) is a tool for cutting meshes.") -# #set (CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTION.txt) -# set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "MCUT is a library for cutting meshes to perform tasks like boolean operations and more.") -# set (CPACK_PACKAGE_HOMEPAGE_URL "https://cutdigital.github.io/mcut.site/") -# set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) -# # set (CPACK_PACKAGE_ICON ) -# set (CPACK_PACKAGE_CHECKSUM SHA256) -# #set (CPACK_PROJECT_CONFIG_FILE ) -# set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) # must also include in install command -# set (CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md) -# #set (CPACK_RESOURCE_FILE_WELCOME ${CMAKE_CURRENT_SOURCE_DIR}/WELCOME.txt) +set (CPACK_PACKAGE_NAME "MCUT") +set (CPACK_PACKAGE_VENDOR "Floyd M. Chitalu") +set (CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") +set (CPACK_PACKAGE_VERSION_MAJOR "${MCUT_MAJOR}") +set (CPACK_PACKAGE_VERSION_MINOR "${MCUT_MINOR}") +set (CPACK_PACKAGE_VERSION_PATCH "${MCUT_PATCH}") +#set (CPACK_PACKAGE_DESCRIPTION "MCUT (pronounced ‘emcut’) is a tool for cutting meshes.") +#set (CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTION.txt) +set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "MCUT is a library for cutting meshes to perform tasks like boolean operations and more.") +set (CPACK_PACKAGE_HOMEPAGE_URL "https://cutdigital.github.io/mcut.site/") +set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) +# set (CPACK_PACKAGE_ICON ) +set (CPACK_PACKAGE_CHECKSUM SHA256) +#set (CPACK_PROJECT_CONFIG_FILE ) +set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) # must also include in install command +set (CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md) +#set (CPACK_RESOURCE_FILE_WELCOME ${CMAKE_CURRENT_SOURCE_DIR}/WELCOME.txt) if (WIN32) if (USE_WIX_TOOLSET) @@ -394,7 +394,7 @@ endif () #set (CPACK_OUTPUT_CONFIG_FILE ) # Defaults to CPackConfig.cmake. #set (CPACK_PACKAGE_EXECUTABLES ) -# set (CPACK_STRIP_FILES TRUE) +set (CPACK_STRIP_FILES TRUE) # set (CPACK_VERBATIM_VARIABLES ) # set (CPACK_SOURCE_PACKAGE_FILE_NAME ) # set (CPACK_SOURCE_STRIP_FILES ) @@ -412,6 +412,6 @@ endif () # set ( ) -# include(CPack) +include(CPack) # eof \ No newline at end of file diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in index 4e12fe465..6902ccb94 100644 --- a/src/platform/osx/Info.plist.in +++ b/src/platform/osx/Info.plist.in @@ -22,6 +22,17 @@ ???? CFBundleVersion @SLIC3R_BUILD_ID@ + CFBundleURLTypes + + + CFBundleURLName + bambustudioopen url + CFBundleURLSchemes + + bambustudioopen + + + CFBundleDocumentTypes diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 6763a0dba..ed0b0051c 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -179,6 +179,8 @@ set(SLIC3R_GUI_SOURCES GUI/MainFrame.hpp GUI/BBLTopbar.cpp GUI/BBLTopbar.hpp + GUI/BedShapeDialog.cpp + GUI/BedShapeDialog.hpp GUI/Plater.cpp GUI/Plater.hpp GUI/PartPlate.cpp @@ -191,10 +193,6 @@ set(SLIC3R_GUI_SOURCES GUI/SavePresetDialog.cpp GUI/GUI_Colors.hpp GUI/GUI_Colors.cpp - GUI/PhysicalPrinterDialog.hpp - GUI/PhysicalPrinterDialog.cpp - GUI/PrintHostDialogs.cpp - GUI/PrintHostDialogs.hpp GUI/GUI_Factories.cpp GUI/GUI_Factories.hpp GUI/GUI_ObjectList.cpp @@ -394,14 +392,30 @@ set(SLIC3R_GUI_SOURCES GUI/AmsMappingPopup.cpp GUI/ReleaseNote.hpp GUI/ReleaseNote.cpp + GUI/SingleChoiceDialog.hpp + GUI/SingleChoiceDialog.cpp + GUI/CaliHistoryDialog.hpp + GUI/CaliHistoryDialog.cpp + GUI/CalibrationPanel.hpp + GUI/CalibrationPanel.cpp + GUI/CalibrationWizard.hpp + GUI/CalibrationWizard.cpp + GUI/CalibrationWizardPage.cpp + GUI/CalibrationWizardPage.hpp + GUI/CalibrationWizardStartPage.cpp + GUI/CalibrationWizardStartPage.hpp + GUI/CalibrationWizardPresetPage.cpp + GUI/CalibrationWizardPresetPage.hpp + GUI/CalibrationWizardCaliPage.cpp + GUI/CalibrationWizardCaliPage.hpp + GUI/CalibrationWizardSavePage.cpp + GUI/CalibrationWizardSavePage.hpp + GUI/calib_dlg.cpp + GUI/calib_dlg.hpp GUI/Calibration.hpp GUI/Calibration.cpp GUI/PrintOptionsDialog.hpp GUI/PrintOptionsDialog.cpp - GUI/BonjourDialog.hpp - GUI/BonjourDialog.cpp - GUI/BedShapeDialog.hpp - GUI/BedShapeDialog.cpp Utils/json_diff.hpp Utils/json_diff.cpp GUI/KBShortcutsDialog.hpp @@ -433,12 +447,6 @@ set(SLIC3R_GUI_SOURCES Utils/PrintHost.cpp Utils/NetworkAgent.cpp Utils/NetworkAgent.hpp - Utils/OctoPrint.cpp - Utils/OctoPrint.hpp - Utils/PrintHost.cpp - Utils/PrintHost.hpp - Utils/Serial.cpp - Utils/Serial.hpp Utils/MKS.hpp Utils/MKS.cpp Utils/Duet.cpp @@ -449,8 +457,9 @@ set(SLIC3R_GUI_SOURCES Utils/AstroBox.hpp Utils/Repetier.cpp Utils/Repetier.hpp - GUI/calib_dlg.hpp - GUI/calib_dlg.cpp + + Utils/CalibUtils.cpp + Utils/CalibUtils.hpp ) if (WIN32) @@ -500,7 +509,7 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) -target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(libslic3r_gui libslic3r cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto) #target_link_libraries(libslic3r_gui libslic3r cereal imgui minilzo GLEW::GLEW OpenGL::GL hidapi libcurl OpenSSL::SSL OpenSSL::Crypto ${wxWidgets_LIBRARIES} glfw) if (MSVC) @@ -528,10 +537,6 @@ if (SLIC3R_STATIC) target_compile_definitions(libslic3r_gui PUBLIC -DwxDEBUG_LEVEL=0) endif() -if (HAVE_SPNAV) - target_link_libraries(libslic3r_gui spnav) -endif() - if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_CURL AND UNIX AND NOT APPLE) target_compile_definitions(libslic3r_gui PRIVATE OPENSSL_CERT_OVERRIDE) endif () @@ -556,4 +561,4 @@ if (UNIX AND NOT APPLE) endif () # Add a definition so that we can tell we are compiling slic3r. -target_compile_definitions(libslic3r_gui PRIVATE SLIC3R_CURRENTLY_COMPILING_GUI_MODULE) \ No newline at end of file +target_compile_definitions(libslic3r_gui PRIVATE SLIC3R_CURRENTLY_COMPILING_GUI_MODULE) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index b9243e99f..baebacfe8 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -18,12 +18,7 @@ #include #include #include - -#if BOOST_VERSION >= 107800 -#include -#else #include -#endif static const float GROUND_Z = -0.04f; static const std::array DEFAULT_MODEL_COLOR = { 0.3255f, 0.337f, 0.337f, 1.0f }; @@ -138,7 +133,7 @@ const float Bed3D::Axes::DefaultTipRadius = 2.5f * Bed3D::Axes::DefaultStemRadiu const float Bed3D::Axes::DefaultTipLength = 5.0f; std::array Bed3D::AXIS_X_COLOR = decode_color_to_float_array("#FF0000"); -std::array Bed3D::AXIS_Y_COLOR = decode_color_to_float_array("#52c7b8"); +std::array Bed3D::AXIS_Y_COLOR = decode_color_to_float_array("#00FF00"); std::array Bed3D::AXIS_Z_COLOR = decode_color_to_float_array("#0000FF"); void Bed3D::update_render_colors() @@ -343,6 +338,7 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, if (show_axes) render_axes(); + glsafe(::glEnable(GL_DEPTH_TEST)); m_model.set_color(-1, m_is_dark ? DEFAULT_MODEL_COLOR_DARK : DEFAULT_MODEL_COLOR); @@ -608,17 +604,17 @@ void Bed3D::render_system(GLCanvas3D& canvas, bool bottom) const void Bed3D::update_model_offset() const { // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad - Vec3d shift = m_extended_bounding_box.center(); + Vec3d shift = m_build_volume.bounding_volume().center(); shift(2) = -0.03; Vec3d* model_offset_ptr = const_cast(&m_model_offset); *model_offset_ptr = shift; //BBS: TODO: hack for current stl for BBL printer if (std::string::npos != m_model_filename.find("bbl-3dp-")) { - (*model_offset_ptr)(0) -= 128.f; - (*model_offset_ptr)(1) -= 128.f; + (*model_offset_ptr)(0) -= m_bed_shape[2].x() / 2.0f; + (*model_offset_ptr)(1) -= m_bed_shape[2].y() / 2.0f; + (*model_offset_ptr)(2) = -0.41 + GROUND_Z; } - (*model_offset_ptr)(2) = -0.41 + GROUND_Z; // update extended bounding box const_cast(m_extended_bounding_box) = calc_extended_bounding_box(); @@ -635,9 +631,9 @@ GeometryBuffer Bed3D::update_bed_triangles() const BoundingBoxf3 build_volume; if (!m_build_volume.valid()) return new_triangles; - auto bed_ext = get_extents(m_bed_shape); - (*model_offset_ptr)(0) = m_build_volume.bounding_volume2d().min.x() - bed_ext.min.x(); - (*model_offset_ptr)(1) = m_build_volume.bounding_volume2d().min.y() - bed_ext.min.y(); + + (*model_offset_ptr)(0) = m_build_volume.bounding_volume2d().min.x(); + (*model_offset_ptr)(1) = m_build_volume.bounding_volume2d().min.y(); (*model_offset_ptr)(2) = -0.41 + GROUND_Z; std::vector new_bed_shape; diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 79cc464f1..5916b5edf 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -5,6 +5,7 @@ #include "libslic3r/Preset.hpp" #include "I18N.hpp" #include +#include "CalibUtils.hpp" namespace Slic3r { namespace GUI { @@ -33,10 +34,10 @@ void AMSMaterialsSetting::create() m_sizer_button->Add(0, 0, 1, wxEXPAND, 0); m_button_confirm = new Button(this, _L("Confirm")); - m_btn_bg_green = StateColor(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + m_btn_bg_green = StateColor(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_confirm->SetBackgroundColor(m_btn_bg_green); - m_button_confirm->SetBorderColor(wxColour(0, 150, 136)); + m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); m_button_confirm->SetTextColor(wxColour("#FFFFFE")); m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); m_button_confirm->SetCornerRadius(FromDIP(12)); @@ -110,6 +111,8 @@ void AMSMaterialsSetting::create() Bind(wxEVT_PAINT, &AMSMaterialsSetting::paintEvent, this); Bind(EVT_SELECTED_COLOR, &AMSMaterialsSetting::on_picker_color, this); m_comboBox_filament->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_filament), NULL, this); + + m_comboBox_cali_result->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_cali_result), NULL, this); } void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) @@ -135,7 +138,7 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) m_sizer_filament->Add(m_comboBox_filament, 1, wxALIGN_CENTER, 0); m_readonly_filament = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, wxTE_READONLY | wxRIGHT); - m_readonly_filament->SetBorderColor(StateColor(std::make_pair(0xDBDBDB, (int)StateColor::Focused), std::make_pair(0x009688, (int)StateColor::Hovered), + m_readonly_filament->SetBorderColor(StateColor(std::make_pair(0xDBDBDB, (int)StateColor::Focused), std::make_pair(0x00AE42, (int)StateColor::Hovered), std::make_pair(0xDBDBDB, (int)StateColor::Normal))); m_readonly_filament->SetFont(::Label::Body_14); m_readonly_filament->SetLabelColor(AMS_MATERIALS_SETTING_GREY800); @@ -184,8 +187,9 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) m_input_nozzle_min->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); - auto bitmap_max_degree = new wxStaticBitmap(parent, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); - auto bitmap_min_degree = new wxStaticBitmap(parent, -1, create_scaled_bitmap("degree", nullptr, 16), wxDefaultPosition, wxDefaultSize); + degree = new ScalableBitmap(parent, "degree", 16); + bitmap_max_degree = new wxStaticBitmap(parent, -1, degree->bmp(), wxDefaultPosition, wxDefaultSize); + bitmap_min_degree = new wxStaticBitmap(parent, -1, degree->bmp(), wxDefaultPosition, wxDefaultSize); sizer_tempinput->Add(m_input_nozzle_max, 1, wxALIGN_CENTER, 0); sizer_tempinput->Add(bitmap_min_degree, 0, wxALIGN_CENTER, 0); @@ -194,7 +198,7 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) sizer_tempinput->Add(bitmap_max_degree, 0, wxALIGN_CENTER, 0); wxBoxSizer* sizer_temp_txt = new wxBoxSizer(wxHORIZONTAL); - auto m_title_max = new wxStaticText(parent, wxID_ANY, _L("max"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); + auto m_title_max = new wxStaticText(parent, wxID_ANY, _L("max"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); m_title_max->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); m_title_max->SetFont(::Label::Body_13); auto m_title_min = new wxStaticText(parent, wxID_ANY, _L("min"), wxDefaultPosition, AMS_MATERIALS_SETTING_INPUT_SIZE); @@ -268,10 +272,24 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) { auto sizer = new wxBoxSizer(wxVERTICAL); // title - m_ratio_text = new wxStaticText(parent, wxID_ANY, _L("Factors of dynamic flow cali")); + m_ratio_text = new wxStaticText(parent, wxID_ANY, _L("Factors of Flow Dynamics Calibration")); m_ratio_text->SetForegroundColour(wxColour(50, 58, 61)); m_ratio_text->SetFont(Label::Head_14); + wxBoxSizer *m_sizer_cali_resutl = new wxBoxSizer(wxHORIZONTAL); + // pa profile + m_title_pa_profile = new wxStaticText(parent, wxID_ANY, _L("PA Profile"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); + m_title_pa_profile->SetMinSize(wxSize(FromDIP(80), -1)); + m_title_pa_profile->SetMaxSize(wxSize(FromDIP(80), -1)); + m_title_pa_profile->SetFont(::Label::Body_13); + m_title_pa_profile->SetForegroundColour(AMS_MATERIALS_SETTING_GREY800); + m_title_pa_profile->Wrap(-1); + m_sizer_cali_resutl->Add(m_title_pa_profile, 0, wxALIGN_CENTER, 0); + m_sizer_cali_resutl->Add(0, 0, 0, wxEXPAND, 0); + + m_comboBox_cali_result = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, AMS_MATERIALS_SETTING_COMBOX_WIDTH, 0, nullptr, wxCB_READONLY); + m_sizer_cali_resutl->Add(m_comboBox_cali_result, 1, wxALIGN_CENTER, 0); + auto kn_val_sizer = new wxFlexGridSizer(0, 2, 0, 0); kn_val_sizer->SetFlexibleDirection(wxBOTH); kn_val_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); @@ -279,14 +297,18 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) // k params input m_k_param = new wxStaticText(parent, wxID_ANY, _L("Factor K"), wxDefaultPosition, wxDefaultSize, 0); + m_k_param->SetMinSize(wxSize(FromDIP(80), -1)); + m_k_param->SetMaxSize(wxSize(FromDIP(80), -1)); m_k_param->SetFont(::Label::Body_13); m_k_param->SetForegroundColour(wxColour(50, 58, 61)); m_k_param->Wrap(-1); - kn_val_sizer->Add(m_k_param, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + kn_val_sizer->Add(m_k_param, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(0)); m_input_k_val = new TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_input_k_val->SetMinSize(wxSize(FromDIP(245), -1)); + m_input_k_val->SetMaxSize(wxSize(FromDIP(245), -1)); m_input_k_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - kn_val_sizer->Add(m_input_k_val, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + kn_val_sizer->Add(m_input_k_val, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(0)); // n params input wxBoxSizer* n_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -298,13 +320,19 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) m_input_n_val = new TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE | wxTE_PROCESS_ENTER); m_input_n_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); kn_val_sizer->Add(m_input_n_val, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(5)); - - // hide n m_n_param->Hide(); m_input_n_val->Hide(); + // hide n (P1P old logic) + //if (!this->obj || !this->obj->is_high_printer_type()) { + // m_n_param->Hide(); + // m_input_n_val->Hide(); + //} + sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); sizer->Add(m_ratio_text, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(16)); + sizer->Add(m_sizer_cali_resutl, 0, wxLEFT | wxRIGHT, FromDIP(20)); sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); sizer->Add(kn_val_sizer, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); @@ -323,6 +351,7 @@ void AMSMaterialsSetting::paintEvent(wxPaintEvent &evt) AMSMaterialsSetting::~AMSMaterialsSetting() { m_comboBox_filament->Disconnect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_filament), NULL, this); + m_comboBox_cali_result->Disconnect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_cali_result), NULL, this); } void AMSMaterialsSetting::input_min_finish() @@ -375,8 +404,8 @@ void AMSMaterialsSetting::enable_confirm_button(bool en) m_tip_readonly->Hide(); } else { - m_comboBox_filament->Show(en); - m_readonly_filament->Show(!en); + //m_comboBox_filament->Show(en); + //m_readonly_filament->Show(!en); if ( !is_virtual_tray() ) { m_tip_readonly->SetLabelText(_L("Setting AMS slot information while printing is not supported")); @@ -398,6 +427,7 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { m_input_nozzle_max->GetTextCtrl()->SetValue(""); ams_filament_id = ""; ams_setting_id = ""; + m_filament_selection = -1; wxString k_text = "0.000"; wxString n_text = "0.000"; m_filament_type = ""; @@ -409,17 +439,15 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { if (obj) { // set filament - if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { - if (is_virtual_tray()) { - obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); - } - else { - obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); - } + if (is_virtual_tray()) { + obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } + else if(m_is_third){ + obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); } // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { + if (!obj->is_high_printer_type()) { // set extrusion cali ratio int cali_tray_id = ams_id * 4 + tray_id; @@ -440,23 +468,114 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { } obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n); } + else { + PACalibIndexInfo select_index_info; + select_index_info.tray_id = tray_id; + select_index_info.nozzle_diameter = obj->nozzle_diameter; + select_index_info.cali_idx = -1; + select_index_info.filament_id = ams_filament_id; + CalibUtils::select_PA_calib_result(select_index_info); + } } Close(); } void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) { + //get filament id + ams_filament_id = ""; + ams_setting_id = ""; + + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle) { + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + + if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { + + + //check is it in the filament blacklist + if (!is_virtual_tray() && wxGetApp().app_config->get("skip_ams_blacklist_check") != "true") { + bool in_blacklist = false; + std::string action; + std::string info; + std::string filamnt_type; + it->get_filament_type(filamnt_type); + + if (it->vendor) { + DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); + } + + if (in_blacklist) { + if (action == "prohibition") { + MessageDialog msg_wingow(nullptr, wxString::FromUTF8(info), _L("Error"), wxICON_WARNING | wxOK); + msg_wingow.ShowModal(); + //m_comboBox_filament->SetSelection(m_filament_selection); + return; + } + else if (action == "warning") { + MessageDialog msg_wingow(nullptr, wxString::FromUTF8(info), _L("Warning"), wxICON_INFORMATION | wxOK); + msg_wingow.ShowModal(); + } + } + } + + ams_filament_id = it->filament_id; + ams_setting_id = it->setting_id; + break; + } + } + } + + wxString nozzle_temp_min = m_input_nozzle_min->GetTextCtrl()->GetValue(); + auto filament = m_comboBox_filament->GetValue(); + + wxString nozzle_temp_max = m_input_nozzle_max->GetTextCtrl()->GetValue(); + + long nozzle_temp_min_int, nozzle_temp_max_int; + nozzle_temp_min.ToLong(&nozzle_temp_min_int); + nozzle_temp_max.ToLong(&nozzle_temp_max_int); + wxColour color = m_clr_picker->m_colour; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02X%02X", (int)color.Red(), (int)color.Green(), (int)color.Blue(), (int)color.Alpha()); + + if (ams_filament_id.empty() || nozzle_temp_min.empty() || nozzle_temp_max.empty() || m_filament_type.empty()) { + BOOST_LOG_TRIVIAL(trace) << "Invalid Setting id"; + MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color first."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + if (ams_filament_id.empty() || nozzle_temp_min.empty() || nozzle_temp_max.empty() || m_filament_type.empty()) { + BOOST_LOG_TRIVIAL(trace) << "Invalid Setting id"; + MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color first."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + // set filament + if (m_is_third) { + if (is_virtual_tray()) { + obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } + else { + obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } + } + + //reset param wxString k_text = m_input_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_input_n_val->GetTextCtrl()->GetValue(); - if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { - if (!ExtrusionCalibration::check_k_validation(k_text)) { - wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); - wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); - MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; - } + if (!obj->is_high_printer_type() && !ExtrusionCalibration::check_k_validation(k_text)) { + wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); + wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); + MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + // set k / n value + if (is_virtual_tray()) { double k = 0.0; try { k_text.ToDouble(&k); @@ -471,153 +590,65 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) catch (...) { ; } - obj->command_extrusion_cali_set(VIRTUAL_TRAY_ID, "", "", k, n); - Close(); - } - else { - if (!m_is_third) { - // check and set k n - if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { - if (!ExtrusionCalibration::check_k_validation(k_text)) { - wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); - wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); - MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; - } + + if (obj->is_high_printer_type()) { + PACalibIndexInfo select_index_info; + select_index_info.tray_id = tray_id; + select_index_info.nozzle_diameter = obj->nozzle_diameter; + + auto cali_select_id = m_comboBox_cali_result->GetSelection(); + if (m_pa_profile_items.size() > 0 && cali_select_id >= 0) { + select_index_info.cali_idx = m_pa_profile_items[cali_select_id].cali_idx; + select_index_info.filament_id = m_pa_profile_items[cali_select_id].filament_id; + } + else { // default item + select_index_info.cali_idx = -1; + select_index_info.filament_id = ams_filament_id; } - - // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { - // set extrusion cali ratio - int cali_tray_id = ams_id * 4 + tray_id; - - double k = 0.0; - try { - k_text.ToDouble(&k); - } - catch (...) { - ; - } - - double n = 0.0; - try { - n_text.ToDouble(&n); - } - catch (...) { - ; - } - obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n); - } - Close(); - return; - } - wxString nozzle_temp_min = m_input_nozzle_min->GetTextCtrl()->GetValue(); - auto filament = m_comboBox_filament->GetValue(); - - wxString nozzle_temp_max = m_input_nozzle_max->GetTextCtrl()->GetValue(); - - long nozzle_temp_min_int, nozzle_temp_max_int; - nozzle_temp_min.ToLong(&nozzle_temp_min_int); - nozzle_temp_max.ToLong(&nozzle_temp_max_int); - wxColour color = m_clr_picker->m_colour; - char col_buf[10]; - sprintf(col_buf, "%02X%02X%02XFF", (int)color.Red(), (int)color.Green(), (int)color.Blue()); - ams_filament_id = ""; - ams_setting_id = ""; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - if (preset_bundle) { - for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - - if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { - - - //check is it in the filament blacklist - if(!is_virtual_tray()){ - bool in_blacklist = false; - std::string action; - std::string info; - std::string filamnt_type; - it->get_filament_type(filamnt_type); - - if (it->vendor) { - DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); - } - - if (in_blacklist) { - if (action == "prohibition") { - MessageDialog msg_wingow(nullptr, info, _L("Error"), wxICON_WARNING | wxOK); - msg_wingow.ShowModal(); - //m_comboBox_filament->SetSelection(m_filament_selection); - return; - } - else if (action == "warning") { - MessageDialog msg_wingow(nullptr, info, _L("Warning"), wxICON_INFORMATION | wxOK); - msg_wingow.ShowModal(); - } - } - } - - ams_filament_id = it->filament_id; - ams_setting_id = it->setting_id; - break; - } - } - } - - if (ams_filament_id.empty() || nozzle_temp_min.empty() || nozzle_temp_max.empty() || m_filament_type.empty()) { - BOOST_LOG_TRIVIAL(trace) << "Invalid Setting id"; - MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color first."), wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; + CalibUtils::select_PA_calib_result(select_index_info); } else { - if (obj) { - if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { - if (!ExtrusionCalibration::check_k_validation(k_text)) { - wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); - wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); - MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; - } - } + obj->command_extrusion_cali_set(VIRTUAL_TRAY_ID, "", "", k, n); + } + } + else { + int cali_tray_id = ams_id * 4 + tray_id; + double k = 0.0; + try { + k_text.ToDouble(&k); + } + catch (...) { + ; + } - // set filament - if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { - if (is_virtual_tray()) { - obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); - } - else { - obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); - } - } + double n = 0.0; + try { + n_text.ToDouble(&n); + } + catch (...) { + ; + } - // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { - // set extrusion cali ratio - int cali_tray_id = ams_id * 4 + tray_id; + if (obj->is_high_printer_type()) { + PACalibIndexInfo select_index_info; + select_index_info.tray_id = cali_tray_id; + select_index_info.nozzle_diameter = obj->nozzle_diameter; - double k = 0.0; - try { - k_text.ToDouble(&k); - } - catch (...) { - ; - } - - double n = 0.0; - try { - n_text.ToDouble(&n); - } - catch (...) { - ; - } - obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n); - } + auto cali_select_id = m_comboBox_cali_result->GetSelection(); + if (m_pa_profile_items.size() > 0 && cali_select_id >= 0) { + select_index_info.cali_idx = m_pa_profile_items[cali_select_id].cali_idx; + select_index_info.filament_id = m_pa_profile_items[cali_select_id].filament_id; } + else { // default item + select_index_info.cali_idx = -1; + select_index_info.filament_id = ams_filament_id; + } + + CalibUtils::select_PA_calib_result(select_index_info); + } + else { + obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n); } } Close(); @@ -631,6 +662,13 @@ void AMSMaterialsSetting::on_select_close(wxCommandEvent &event) void AMSMaterialsSetting::set_color(wxColour color) { //m_clrData->SetColour(color); + m_clr_picker->is_empty(false); + m_clr_picker->set_color(color); +} + +void AMSMaterialsSetting::set_empty_color(wxColour color) +{ + m_clr_picker->is_empty(true); m_clr_picker->set_color(color); } @@ -644,7 +682,7 @@ void AMSMaterialsSetting::set_colors(std::vector colors) void AMSMaterialsSetting::on_picker_color(wxCommandEvent& event) { unsigned int color_num = event.GetInt(); - set_color(wxColour(color_num>>16&0xFF, color_num>>8&0xFF, color_num&0xFF)); + set_color(wxColour(color_num>>24&0xFF, color_num>>16&0xFF, color_num>>8&0xFF, color_num&0xFF)); } void AMSMaterialsSetting::on_clr_picker(wxMouseEvent &event) @@ -664,7 +702,7 @@ void AMSMaterialsSetting::on_clr_picker(wxMouseEvent &event) } wxPoint img_pos = m_clr_picker->ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x + FromDIP(50), img_pos.y); + wxPoint popup_pos(img_pos.x - m_color_picker_popup.GetSize().x - FromDIP(95), img_pos.y - FromDIP(65)); m_color_picker_popup.Position(popup_pos, wxSize(0, 0)); m_color_picker_popup.set_ams_colours(ams_colors); m_color_picker_popup.set_def_colour(m_clr_picker->m_colour); @@ -680,14 +718,18 @@ bool AMSMaterialsSetting::is_virtual_tray() void AMSMaterialsSetting::update_widgets() { - // virtual tray - if (is_virtual_tray()) { - if (obj && obj->is_support_filament_edit_virtual_tray) + if (obj && obj->get_printer_series() == PrinterSeries::SERIES_X1 && obj->cali_version <= -1) { + // Low version firmware does not display k value + m_panel_kn->Hide(); + } + else if(is_virtual_tray()) // virtual tray + { + if (obj) m_panel_normal->Show(); else m_panel_normal->Hide(); m_panel_kn->Show(); - } else if (obj && obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { + } else if (obj && (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY) || obj->is_high_printer_type())) { m_panel_normal->Show(); m_panel_kn->Show(); } else { @@ -705,7 +747,7 @@ bool AMSMaterialsSetting::Show(bool show) m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); //m_clr_picker->set_color(m_clr_picker->GetParent()->GetBackgroundColour()); - if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + /*if (obj && (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI) || obj->is_high_printer_type())) { m_ratio_text->Show(); m_k_param->Show(); m_input_k_val->Show(); @@ -714,7 +756,10 @@ bool AMSMaterialsSetting::Show(bool show) m_ratio_text->Hide(); m_k_param->Hide(); m_input_k_val->Hide(); - } + }*/ + m_ratio_text->Show(); + m_k_param->Show(); + m_input_k_val->Show(); Layout(); Fit(); wxGetApp().UpdateDarkUI(this); @@ -734,128 +779,122 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); - if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { - m_button_reset->Show(); - m_button_confirm->Show(); - update(); - Layout(); - Fit(); - ShowModal(); - return; - } else { - /* m_clr_picker->set_color(wxColour( - m_clrData->GetColour().Red(), - m_clrData->GetColour().Green(), - m_clrData->GetColour().Blue(), - 254 - ));*/ + int selection_idx = -1, idx = 0; + wxArrayString filament_items; + std::set filament_id_set; - if (!m_is_third) { - m_button_reset->Hide(); - if (obj && obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { - m_button_confirm->Show(); - } else { - m_button_confirm->Hide(); - } + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle) { + BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); + for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { + // filter by system preset + if (!filament_it->is_system) continue; - m_sn_number->SetLabel(sn); - m_panel_SN->Show(); - m_comboBox_filament->Hide(); - m_readonly_filament->Show(); - //m_readonly_filament->GetTextCtrl()->SetLabel("Bambu " + filament); - m_readonly_filament->SetLabel("Bambu " + filament); - m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); - m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); - - update(); - Layout(); - Fit(); - ShowModal(); - return; - } - - m_button_reset->Show(); - m_button_confirm->Show(); - m_panel_SN->Hide(); - m_comboBox_filament->Show(); - m_readonly_filament->Hide(); - - - int selection_idx = -1, idx = 0; - wxArrayString filament_items; - std::set filament_id_set; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - if (preset_bundle) { - BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { + for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { // filter by system preset - if (!filament_it->is_system) continue; + if (!printer_it->is_system) continue; + // get printer_model + ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); + ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); + if (!printer_model_str || !obj) + continue; - for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { - // filter by system preset - if (!printer_it->is_system) continue; - // get printer_model - ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str || !obj) - continue; + // use printer_model as printer type + if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) + continue; + ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); + ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); + for (auto printer_str : printer_strs->values) { + if (printer_it->name == printer_str) { + if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { + continue; + } + else { + filament_id_set.insert(filament_it->filament_id); + // name matched + filament_items.push_back(filament_it->alias); + if (filament_it->filament_id == ams_filament_id) { + selection_idx = idx; - // use printer_model as printer type - if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) - continue; - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_it->name == printer_str) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } - else { - filament_id_set.insert(filament_it->filament_id); - // name matched - filament_items.push_back(filament_it->alias); - if (filament_it->filament_id == ams_filament_id) { - selection_idx = idx; - - // update if nozzle_temperature_range is found - ConfigOption* opt_min = filament_it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption* opt_max = filament_it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } + // update if nozzle_temperature_range is found + ConfigOption* opt_min = filament_it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); + } + } + ConfigOption* opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); } } - idx++; } + idx++; } } } } - m_comboBox_filament->Set(filament_items); - m_comboBox_filament->SetSelection(selection_idx); - post_select_event(); } } + if (!sn.empty()) { + m_sn_number->SetLabel(sn); + m_panel_SN->Show(); + } + else { + m_panel_SN->Hide(); + } + + if (obj) { + if (!m_is_third) { + m_comboBox_filament->Hide(); + m_readonly_filament->Show(); + m_readonly_filament->SetLabel("Bambu " + filament); + m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); + m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); + } + else { + m_comboBox_filament->Show(); + m_readonly_filament->Hide(); + } + + if (obj->is_high_printer_type()) { + m_title_pa_profile->Show(); + m_comboBox_cali_result->Show(); + m_input_k_val->Disable(); + } + else { + m_title_pa_profile->Hide(); + m_comboBox_cali_result->Hide(); + m_input_k_val->Enable(); + } + + m_button_reset->Show(); + m_button_confirm->Show(); + } + + m_comboBox_filament->Set(filament_items); + m_comboBox_filament->SetSelection(selection_idx); + post_select_event(selection_idx); + + if (selection_idx < 0) { + m_comboBox_filament->SetValue(wxEmptyString); + } + update(); Layout(); Fit(); ShowModal(); } -void AMSMaterialsSetting::post_select_event() { +void AMSMaterialsSetting::post_select_event(int index) { wxCommandEvent event(wxEVT_COMBOBOX); + event.SetInt(index); event.SetEventObject(m_comboBox_filament); wxPostEvent(m_comboBox_filament, event); } @@ -865,6 +904,19 @@ void AMSMaterialsSetting::msw_rescale() m_clr_picker->msw_rescale(); } +void AMSMaterialsSetting::on_select_cali_result(wxCommandEvent &evt) +{ + m_pa_cali_select_id = evt.GetSelection(); + if (m_pa_cali_select_id >= 0) { + m_input_k_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[m_pa_cali_select_id].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[m_pa_cali_select_id].n_coef)); + } + else{ + m_input_k_val->GetTextCtrl()->SetValue(std::to_string(0.00)); + m_input_n_val->GetTextCtrl()->SetValue(std::to_string(0.00)); + } +} + void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) { m_filament_type = ""; @@ -916,9 +968,107 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } m_filament_selection = evt.GetSelection(); + + //reset cali + int cali_select_idx; + + if ( !this->obj || m_filament_selection < 0) { + m_input_k_val->Enable(false); + m_input_n_val->Enable(false); + m_button_confirm->Disable(); + m_button_confirm->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); + m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); + m_comboBox_cali_result->Clear(); + m_comboBox_cali_result->SetValue(wxEmptyString); + return; + } + else { + m_button_confirm->SetBackgroundColor(m_btn_bg_green); + m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); + m_button_confirm->SetTextColor(wxColour("#FFFFFE")); + m_button_confirm->Enable(true); + } + + //filament id + ams_filament_id = ""; + ams_setting_id = ""; + + if (preset_bundle) { + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { + ams_filament_id = it->filament_id; + ams_setting_id = it->setting_id; + break; + } + } + } + + wxArrayString items; + m_pa_profile_items.clear(); + m_comboBox_cali_result->SetValue(wxEmptyString); + + if (this->obj->is_high_printer_type()) { + m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString); + std::vector cali_history = this->obj->pa_calib_tab; + for (auto cali_item : cali_history) { + if (cali_item.filament_id == ams_filament_id) { + items.push_back(from_u8(cali_item.name)); + m_pa_profile_items.push_back(cali_item); + } + } + + m_comboBox_cali_result->Set(items); + if (tray_id == VIRTUAL_TRAY_ID) { + AmsTray selected_tray = this->obj->vt_tray; + cali_select_idx = CalibUtils::get_selected_calib_idx(m_pa_profile_items,selected_tray.cali_idx); + if (cali_select_idx >= 0) { + m_comboBox_cali_result->SetSelection(cali_select_idx); + } + } + else { + Ams* selected_ams = this->obj->amsList[std::to_string(ams_id)]; + if(!selected_ams) return; + AmsTray* selected_tray = selected_ams->trayList[std::to_string(tray_id)]; + if(!selected_tray) return; + cali_select_idx = CalibUtils::get_selected_calib_idx(m_pa_profile_items, selected_tray->cali_idx); + if (cali_select_idx >= 0) { + m_comboBox_cali_result->SetSelection(cali_select_idx); + } + } + + if (cali_select_idx >= 0) { + m_input_k_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[cali_select_idx].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[cali_select_idx].n_coef)); + } + } + else { + if (!ams_filament_id.empty()) { + //m_input_k_val->GetTextCtrl()->SetValue("0.00"); + m_input_k_val->Enable(true); + } + else { + //m_input_k_val->GetTextCtrl()->SetValue("0.00"); + m_input_k_val->Disable(); + } + } } -void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } +void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) +{ + m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); + m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); + //m_clr_picker->msw_rescale(); + degree->msw_rescale(); + bitmap_max_degree->SetBitmap(degree->bmp()); + bitmap_min_degree->SetBitmap(degree->bmp()); + m_button_reset->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); + m_button_reset->SetCornerRadius(FromDIP(12)); + m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); + m_button_confirm->SetCornerRadius(FromDIP(12)); + m_button_close->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); + m_button_close->SetCornerRadius(FromDIP(12)); + this->Refresh(); +} ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/) { @@ -929,7 +1079,9 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); Bind(wxEVT_PAINT, &ColorPicker::paintEvent, this); + m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); + m_bitmap_transparent = create_scaled_bitmap("transparent_color_picker", nullptr, 25); } ColorPicker::~ColorPicker(){} @@ -982,24 +1134,35 @@ void ColorPicker::render(wxDC& dc) void ColorPicker::doRender(wxDC& dc) { wxSize size = GetSize(); + auto alpha = m_colour.Alpha(); - auto radius = m_show_full?size.x / 2:size.x / 2 - FromDIP(1); + auto radius = m_show_full ? size.x / 2 - FromDIP(1) : size.x / 2; if (m_selected) radius -= FromDIP(1); - dc.SetPen(wxPen(m_colour)); - dc.SetBrush(wxBrush(m_colour)); - dc.DrawCircle(size.x / 2, size.x / 2, radius); + if (alpha == 0) { + dc.DrawBitmap(m_bitmap_transparent, 0, 0); + } + else { + dc.SetPen(wxPen(m_colour)); + dc.SetBrush(wxBrush(m_colour)); + dc.DrawCircle(size.x / 2, size.y / 2, radius); + } if (m_selected) { dc.SetPen(wxPen(m_colour)); dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawCircle(size.x / 2, size.x / 2, size.x / 2); + dc.DrawCircle(size.x / 2, size.y / 2, size.x / 2); } if (m_show_full) { dc.SetPen(wxPen(wxColour(0x6B6B6B))); dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawCircle(size.x / 2, size.x / 2, radius); + dc.DrawCircle(size.x / 2, size.y / 2, radius); + + //transparent + if (alpha == 0) { + dc.DrawBitmap(m_bitmap_transparent, 0, 0); + } if (m_cols.size() > 1) { int left = FromDIP(0); @@ -1019,6 +1182,13 @@ void ColorPicker::doRender(wxDC& dc) dc.DrawBitmap(m_bitmap_border, wxPoint(0, 0)); } } + + if (m_is_empty) { + dc.SetTextForeground(*wxBLACK); + auto tsize = dc.GetTextExtent("?"); + auto pot = wxPoint((size.x - tsize.x) / 2, (size.y - tsize.y) / 2); + dc.DrawText("?", pot); + } } ColorPickerPopup::ColorPickerPopup(wxWindow* parent) @@ -1096,7 +1266,7 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) set_def_colour(cp->m_colour); wxCommandEvent evt(EVT_SELECTED_COLOR); - unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 16) + ((cp->m_colour.Green() & 0xff) << 8) + (cp->m_colour.Blue() & 0xff); + unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 24) + ((cp->m_colour.Green() & 0xff) << 16) + ((cp->m_colour.Blue() & 0xff) << 8) + (cp->m_colour.Alpha() & 0xff); evt.SetInt(g_col); wxPostEvent(GetParent(), evt); }); @@ -1138,6 +1308,22 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) SetCursor(wxCURSOR_ARROW); }); + m_ts_bitmap_custom = ScalableBitmap(this, "ts_custom_color_picker", 25); + m_ts_stbitmap_custom = new wxStaticBitmap(m_custom_cp, wxID_ANY, m_ts_bitmap_custom.bmp()); + + m_ts_stbitmap_custom->Bind(wxEVT_LEFT_DOWN, &ColorPickerPopup::on_custom_clr_picker, this); + m_ts_stbitmap_custom->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + SetCursor(wxCURSOR_HAND); + }); + m_ts_stbitmap_custom->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { + SetCursor(wxCURSOR_ARROW); + }); + + auto sizer_custom = new wxBoxSizer(wxVERTICAL); + m_custom_cp->SetSizer(sizer_custom); + sizer_custom->Add(m_ts_stbitmap_custom, 0, wxEXPAND, 0); + m_custom_cp->Layout(); + m_clrData = new wxColourData(); m_clrData->SetChooseFull(true); m_clrData->SetChooseAlpha(false); @@ -1180,10 +1366,18 @@ void ColorPickerPopup::on_custom_clr_picker(wxMouseEvent& event) m_clrData->GetColour().Blue(), 254 ); - m_custom_cp->SetBackgroundColor(picker_color); + + if (picker_color.Alpha() == 0) { + m_ts_stbitmap_custom->Show(); + } + else { + m_ts_stbitmap_custom->Hide(); + m_custom_cp->SetBackgroundColor(picker_color); + } + set_def_colour(picker_color); wxCommandEvent evt(EVT_SELECTED_COLOR); - unsigned long g_col = ((picker_color.Red() & 0xff) << 16) + ((picker_color.Green() & 0xff) << 8) + (picker_color.Blue() & 0xff); + unsigned long g_col = ((picker_color.Red() & 0xff) << 24) + ((picker_color.Green() & 0xff) << 16) + ((picker_color.Blue() & 0xff) << 8) + (picker_color.Alpha() & 0xff); evt.SetInt(g_col); wxPostEvent(GetParent(), evt); } @@ -1218,7 +1412,7 @@ void ColorPickerPopup::set_ams_colours(std::vector ams) set_def_colour(cp->m_colour); wxCommandEvent evt(EVT_SELECTED_COLOR); - unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 16) + ((cp->m_colour.Green() & 0xff) << 8) + (cp->m_colour.Blue() & 0xff); + unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 24) + ((cp->m_colour.Green() & 0xff) << 16) + ((cp->m_colour.Blue() & 0xff) << 8) + (cp->m_colour.Alpha() & 0xff); evt.SetInt(g_col); wxPostEvent(GetParent(), evt); }); @@ -1245,7 +1439,13 @@ void ColorPickerPopup::set_def_colour(wxColour col) } } - m_custom_cp->SetBackgroundColor(m_def_col); + if (m_def_col.Alpha() == 0) { + m_ts_stbitmap_custom->Show(); + } + else { + m_ts_stbitmap_custom->Hide(); + m_custom_cp->SetBackgroundColor(m_def_col); + } Dismiss(); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 60d7e17c0..ee5eca9c4 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -13,6 +13,7 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" #include "Widgets/TextInput.hpp" +#include "../slic3r/Utils/CalibUtils.hpp" #define AMS_MATERIALS_SETTING_DEF_COLOUR wxColour(255, 255, 255) #define AMS_MATERIALS_SETTING_GREY900 wxColour(38, 46, 48) @@ -32,11 +33,14 @@ class ColorPicker : public wxWindow { public: wxBitmap m_bitmap_border; + wxBitmap m_bitmap_transparent; + wxColour m_colour; std::vector m_cols; bool m_selected{false}; bool m_show_full{false}; - + bool m_is_empty{false}; + ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); ~ColorPicker(); @@ -45,6 +49,7 @@ public: void set_colors(std::vector cols); void set_selected(bool sel) {m_selected = sel;Refresh();}; void set_show_full(bool full) {m_show_full = full;Refresh();}; + void is_empty(bool empty) {m_is_empty = empty;}; void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); @@ -54,6 +59,8 @@ public: class ColorPickerPopup : public PopupWindow { public: + ScalableBitmap m_ts_bitmap_custom; + wxStaticBitmap* m_ts_stbitmap_custom; StaticBox* m_custom_cp; wxColourData* m_clrData; StaticBox* m_def_color_box; @@ -96,9 +103,10 @@ public: wxString temp_min = wxEmptyString, wxString temp_max = wxEmptyString, wxString k = wxEmptyString, wxString n = wxEmptyString); - void post_select_event(); + void post_select_event(int index); void msw_rescale(); void set_color(wxColour color); + void set_empty_color(wxColour color); void set_colors(std::vector colors); void on_picker_color(wxCommandEvent& color); @@ -116,12 +124,15 @@ public: wxColour m_brand_colour; std::string m_filament_type; ColorPickerPopup m_color_picker_popup; + ColorPicker * m_clr_picker; + std::vector m_pa_profile_items; protected: void create_panel_normal(wxWindow* parent); void create_panel_kn(wxWindow* parent); void on_dpi_changed(const wxRect &suggested_rect) override; void on_select_filament(wxCommandEvent& evt); + void on_select_cali_result(wxCommandEvent &evt); void on_select_ok(wxCommandEvent &event); void on_select_reset(wxCommandEvent &event); void on_select_close(wxCommandEvent &event); @@ -138,15 +149,18 @@ protected: wxStaticText * warning_text; //wxPanel * m_panel_body; wxStaticText * m_title_filament; + wxStaticText * m_title_pa_profile; wxStaticText * m_title_colour; wxStaticText * m_title_temperature; TextInput * m_input_nozzle_min; TextInput* m_input_nozzle_max; + ScalableBitmap * degree; + wxStaticBitmap * bitmap_max_degree; + wxStaticBitmap * bitmap_min_degree; Button * m_button_reset; Button * m_button_confirm; wxStaticText* m_tip_readonly; Button * m_button_close; - ColorPicker * m_clr_picker; wxColourData * m_clrData; wxPanel * m_panel_kn; @@ -157,11 +171,14 @@ protected: TextInput* m_input_n_val; int m_filament_selection; + int m_pa_cali_select_id = 0; + #ifdef __APPLE__ wxComboBox *m_comboBox_filament; #else ComboBox *m_comboBox_filament; #endif + ComboBox * m_comboBox_cali_result; TextInput* m_readonly_filament; }; diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index f0014ddea..30b468e1d 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include "Plater.hpp" @@ -30,7 +31,7 @@ wxDEFINE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); { m_arraw_bitmap_gray = ScalableBitmap(this, "drop_down", FromDIP(12)); m_arraw_bitmap_white = ScalableBitmap(this, "topbar_dropdown", FromDIP(12)); - + m_transparent_mitem = ScalableBitmap(this, "transparent_material_item", FromDIP(32)); m_material_coloul = mcolour; m_material_name = mname; @@ -51,7 +52,11 @@ wxDEFINE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); MaterialItem::~MaterialItem() {} -void MaterialItem::msw_rescale() {} +void MaterialItem::msw_rescale() { + m_arraw_bitmap_gray = ScalableBitmap(this, "drop_down", FromDIP(12)); + m_arraw_bitmap_white = ScalableBitmap(this, "topbar_dropdown", FromDIP(12)); + m_transparent_mitem = ScalableBitmap(this, "transparent_material_item", FromDIP(32)); +} void MaterialItem::set_ams_info(wxColour col, wxString txt) { @@ -61,6 +66,22 @@ void MaterialItem::set_ams_info(wxColour col, wxString txt) if (need_refresh) { Refresh();} } +void MaterialItem::disable() +{ + if (IsEnabled()) { + this->Disable(); + Refresh(); + } +} + +void MaterialItem::enable() +{ + if (!IsEnabled()) { + this->Enable(); + Refresh(); + } +} + void MaterialItem::on_selected() { if (!m_selected) { @@ -117,15 +138,26 @@ void MaterialItem::render(wxDC &dc) doRender(dc); #endif + auto mcolor = m_material_coloul; + auto acolor = m_ams_coloul; + if (!IsEnabled()) { + mcolor = wxColour(0x90, 0x90, 0x90); + acolor = wxColour(0x90, 0x90, 0x90); + } + else { + mcolor = m_material_coloul; + acolor = m_ams_coloul; + } + // materials name dc.SetFont(::Label::Body_13); - auto material_name_colour = m_material_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); + auto material_name_colour = mcolor.GetLuminance() < 0.6 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); + if (mcolor.Alpha() == 0) {material_name_colour = wxColour(0x26, 0x2E, 0x30);} dc.SetTextForeground(material_name_colour); if (dc.GetTextExtent(m_material_name).x > GetSize().x - 10) { dc.SetFont(::Label::Body_10); - } auto material_txt_size = dc.GetTextExtent(m_material_name); @@ -133,7 +165,10 @@ void MaterialItem::render(wxDC &dc) // mapping num dc.SetFont(::Label::Body_10); - dc.SetTextForeground(m_ams_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30)); + dc.SetTextForeground(acolor.GetLuminance() < 0.6 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30)); + if (acolor.Alpha() == 0) { + dc.SetTextForeground(wxColour(0x26, 0x2E, 0x30)); + } wxString mapping_txt = wxEmptyString; if (m_ams_name.empty()) { @@ -148,28 +183,44 @@ void MaterialItem::render(wxDC &dc) void MaterialItem::doRender(wxDC &dc) { + auto mcolor = m_material_coloul; + auto acolor = m_ams_coloul; + + if (mcolor.Alpha() == 0) { + dc.DrawBitmap(m_transparent_mitem.bmp(), FromDIP(1), FromDIP(1)); + } + + if (!IsEnabled()) { + mcolor = wxColour(0x90, 0x90, 0x90); + acolor = wxColour(0x90, 0x90, 0x90); + } + else { + mcolor = m_material_coloul; + acolor = m_ams_coloul; + } + //top dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(m_material_coloul)); + dc.SetBrush(wxBrush(mcolor)); dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(18), 5); //bottom dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(wxColour(m_ams_coloul))); + dc.SetBrush(wxBrush(wxColour(acolor))); dc.DrawRoundedRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(16), 5); ////middle dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(m_material_coloul)); + dc.SetBrush(wxBrush(mcolor)); dc.DrawRectangle(FromDIP(1), FromDIP(11), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(8)); dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(m_ams_coloul)); + dc.SetBrush(wxBrush(acolor)); dc.DrawRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(8)); ////border #if __APPLE__ - if (m_material_coloul == *wxWHITE || m_ams_coloul == *wxWHITE) { + if (mcolor == *wxWHITE || acolor == *wxWHITE) { dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); @@ -181,7 +232,7 @@ void MaterialItem::doRender(wxDC &dc) dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); } #else - if (m_material_coloul == *wxWHITE || m_ams_coloul == *wxWHITE) { + if (mcolor == *wxWHITE || acolor == *wxWHITE || acolor.Alpha() == 0) { dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRoundedRectangle(0, 0, MATERIAL_ITEM_SIZE.x, MATERIAL_ITEM_SIZE.y, 5); @@ -194,9 +245,8 @@ void MaterialItem::doRender(wxDC &dc) } #endif //arrow - - if ( (m_ams_coloul.Red() > 160 && m_ams_coloul.Green() > 160 && m_ams_coloul.Blue() > 160) && - (m_ams_coloul.Red() < 180 && m_ams_coloul.Green() < 180 && m_ams_coloul.Blue() < 180)) { + if ( (acolor.Red() > 160 && acolor.Green() > 160 && acolor.Blue() > 160) && + (acolor.Red() < 180 && acolor.Green() < 180 && acolor.Blue() < 180)) { dc.DrawBitmap(m_arraw_bitmap_white.bmp(), GetSize().x - m_arraw_bitmap_white.GetBmpSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_white.GetBmpSize().y); } else { @@ -535,6 +585,8 @@ void AmsMapingPopup::paintEvent(wxPaintEvent &evt) #ifdef __WINDOWS__ SetDoubleBuffered(true); #endif //__WINDOWS__ + + m_transparent_mapping_item = ScalableBitmap(this, "transparent_mapping_item", FromDIP(44)); SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); Bind(wxEVT_PAINT, &MappingItem::paintEvent, this); } @@ -550,7 +602,7 @@ void MappingItem::send_event(int fliament_id) wxCommandEvent event(EVT_SET_FINISH_MAPPING); event.SetInt(m_tray_data.id); - wxString param = wxString::Format("%d|%d|%d|%s|%d", m_coloul.Red(), m_coloul.Green(), m_coloul.Blue(), number, fliament_id); + wxString param = wxString::Format("%d|%d|%d|%d|%s|%d", m_coloul.Red(), m_coloul.Green(), m_coloul.Blue(), m_coloul.Alpha(), number, fliament_id); event.SetString(param); event.SetEventObject(this->GetParent()->GetParent()); wxPostEvent(this->GetParent()->GetParent()->GetParent(), event); @@ -592,16 +644,11 @@ void MappingItem::render(wxDC &dc) // materials name dc.SetFont(::Label::Head_13); - auto txt_colour = m_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); + auto txt_colour = m_coloul.GetLuminance() < 0.6 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); txt_colour = m_unmatch ? wxColour(0xCE, 0xCE, 0xCE) : txt_colour; - + if (m_coloul.Alpha() == 0) txt_colour = wxColour(0x26, 0x2E, 0x30); dc.SetTextForeground(txt_colour); - /*if (dc.GetTextExtent(m_name).x > GetSize().x - 10) { - dc.SetFont(::Label::Body_10); - m_name = m_name.substr(0, 3) + "." + m_name.substr(m_name.length() - 1); - }*/ - auto txt_size = dc.GetTextExtent(m_tray_index); auto top = (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2 + FromDIP(8); dc.DrawText(m_tray_index, wxPoint((GetSize().x - txt_size.x) / 2, top)); @@ -628,16 +675,14 @@ void MappingItem::doRender(wxDC &dc) { dc.SetPen(m_coloul); dc.SetBrush(wxBrush(m_coloul)); - dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); -// if (m_coloul == *wxWHITE) { -// dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC), 1)); -//#ifdef __APPLE__ -// dc.DrawRectangle(1, 1, GetSize().x - 1, GetSize().y - 1); -//#else -// dc.DrawRectangle(0, 0, tray_size.x, tray_size.y); -//#endif // __APPLE__ -// } + if (m_coloul.Alpha() == 0) { + dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); + } + else { + dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); + } + wxColour side_colour = wxColour(0xE4E4E4); @@ -1116,8 +1161,11 @@ void MappingContainer::doRender(wxDC& dc) } AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent) - : DPIDialog(parent, wxID_ANY, _L("Filaments replace"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) + : DPIDialog(parent, wxID_ANY, _L("Auto Refill"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) { +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ SetBackgroundColour(*wxWHITE); create(); wxGetApp().UpdateDlgDarkUI(this); @@ -1125,14 +1173,13 @@ AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent) void AmsReplaceMaterialDialog::create() { - SetSize(wxSize(FromDIP(376), -1)); - SetMinSize(wxSize(FromDIP(376), -1)); - SetMaxSize(wxSize(FromDIP(376), -1)); + SetSize(wxSize(FromDIP(445), -1)); + SetMinSize(wxSize(FromDIP(445), -1)); + SetMaxSize(wxSize(FromDIP(445), -1)); // set icon for dialog std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetSizeHints(wxDefaultSize, wxDefaultSize); m_main_sizer = new wxBoxSizer(wxVERTICAL); auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -1140,8 +1187,31 @@ void AmsReplaceMaterialDialog::create() m_main_sizer->Add(m_top_line, 0, wxEXPAND, 0); - auto m_button_sizer = new wxBoxSizer(wxHORIZONTAL); + auto label_title = new Label(this, _L("Auto Refill")); + label_title->SetFont(Label::Head_14); + label_title->SetForegroundColour(0x00AE42); + label_txt = new Label(this, _L("When the current material run out, the printer will continue to print in the following order.")); + label_txt->SetFont(Label::Body_13); + label_txt->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3C"))); + label_txt->SetMinSize(wxSize(FromDIP(380), -1)); + label_txt->SetMaxSize(wxSize(FromDIP(380), -1)); + label_txt->Wrap(FromDIP(380)); + + m_scrollview_groups = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL | wxVSCROLL); + m_scrollview_groups->SetScrollRate(5, 5); + //m_scrollview_groups->SetMinSize(wxSize(400, 400)); + //m_scrollview_groups->SetMaxSize(wxSize(400, 400)); + m_scrollview_sizer = new wxBoxSizer(wxVERTICAL); + + m_groups_sizer = new wxWrapSizer( wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS ); + + m_scrollview_sizer->Add( m_groups_sizer, 0, wxALIGN_CENTER, 0 ); + m_scrollview_groups->SetSizer(m_scrollview_sizer); + m_scrollview_groups->Layout(); + + + auto m_button_sizer = new wxBoxSizer(wxHORIZONTAL); StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), @@ -1153,26 +1223,18 @@ void AmsReplaceMaterialDialog::create() StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - auto m_button_close = new Button(this, _L("Close")); - m_button_close->SetCornerRadius(FromDIP(11)); - m_button_close->SetBackgroundColor(btn_bg_white); - m_button_close->SetBorderColor(btn_bd_white); - m_button_close->SetTextColor(btn_text_white); - m_button_close->SetFont(Label::Body_13); - m_button_close->SetMinSize(wxSize(FromDIP(42), FromDIP(24))); - m_button_close->Bind(wxEVT_BUTTON, [this](auto& e) { - EndModal(wxCLOSE); - }); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); - m_button_sizer->Add(m_button_close, 0, wxALIGN_CENTER, 0); - - m_groups_sizer = new wxBoxSizer(wxVERTICAL); m_main_sizer->Add(0,0,0, wxTOP, FromDIP(12)); - m_main_sizer->Add(m_groups_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16)); + m_main_sizer->Add(label_title,0, wxLEFT, FromDIP(30)); + m_main_sizer->Add(0,0,0, wxTOP, FromDIP(4)); + m_main_sizer->Add(label_txt,0, wxLEFT, FromDIP(30)); + m_main_sizer->Add(0,0,0, wxTOP, FromDIP(16)); + m_main_sizer->Add(m_scrollview_groups, 1, wxALIGN_CENTER, 0); m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20)); - m_main_sizer->Add(m_button_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16)); + m_main_sizer->Add(m_button_sizer,0,wxALIGN_CENTER, FromDIP(16)); m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20)); @@ -1198,6 +1260,14 @@ std::vector AmsReplaceMaterialDialog::GetStatus(unsigned int status) return listStatus; } +void AmsReplaceMaterialDialog::update_mapping_result( std::vector result) +{ + m_tray_used.clear(); + for (int i = 0; i < result.size(); i++) { + m_tray_used.push_back(wxGetApp().transition_tridid(result[i].tray_id).ToStdString()); + } +} + void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj) { if (obj) {m_obj = obj;} @@ -1222,116 +1292,58 @@ void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj) catch (...) {} //creat group - int group_index = 1; + int group_index = 0; for (int filam : m_obj->filam_bak) { auto status_list = GetStatus(filam); - wxColour group_color; + std::map group_info; std::string group_material; + bool is_in_tray = false; //get color & material for (auto i = 0; i < status_list.size(); i++) { if (status_list[i] && tray_list[i] != nullptr) { - group_color = AmsTray::decode_color(tray_list[i]->color); + auto tray_name = wxGetApp().transition_tridid(i).ToStdString(); + auto it = std::find(m_tray_used.begin(), m_tray_used.end(), tray_name); + if (it != m_tray_used.end()) { + is_in_tray = true; + } + + group_info[tray_name] = AmsTray::decode_color(tray_list[i]->color); group_material = tray_list[i]->get_display_filament_type(); } } - m_groups_sizer->Add(create_split_line(wxString::Format("%s%d", _L("Group"), group_index), group_color, group_material, status_list), 0, wxEXPAND, 0); - m_groups_sizer->Add(0, 0, 0, wxTOP, FromDIP(12)); - group_index++; + if (is_in_tray || m_tray_used.size() <= 0) { + m_groups_sizer->Add(create_backup_group(wxString::Format("%s%d", _L("Group"), group_index + 1), group_info, group_material, status_list), 0, wxALL, FromDIP(10)); + group_index++; + } } + if (group_index > 0) { + auto height = 0; + if (group_index > 6) { + height = FromDIP(550); + } + else { + height = FromDIP(200) * (std::ceil(group_index / 2.0)); + } + m_scrollview_groups->SetMinSize(wxSize(FromDIP(400), height)); + m_scrollview_groups->SetMaxSize(wxSize(FromDIP(400), height)); + } else { + if (label_txt) + label_txt->SetLabelText(_L("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)")); + } + + m_scrollview_groups->Layout(); Layout(); Fit(); } -wxWindow* AmsReplaceMaterialDialog::create_split_line(wxString gname, wxColour col, wxString material, std::vector status_list) +AmsRMGroup* AmsReplaceMaterialDialog::create_backup_group(wxString gname, std::map group_info, wxString material, std::vector status_list) { - wxColour background_color = wxColour(0xF4F4F4); - - if (abs(col.Red() - background_color.Red()) <= 5 && - abs(col.Green() - background_color.Green()) <= 5 && - abs(col.Blue() - background_color.Blue()) <= 5) { - background_color = wxColour(0xE6E6E6); - } - - auto m_panel_group = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_panel_group->SetCornerRadius(FromDIP(4)); - m_panel_group->SetBackgroundColor(StateColor(std::pair(background_color, StateColor::Normal))); - - m_panel_group->SetSize(wxSize(FromDIP(344), -1)); - m_panel_group->SetMinSize(wxSize(FromDIP(344), -1)); - m_panel_group->SetMaxSize(wxSize(FromDIP(344), -1)); - - wxBoxSizer* group_sizer = new wxBoxSizer(wxVERTICAL); - - //group title - wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL); - auto group_name = new Label(m_panel_group, gname); - group_name->SetFont(::Label::Head_12); - - Button* material_info = new Button(m_panel_group, material); - material_info->SetFont(Label::Head_12); - material_info->SetCornerRadius(FromDIP(2)); - material_info->SetBorderColor(background_color); - - if (col.GetLuminance() < 0.5) - material_info->SetTextColor(*wxWHITE); - else - material_info->SetTextColor(0x6B6B6B); - - material_info->SetMinSize(wxSize(-1, FromDIP(24))); - material_info->SetBackgroundColor(col); - - - title_sizer->Add(group_name, 0, wxALIGN_CENTER, 0); - title_sizer->Add(0, 0, 0, wxLEFT, FromDIP(10)); - title_sizer->Add(material_info, 0, wxALIGN_CENTER, 0); - - - //group item - wxGridSizer* grid_Sizer = new wxGridSizer(0, 8, 0, 0); - - for (int i = 0; i < status_list.size(); i++) { - if (status_list[i]) { - AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize); - amsitem->set_color(col); - - //set current tray - if (!m_obj->m_tray_now.empty() && m_obj->m_tray_now == std::to_string(i)) { - amsitem->set_focus(true); - } - - amsitem->set_type(RMTYPE_NORMAL); - amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString()); - amsitem->SetBackgroundColour(background_color); - grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10)); - } - } - - //add the first tray - for (int i = 0; i < status_list.size(); i++) { - if (status_list[i]) { - AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize); - amsitem->set_color(col); - amsitem->set_type(RMTYPE_VIRTUAL); - amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString()); - amsitem->SetBackgroundColour(background_color); - grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10)); - break; - } - } - - group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); - group_sizer->Add(title_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12)); - group_sizer->Add(grid_Sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12)); - group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); - - m_panel_group->SetSizer(group_sizer); - m_panel_group->Layout(); - group_sizer->Fit(m_panel_group); - return m_panel_group; + auto grp = new AmsRMGroup(m_scrollview_groups, group_info, material, gname); + return grp; } void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt) @@ -1347,119 +1359,90 @@ void AmsReplaceMaterialDialog::on_dpi_changed(const wxRect& suggested_rect) } -AmsRMItem::AmsRMItem(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) -{ - wxWindow::Create(parent, id, pos, size); - - SetSize(wxSize(FromDIP(42), FromDIP(32))); - SetMinSize(wxSize(FromDIP(42), FromDIP(32))); - SetMaxSize(wxSize(FromDIP(42), FromDIP(32))); - - SetBackgroundColour(*wxWHITE); - - Bind(wxEVT_PAINT, &AmsRMItem::paintEvent, this); -} - -void AmsRMItem::paintEvent(wxPaintEvent& evt) -{ - wxPaintDC dc(this); - render(dc); -} - -void AmsRMItem::render(wxDC& dc) -{ -#ifdef __WXMSW__ - wxSize size = GetSize(); - wxMemoryDC memdc; - wxBitmap bmp(size.x, size.y); - memdc.SelectObject(bmp); - memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); - - { - wxGCDC dc2(memdc); - doRender(dc2); - } - - memdc.SelectObject(wxNullBitmap); - dc.DrawBitmap(bmp, 0, 0); -#else - doRender(dc); -#endif -} - -void AmsRMItem::doRender(wxDC& dc) -{ - wxSize size = GetSize(); - - if (m_type == RMTYPE_NORMAL) { - dc.SetPen(wxPen(m_color, 2)); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - } - else { - dc.SetPen(wxPen(m_color, 2, wxSHORT_DASH)); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - } - - //top bottom line - dc.DrawLine(FromDIP(0), FromDIP(4), size.x - FromDIP(5), FromDIP(4)); - dc.DrawLine(FromDIP(0), size.y - FromDIP(4), size.x - FromDIP(5), size.y - FromDIP(4)); - - //left right line - dc.DrawLine(FromDIP(1), FromDIP(4), FromDIP(1), FromDIP(11)); - dc.DrawLine(FromDIP(1), FromDIP(22), FromDIP(1), size.y - FromDIP(4)); - - dc.DrawLine(size.x - FromDIP(5), FromDIP(4), size.x - FromDIP(5), FromDIP(11)); - dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(5), size.y - FromDIP(4)); - - //delta - dc.DrawLine(FromDIP(0), FromDIP(11), FromDIP(5), size.y / 2); - dc.DrawLine(FromDIP(0), FromDIP(22), FromDIP(5), size.y / 2); - - dc.DrawLine(size.x - FromDIP(5), FromDIP(11), size.x - FromDIP(1), size.y / 2); - dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(1), size.y / 2); - - - if (m_focus) { - dc.SetPen(wxPen(wxColour(0x00AE42), 2)); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawLine(FromDIP(0), FromDIP(1), size.x - FromDIP(5), FromDIP(1)); - dc.DrawLine(FromDIP(0), size.y - FromDIP(1), size.x - FromDIP(5), size.y - FromDIP(1)); - } - - if (m_selected) { - } - - auto tsize = dc.GetMultiLineTextExtent(m_index); - auto tpot = wxPoint((size.x - tsize.x) / 2 - FromDIP(2), (size.y - tsize.y) / 2 + FromDIP(2)); - dc.SetTextForeground(wxColour(0x6B6B6B)); - dc.SetFont(::Label::Head_12); - dc.DrawText(m_index, tpot); -} - -AmsRMArrow::AmsRMArrow(wxWindow* parent) +AmsRMGroup::AmsRMGroup(wxWindow* parent, std::map group_info, wxString mname, wxString group_index) { +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + m_group_info.clear(); + m_group_info = group_info; + m_material_name = mname; + m_group_index = group_index; wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize); + SetSize(wxSize(FromDIP(166), FromDIP(166))); + SetMinSize(wxSize(FromDIP(166), FromDIP(166))); + SetMaxSize(wxSize(FromDIP(166), FromDIP(166))); SetBackgroundColour(*wxWHITE); - Bind(wxEVT_PAINT, &AmsRMArrow::paintEvent, this); - m_bitmap_left = ScalableBitmap(this, "replace_arrow_left", 7); - m_bitmap_right = ScalableBitmap(this, "replace_arrow_right", 7); - m_bitmap_down = ScalableBitmap(this, "replace_arrow_down", 7); + backup_current_use_white = ScalableBitmap(this, "backup_current_use1",8); + backup_current_use_black = ScalableBitmap(this, "backup_current_use2", 8); + bitmap_backup_tips_0 = ScalableBitmap(this, "backup_tips_img", 90); + bitmap_editable = ScalableBitmap(this, "ams_editable", 14); + bitmap_bg = ScalableBitmap(this, "back_up_ts_bk", 162); + bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14); - - SetSize(wxSize(FromDIP(16), FromDIP(32))); - SetMinSize(wxSize(FromDIP(16), FromDIP(32))); - SetMaxSize(wxSize(FromDIP(16), FromDIP(32))); + Bind(wxEVT_PAINT, &AmsRMGroup::paintEvent, this); + Bind(wxEVT_LEFT_DOWN, &AmsRMGroup::on_mouse_move, this); + wxGetApp().UpdateDarkUI(this); } -void AmsRMArrow::paintEvent(wxPaintEvent& evt) +double AmsRMGroup::GetAngle(wxPoint pointA, wxPoint pointB) +{ + double deltaX = pointA.x - pointB.x; + double deltaY = pointA.y - pointB.y; + double angle = atan2(deltaY, deltaX); + + angle = angle * 180.0 / M_PI; + + if (angle < 0) + angle += 360.0; + + return angle; +} + +void AmsRMGroup::on_mouse_move(wxMouseEvent& evt) +{ + wxSize size = GetSize(); + auto mouseX = evt.GetPosition().x; + auto mouseY = evt.GetPosition().y; + + auto click_angle = 360.0 - GetAngle(wxPoint(mouseX,mouseY), wxPoint(size.x / 2, size.x / 2)); + + + float ev_angle = 360.0 / m_group_info.size(); + float startAngle = 0.0; + float endAngle = 0.0; + + for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) { + std::string tray_name = iter->first; + wxColour tray_color = iter->second; + + int x = size.x / 2; + int y = size.y / 2; + int radius = size.x / 2; + endAngle += ev_angle; + + if (click_angle >= startAngle && click_angle < endAngle) { + //to do + set_index(tray_name); + Refresh(); + return; + } + + startAngle += ev_angle; + } + + evt.Skip(); +} + +void AmsRMGroup::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); render(dc); } -void AmsRMArrow::render(wxDC& dc) +void AmsRMGroup::render(wxDC& dc) { #ifdef __WXMSW__ wxSize size = GetSize(); @@ -1480,17 +1463,114 @@ void AmsRMArrow::render(wxDC& dc) #endif } -void AmsRMArrow::doRender(wxDC& dc) +wxPoint AmsRMGroup::CalculateEndpoint(const wxPoint& startPoint, int angle, int length) +{ + int endX = startPoint.x + length * cos(angle * M_PI / 180); + int endY = startPoint.y + length * sin(angle * M_PI / 180); + return wxPoint(endX, endY); +} + +void AmsRMGroup::doRender(wxDC& dc) { wxSize size = GetSize(); + + float center_mask_radius = FromDIP(52); + float selected_radius = FromDIP(53); - dc.SetPen(wxPen(wxColour(0, 174, 66))); - dc.SetBrush(*wxTRANSPARENT_BRUSH); + float ev_angle = 360.0 / m_group_info.size(); + float startAngle = 0.0; + float endAngle = 0.0; + dc.DrawBitmap(bitmap_bg.bmp(), wxPoint((size.x - bitmap_bg.GetBmpSize().x) / 2, (size.y - bitmap_bg.GetBmpSize().y) / 2)); - dc.SetPen(wxPen(wxColour(0xACACAC))); - dc.SetBrush(wxBrush(wxColour(0xACACAC))); - dc.DrawCircle(size.x / 2, size.y / 2, FromDIP(7)); + for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) { + std::string tray_name = iter->first; + wxColour tray_color = iter->second; + + dc.SetPen(*wxTRANSPARENT_PEN); + + if (tray_color == *wxWHITE) dc.SetPen(wxPen(wxColour(0xEEEEEE), 2)); + dc.SetBrush(wxBrush(tray_color)); + + int x = size.x / 2; + int y = size.y / 2; + int radius = size.x / 2 - FromDIP(2); + endAngle += ev_angle; + + + //draw body + if (tray_color.Alpha() != 0) { + dc.DrawEllipticArc(x - radius, y - radius, radius * 2, radius * 2, startAngle, endAngle); + if (tray_color == *wxWHITE) dc.DrawEllipticArc(x - center_mask_radius, y - center_mask_radius, center_mask_radius * 2, center_mask_radius * 2, startAngle, endAngle); + } + + //draw selected + if (!m_selected_index.empty() && m_selected_index == tray_name) { + dc.SetPen(wxPen(0xCECECE, 2)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawEllipticArc(x - radius, y - radius, radius * 2, radius * 2, startAngle, endAngle); + dc.DrawEllipticArc(x - selected_radius, y - selected_radius,selected_radius * 2, selected_radius * 2, startAngle, endAngle); + } + + //... + startAngle += ev_angle; + } + + //draw text + startAngle = 0.0; + endAngle = 0.0; + for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) { + std::string tray_name = iter->first; + wxColour tray_color = iter->second; + + int x = size.x / 2; + int y = size.y / 2; + float radius = size.x / 2 - 15.0; + endAngle += ev_angle; + + float midAngle = (startAngle + endAngle) / 2; + float x_center = size.x / 2 + radius * cos(midAngle * M_PI / 180.0); + float y_center = size.y / 2 + radius * sin(midAngle * M_PI / 180.0); + + //draw tray + dc.SetFont(::Label::Body_12); + auto text_size = dc.GetTextExtent(tray_name); + dc.SetTextForeground(tray_color.GetLuminance() < 0.6 ? *wxWHITE : wxColour(0x262E30)); + dc.DrawText(tray_name, x_center - text_size.x / 2, size.y - y_center - text_size.y / 2); + + //draw split line + dc.SetPen(wxPen(*wxWHITE, 2)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + auto pos_sp_start = CalculateEndpoint(wxPoint(x, y), (360 - startAngle), size.x / 2 - FromDIP(3)); + dc.DrawLine(wxPoint(x, y), pos_sp_start); + + //draw current + //dc.DrawBitmap(backup_current_use_white.bmp(), x_center - text_size.x / 2 + FromDIP(3), size.y - y_center - text_size.y / 2 + FromDIP(11)); + //... + startAngle += ev_angle; + } + + //draw center mask + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(*wxWHITE)); + + int x = size.x / 2; + int y = size.y / 2; + dc.DrawEllipticArc(x - center_mask_radius, y - center_mask_radius, center_mask_radius * 2, center_mask_radius * 2, 0, 360); + + //draw center icon + dc.DrawBitmap(bitmap_backup_tips_0.bmp(), wxPoint((size.x - bitmap_backup_tips_0.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_0.GetBmpSize().y) / 2)); + //dc.DrawBitmap(bitmap_backup_tips_1.bmp(), wxPoint((size.x - bitmap_backup_tips_1.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_1.GetBmpSize().y) / 2)); + + //draw material + dc.SetTextForeground(wxColour(0x323A3D)); + dc.SetFont(Label::Head_15); + auto text_size = dc.GetTextExtent(m_material_name); + dc.DrawText(m_material_name, (size.x - text_size.x) / 2,(size.y - text_size.y) / 2 - FromDIP(12)); + + dc.SetFont(Label::Body_13); + text_size = dc.GetTextExtent(m_group_index); + dc.DrawText(m_group_index, (size.x - text_size.x) / 2, (size.y - text_size.y) / 2 + FromDIP(10)); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index d1094a385..acfc8cd3e 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -75,6 +75,7 @@ public: ScalableBitmap m_arraw_bitmap_gray; ScalableBitmap m_arraw_bitmap_white; + ScalableBitmap m_transparent_mitem; bool m_selected {false}; bool m_warning{false}; @@ -82,6 +83,8 @@ public: void msw_rescale(); void set_ams_info(wxColour col, wxString txt); + void disable(); + void enable(); void on_normal(); void on_selected(); void on_warning(); @@ -106,6 +109,7 @@ public: wxColour m_coloul; wxString m_name; TrayData m_tray_data; + ScalableBitmap m_transparent_mapping_item; bool m_unmatch{false}; void msw_rescale(); @@ -242,6 +246,35 @@ public: }; +class AmsRMGroup : public wxWindow +{ +public: + AmsRMGroup(wxWindow* parent, std::map group_info, wxString mname, wxString group_index); + ~AmsRMGroup() {}; + +public: + void set_index(std::string index) {m_selected_index = index;}; + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void on_mouse_move(wxMouseEvent& evt); + + double GetAngle(wxPoint pointA, wxPoint pointB); + wxPoint CalculateEndpoint(const wxPoint& startPoint, int angle, int length); +private: + std::map m_group_info; + std::string m_selected_index; + ScalableBitmap backup_current_use_white; + ScalableBitmap backup_current_use_black; + ScalableBitmap bitmap_backup_tips_0; + ScalableBitmap bitmap_backup_tips_1; + ScalableBitmap bitmap_editable; + ScalableBitmap bitmap_bg; + ScalableBitmap bitmap_editable_light; + wxString m_material_name; + wxString m_group_index; +}; + class AmsReplaceMaterialDialog : public DPIDialog { public: @@ -249,68 +282,25 @@ public: ~AmsReplaceMaterialDialog() {}; public: - wxWindow* create_split_line(wxString gname, wxColour col, wxString material, std::vector status_list); + AmsRMGroup* create_backup_group(wxString gname, std::map group_info, wxString material, std::vector status_list); void create(); void update_machine_obj(MachineObject* obj); - void on_left_down(wxMouseEvent& evt); + void update_mapping_result(std::vector result); void paintEvent(wxPaintEvent& evt); - void on_dpi_changed(const wxRect &suggested_rect) override; + void on_dpi_changed(const wxRect& suggested_rect) override; std::vector GetStatus(unsigned int status); public: - wxBoxSizer* m_main_sizer{nullptr}; - wxBoxSizer* m_groups_sizer{nullptr}; - - MachineObject* m_obj{nullptr}; + wxScrolledWindow* m_scrollview_groups{ nullptr }; + wxBoxSizer* m_scrollview_sizer{ nullptr }; + wxBoxSizer* m_main_sizer{ nullptr }; + wxWrapSizer* m_groups_sizer{ nullptr }; + MachineObject* m_obj{ nullptr }; + std::vector m_tray_used; + Label* label_txt{nullptr}; }; -enum RMTYPE { - RMTYPE_NORMAL = 0, - RMTYPE_VIRTUAL = 1, -}; - -class AmsRMItem : public wxWindow -{ -public: - AmsRMItem(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); - ~AmsRMItem() {}; - -public: - void set_color(wxColour col) {m_color = col;}; - void set_type(RMTYPE type) {m_type = type;}; - void set_index(std::string index) {m_index = index;}; - void set_focus(bool focus) {m_focus = focus;}; - - void paintEvent(wxPaintEvent& evt); - void render(wxDC& dc); - void doRender(wxDC& dc); - -private: - RMTYPE m_type; - wxColour m_color; - std::string m_index; - bool m_focus = false; - bool m_selected = false; -}; - -class AmsRMArrow : public wxWindow -{ -public: - AmsRMArrow(wxWindow* parent); - ~AmsRMArrow() {}; - -public: - void paintEvent(wxPaintEvent& evt); - void render(wxDC& dc); - void doRender(wxDC& dc); - -private: - ScalableBitmap m_bitmap_left; - ScalableBitmap m_bitmap_right; - ScalableBitmap m_bitmap_down; -}; - wxDECLARE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index fcf5205e8..7c3d640d6 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -128,7 +128,7 @@ void BBLStatusBar::clear_percent() } -void BBLStatusBar::show_networking_test(wxString msg) +void BBLStatusBar::show_error_info(wxString msg, int code, wxString description, wxString extra) { } diff --git a/src/slic3r/GUI/BBLStatusBar.hpp b/src/slic3r/GUI/BBLStatusBar.hpp index 20cd96699..02a3af3ca 100644 --- a/src/slic3r/GUI/BBLStatusBar.hpp +++ b/src/slic3r/GUI/BBLStatusBar.hpp @@ -45,7 +45,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test(wxString msg) override; + void show_error_info(wxString msg, int code, wxString description, wxString extra) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarBind.cpp b/src/slic3r/GUI/BBLStatusBarBind.cpp index 76eafce69..73151266b 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.cpp +++ b/src/slic3r/GUI/BBLStatusBarBind.cpp @@ -24,19 +24,9 @@ BBLStatusBarBind::BBLStatusBarBind(wxWindow *parent, int id) m_self->SetBackgroundColour(wxColour(255,255,255)); m_self->SetMinSize(wxSize(m_self->FromDIP(450), m_self->FromDIP(30))); - - //wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL); - - /* m_status_text = new wxStaticText(m_self, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0); - m_status_text->SetForegroundColour(wxColour(107, 107, 107)); - m_status_text->SetFont(::Label::Body_13); - m_status_text->Wrap(-1); - m_sizer_body->Add(m_status_text, 0, 0, 0);*/ - m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(m_self->FromDIP(400), m_self->FromDIP(6)), wxGA_HORIZONTAL); m_prog->SetValue(0); - m_stext_percent = new wxStaticText(m_self, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0); m_stext_percent->SetForegroundColour(wxColour(107, 107, 107)); m_stext_percent->SetFont(::Label::Body_13); @@ -46,13 +36,9 @@ BBLStatusBarBind::BBLStatusBarBind(wxWindow *parent, int id) m_sizer->Add(0, 0, 1, wxEXPAND, 0); m_sizer->Add(m_stext_percent, 1, wxALIGN_CENTER, 0); - - //m_sizer->Add(m_sizer_bottom, 1, wxALIGN_CENTER, 0); - m_self->SetSizer(m_sizer); m_self->Layout(); m_sizer->Fit(m_self); - //set_prog_block(); } void BBLStatusBarBind::set_prog_block() @@ -97,7 +83,7 @@ void BBLStatusBarBind::clear_percent() } -void BBLStatusBarBind::show_networking_test(wxString msg) +void BBLStatusBarBind::show_error_info(wxString msg, int code, wxString description, wxString extra) { } diff --git a/src/slic3r/GUI/BBLStatusBarBind.hpp b/src/slic3r/GUI/BBLStatusBarBind.hpp index 2752a7bd4..ce7a39457 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.hpp +++ b/src/slic3r/GUI/BBLStatusBarBind.hpp @@ -48,7 +48,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test(wxString msg) override; + void show_error_info(wxString msg, int code, wxString description, wxString extra) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index b162412ac..35ebd0f1b 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -16,6 +16,7 @@ namespace Slic3r { +wxDEFINE_EVENT(EVT_SHOW_ERROR_INFO, wxCommandEvent); BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) : m_self{new wxPanel(parent, id == -1 ? wxID_ANY : id)} @@ -29,20 +30,32 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_status_text = new wxStaticText(m_self, wxID_ANY, wxEmptyString); m_status_text->SetForegroundColour(wxColour(107, 107, 107)); m_status_text->SetFont(::Label::Body_13); - m_status_text->SetSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46))); - m_status_text->SetMaxSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46))); + m_status_text->SetMaxSize(wxSize(m_self->FromDIP(360), m_self->FromDIP(40))); m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(-1, m_self->FromDIP(6)), wxGA_HORIZONTAL); m_prog->SetMinSize(wxSize(m_self->FromDIP(300),m_self->FromDIP(6))); m_prog->SetValue(0); - StateColor btn_bd_white(std::pair(*wxWHITE, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + //StateColor btn_bd_white(std::pair(*wxWHITE, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + StateColor btn_bt_white(std::pair(wxColour(0x90, 0x90, 0x90), StateColor::Disabled), + std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + + StateColor btn_txt_white(std::pair(wxColour("#FFFFFE"), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Normal)); m_cancelbutton = new Button(m_self, _L("Cancel")); + m_cancelbutton->SetSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); m_cancelbutton->SetMaxSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); - m_cancelbutton->SetBackgroundColor(wxColour(255, 255, 255)); + m_cancelbutton->SetBackgroundColor(btn_bt_white); m_cancelbutton->SetBorderColor(btn_bd_white); + m_cancelbutton->SetTextColor(btn_txt_white); m_cancelbutton->SetCornerRadius(m_self->FromDIP(12)); m_cancelbutton->Bind(wxEVT_BUTTON, [this](wxCommandEvent &evt) { @@ -56,33 +69,62 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_stext_percent->SetFont(::Label::Body_13); m_stext_percent->Wrap(-1); - m_hyperlink = new Label(m_self, _L("Check the status of current system services")); - m_hyperlink->SetForegroundColour(0x00AE42); - m_hyperlink->SetFont(::Label::Body_12); - m_hyperlink->Hide(); + m_sizer_status_text = new wxBoxSizer(wxHORIZONTAL); + m_link_show_error = new Label(m_self, _L("Check the reason")); + m_link_show_error->SetForegroundColour(wxColour(0x6b6b6b)); + m_link_show_error->SetFont(::Label::Head_13); + + m_bitmap_show_error_close = create_scaled_bitmap("link_more_error_close", nullptr, 7); + m_bitmap_show_error_open = create_scaled_bitmap("link_more_error_open", nullptr, 7); + m_static_bitmap_show_error = new wxStaticBitmap(m_self, wxID_ANY, m_bitmap_show_error_open, wxDefaultPosition, wxSize(m_self->FromDIP(7), m_self->FromDIP(7))); + + m_link_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_HAND); }); + m_link_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_ARROW); }); + m_link_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); } + else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); } + wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_ERROR_INFO); + wxQueueEvent(this->m_self->GetParent(), evt); + }); + + + m_link_show_error->Hide(); + m_static_bitmap_show_error->Hide(); + + + m_static_bitmap_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_HAND); }); + m_static_bitmap_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_ARROW); }); + m_static_bitmap_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (!m_show_error_info_state) {m_show_error_info_state = true;m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close);} + else {m_show_error_info_state = false;m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open);} + wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_ERROR_INFO); + wxQueueEvent(this->m_self->GetParent(), evt); + }); + + + m_sizer_status_text->Add(m_link_show_error, 0, wxLEFT | wxALIGN_CENTER, 0); + m_sizer_status_text->Add(m_static_bitmap_show_error, 0, wxLEFT | wxTOP| wxALIGN_CENTER, m_self->FromDIP(2)); + m_sizer_bottom->Add(m_prog, 1, wxALIGN_CENTER, 0); m_sizer_bottom->Add(m_stext_percent, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); - m_sizer_bottom->Add(m_hyperlink, 0, wxALIGN_CENTER, 10); + m_sizer_bottom->Add(m_sizer_status_text, 0, wxALIGN_CENTER, 10); m_sizer_bottom->Add(0, 0, 1, wxEXPAND, 0); m_sizer_bottom->Add(m_cancelbutton, 0, wxALIGN_CENTER, 0); - - m_sizer_body->Add(m_status_text, 0, wxALL, 0); - m_sizer_body->Add(0, 0, 0, wxTOP, 1); - m_sizer_body->Add(m_sizer_bottom, 1, wxEXPAND, 0); + m_sizer_body->Add(0, 0, 1, wxEXPAND, 0); + m_sizer_body->Add(m_status_text, 0, wxEXPAND, 0); + m_sizer_body->Add(m_sizer_bottom, 0, wxEXPAND, 0); + m_sizer_body->Add(0, 0, 1, wxEXPAND, 0); m_sizer->Add(m_sizer_body, 1, wxALIGN_CENTER, 0); m_self->SetSizer(m_sizer); m_self->Layout(); m_sizer->Fit(m_self); - //set_prog_block(); } void BBLStatusBarSend::set_prog_block() { - //block_left->SetPosition(wxPoint(0, 0)); - //block_right->SetPosition(wxPoint(m_prog->GetSize().GetWidth() - 2, 0)); } int BBLStatusBarSend::get_progress() const @@ -92,10 +134,7 @@ int BBLStatusBarSend::get_progress() const void BBLStatusBarSend::set_progress(int val) { - //set_prog_block(); - - if(val < 0) - return; + if(val < 0) return; //add the logic for arrange/orient jobs, which don't call stop_busy if (!m_prog->IsShown()) { @@ -126,48 +165,14 @@ void BBLStatusBarSend::clear_percent() m_cancelbutton->Hide(); } -void BBLStatusBarSend::show_networking_test(wxString msg) +void BBLStatusBarSend::show_error_info(wxString msg, int code, wxString description, wxString extra) { - std::string url; - std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); - - - if (country_code == "US") { - url = "https://status.bambulab.com"; - } - else if (country_code == "CN") { - url = "https://status.bambulab.cn"; - } - else if (country_code == "ENV_CN_DEV") { - url = "https://status.bambu-lab.com"; - } - else if (country_code == "ENV_CN_QA") { - url = "https://status.bambu-lab.com"; - } - else if (country_code == "ENV_CN_PRE") { - url = "https://status.bambu-lab.com"; - } - else { - url = "https://status.bambu-lab.com"; - } - - - m_hyperlink->Bind(wxEVT_LEFT_DOWN, [this, url](auto& e) { - wxLaunchDefaultBrowser(url); - }); - - m_hyperlink->Bind(wxEVT_ENTER_WINDOW, [this, url](auto& e) { - m_hyperlink->SetCursor(wxCURSOR_HAND); - }); - - m_hyperlink->Bind(wxEVT_LEAVE_WINDOW, [this, url](auto& e) { - m_hyperlink->SetCursor(wxCURSOR_ARROW); - }); - set_status_text(msg); m_prog->Hide(); m_stext_percent->Hide(); - m_hyperlink->Show(); + m_link_show_error->Show(); + m_static_bitmap_show_error->Show(); + m_cancelbutton->Show(); m_self->Layout(); m_sizer->Layout(); @@ -283,9 +288,15 @@ void BBLStatusBarSend::set_status_text(const wxString& txt) //auto txtss = "Sending the printing task has timed out.\nPlease try again!"; //auto txtss = "The printing project is being uploaded... 25%%"; //m_status_text->SetLabelText(txtss); - wxString str; - format_text(m_status_text, m_self->FromDIP(300), txt, str); - m_status_text->SetLabelText(str); + //wxString str; + //format_text(m_status_text, m_self->FromDIP(300), txt, str); + + if (m_status_text->GetTextExtent(txt).x > m_self->FromDIP(360)) { + m_status_text->SetSize(m_self->FromDIP(360), m_self->FromDIP(40)); + } + m_status_text->SetLabelText(txt); + m_status_text->Wrap(m_self->FromDIP(360)); + m_status_text->Layout(); m_self->Layout(); //if (is_english_text(str)) m_status_text->Wrap(m_self->FromDIP(280)); } @@ -303,6 +314,8 @@ void BBLStatusBarSend::set_status_text(const std::string& txt) void BBLStatusBarSend::set_status_text(const char *txt) { this->set_status_text(wxString::FromUTF8(txt)); + get_panel()->GetParent()->Layout(); + get_panel()->GetParent()->Update(); } void BBLStatusBarSend::msw_rescale() { @@ -317,9 +330,7 @@ wxString BBLStatusBarSend::get_status_text() const bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percent, bool yield) { - //auto test_txt = _L("Unkown Error.") + _L("status=150, body=Timeout was reached: Connection timed out after 10009 milliseconds [Error 28]"); set_status_text(msg); - if (percent >= 0) this->set_progress(percent); @@ -331,9 +342,11 @@ bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percen void BBLStatusBarSend::reset() { - m_hyperlink->Hide(); + m_link_show_error->Hide(); + m_static_bitmap_show_error->Hide(); m_prog->Show(); m_stext_percent->Show(); + m_cancelbutton->Enable(); m_cancelbutton->Show(); m_was_cancelled = false; @@ -364,4 +377,14 @@ void BBLStatusBarSend::change_button_label(wxString name) m_cancelbutton->SetLabel(name); } +void BBLStatusBarSend::disable_cancel_button() +{ + m_cancelbutton->Disable(); +} + +void BBLStatusBarSend::enable_cancel_button() +{ + m_cancelbutton->Enable(); +} + } diff --git a/src/slic3r/GUI/BBLStatusBarSend.hpp b/src/slic3r/GUI/BBLStatusBarSend.hpp index 190e56e5e..e5eff5202 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.hpp +++ b/src/slic3r/GUI/BBLStatusBarSend.hpp @@ -30,7 +30,11 @@ class BBLStatusBarSend : public ProgressIndicator { wxPanel * m_self; // we cheat! It should be the base class but: perl! wxGauge * m_prog; - Label * m_hyperlink; + Label * m_link_show_error; + wxBoxSizer* m_sizer_status_text; + wxStaticBitmap* m_static_bitmap_show_error; + wxBitmap m_bitmap_show_error_close; + wxBitmap m_bitmap_show_error_open; Button * m_cancelbutton; wxStaticText *m_status_text; wxStaticText *m_stext_percent; @@ -51,7 +55,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test(wxString msg) override; + void show_error_info(wxString msg, int code, wxString description, wxString extra) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); @@ -80,7 +84,10 @@ public: void hide_cancel_button(); void change_button_label(wxString name); + void disable_cancel_button(); + void enable_cancel_button(); private: + bool m_show_error_info_state = false; bool m_busy = false; bool m_was_cancelled = false; CancelFn m_cancel_cb; @@ -91,6 +98,8 @@ namespace GUI { using Slic3r::BBLStatusBarSend; } +wxDECLARE_EVENT(EVT_SHOW_ERROR_INFO, wxCommandEvent); + } // namespace Slic3r #endif // BBLSTATUSBAR_HPP diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 52b6dd1ac..63f1e9aa3 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -195,7 +195,8 @@ void BBLTopbar::Init(wxFrame* parent) m_frame = parent; m_skip_popup_file_menu = false; m_skip_popup_dropdown_menu = false; - m_skip_popup_calib_menu = false; + m_skip_popup_calib_menu = false; + wxInitAllImageHandlers(); this->AddSpacer(5); @@ -244,9 +245,9 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(10)); - wxBitmap calib_bitmap = create_scaled_bitmap("calib_sf", nullptr, TOPBAR_ICON_SIZE); + wxBitmap calib_bitmap = create_scaled_bitmap("calib_sf", nullptr, TOPBAR_ICON_SIZE); wxBitmap calib_bitmap_inactive = create_scaled_bitmap("calib_sf_inactive", nullptr, TOPBAR_ICON_SIZE); - m_calib_item = this->AddTool(ID_CALIB, _L("Calibration"), calib_bitmap); + m_calib_item = this->AddTool(ID_CALIB, _L("Calibration"), calib_bitmap); m_calib_item->SetDisabledBitmap(calib_bitmap_inactive); this->AddSpacer(FromDIP(10)); @@ -326,12 +327,6 @@ BBLTopbar::~BBLTopbar() m_file_menu = nullptr; } -void BBLTopbar::show_publish_button(bool show) -{ - this->EnableTool(m_publish_item->GetId(), show); - Refresh(); -} - void BBLTopbar::OnOpenProject(wxAuiToolBarEvent& event) { MainFrame* main_frame = dynamic_cast(m_frame); @@ -339,6 +334,12 @@ void BBLTopbar::OnOpenProject(wxAuiToolBarEvent& event) plater->load_project(); } +void BBLTopbar::show_publish_button(bool show) +{ + this->EnableTool(m_publish_item->GetId(), show); + Refresh(); +} + void BBLTopbar::OnSaveProject(wxAuiToolBarEvent& event) { MainFrame* main_frame = dynamic_cast(m_frame); @@ -360,7 +361,7 @@ void BBLTopbar::OnRedo(wxAuiToolBarEvent& event) plater->redo(); } -void BBLTopbar::Enable3DEditorItems() +void BBLTopbar::EnableUndoRedoItems() { this->EnableTool(m_undo_item->GetId(), true); this->EnableTool(m_redo_item->GetId(), true); @@ -368,7 +369,7 @@ void BBLTopbar::Enable3DEditorItems() Refresh(); } -void BBLTopbar::Disable3DEditorItems() +void BBLTopbar::DisableUndoRedoItems() { this->EnableTool(m_undo_item->GetId(), false); this->EnableTool(m_redo_item->GetId(), false); @@ -381,6 +382,15 @@ void BBLTopbar::SaveNormalRect() m_normalRect = m_frame->GetRect(); } +void BBLTopbar::ShowCalibrationButton(bool show) +{ + m_calib_item->GetSizerItem()->Show(show); + m_sizer->Layout(); + if (!show) + m_calib_item->GetSizerItem()->SetDimension({-1000, 0}, {0, 0}); + Refresh(); +} + void BBLTopbar::OnModelStoreClicked(wxAuiToolBarEvent& event) { //GUI::wxGetApp().load_url(wxString(wxGetApp().app_config->get_web_host_url() + MODEL_STORE_URL)); @@ -393,12 +403,15 @@ void BBLTopbar::OnPublishClicked(wxAuiToolBarEvent& event) return; } + // record + json j; + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) + agent->track_event("enter_model_mall", j.dump()); + //no more check //if (GUI::wxGetApp().plater()->model().objects.empty()) return; - if (!wxGetApp().check_login()) - return; - #ifdef ENABLE_PUBLISHING wxGetApp().plater()->show_publish_dialog(); #endif @@ -597,17 +610,16 @@ void BBLTopbar::OnDropdownToolItem(wxAuiToolBarEvent& evt) tb->SetToolSticky(evt.GetId(), false); } -void BBLTopbar::OnCalibToolItem(wxAuiToolBarEvent& evt) +void BBLTopbar::OnCalibToolItem(wxAuiToolBarEvent &evt) { - wxAuiToolBar* tb = static_cast(evt.GetEventObject()); + wxAuiToolBar *tb = static_cast(evt.GetEventObject()); tb->SetToolSticky(evt.GetId(), true); if (!m_skip_popup_calib_menu) { auto rec = this->GetToolRect(ID_CALIB); PopupMenu(&m_calib_menu, wxPoint(rec.GetLeft(), this->GetSize().GetHeight() - 2)); - } - else { + } else { m_skip_popup_calib_menu = false; } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index c85395586..78820813a 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -16,7 +16,6 @@ public: BBLTopbar(wxFrame* parent); void Init(wxFrame *parent); ~BBLTopbar(); - void show_publish_button(bool show); void UpdateToolbarWidth(int width); void Rescale(); void OnIconize(wxAuiToolBarEvent& event); @@ -24,7 +23,7 @@ public: void OnCloseFrame(wxAuiToolBarEvent& event); void OnFileToolItem(wxAuiToolBarEvent& evt); void OnDropdownToolItem(wxAuiToolBarEvent& evt); - void OnCalibToolItem(wxAuiToolBarEvent& evt); + void OnCalibToolItem(wxAuiToolBarEvent &evt); void OnMouseLeftDClock(wxMouseEvent& mouse); void OnMouseLeftDown(wxMouseEvent& event); void OnMouseLeftUp(wxMouseEvent& event); @@ -32,6 +31,7 @@ public: void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); void OnMenuClose(wxMenuEvent& event); void OnOpenProject(wxAuiToolBarEvent& event); + void show_publish_button(bool show); void OnSaveProject(wxAuiToolBarEvent& event); void OnUndo(wxAuiToolBarEvent& event); void OnRedo(wxAuiToolBarEvent& event); @@ -43,17 +43,19 @@ public: void SetFileMenu(wxMenu* file_menu); void AddDropDownSubMenu(wxMenu* sub_menu, const wxString& title); void AddDropDownMenuItem(wxMenuItem* menu_item); - wxMenu* GetTopMenu(); + wxMenu *GetTopMenu(); wxMenu *GetCalibMenu(); void SetTitle(wxString title); void SetMaximizedSize(); void SetWindowSize(); - void Enable3DEditorItems(); - void Disable3DEditorItems(); + void EnableUndoRedoItems(); + void DisableUndoRedoItems(); void SaveNormalRect(); + void ShowCalibrationButton(bool show = true); + private: wxFrame* m_frame; wxAuiToolBarItem* m_file_menu_item; diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index b5b8ffcd7..28db0b6f7 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -120,7 +120,7 @@ public: // Get the current print. It is either m_fff_print or m_sla_print. const PrintBase* current_print() const { return m_print; } const Print* fff_print() const { return m_fff_print; } - Print* fff_print() { return m_fff_print; } + Print * fff_print() { return m_fff_print; } const SLAPrint* sla_print() const { return m_sla_print; } // Take the project path (if provided), extract the name of the project, run it through the macro processor and save it next to the project file. // If the project_path is empty, just run output_filepath(). diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 4bde0fa19..ecaa84569 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -5,20 +5,61 @@ #include #include #include "wx/evtloop.h" - +#include +#include +#include #include "libslic3r/Model.hpp" #include "libslic3r/Polygon.hpp" #include "MainFrame.hpp" #include "GUI_App.hpp" #include "Plater.hpp" +#include "Widgets/WebView.hpp" namespace Slic3r { namespace GUI { +wxString get_fail_reason(int code) +{ + if (code == BAMBU_NETWORK_ERR_BIND_CREATE_SOCKET_FAILED) + return _L("Failed to create socket"); + + else if (code == BAMBU_NETWORK_ERR_BIND_SOCKET_CONNECT_FAILED) + return _L("Failed to connect socket"); + + else if (code == BAMBU_NETWORK_ERR_BIND_PUBLISH_LOGIN_REQUEST) + return _L("Failed to publish login request"); + + else if (code == BAMBU_NETWORK_ERR_BIND_GET_PRINTER_TICKET_TIMEOUT) + return _L("Get ticket from device timeout"); + + else if (code == BAMBU_NETWORK_ERR_BIND_GET_CLOUD_TICKET_TIMEOUT) + return _L("Get ticket from server timeout"); + + else if (code == BAMBU_NETWORK_ERR_BIND_POST_TICKET_TO_CLOUD_FAILED) + return _L("Failed to post ticket to server"); + + else if (code == BAMBU_NETWORK_ERR_BIND_PARSE_LOGIN_REPORT_FAILED) + return _L("Failed to parse login report reason"); + + else if (code == BAMBU_NETWORK_ERR_BIND_ECODE_LOGIN_REPORT_FAILED) + return _L("Failed to parse login report reason"); + + else if (code == BAMBU_NETWORK_ERR_BIND_RECEIVE_LOGIN_REPORT_TIMEOUT) + return _L("Receive login report timeout"); + + else + return _L("Unknown Failure"); +} + BindMachineDialog::BindMachineDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); @@ -67,42 +108,7 @@ namespace GUI { wxBoxSizer *m_sizer_right_h = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *m_sizer_right_v = new wxBoxSizer(wxVERTICAL); - - Bind(wxEVT_WEBREQUEST_STATE, [this](wxWebRequestEvent& evt) { - switch (evt.GetState()) { - // Request completed - case wxWebRequest::State_Completed: { - wxImage avatar_stream = *evt.GetResponse().GetStream(); - if (avatar_stream.IsOk()) { - avatar_stream.Rescale(FromDIP(60), FromDIP(60)); - auto bitmap = new wxBitmap(avatar_stream); - //bitmap->SetSize(wxSize(FromDIP(60), FromDIP(60))); - m_avatar->SetBitmap(*bitmap); - Layout(); - } - break; - } - // Request failed - case wxWebRequest::State_Failed: { - break; - } - } - }); - - if (wxGetApp().is_user_login()) { - wxString username_text = from_u8(wxGetApp().getAgent()->get_user_nickanme()); - m_user_name->SetLabelText(username_text); - - m_avatar = new wxStaticBitmap(m_panel_right, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(60), FromDIP(60)), 0); - - web_request = wxWebSession::GetDefault().CreateRequest(this, wxGetApp().getAgent()->get_user_avatar()); - if (!web_request.IsOk()) { - // todo request fail - } - // Start the request - web_request.Start(); - } - + m_avatar = new wxStaticBitmap(m_panel_right, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(60), FromDIP(60)), 0); m_sizer_right_v->Add(m_avatar, 0, wxALIGN_CENTER, 0); m_sizer_right_v->Add(0, 0, 0, wxTOP, 7); m_sizer_right_v->Add(m_user_name, 0, wxALIGN_CENTER, 0); @@ -116,12 +122,252 @@ namespace GUI { m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(20)); - m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log in this printer with current account?"), wxDefaultPosition, - wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END); + + auto m_sizer_status_text = new wxBoxSizer(wxHORIZONTAL); + m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log in this printer with current account?")); m_status_text->SetForegroundColour(wxColour(107, 107, 107)); m_status_text->SetFont(::Label::Body_13); m_status_text->Wrap(-1); + + m_link_show_error = new wxStaticText(this, wxID_ANY, _L("Check the reason")); + m_link_show_error->SetForegroundColour(wxColour(0x6b6b6b)); + m_link_show_error->SetFont(::Label::Head_13); + + m_bitmap_show_error_close = create_scaled_bitmap("link_more_error_close",nullptr, 7); + m_bitmap_show_error_open = create_scaled_bitmap("link_more_error_open",nullptr, 7); + m_static_bitmap_show_error = new wxStaticBitmap(this, wxID_ANY, m_bitmap_show_error_open, wxDefaultPosition, wxSize(FromDIP(7), FromDIP(7))); + + m_link_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_link_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + m_link_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); } + else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); } + show_bind_failed_info(true);} + ); + m_static_bitmap_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_static_bitmap_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + m_static_bitmap_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); } + else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); } + show_bind_failed_info(true); + }); + + m_link_show_error->Hide(); + m_static_bitmap_show_error->Hide(); + + m_sizer_status_text->SetMinSize(wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1)); + m_sizer_status_text->Add(m_status_text, 0, wxALIGN_CENTER, 0); + m_sizer_status_text->Add(m_link_show_error, 0, wxLEFT|wxALIGN_CENTER, FromDIP(8)); + m_sizer_status_text->Add(m_static_bitmap_show_error, 0, wxLEFT|wxALIGN_CENTER, FromDIP(2)); + + + //agreement + m_panel_agreement = new wxWindow(this,wxID_ANY); + m_panel_agreement->SetBackgroundColour(*wxWHITE); + m_panel_agreement->SetMinSize(wxSize(FromDIP(450), -1)); + m_panel_agreement->SetMaxSize(wxSize(FromDIP(450), -1)); + + + wxWrapSizer* sizer_privacy_agreement = new wxWrapSizer( wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS ); + wxWrapSizer* sizere_notice_agreement= new wxWrapSizer( wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS ); + wxBoxSizer* sizer_privacy_body = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizere_notice_body = new wxBoxSizer(wxHORIZONTAL); + + auto m_checkbox_privacy = new CheckBox(m_panel_agreement, wxID_ANY); + auto m_st_privacy_title = new Label(m_panel_agreement, _L("Read and accept")); + m_st_privacy_title->SetFont(Label::Body_13); + m_st_privacy_title->SetForegroundColour(wxColour(38, 46, 48)); + + auto m_link_Terms_title = new Label(m_panel_agreement, _L("Terms and Conditions")); + m_link_Terms_title->SetFont(Label::Head_13); + m_link_Terms_title->SetMaxSize(wxSize(FromDIP(450), -1)); + m_link_Terms_title->Wrap(FromDIP(450)); + m_link_Terms_title->SetForegroundColour(wxColour(0x00AE42)); + m_link_Terms_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + wxString txt = _L("Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab device, please read the termsand conditions.By clicking to agree to use your Bambu Lab device, you agree to abide by the Privacy Policyand 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."); + ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Terms and Conditions"), ConfirmBeforeSendDialog::ButtonStyle::ONLY_CONFIRM); + confirm_dlg.update_text(txt); + confirm_dlg.CenterOnParent(); + confirm_dlg.on_show(); + }); + m_link_Terms_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_link_Terms_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + auto m_st_and_title = new Label(m_panel_agreement, _L("and")); + m_st_and_title->SetFont(Label::Body_13); + m_st_and_title->SetForegroundColour(wxColour(38, 46, 48)); + + auto m_link_privacy_title = new Label(m_panel_agreement, _L("Privacy Policy")); + m_link_privacy_title->SetFont(Label::Head_13); + m_link_privacy_title->SetMaxSize(wxSize(FromDIP(450), -1)); + m_link_privacy_title->Wrap(FromDIP(450)); + m_link_privacy_title->SetForegroundColour(wxColour(0x00AE42)); + m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + std::string url; + std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); + + if (country_code == "CN") { + url = "https://www.bambulab.cn/policies/privacy"; + } + else{ + url = "https://www.bambulab.com/policies/privacy"; + } + wxLaunchDefaultBrowser(url); + }); + m_link_privacy_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND);}); + m_link_privacy_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);}); + + sizere_notice_agreement->Add(0, 0, 0, wxTOP, FromDIP(4)); + sizer_privacy_agreement->Add(m_st_privacy_title, 0, wxALIGN_CENTER, 0); + sizer_privacy_agreement->Add(0, 0, 0, wxLEFT, FromDIP(5)); + sizer_privacy_agreement->Add(m_link_Terms_title, 0, wxALIGN_CENTER, 0); + sizer_privacy_agreement->Add(m_st_and_title, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5)); + sizer_privacy_agreement->Add(m_link_privacy_title, 0, wxALIGN_CENTER, 0); + + sizer_privacy_body->Add(m_checkbox_privacy, 0, wxALL, 0); + sizer_privacy_body->Add(0, 0, 0, wxLEFT, FromDIP(8)); + sizer_privacy_body->Add(sizer_privacy_agreement, 1, wxEXPAND, 0); + + + wxString notice_title = _L("We ask for your help to improve everyone's printer"); + wxString notice_link_title = _L("Statement about User Experience Improvement Program"); + + auto m_checkbox_notice = new CheckBox(m_panel_agreement, wxID_ANY); + auto m_st_notice_title = new Label(m_panel_agreement, notice_title); + m_st_notice_title->SetFont(Label::Body_13); + m_st_notice_title->SetForegroundColour(wxColour(38, 46, 48)); + + auto m_link_notice_title = new Label(m_panel_agreement, notice_link_title); + m_link_notice_title->SetFont(Label::Head_13); + m_link_notice_title->SetMaxSize(wxSize(FromDIP(450), -1)); + m_link_notice_title->Wrap(FromDIP(450)); + m_link_notice_title->SetForegroundColour(wxColour(0x00AE42)); + m_link_notice_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_link_notice_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + m_link_notice_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + wxString txt = _L("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 same principle and uses machine learning to improve its performance from the 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."); + ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Statement on User Experience Improvement Plan"), ConfirmBeforeSendDialog::ButtonStyle::ONLY_CONFIRM); + + wxString model_id_text; + + if (m_machine_info) { + model_id_text = m_machine_info->get_printer_type_display_str(); + } + confirm_dlg.update_text(wxString::Format(txt, model_id_text, model_id_text)); + confirm_dlg.CenterOnParent(); + confirm_dlg.on_show(); + }); + + sizere_notice_agreement->Add(0, 0, 0, wxTOP, FromDIP(4)); + sizere_notice_agreement->Add(m_st_notice_title, 0, 0, wxALIGN_CENTER, 0); + sizere_notice_agreement->Add(0, 0, 0, wxLEFT, FromDIP(2)); + sizere_notice_agreement->Add(m_link_notice_title, 0, 0, wxALIGN_CENTER, 0); + + sizere_notice_body->Add(m_checkbox_notice, 0, wxALL, 0); + sizere_notice_body->Add(0, 0, 0, wxLEFT, FromDIP(8)); + sizere_notice_body->Add(sizere_notice_agreement, 1, wxEXPAND, 0); + + wxBoxSizer* sizer_agreement = new wxBoxSizer(wxVERTICAL); + sizer_agreement->Add(sizer_privacy_body, 1, wxEXPAND, 0); + sizer_agreement->Add(sizere_notice_body, 1, wxEXPAND, 0); + + + m_checkbox_privacy->Bind(wxEVT_TOGGLEBUTTON, [this, m_checkbox_privacy](auto& e) { + m_allow_privacy = m_checkbox_privacy->GetValue(); + m_button_bind->Enable(m_allow_privacy); + e.Skip(); + }); + m_checkbox_notice->Bind(wxEVT_TOGGLEBUTTON, [this, m_checkbox_notice](auto& e) { + m_allow_notice = m_checkbox_notice->GetValue(); + e.Skip(); + }); + + m_panel_agreement->SetSizer(sizer_agreement); + m_panel_agreement->Layout(); + + //show bind failed info + m_sw_bind_failed_info = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(450), FromDIP(300)), wxVSCROLL); + m_sw_bind_failed_info->SetBackgroundColour(*wxWHITE); + m_sw_bind_failed_info->SetScrollRate(5, 5); + m_sw_bind_failed_info->SetMinSize(wxSize(FromDIP(450), FromDIP(90))); + m_sw_bind_failed_info->SetMaxSize(wxSize(FromDIP(450), FromDIP(90))); + + wxBoxSizer* m_sizer_bind_failed_info = new wxBoxSizer(wxVERTICAL); + m_sw_bind_failed_info->SetSizer( m_sizer_bind_failed_info ); + + m_link_network_state = new Label(m_sw_bind_failed_info, _L("Check the status of current system services")); + m_link_network_state->SetForegroundColour(0x00AE42); + m_link_network_state->SetFont(::Label::Body_12); + m_link_network_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {wxGetApp().link_to_network_check(); }); + m_link_network_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_HAND); }); + m_link_network_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_ARROW); }); + + + + wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL); + + auto st_title_error_code = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, _L("Error code")); + auto st_title_error_code_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": "); + m_st_txt_error_code = new Label(m_sw_bind_failed_info, wxEmptyString); + st_title_error_code->SetForegroundColour(0x909090); + st_title_error_code_doc->SetForegroundColour(0x909090); + m_st_txt_error_code->SetForegroundColour(0x909090); + st_title_error_code->SetFont(::Label::Body_13); + st_title_error_code_doc->SetFont(::Label::Body_13); + m_st_txt_error_code->SetFont(::Label::Body_13); + st_title_error_code->SetMinSize(wxSize(FromDIP(80), -1)); + st_title_error_code->SetMaxSize(wxSize(FromDIP(80), -1)); + m_st_txt_error_code->SetMinSize(wxSize(FromDIP(340), -1)); + m_st_txt_error_code->SetMaxSize(wxSize(FromDIP(340), -1)); + sizer_error_code->Add(st_title_error_code, 0, wxALL, 0); + sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0); + sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0); + + + auto st_title_error_desc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Error desc")); + auto st_title_error_desc_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": "); + m_st_txt_error_desc = new Label(m_sw_bind_failed_info, wxEmptyString); + st_title_error_desc->SetForegroundColour(0x909090); + st_title_error_desc_doc->SetForegroundColour(0x909090); + m_st_txt_error_desc->SetForegroundColour(0x909090); + st_title_error_desc->SetFont(::Label::Body_13); + st_title_error_desc_doc->SetFont(::Label::Body_13); + m_st_txt_error_desc->SetFont(::Label::Body_13); + st_title_error_desc->SetMinSize(wxSize(FromDIP(80), -1)); + st_title_error_desc->SetMaxSize(wxSize(FromDIP(80), -1)); + m_st_txt_error_desc->SetMinSize(wxSize(FromDIP(340), -1)); + m_st_txt_error_desc->SetMaxSize(wxSize(FromDIP(340), -1)); + sizer_error_desc->Add(st_title_error_desc, 0, wxALL, 0); + sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0); + sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0); + + auto st_title_extra_info = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Extra info")); + auto st_title_extra_info_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": "); + m_st_txt_extra_info = new Label(m_sw_bind_failed_info, wxEmptyString); + st_title_extra_info->SetForegroundColour(0x909090); + st_title_extra_info_doc->SetForegroundColour(0x909090); + m_st_txt_extra_info->SetForegroundColour(0x909090); + st_title_extra_info->SetFont(::Label::Body_13); + st_title_extra_info_doc->SetFont(::Label::Body_13); + m_st_txt_extra_info->SetFont(::Label::Body_13); + st_title_extra_info->SetMinSize(wxSize(FromDIP(80), -1)); + st_title_extra_info->SetMaxSize(wxSize(FromDIP(80), -1)); + m_st_txt_extra_info->SetMinSize(wxSize(FromDIP(340), -1)); + m_st_txt_extra_info->SetMaxSize(wxSize(FromDIP(340), -1)); + sizer_extra_info->Add(st_title_extra_info, 0, wxALL, 0); + sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0); + sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0); + + m_sizer_bind_failed_info->Add(m_link_network_state, 0, wxLEFT, 0); + m_sizer_bind_failed_info->Add(sizer_error_code, 0, wxLEFT, 0); + m_sizer_bind_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3)); + m_sizer_bind_failed_info->Add(sizer_error_desc, 0, wxLEFT, 0); + m_sizer_bind_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3)); + m_sizer_bind_failed_info->Add(sizer_extra_info, 0, wxLEFT, 0); + m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition,BIND_DIALOG_BUTTON_PANEL_SIZE, 0); m_simplebook->SetBackgroundColour(*wxWHITE); @@ -132,14 +378,18 @@ namespace GUI { wxBoxSizer *m_sizer_button = new wxBoxSizer(wxHORIZONTAL); m_sizer_button->Add(0, 0, 1, wxEXPAND, 5); m_button_bind = new Button(button_panel, _L("Confirm")); - StateColor btn_bg_green(std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + + StateColor btn_bg_green(std::pair(wxColour(206, 206, 206), StateColor::Disabled), + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_bind->SetBackgroundColor(btn_bg_green); - m_button_bind->SetBorderColor(wxColour(0, 150, 136)); + m_button_bind->SetBorderColor(*wxWHITE); m_button_bind->SetTextColor(wxColour("#FFFFFE")); m_button_bind->SetSize(BIND_DIALOG_BUTTON_SIZE); m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE); m_button_bind->SetCornerRadius(FromDIP(12)); + m_button_bind->Enable(false); StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Hovered), @@ -165,8 +415,14 @@ namespace GUI { //m_sizer_main->Add(m_sizer_button, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); - m_sizer_main->Add(m_status_text, 0, wxALIGN_CENTER, 0); + show_bind_failed_info(false); + + + m_sizer_main->Add(m_sizer_status_text, 0, wxALIGN_CENTER, FromDIP(40)); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_sizer_main->Add(m_panel_agreement, 0, wxALIGN_CENTER, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_sizer_main->Add(m_sw_bind_failed_info, 0, wxALIGN_CENTER, 0); m_sizer_main->Add(m_simplebook, 0, wxALIGN_CENTER, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(20)); @@ -176,8 +432,27 @@ namespace GUI { Centre(wxBOTH); Bind(wxEVT_SHOW, &BindMachineDialog::on_show, this); - Bind(wxEVT_CLOSE_WINDOW, &BindMachineDialog::on_close, this); + Bind(wxEVT_WEBREQUEST_STATE, [this](wxWebRequestEvent& evt) { + switch (evt.GetState()) { + // Request completed + case wxWebRequest::State_Completed: { + wxImage avatar_stream = *evt.GetResponse().GetStream(); + if (avatar_stream.IsOk()) { + avatar_stream.Rescale(FromDIP(60), FromDIP(60)); + auto bitmap = new wxBitmap(avatar_stream); + //bitmap->SetSize(wxSize(FromDIP(60), FromDIP(60))); + m_avatar->SetBitmap(*bitmap); + Layout(); + } + break; + } + // Request failed + case wxWebRequest::State_Failed: { + break; + } + } + }); m_button_bind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_bind_printer), NULL, this); m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_cancel), NULL, this); @@ -198,19 +473,56 @@ namespace GUI { this->Disconnect(EVT_BIND_UPDATE_MESSAGE, wxCommandEventHandler(BindMachineDialog::on_update_message), NULL, this); } - //static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) - //{ - // register int realsize = size * nmemb; - // struct MemoryStruct *mem = (struct MemoryStruct *) userp; - // mem->memory = (char *) realloc(mem->memory, mem->size + realsize + 1); - // if (mem->memory) { - // memcpy(&(mem->memory[mem->size]), contents, realsize); - // mem->size += realsize; - // mem->memory[mem->size] = 0; - // } - // return realsize; - //} + wxString BindMachineDialog::get_print_error(wxString str) + { + wxString extra; + try { + json j = json::parse(str.utf8_string()); + if (j.contains("err_code")) { + int error_code = j["err_code"].get(); + extra = wxGetApp().get_hms_query()->query_print_error_msg(error_code); + } + } + catch (...) { + ; + } + if (extra.empty()) + extra = str; + + return extra; + } + + void BindMachineDialog::show_bind_failed_info(bool show, int code, wxString description, wxString extra) + { + if (show) { + if (!m_sw_bind_failed_info->IsShown()) { + m_sw_bind_failed_info->Show(true); + m_result_extra = get_print_error(m_result_extra); + m_st_txt_error_code->SetLabelText(wxString::Format("%d", m_result_code)); + m_st_txt_error_desc->SetLabelText( wxGetApp().filter_string(m_result_info)); + m_st_txt_extra_info->SetLabelText( wxGetApp().filter_string(m_result_extra)); + + m_st_txt_error_code->Wrap(FromDIP(330)); + m_st_txt_error_desc->Wrap(FromDIP(330)); + m_st_txt_extra_info->Wrap(FromDIP(330)); + } + else { + m_sw_bind_failed_info->Show(false); + } + Layout(); + Fit(); + } + else { + if (!m_sw_bind_failed_info->IsShown()) { return; } + m_sw_bind_failed_info->Show(false); + m_st_txt_error_code->SetLabelText(wxEmptyString); + m_st_txt_error_desc->SetLabelText(wxEmptyString); + m_st_txt_extra_info->SetLabelText(wxEmptyString); + Layout(); + Fit(); + } + } void BindMachineDialog::on_cancel(wxCommandEvent &event) { @@ -238,8 +550,15 @@ namespace GUI { void BindMachineDialog::on_bind_fail(wxCommandEvent &event) { - //m_status_text->SetLabel(_L("Would you like to log in this printer with current account?")); m_simplebook->SetSelection(1); + m_link_show_error->Show(true); + m_static_bitmap_show_error->Show(true); + + m_result_code = event.GetInt(); + m_result_info = get_fail_reason(event.GetInt()); + m_result_extra = event.GetString(); + + show_bind_failed_info(true, event.GetInt(), get_fail_reason(event.GetInt()), event.GetString()); } void BindMachineDialog::on_update_message(wxCommandEvent &event) @@ -251,11 +570,19 @@ namespace GUI { { EndModal(wxID_OK); MessageDialog msg_wingow(nullptr, _L("Log in successful."), "", wxAPPLY | wxOK); - if (msg_wingow.ShowModal() == wxOK) { return; } + msg_wingow.ShowModal(); + if(m_machine_info) wxGetApp().on_start_subscribe_again(m_machine_info->dev_id); } void BindMachineDialog::on_bind_printer(wxCommandEvent &event) { + m_result_code = 0; + m_result_extra = wxEmptyString; + m_result_info = wxEmptyString; + m_link_show_error->Hide(); + m_static_bitmap_show_error->Hide(); + show_bind_failed_info(false); + //check isset info if (m_machine_info == nullptr || m_machine_info == NULL) return; @@ -269,6 +596,14 @@ namespace GUI { m_simplebook->SetSelection(0); m_bind_job = std::make_shared(m_status_bar, wxGetApp().plater(), m_machine_info->dev_id, m_machine_info->dev_ip, m_machine_info->bind_sec_link); + + if (m_machine_info && (m_machine_info->printer_type == "BL-P001" || m_machine_info->printer_type == "BL-P002")) { + m_bind_job->set_improved(false); + } + else { + m_bind_job->set_improved(m_allow_notice); + } + m_bind_job->set_event_handle(this); m_bind_job->start(); } @@ -279,8 +614,29 @@ void BindMachineDialog::on_dpi_changed(const wxRect &suggested_rect) m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE); } +void BindMachineDialog::update_machine_info(MachineObject* info) +{ + m_machine_info = info; + if (m_machine_info && (m_machine_info->printer_type == "BL-P001" || m_machine_info->printer_type == "BL-P002")) { + m_button_bind->Enable(true); + m_panel_agreement->Hide(); + } + else { + m_button_bind->Enable(false); + m_panel_agreement->Show(); + } + Layout(); + Fit(); +} + void BindMachineDialog::on_show(wxShowEvent &event) { + m_allow_privacy = false; + m_allow_notice = false; + m_result_code = 0; + m_result_extra = wxEmptyString; + m_result_info = wxEmptyString; + if (event.IsShown()) { auto img = m_machine_info->get_printer_thumbnail_img_str(); if (wxGetApp().dark_mode()) { img += "_dark"; } @@ -290,6 +646,18 @@ void BindMachineDialog::on_show(wxShowEvent &event) m_printer_img->Show(); m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name)); + + if (wxGetApp().is_user_login()) { + wxString username_text = from_u8(wxGetApp().getAgent()->get_user_nickanme()); + m_user_name->SetLabelText(username_text); + web_request = wxWebSession::GetDefault().CreateRequest(this, wxGetApp().getAgent()->get_user_avatar()); + if (!web_request.IsOk()) { + // todo request fail + } + // Start the request + web_request.Start(); + } + Layout(); event.Skip(); } @@ -299,7 +667,7 @@ void BindMachineDialog::on_show(wxShowEvent &event) UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Log out printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); @@ -349,42 +717,6 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) wxBoxSizer *m_sizer_right_v = new wxBoxSizer(wxVERTICAL); m_avatar = new wxStaticBitmap(m_panel_right, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(60), FromDIP(60)), 0); - - if (wxGetApp().is_user_login()) { - wxString username_text = from_u8(wxGetApp().getAgent()->get_user_name()); - m_user_name->SetLabelText(username_text); - wxString avatar_url = wxGetApp().getAgent()->get_user_avatar(); - wxWebRequest request = wxWebSession::GetDefault().CreateRequest(this, avatar_url); - if (!request.IsOk()) { - // todo request fail - } - request.Start(); - } - - - Bind(wxEVT_WEBREQUEST_STATE, [this](wxWebRequestEvent &evt) { - switch (evt.GetState()) { - // Request completed - case wxWebRequest::State_Completed: { - wxImage avatar_stream = *evt.GetResponse().GetStream(); - if (avatar_stream.IsOk()) { - avatar_stream.Rescale(FromDIP(60), FromDIP(60)); - auto bitmap = new wxBitmap(avatar_stream); - //bitmap->SetSize(wxSize(FromDIP(60), FromDIP(60))); - m_avatar->SetBitmap(*bitmap); - Layout(); - } - break; - } - // Request failed - case wxWebRequest::State_Failed: { - break; - } - } - }); - - - m_sizer_right_v->Add(m_avatar, 0, wxALIGN_CENTER, 0); m_sizer_right_v->Add(0, 0, 0, wxTOP, 7); m_sizer_right_v->Add(m_user_name, 0, wxALIGN_CENTER, 0); @@ -398,11 +730,9 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(20)); - m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log out the printer?"), wxDefaultPosition, - wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END); + m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log out the printer?"), wxDefaultPosition, wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END); m_status_text->SetForegroundColour(wxColour(107, 107, 107)); m_status_text->SetFont(::Label::Body_13); - m_status_text->Wrap(-1); @@ -410,10 +740,10 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) m_sizer_button->Add(0, 0, 1, wxEXPAND, 5); m_button_unbind = new Button(this, _L("Confirm")); - StateColor btn_bg_green(std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_unbind->SetBackgroundColor(btn_bg_green); - m_button_unbind->SetBorderColor(wxColour(0, 150, 136)); + m_button_unbind->SetBorderColor(wxColour(0, 174, 66)); m_button_unbind->SetTextColor(wxColour("#FFFFFE")); m_button_unbind->SetSize(BIND_DIALOG_BUTTON_SIZE); m_button_unbind->SetMinSize(BIND_DIALOG_BUTTON_SIZE); @@ -448,11 +778,34 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) Bind(wxEVT_SHOW, &UnBindMachineDialog::on_show, this); m_button_unbind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_unbind_printer), NULL, this); m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_cancel), NULL, this); + + Bind(wxEVT_WEBREQUEST_STATE, [this](wxWebRequestEvent& evt) { + switch (evt.GetState()) { + // Request completed + case wxWebRequest::State_Completed: { + wxImage avatar_stream = *evt.GetResponse().GetStream(); + if (avatar_stream.IsOk()) { + avatar_stream.Rescale(FromDIP(60), FromDIP(60)); + auto bitmap = new wxBitmap(avatar_stream); + //bitmap->SetSize(wxSize(FromDIP(60), FromDIP(60))); + m_avatar->SetBitmap(*bitmap); + Layout(); + } + break; + } + // Request failed + case wxWebRequest::State_Failed: { + break; + } + } + }); + wxGetApp().UpdateDlgDarkUI(this); } UnBindMachineDialog::~UnBindMachineDialog() { + web_request.Cancel(); m_button_unbind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_unbind_printer), NULL, this); m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_cancel), NULL, this); } @@ -516,6 +869,19 @@ void UnBindMachineDialog::on_show(wxShowEvent &event) m_printer_img->Show(); m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name)); + + + if (wxGetApp().is_user_login()) { + wxString username_text = from_u8(wxGetApp().getAgent()->get_user_name()); + m_user_name->SetLabelText(username_text); + wxString avatar_url = wxGetApp().getAgent()->get_user_avatar(); + web_request = wxWebSession::GetDefault().CreateRequest(this, avatar_url); + if (!web_request.IsOk()) { + // todo request fail + } + web_request.Start(); + } + Layout(); event.Skip(); } diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp index 6df81124f..6df98875a 100644 --- a/src/slic3r/GUI/BindDialog.hpp +++ b/src/slic3r/GUI/BindDialog.hpp @@ -46,17 +46,34 @@ struct MemoryStruct class BindMachineDialog : public DPIDialog { private: + wxWindow* m_panel_agreement; wxStaticText * m_printer_name; wxStaticText * m_user_name; StaticBox * m_panel_left; StaticBox * m_panel_right; wxStaticText *m_status_text; + wxStaticText* m_link_show_error; Button * m_button_bind; Button * m_button_cancel; wxSimplebook *m_simplebook; wxStaticBitmap *m_avatar; wxStaticBitmap *m_printer_img; + wxStaticBitmap *m_static_bitmap_show_error; + wxBitmap m_bitmap_show_error_close; + wxBitmap m_bitmap_show_error_open; wxWebRequest web_request; + wxScrolledWindow* m_sw_bind_failed_info; + Label* m_bind_failed_info; + Label* m_st_txt_error_code{ nullptr }; + Label* m_st_txt_error_desc{ nullptr }; + Label* m_st_txt_extra_info{ nullptr }; + Label* m_link_network_state{ nullptr }; + wxString m_result_info; + wxString m_result_extra; + bool m_show_error_info_state = true; + bool m_allow_privacy{false}; + bool m_allow_notice{false}; + int m_result_code; MachineObject * m_machine_info{nullptr}; std::shared_ptr m_bind_job; @@ -65,16 +82,19 @@ private: public: BindMachineDialog(Plater *plater = nullptr); ~BindMachineDialog(); - void on_cancel(wxCommandEvent &event); + + void show_bind_failed_info(bool show, int code = 0, wxString description = wxEmptyString, wxString extra = wxEmptyString); + void on_cancel(wxCommandEvent& event); void on_bind_fail(wxCommandEvent &event); void on_update_message(wxCommandEvent &event); void on_bind_success(wxCommandEvent &event); void on_bind_printer(wxCommandEvent &event); void on_dpi_changed(const wxRect &suggested_rect) override; - void update_machine_info(MachineObject *info) { m_machine_info = info; }; + void update_machine_info(MachineObject *info); void on_show(wxShowEvent &event); void on_close(wxCloseEvent& event); void on_destroy(); + wxString get_print_error(wxString str); }; class UnBindMachineDialog : public DPIDialog @@ -88,6 +108,7 @@ protected: MachineObject *m_machine_info{nullptr}; wxStaticBitmap *m_avatar; wxStaticBitmap *m_printer_img; + wxWebRequest web_request; public: UnBindMachineDialog(Plater *plater = nullptr); diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp new file mode 100644 index 000000000..bf7976839 --- /dev/null +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -0,0 +1,462 @@ +#include "CaliHistoryDialog.hpp" +#include "I18N.hpp" + +#include "libslic3r/Utils.hpp" +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "format.hpp" +#include "MsgDialog.hpp" +#include "slic3r/Utils/CalibUtils.hpp" + +namespace Slic3r { +namespace GUI { + + +#define HISTORY_WINDOW_SIZE wxSize(FromDIP(700), FromDIP(600)) +#define EDIT_HISTORY_DIALOG_INPUT_SIZE wxSize(FromDIP(160), FromDIP(24)) +#define HISTORY_WINDOW_ITEMS_COUNT 5 + +static wxString get_preset_name_by_filament_id(std::string filament_id) +{ + auto preset_bundle = wxGetApp().preset_bundle; + auto collection = &preset_bundle->filaments; + wxString preset_name = ""; + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + if (filament_id.compare(it->filament_id) == 0) { + auto preset_parent = collection->get_preset_parent(*it); + if (preset_parent) { + if (!preset_parent->alias.empty()) + preset_name = from_u8(preset_parent->alias); + else + preset_name = from_u8(preset_parent->name); + } + else { + if (!it->alias.empty()) + preset_name = from_u8(it->alias); + else + preset_name = from_u8(it->name); + } + } + } + return preset_name; +} + +HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& calib_results_history) + : DPIDialog(parent, wxID_ANY, _L("Flow Dynamics Calibration Result"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) + , m_calib_results_history(calib_results_history) +{ + this->SetBackgroundColour(*wxWHITE); + auto main_sizer = new wxBoxSizer(wxVERTICAL); + + auto scroll_window = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL | wxVSCROLL); + scroll_window->SetScrollRate(5, 5); + scroll_window->SetBackgroundColour(*wxWHITE); + scroll_window->SetMinSize(HISTORY_WINDOW_SIZE); + scroll_window->SetSize(HISTORY_WINDOW_SIZE); + scroll_window->SetMaxSize(HISTORY_WINDOW_SIZE); + + auto scroll_sizer = new wxBoxSizer(wxVERTICAL); + scroll_window->SetSizer(scroll_sizer); + + wxPanel* comboBox_panel = new wxPanel(scroll_window); + comboBox_panel->SetBackgroundColour(wxColour(238, 238, 238)); + auto comboBox_sizer = new wxBoxSizer(wxVERTICAL); + comboBox_panel->SetSizer(comboBox_sizer); + comboBox_sizer->AddSpacer(10); + + auto nozzle_dia_title = new Label(comboBox_panel, _L("Nozzle Diameter")); + nozzle_dia_title->SetFont(Label::Head_14); + comboBox_sizer->Add(nozzle_dia_title, 0, wxLEFT | wxRIGHT, FromDIP(15)); + comboBox_sizer->AddSpacer(10); + + m_comboBox_nozzle_dia = new ComboBox(comboBox_panel, wxID_ANY, "", wxDefaultPosition, wxSize(-1, FromDIP(24)), 0, nullptr, wxCB_READONLY); + comboBox_sizer->Add(m_comboBox_nozzle_dia, 0, wxLEFT | wxEXPAND | wxRIGHT, FromDIP(15)); + comboBox_sizer->AddSpacer(10); + + scroll_sizer->Add(comboBox_panel, 0, wxEXPAND | wxRIGHT, FromDIP(10)); + + scroll_sizer->AddSpacer(FromDIP(15)); + + wxPanel* tips_panel = new wxPanel(scroll_window, wxID_ANY); + tips_panel->SetBackgroundColour(*wxWHITE); + auto tips_sizer = new wxBoxSizer(wxVERTICAL); + tips_panel->SetSizer(tips_sizer); + m_tips = new Label(tips_panel, ""); + m_tips->SetForegroundColour({ 145, 145, 145 }); + tips_sizer->Add(m_tips, 0, wxEXPAND); + + scroll_sizer->Add(tips_panel, 0, wxEXPAND); + + scroll_sizer->AddSpacer(FromDIP(15)); + + m_history_data_panel = new wxPanel(scroll_window); + m_history_data_panel->SetBackgroundColour(*wxWHITE); + + scroll_sizer->Add(m_history_data_panel, 1, wxEXPAND); + + main_sizer->Add(scroll_window, 1, wxEXPAND | wxALL, FromDIP(10)); + + SetSizer(main_sizer); + Layout(); + main_sizer->Fit(this); + CenterOnParent(); + + wxGetApp().UpdateDlgDarkUI(this); + + m_comboBox_nozzle_dia->Bind(wxEVT_COMBOBOX, &HistoryWindow::on_select_nozzle, this); + + m_refresh_timer = new wxTimer(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(200); + Bind(wxEVT_TIMER, &HistoryWindow::on_timer, this); +} + +HistoryWindow::~HistoryWindow() +{ + m_refresh_timer->Stop(); +} + +void HistoryWindow::sync_history_result(MachineObject* obj) +{ + BOOST_LOG_TRIVIAL(info) << "sync_history_result"; + + m_calib_results_history.clear(); + if (obj) + m_calib_results_history = obj->pa_calib_tab; + + sync_history_data(); + + if (m_calib_results_history.empty()) { + m_tips->SetLabel(_L("No History Result")); + } + else { + m_tips->SetLabel(_L("Success to get history result")); + } + m_tips->Refresh(); + +} + +void HistoryWindow::on_device_connected(MachineObject* obj) +{ + if (!obj) { + return; + } + + curr_obj = obj; + // init nozzle value + static std::array nozzle_diameter_list = { 0.2f, 0.4f, 0.6f, 0.8f }; + int selection = 1; + for (int i = 0; i < nozzle_diameter_list.size(); i++) { + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f mm", nozzle_diameter_list[i])); + if (abs(curr_obj->nozzle_diameter - nozzle_diameter_list[i]) < 1e-3) { + selection = i; + } + } + m_comboBox_nozzle_dia->SetSelection(selection); + + // trigger on_select nozzle + wxCommandEvent evt(wxEVT_COMBOBOX); + evt.SetEventObject(m_comboBox_nozzle_dia); + wxPostEvent(m_comboBox_nozzle_dia, evt); +} + +void HistoryWindow::on_timer(wxTimerEvent& event) +{ + update(curr_obj); +} + +void HistoryWindow::update(MachineObject* obj) +{ + if (!obj) return; + + if (obj->cali_version != history_version) { + if (obj->has_get_pa_calib_tab) { + history_version = obj->cali_version; + reqeust_history_result(obj); + } + } + + // sync when history is not empty + if (obj->has_get_pa_calib_tab && m_calib_results_history.empty()) { + sync_history_result(curr_obj); + } +} + +void HistoryWindow::on_select_nozzle(wxCommandEvent& evt) +{ + reqeust_history_result(curr_obj); + +} + +void HistoryWindow::reqeust_history_result(MachineObject* obj) +{ + if (curr_obj) { + curr_obj->reset_pa_cali_history_result(); + sync_history_result(curr_obj); + + float nozzle_value = get_nozzle_value(); + if (nozzle_value > 0) { + CalibUtils::emit_get_PA_calib_infos(nozzle_value); + m_tips->SetLabel(_L("Refreshing the historical Flow Dynamics Calibration records")); + BOOST_LOG_TRIVIAL(info) << "request calib history"; + } + } +} + +void HistoryWindow::enbale_action_buttons(bool enable) { + auto childern = m_history_data_panel->GetChildren(); + for (auto child : childern) { + auto button = dynamic_cast(child); + if (button) { + button->Enable(enable); + } + } +} + +void HistoryWindow::sync_history_data() { + Freeze(); + m_history_data_panel->DestroyChildren(); + m_history_data_panel->Enable(); + wxGridBagSizer* gbSizer; + gbSizer = new wxGridBagSizer(FromDIP(0), FromDIP(50)); + gbSizer->SetFlexibleDirection(wxBOTH); + gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + m_history_data_panel->SetSizer(gbSizer, true); + + auto title_name = new Label(m_history_data_panel, _L("Name")); + title_name->SetFont(Label::Head_14); + gbSizer->Add(title_name, { 0, 0 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + + auto title_preset_name = new Label(m_history_data_panel, _L("Filament")); + title_preset_name->SetFont(Label::Head_14); + gbSizer->Add(title_preset_name, { 0, 1 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + + auto title_k = new Label(m_history_data_panel, _L("Factor K")); + title_k->SetFont(Label::Head_14); + gbSizer->Add(title_k, { 0, 2 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + + // Hide + //auto title_n = new Label(m_history_data_panel, wxID_ANY, _L("N")); + //title_n->SetFont(Label::Head_14); + //gbSizer->Add(title_n, { 0, 3 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + + auto title_action = new Label(m_history_data_panel, _L("Action")); + title_action->SetFont(Label::Head_14); + gbSizer->Add(title_action, { 0, 3 }, { 1, 1 }); + + int i = 1; + for (auto& result : m_calib_results_history) { + auto name_value = new Label(m_history_data_panel, from_u8(result.name)); + + wxString preset_name = get_preset_name_by_filament_id(result.filament_id); + auto preset_name_value = new Label(m_history_data_panel, preset_name); + + auto k_str = wxString::Format("%.3f", result.k_value); + auto n_str = wxString::Format("%.3f", result.n_coef); + auto k_value = new Label(m_history_data_panel, k_str); + auto n_value = new Label(m_history_data_panel, n_str); + n_value->Hide(); + auto delete_button = new Button(m_history_data_panel, _L("Delete")); + delete_button->SetBackgroundColour(*wxWHITE); + delete_button->SetMinSize(wxSize(-1, FromDIP(24))); + delete_button->SetCornerRadius(FromDIP(12)); + delete_button->Bind(wxEVT_BUTTON, [this, gbSizer, i, &result](auto& e) { + for (int j = 0; j < HISTORY_WINDOW_ITEMS_COUNT; j++) { + auto item = gbSizer->FindItemAtPosition({ i, j }); + item->GetWindow()->Hide(); + } + gbSizer->SetEmptyCellSize({ 0,0 }); + m_history_data_panel->Layout(); + m_history_data_panel->Fit(); + CalibUtils::delete_PA_calib_result({ result.tray_id, result.cali_idx, result.nozzle_diameter, result.filament_id }); + }); + + auto edit_button = new Button(m_history_data_panel, _L("Edit")); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + edit_button->SetBackgroundColour(*wxWHITE); + edit_button->SetBackgroundColor(btn_bg_green); + edit_button->SetBorderColor(wxColour(0, 174, 66)); + edit_button->SetTextColor(wxColour("#FFFFFE")); + edit_button->SetMinSize(wxSize(-1, FromDIP(24))); + edit_button->SetCornerRadius(FromDIP(12)); + edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value, edit_button](auto& e) { + PACalibResult result_buffer = result; + result_buffer.k_value = stof(k_value->GetLabel().ToStdString()); + result_buffer.name = name_value->GetLabel().ToUTF8().data(); + EditCalibrationHistoryDialog dlg(this, result_buffer); + if (dlg.ShowModal() == wxID_OK) { + auto new_result = dlg.get_result(); + + wxString new_k_str = wxString::Format("%.3f", new_result.k_value); + k_value->SetLabel(new_k_str); + name_value->SetLabel(from_u8(new_result.name)); + + new_result.tray_id = -1; + CalibUtils::set_PA_calib_result({ new_result }, true); + + enbale_action_buttons(false); + } + }); + + gbSizer->Add(name_value, { i, 0 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + gbSizer->Add(preset_name_value, { i, 1 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + gbSizer->Add(k_value, { i, 2 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + //gbSizer->Add(n_value, { i, 3 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + gbSizer->Add(delete_button, { i, 3 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + gbSizer->Add(edit_button, { i, 4 }, { 1, 1 }, wxBOTTOM, FromDIP(15)); + i++; + } + + wxGetApp().UpdateDlgDarkUI(this); + + Layout(); + Fit(); + Thaw(); +} + +float HistoryWindow::get_nozzle_value() +{ + double nozzle_value = 0.0; + wxString nozzle_value_str = m_comboBox_nozzle_dia->GetValue(); + try { + nozzle_value_str.ToDouble(&nozzle_value); + } + catch (...) { + ; + } + + return nozzle_value; +} + + +EditCalibrationHistoryDialog::EditCalibrationHistoryDialog(wxWindow* parent, const PACalibResult& result) + : DPIDialog(parent, wxID_ANY, _L("Edit Flow Dynamics Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) + , m_new_result(result) +{ + this->SetBackgroundColour(*wxWHITE); + auto main_sizer = new wxBoxSizer(wxVERTICAL); + + auto top_panel = new wxPanel(this); + top_panel->SetBackgroundColour(*wxWHITE); + auto panel_sizer = new wxBoxSizer(wxVERTICAL); + top_panel->SetSizer(panel_sizer); + + auto flex_sizer = new wxFlexGridSizer(0, 2, FromDIP(15), FromDIP(30)); + flex_sizer->SetFlexibleDirection(wxBOTH); + flex_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + Label* name_title = new Label(top_panel, _L("Name")); + TextInput* name_value = new TextInput(top_panel, from_u8(m_new_result.name), "", "", wxDefaultPosition, EDIT_HISTORY_DIALOG_INPUT_SIZE, wxTE_PROCESS_ENTER); + name_value->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, name_value](auto& e) { + if (!name_value->GetTextCtrl()->GetValue().IsEmpty()) + m_new_result.name = name_value->GetTextCtrl()->GetValue().ToUTF8().data(); + }); + name_value->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, name_value](auto& e) { + if (!name_value->GetTextCtrl()->GetValue().IsEmpty()) + m_new_result.name = name_value->GetTextCtrl()->GetValue().ToUTF8().data(); + e.Skip(); + }); + flex_sizer->Add(name_title); + flex_sizer->Add(name_value); + + Label* preset_name_title = new Label(top_panel, _L("Filament")); + wxString preset_name = get_preset_name_by_filament_id(result.filament_id); + Label* preset_name_value = new Label(top_panel, preset_name); + flex_sizer->Add(preset_name_title); + flex_sizer->Add(preset_name_value); + + Label* k_title = new Label(top_panel, _L("Factor K")); + auto k_str = wxString::Format("%.3f", m_new_result.k_value); + TextInput* k_value = new TextInput(top_panel, k_str, "", "", wxDefaultPosition, EDIT_HISTORY_DIALOG_INPUT_SIZE, wxTE_PROCESS_ENTER); + k_value->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, k_value](auto& e) { + float k = 0.0f; + if (!CalibUtils::validate_input_k_value(k_value->GetTextCtrl()->GetValue(), &k)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (K in 0~0.5)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + wxString k_str = wxString::Format("%.3f", k); + k_value->GetTextCtrl()->SetValue(k_str); + m_new_result.k_value = k; + }); + k_value->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, k_value](auto& e) { + float k = 0.0f; + if (!CalibUtils::validate_input_k_value(k_value->GetTextCtrl()->GetValue(), &k)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (K in 0~0.5)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + wxString k_str = wxString::Format("%.3f", k); + k_value->GetTextCtrl()->SetValue(k_str); + m_new_result.k_value = k; + e.Skip(); + }); + flex_sizer->Add(k_title); + flex_sizer->Add(k_value); + + // Hide: + //Label* n_title = new Label(top_panel, _L("Factor N")); + //TextInput* n_value = new TextInput(top_panel, n, "", "", wxDefaultPosition, EDIT_HISTORY_DIALOG_INPUT_SIZE, wxTE_PROCESS_ENTER); + //flex_sizer->Add(n_title); + //flex_sizer->Add(n_value); + + panel_sizer->Add(flex_sizer); + + panel_sizer->AddSpacer(FromDIP(25)); + + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + Button* save_btn = new Button(top_panel, _L("Save")); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + save_btn->SetBackgroundColour(*wxWHITE); + save_btn->SetBackgroundColor(btn_bg_green); + save_btn->SetBorderColor(wxColour(0, 174, 66)); + save_btn->SetTextColor(wxColour("#FFFFFE")); + save_btn->SetMinSize(wxSize(-1, FromDIP(24))); + save_btn->SetCornerRadius(FromDIP(12)); + Button* cancel_btn = new Button(top_panel, _L("Cancel")); + cancel_btn->SetBackgroundColour(*wxWHITE); + cancel_btn->SetMinSize(wxSize(-1, FromDIP(24))); + cancel_btn->SetCornerRadius(FromDIP(12)); + save_btn->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_save, this); + cancel_btn->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_cancel, this); + btn_sizer->AddStretchSpacer(); + btn_sizer->Add(save_btn); + btn_sizer->AddSpacer(FromDIP(20)); + btn_sizer->Add(cancel_btn); + panel_sizer->Add(btn_sizer, 0, wxEXPAND, 0); + + + main_sizer->Add(top_panel, 1, wxEXPAND | wxALL, FromDIP(20)); + + SetSizer(main_sizer); + Layout(); + Fit(); + CenterOnParent(); + + wxGetApp().UpdateDlgDarkUI(this); +} + +EditCalibrationHistoryDialog::~EditCalibrationHistoryDialog() { +} + +PACalibResult EditCalibrationHistoryDialog::get_result() { + return m_new_result; +} + +void EditCalibrationHistoryDialog::on_save(wxCommandEvent& event) { + EndModal(wxID_OK); +} + +void EditCalibrationHistoryDialog::on_cancel(wxCommandEvent& event) { + EndModal(wxID_CANCEL); +} + +void EditCalibrationHistoryDialog::on_dpi_changed(const wxRect& suggested_rect) +{ +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/CaliHistoryDialog.hpp b/src/slic3r/GUI/CaliHistoryDialog.hpp new file mode 100644 index 000000000..38576fcba --- /dev/null +++ b/src/slic3r/GUI/CaliHistoryDialog.hpp @@ -0,0 +1,58 @@ +#ifndef slic3r_GUI_CaliHistory_hpp_ +#define slic3r_GUI_CaliHistory_hpp_ + +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" +#include "Widgets/ComboBox.hpp" +#include "DeviceManager.hpp" + +namespace Slic3r { +namespace GUI { + +class HistoryWindow : public DPIDialog { +public: + HistoryWindow(wxWindow* parent, const std::vector& calib_results_history); + ~HistoryWindow(); + void on_dpi_changed(const wxRect& suggested_rect) {} + void on_select_nozzle(wxCommandEvent& evt); + void reqeust_history_result(MachineObject* obj); + void sync_history_result(MachineObject* obj); + void on_device_connected(MachineObject* obj); + void on_timer(wxTimerEvent& event); + void update(MachineObject* obj); +protected: + void sync_history_data(); + void enbale_action_buttons(bool enable); + float get_nozzle_value(); + + wxPanel* m_history_data_panel; + ComboBox* m_comboBox_nozzle_dia; + Label* m_tips; + + wxTimer* m_refresh_timer { nullptr }; + + std::vector m_calib_results_history; + MachineObject* curr_obj { nullptr }; + int history_version = -1; +}; + +class EditCalibrationHistoryDialog : public DPIDialog +{ +public: + EditCalibrationHistoryDialog(wxWindow* parent, const PACalibResult& result); + ~EditCalibrationHistoryDialog(); + void on_dpi_changed(const wxRect& suggested_rect) override; + PACalibResult get_result(); + +protected: + virtual void on_save(wxCommandEvent& event); + virtual void on_cancel(wxCommandEvent& event); + +protected: + PACalibResult m_new_result; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index f6e9a3b14..62f4acff3 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -214,7 +214,8 @@ wxWindow* CalibrationDialog::create_check_option(wxString title, wxWindow* paren void CalibrationDialog::update_cali(MachineObject *obj) { if (!obj) return; - if (obj->is_function_supported(PrinterFunction::FUNC_AI_MONITORING)) { + if (obj->is_function_supported(PrinterFunction::FUNC_AI_MONITORING) + && obj->is_function_supported(PrinterFunction::FUNC_LIDAR_CALIBRATION)) { select_xcam_cali->Show(); } else { select_xcam_cali->Hide(); diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp new file mode 100644 index 000000000..1681572cd --- /dev/null +++ b/src/slic3r/GUI/CalibrationPanel.cpp @@ -0,0 +1,727 @@ +#include +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "CalibrationPanel.hpp" +#include "I18N.hpp" + +namespace Slic3r { namespace GUI { + +#define REFRESH_INTERVAL 1000 + +#define INITIAL_NUMBER_OF_MACHINES 0 +#define LIST_REFRESH_INTERVAL 200 +#define MACHINE_LIST_REFRESH_INTERVAL 2000 +wxDEFINE_EVENT(EVT_FINISHED_UPDATE_MLIST, wxCommandEvent); +wxDEFINE_EVENT(EVT_UPDATE_USER_MLIST, wxCommandEvent); + +wxString get_calibration_type_name(CalibMode cali_mode) +{ + switch (cali_mode) { + case CalibMode::Calib_PA_Line: + return _L("Flow Dynamics"); + case CalibMode::Calib_Flow_Rate: + return _L("Flow Rate"); + case CalibMode::Calib_Vol_speed_Tower: + return _L("Max Volumetric Speed"); + case CalibMode::Calib_Temp_Tower: + return _L("Temperature"); + case CalibMode::Calib_Retraction_tower: + return _L("Retraction"); + default: + return ""; + } +} + +MObjectPanel::MObjectPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) +{ + wxPanel::Create(parent, id, pos, SELECT_MACHINE_ITEM_SIZE, style, name); + Bind(wxEVT_PAINT, &MObjectPanel::OnPaint, this); + SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + + + m_printer_status_offline = ScalableBitmap(this, "printer_status_offline", 12); + m_printer_status_busy = ScalableBitmap(this, "printer_status_busy", 12); + m_printer_status_idle = ScalableBitmap(this, "printer_status_idle", 12); + m_printer_status_lock = ScalableBitmap(this, "printer_status_lock", 16); + m_printer_in_lan = ScalableBitmap(this, "printer_in_lan", 16); + + Bind(wxEVT_ENTER_WINDOW, &MObjectPanel::on_mouse_enter, this); + Bind(wxEVT_LEAVE_WINDOW, &MObjectPanel::on_mouse_leave, this); + Bind(wxEVT_LEFT_UP, &MObjectPanel::on_mouse_left_up, this); +} + + +MObjectPanel::~MObjectPanel() {} + + +void MObjectPanel::set_printer_state(PrinterState state) +{ + m_state = state; + Refresh(); +} + +void MObjectPanel::OnPaint(wxPaintEvent & event) +{ + wxPaintDC dc(this); + doRender(dc); +} + +void MObjectPanel::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void MObjectPanel::doRender(wxDC& dc) +{ + auto left = 10; + wxSize size = GetSize(); + dc.SetPen(*wxTRANSPARENT_PEN); + + auto dwbitmap = m_printer_status_offline; + if (m_state == PrinterState::IDLE) { dwbitmap = m_printer_status_idle; } + if (m_state == PrinterState::BUSY) { dwbitmap = m_printer_status_busy; } + if (m_state == PrinterState::OFFLINE) { dwbitmap = m_printer_status_offline; } + if (m_state == PrinterState::LOCK) { dwbitmap = m_printer_status_lock; } + if (m_state == PrinterState::IN_LAN) { dwbitmap = m_printer_in_lan; } + + // dc.DrawCircle(left, size.y / 2, 3); + dc.DrawBitmap(dwbitmap.bmp(), wxPoint(left, (size.y - dwbitmap.GetBmpSize().y) / 2)); + + left += dwbitmap.GetBmpSize().x + 8; + dc.SetFont(Label::Body_13); + dc.SetBackgroundMode(wxTRANSPARENT); + dc.SetTextForeground(StateColor::darkModeColorFor(SELECT_MACHINE_GREY900)); + wxString dev_name = ""; + if (m_info) { + dev_name = from_u8(m_info->dev_name); + + if (m_state == PrinterState::IN_LAN) { + dev_name += _L("(LAN)"); + } + } + auto sizet = dc.GetTextExtent(dev_name); + auto text_end = size.x - FromDIP(15); + + wxString finally_name = dev_name; + if (sizet.x > (text_end - left)) { + auto limit_width = text_end - left - dc.GetTextExtent("...").x - 15; + for (auto i = 0; i < dev_name.length(); i++) { + auto curr_width = dc.GetTextExtent(dev_name.substr(0, i)); + if (curr_width.x >= limit_width) { + finally_name = dev_name.substr(0, i) + "..."; + break; + } + } + } + + dc.DrawText(finally_name, wxPoint(left, (size.y - sizet.y) / 2)); + + + if (m_hover) { + dc.SetPen(SELECT_MACHINE_BRAND); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRectangle(0, 0, size.x, size.y); + } + +} + +void MObjectPanel::update_machine_info(MachineObject* info, bool is_my_devices) +{ + m_info = info; + m_is_my_devices = is_my_devices; + Refresh(); +} + +void MObjectPanel::on_mouse_enter(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(); +} + +void MObjectPanel::on_mouse_leave(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(); +} + +void MObjectPanel::on_mouse_left_up(wxMouseEvent& evt) +{ + if (m_is_my_devices) { + if (m_info && m_info->is_lan_mode_printer()) { + if (m_info->has_access_right() && m_info->is_avaliable()) { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + dev->set_selected_machine(m_info->dev_id); + } + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + dev->set_selected_machine(m_info->dev_id); + } + wxCommandEvent event(EVT_DISSMISS_MACHINE_LIST); + event.SetEventObject(this->GetParent()->GetParent()); + wxPostEvent(this, event); + } +} + +SelectMObjectPopup::SelectMObjectPopup(wxWindow* parent) + :PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), m_dismiss(false) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + + SetSize(SELECT_MACHINE_POPUP_SIZE); + SetMinSize(SELECT_MACHINE_POPUP_SIZE); + SetMaxSize(SELECT_MACHINE_POPUP_SIZE); + + Freeze(); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + SetBackgroundColour(SELECT_MACHINE_GREY400); + + + + m_scrolledWindow = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_LIST_SIZE, wxHSCROLL | wxVSCROLL); + m_scrolledWindow->SetBackgroundColour(*wxWHITE); + m_scrolledWindow->SetMinSize(SELECT_MACHINE_LIST_SIZE); + m_scrolledWindow->SetScrollRate(0, 5); + auto m_sizxer_scrolledWindow = new wxBoxSizer(wxVERTICAL); + m_scrolledWindow->SetSizer(m_sizxer_scrolledWindow); + m_scrolledWindow->Layout(); + m_sizxer_scrolledWindow->Fit(m_scrolledWindow); + + m_sizer_my_devices = new wxBoxSizer(wxVERTICAL); + m_sizxer_scrolledWindow->Add(m_sizer_my_devices, 0, wxEXPAND, 0); + + + m_sizer_main->Add(m_scrolledWindow, 0, wxALL | wxEXPAND, FromDIP(2)); + + SetSizer(m_sizer_main); + Layout(); + Thaw(); + +#ifdef __APPLE__ + m_scrolledWindow->Bind(wxEVT_LEFT_UP, &SelectMObjectPopup::OnLeftUp, this); +#endif // __APPLE__ + + m_refresh_timer = new wxTimer(); + m_refresh_timer->SetOwner(this); + Bind(EVT_UPDATE_USER_MLIST, &SelectMObjectPopup::update_machine_list, this); + Bind(wxEVT_TIMER, &SelectMObjectPopup::on_timer, this); + Bind(EVT_DISSMISS_MACHINE_LIST, &SelectMObjectPopup::on_dissmiss_win, this); +} + +SelectMObjectPopup::~SelectMObjectPopup() { delete m_refresh_timer; } + +void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus)) +{ + BOOST_LOG_TRIVIAL(trace) << "get_print_info: start"; + if (m_refresh_timer) { + m_refresh_timer->Stop(); + m_refresh_timer->Start(MACHINE_LIST_REFRESH_INTERVAL); + } + + if (wxGetApp().is_user_login()) { + if (!get_print_info_thread) { + get_print_info_thread = new boost::thread(Slic3r::create_thread([&] { + NetworkAgent* agent = wxGetApp().getAgent(); + unsigned int http_code; + std::string body; + int result = agent->get_user_print_info(&http_code, &body); + if (result == 0) { + m_print_info = body; + } + else { + m_print_info = ""; + } + wxCommandEvent event(EVT_UPDATE_USER_MLIST); + event.SetEventObject(this); + wxPostEvent(this, event); + })); + } + } + + wxPostEvent(this, wxTimerEvent()); + PopupWindow::Popup(); +} + +void SelectMObjectPopup::OnDismiss() +{ + BOOST_LOG_TRIVIAL(trace) << "get_print_info: dismiss"; + m_dismiss = true; + + if (m_refresh_timer) { + m_refresh_timer->Stop(); + } + if (get_print_info_thread) { + if (get_print_info_thread->joinable()) { + get_print_info_thread->join(); + delete get_print_info_thread; + get_print_info_thread = nullptr; + } + } + + wxCommandEvent event(EVT_FINISHED_UPDATE_MLIST); + event.SetEventObject(this); + wxPostEvent(this, event); +} + +bool SelectMObjectPopup::ProcessLeftDown(wxMouseEvent& event) { + return PopupWindow::ProcessLeftDown(event); +} + +bool SelectMObjectPopup::Show(bool show) { + if (show) { + for (int i = 0; i < m_user_list_machine_panel.size(); i++) { + m_user_list_machine_panel[i]->mPanel->update_machine_info(nullptr); + m_user_list_machine_panel[i]->mPanel->Hide(); + } + } + return PopupWindow::Show(show); +} + +void SelectMObjectPopup::on_timer(wxTimerEvent& event) +{ + BOOST_LOG_TRIVIAL(trace) << "SelectMObjectPopup on_timer"; + wxGetApp().reset_to_active(); + wxCommandEvent user_event(EVT_UPDATE_USER_MLIST); + user_event.SetEventObject(this); + wxPostEvent(this, user_event); +} + +void SelectMObjectPopup::update_user_devices() +{ + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + + if (!m_print_info.empty()) { + dev->parse_user_print_info(m_print_info); + m_print_info = ""; + } + + m_bind_machine_list.clear(); + m_bind_machine_list = dev->get_my_machine_list(); + + //sort list + std::vector> user_machine_list; + for (auto& it : m_bind_machine_list) { + user_machine_list.push_back(it); + } + + std::sort(user_machine_list.begin(), user_machine_list.end(), [&](auto& a, auto& b) { + if (a.second && b.second) { + return a.second->dev_name.compare(b.second->dev_name) < 0; + } + return false; + }); + + BOOST_LOG_TRIVIAL(trace) << "SelectMObjectPopup update_machine_list start"; + this->Freeze(); + m_scrolledWindow->Freeze(); + int i = 0; + + for (auto& elem : user_machine_list) { + MachineObject* mobj = elem.second; + MObjectPanel* op = nullptr; + if (i < m_user_list_machine_panel.size()) { + op = m_user_list_machine_panel[i]->mPanel; + op->Show(); + } + else { + op = new MObjectPanel(m_scrolledWindow, wxID_ANY); + MPanel* mpanel = new MPanel(); + mpanel->mIndex = wxString::Format("%d", i); + mpanel->mPanel = op; + m_user_list_machine_panel.push_back(mpanel); + m_sizer_my_devices->Add(op, 0, wxEXPAND, 0); + } + i++; + op->update_machine_info(mobj, true); + //set in lan + if (mobj->is_lan_mode_printer()) { + if (!mobj->is_online()) { + continue; + } + else { + if (mobj->has_access_right() && mobj->is_avaliable()) { + op->set_printer_state(PrinterState::IN_LAN); + op->SetToolTip(_L("Online")); + } + else { + op->set_printer_state(PrinterState::LOCK); + } + } + } + else { + if (!mobj->is_online()) { + op->SetToolTip(_L("Offline")); + op->set_printer_state(PrinterState::OFFLINE); + } + else { + if (mobj->is_in_printing()) { + op->SetToolTip(_L("Busy")); + op->set_printer_state(PrinterState::BUSY); + } + else { + op->SetToolTip(_L("Online")); + op->set_printer_state(PrinterState::IDLE); + } + } + } + } + + for (int j = i; j < m_user_list_machine_panel.size(); j++) { + m_user_list_machine_panel[j]->mPanel->update_machine_info(nullptr); + m_user_list_machine_panel[j]->mPanel->Hide(); + } + //m_sizer_my_devices->Layout(); + + if (m_my_devices_count != i) { + m_scrolledWindow->Fit(); + } + m_scrolledWindow->Layout(); + m_scrolledWindow->Thaw(); + Layout(); + Fit(); + this->Thaw(); + m_my_devices_count = i; +} + +void SelectMObjectPopup::on_dissmiss_win(wxCommandEvent& event) +{ + Dismiss(); +} + +void SelectMObjectPopup::update_machine_list(wxCommandEvent& event) +{ + update_user_devices(); + BOOST_LOG_TRIVIAL(trace) << "SelectMObjectPopup update_machine_list end"; +} + +void SelectMObjectPopup::OnLeftUp(wxMouseEvent& event) +{ + auto mouse_pos = ClientToScreen(event.GetPosition()); + auto wxscroll_win_pos = m_scrolledWindow->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > wxscroll_win_pos.x && mouse_pos.y > wxscroll_win_pos.y && mouse_pos.x < (wxscroll_win_pos.x + m_scrolledWindow->GetSize().x) && + mouse_pos.y < (wxscroll_win_pos.y + m_scrolledWindow->GetSize().y)) { + + for (MPanel* p : m_user_list_machine_panel) { + auto p_rect = p->mPanel->ClientToScreen(wxPoint(0, 0)); + if (mouse_pos.x > p_rect.x && mouse_pos.y > p_rect.y && mouse_pos.x < (p_rect.x + p->mPanel->GetSize().x) && mouse_pos.y < (p_rect.y + p->mPanel->GetSize().y)) { + wxMouseEvent event(wxEVT_LEFT_UP); + auto tag_pos = p->mPanel->ScreenToClient(mouse_pos); + event.SetPosition(tag_pos); + event.SetEventObject(p->mPanel); + wxPostEvent(p->mPanel, event); + } + } + } +} + + +CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style), + m_mobjectlist_popup(SelectMObjectPopup(this)) +{ + SetBackgroundColour(*wxWHITE); + + init_tabpanel(); + + wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL); + sizer_main->Add(m_tabpanel, 1, wxEXPAND, 0); + + SetSizerAndFit(sizer_main); + Layout(); + + init_timer(); + Bind(wxEVT_TIMER, &CalibrationPanel::on_timer, this); +} + +void CalibrationPanel::init_tabpanel() { + m_side_tools = new SideTools(this, wxID_ANY); + m_side_tools->get_panel()->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(CalibrationPanel::on_printer_clicked), NULL, this); + + + wxBoxSizer* sizer_side_tools = new wxBoxSizer(wxVERTICAL); + sizer_side_tools->Add(m_side_tools, 1, wxEXPAND, 0); + + m_tabpanel = new Tabbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, sizer_side_tools, wxNB_LEFT | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); + m_side_tools->set_table_panel(m_tabpanel); + m_tabpanel->SetBackgroundColour(*wxWHITE); + + m_cali_panels[0] = new PressureAdvanceWizard(m_tabpanel); + m_cali_panels[1] = new FlowRateWizard(m_tabpanel); + //m_cali_panels[2] = new MaxVolumetricSpeedWizard(m_tabpanel); + + for (int i = 0; i < (int)CALI_MODE_COUNT; i++) { + bool selected = false; + if (i == 0) + selected = true; + m_tabpanel->AddPage(m_cali_panels[i], + get_calibration_type_name(m_cali_panels[i]->get_calibration_mode()), + "", + selected); + } + + for (int i = 0; i < (int)CALI_MODE_COUNT; i++) + m_tabpanel->SetPageImage(i, ""); + + auto padding_size = m_tabpanel->GetBtnsListCtrl()->GetPaddingSize(0); + m_tabpanel->GetBtnsListCtrl()->SetPaddingSize({ FromDIP(15), padding_size.y }); + + m_initialized = true; +} + +void CalibrationPanel::init_timer() +{ + m_refresh_timer = new wxTimer(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(REFRESH_INTERVAL); + wxPostEvent(this, wxTimerEvent()); +} + +void CalibrationPanel::on_timer(wxTimerEvent& event) { + update_all(); +} + +void CalibrationPanel::update_print_error_info(int code, std::string msg, std::string extra) { + // update current wizard only + int curr_selected = m_tabpanel->GetSelection(); + if (curr_selected >= 0 && curr_selected < CALI_MODE_COUNT) { + if (m_cali_panels[curr_selected]) { + auto page = m_cali_panels[curr_selected]->get_curr_step()->page; + if(page && page->get_page_type() == CaliPageType::CALI_PAGE_PRESET){ + auto preset_page = static_cast(page); + if (preset_page->get_page_status() == CaliPresetPageStatus::CaliPresetStatusSending) + preset_page->update_print_error_info(code, msg, extra); + } + } + } +} + +void CalibrationPanel::update_all() { + + NetworkAgent* m_agent = wxGetApp().getAgent(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + obj = dev->get_selected_machine(); + + // update current wizard only + int curr_selected = m_tabpanel->GetSelection(); + + if (curr_selected >= 0 && curr_selected < CALI_MODE_COUNT) { + if (m_cali_panels[curr_selected]) + m_cali_panels[curr_selected]->update(obj); + } + + if (obj) { + if (last_obj != obj && obj->is_info_ready()) { + for (int i = 0; i < CALI_MODE_COUNT; i++) { + m_cali_panels[i]->on_device_connected(obj); + } + last_obj = obj; + } + } + + // check valid machine + if (obj && dev->get_my_machine(obj->dev_id) == nullptr) { + dev->set_selected_machine(""); + if (m_agent) + m_agent->set_user_selected_machine(""); + show_status((int)MONITOR_NO_PRINTER); + return; + } + + if (wxGetApp().is_user_login()) { + dev->check_pushing(); + try { + m_agent->refresh_connection(); + } + catch (...) { + ; + } + } + + if (obj) { + wxGetApp().reset_to_active(); + if (obj->connection_type() != last_conn_type) { + last_conn_type = obj->connection_type(); + } + } + + m_side_tools->update_status(obj); + + if (!obj) { + show_status((int)MONITOR_NO_PRINTER); + return; + } + + if (obj->is_connecting()) { + show_status(MONITOR_CONNECTING); + return; + } + else if (!obj->is_connected()) { + int server_status = 0; + // only disconnected server in cloud mode + if (obj->connection_type() != "lan") { + if (m_agent) { + server_status = m_agent->is_server_connected() ? 0 : (int)MONITOR_DISCONNECTED_SERVER; + } + } + show_status((int)MONITOR_DISCONNECTED + server_status); + return; + } + + show_status(MONITOR_NORMAL); +} + +void CalibrationPanel::show_status(int status) +{ + if (!m_initialized) return; + if (last_status == status)return; + if (last_status & (int)MonitorStatus::MONITOR_CONNECTING != 0) { + NetworkAgent* agent = wxGetApp().getAgent(); + json j; + j["dev_id"] = obj ? obj->dev_id : "obj_nullptr"; + if (status & (int)MonitorStatus::MONITOR_DISCONNECTED != 0) { + j["result"] = "failed"; + if (agent) { + agent->track_event("connect_dev", j.dump()); + } + } + else if (status & (int)MonitorStatus::MONITOR_NORMAL != 0) { + j["result"] = "success"; + if (agent) { + agent->track_event("connect_dev", j.dump()); + } + } + } + last_status = status; + + BOOST_LOG_TRIVIAL(info) << "monitor: show_status = " << status; + + + Freeze(); + // update panels + if (m_side_tools) { m_side_tools->show_status(status); }; + + if ((status & (int)MonitorStatus::MONITOR_NO_PRINTER) != 0) { + set_default(); + m_tabpanel->Layout(); + } + else if (((status & (int)MonitorStatus::MONITOR_NORMAL) != 0) + || ((status & (int)MonitorStatus::MONITOR_DISCONNECTED) != 0) + || ((status & (int)MonitorStatus::MONITOR_DISCONNECTED_SERVER) != 0) + || ((status & (int)MonitorStatus::MONITOR_CONNECTING) != 0)) + { + + if (((status & (int)MonitorStatus::MONITOR_DISCONNECTED) != 0) + || ((status & (int)MonitorStatus::MONITOR_DISCONNECTED_SERVER) != 0) + || ((status & (int)MonitorStatus::MONITOR_CONNECTING) != 0)) + { + set_default(); + } + m_tabpanel->Layout(); + } + Layout(); + Thaw(); +} + +bool CalibrationPanel::Show(bool show) { + if (show) { + m_refresh_timer->Stop(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(REFRESH_INTERVAL); + wxPostEvent(this, wxTimerEvent()); + + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + //set a default machine when obj is null + obj = dev->get_selected_machine(); + if (obj == nullptr) { + dev->load_last_machine(); + obj = dev->get_selected_machine(); + if (obj) + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + } + else { + obj->reset_update_time(); + } + } + + } + else { + m_refresh_timer->Stop(); + } + return wxPanel::Show(show); +} + +void CalibrationPanel::on_printer_clicked(wxMouseEvent& event) +{ + auto mouse_pos = ClientToScreen(event.GetPosition()); + wxPoint rect = m_side_tools->ClientToScreen(wxPoint(0, 0)); + + if (!m_side_tools->is_in_interval()) { + wxPoint pos = m_side_tools->ClientToScreen(wxPoint(0, 0)); + pos.y += m_side_tools->GetRect().height; + m_mobjectlist_popup.Move(pos); + +#ifdef __linux__ + m_mobjectlist_popup.SetSize(wxSize(m_side_tools->GetSize().x, -1)); + m_mobjectlist_popup.SetMaxSize(wxSize(m_side_tools->GetSize().x, -1)); + m_mobjectlist_popup.SetMinSize(wxSize(m_side_tools->GetSize().x, -1)); +#endif + + m_mobjectlist_popup.Popup(); + } +} + +void CalibrationPanel::set_default() +{ + obj = nullptr; + last_conn_type = "undefined"; + wxGetApp().sidebar().load_ams_list({}, {}); +} + +void CalibrationPanel::msw_rescale() +{ + for (int i = 0; i < (int)CALI_MODE_COUNT; i++) { + m_cali_panels[i]->msw_rescale(); + } +} + +void CalibrationPanel::on_sys_color_changed() +{ + for (int i = 0; i < (int)CALI_MODE_COUNT; i++) { + m_cali_panels[i]->on_sys_color_changed(); + } +} + +CalibrationPanel::~CalibrationPanel() { + m_side_tools->get_panel()->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(CalibrationPanel::on_printer_clicked), NULL, this); + if (m_refresh_timer) + m_refresh_timer->Stop(); + delete m_refresh_timer; +} + +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationPanel.hpp b/src/slic3r/GUI/CalibrationPanel.hpp new file mode 100644 index 000000000..ca55e07f1 --- /dev/null +++ b/src/slic3r/GUI/CalibrationPanel.hpp @@ -0,0 +1,135 @@ +#ifndef slic3r_GUI_CalibrationPanel_hpp_ +#define slic3r_GUI_CalibrationPanel_hpp_ + +#include "CalibrationWizard.hpp" +#include "Tabbook.hpp" +//#include "Widgets/SideTools.hpp" + +namespace Slic3r { namespace GUI { + +#define SELECT_MACHINE_GREY900 wxColour(38, 46, 48) +#define SELECT_MACHINE_GREY600 wxColour(144,144,144) +#define SELECT_MACHINE_GREY400 wxColour(206, 206, 206) +#define SELECT_MACHINE_BRAND wxColour(0, 174, 66) +#define SELECT_MACHINE_REMIND wxColour(255,111,0) +#define SELECT_MACHINE_LIGHT_GREEN wxColour(219, 253, 231) + +#define CALI_MODE_COUNT 2 + + +wxString get_calibration_type_name(CalibMode cali_mode); + +class MObjectPanel : public wxPanel +{ +private: + bool m_is_my_devices{ false }; + bool m_hover{ false }; + + PrinterState m_state; + ScalableBitmap m_printer_status_offline; + ScalableBitmap m_printer_status_busy; + ScalableBitmap m_printer_status_idle; + ScalableBitmap m_printer_status_lock; + ScalableBitmap m_printer_in_lan; + MachineObject* m_info; + +public: + MObjectPanel(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL, + const wxString& name = wxEmptyString); + + ~MObjectPanel(); + + void set_printer_state(PrinterState state); + void update_machine_info(MachineObject* info, bool is_my_devices = false); +protected: + void OnPaint(wxPaintEvent& event); + void render(wxDC& dc); + void doRender(wxDC& dc); + void on_mouse_enter(wxMouseEvent& evt); + void on_mouse_leave(wxMouseEvent& evt); + void on_mouse_left_up(wxMouseEvent& evt); +}; + +class MPanel +{ +public: + wxString mIndex; + MObjectPanel* mPanel; +}; + +class SelectMObjectPopup : public PopupWindow +{ +public: + SelectMObjectPopup(wxWindow* parent); + ~SelectMObjectPopup(); + + // PopupWindow virtual methods are all overridden to log them + virtual void Popup(wxWindow* focus = NULL) wxOVERRIDE; + virtual void OnDismiss() wxOVERRIDE; + virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; + virtual bool Show(bool show = true) wxOVERRIDE; + + void update_machine_list(wxCommandEvent& event); + bool was_dismiss() { return m_dismiss; } + +private: + int m_my_devices_count{ 0 }; + int m_other_devices_count{ 0 }; + bool m_dismiss{ false }; + wxWindow* m_placeholder_panel { nullptr }; + wxWindow* m_panel_body{ nullptr }; + wxBoxSizer* m_sizer_body{ nullptr }; + wxBoxSizer* m_sizer_my_devices{ nullptr }; + wxScrolledWindow* m_scrolledWindow{ nullptr }; + wxTimer* m_refresh_timer{ nullptr }; + std::vector m_user_list_machine_panel; + boost::thread* get_print_info_thread{ nullptr }; + std::string m_print_info; + std::map m_bind_machine_list; + +private: + void OnLeftUp(wxMouseEvent& event); + void on_timer(wxTimerEvent& event); + void update_user_devices(); + void on_dissmiss_win(wxCommandEvent& event); +}; + + +class CalibrationPanel : public wxPanel +{ +public: + CalibrationPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~CalibrationPanel(); + Tabbook* get_tabpanel() { return m_tabpanel; }; + void update_print_error_info(int code, std::string msg, std::string extra); + void update_all(); + void show_status(int status); + bool Show(bool show); + void on_printer_clicked(wxMouseEvent& event); + void set_default(); + void msw_rescale(); + void on_sys_color_changed(); +protected: + void init_tabpanel(); + void init_timer(); + void on_timer(wxTimerEvent& event); + + + int last_status; + bool m_initialized { false }; + std::string last_conn_type = "undedefined"; + MachineObject* obj{ nullptr }; + MachineObject* last_obj { nullptr }; + SideTools* m_side_tools{ nullptr }; + Tabbook* m_tabpanel{ nullptr }; + SelectMObjectPopup m_mobjectlist_popup; + CalibrationWizard* m_cali_panels[CALI_MODE_COUNT]; + wxTimer* m_refresh_timer = nullptr; +}; +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp new file mode 100644 index 000000000..3171e4b47 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -0,0 +1,1334 @@ +#include "CalibrationWizard.hpp" +#include "I18N.hpp" +#include "GUI_App.hpp" +#include "MsgDialog.hpp" +#include "CalibrationWizardPage.hpp" +#include "../../libslic3r/Calib.hpp" +#include "Tabbook.hpp" +#include "CaliHistoryDialog.hpp" + +namespace Slic3r { namespace GUI { + +#define CALIBRATION_DEBUG + +wxDEFINE_EVENT(EVT_DEVICE_CHANGED, wxCommandEvent); +wxDEFINE_EVENT(EVT_CALIBRATION_JOB_FINISHED, wxCommandEvent); + +static const wxString NA_STR = _L("N/A"); + +bool check_preset_name_valid(const wxString& name) { + wxString error_message; + if (name.IsEmpty()) { + error_message = _L("Please enter the name you want to save to printer."); + } else if (name.Length() > 40) { + error_message = _L("The name cannot exceed 40 characters."); + } + if (!error_message.IsEmpty()) { + MessageDialog error_msg_dlg(nullptr, error_message, wxEmptyString, wxICON_WARNING | wxOK); + error_msg_dlg.ShowModal(); + return false; + } + return true; +} + +std::map get_cached_selected_filament(MachineObject* obj) { + std::map selected_filament_map; + if (!obj) return selected_filament_map; + + PresetCollection* filament_presets = &wxGetApp().preset_bundle->filaments; + for (auto selected_prest : obj->selected_cali_preset) { + Preset* preset = filament_presets->find_preset(selected_prest.name); + if (!preset) + continue; + + selected_filament_map.emplace(std::make_pair(selected_prest.tray_id, preset)); + } + return selected_filament_map; +} + +CalibrationWizard::CalibrationWizard(wxWindow* parent, CalibMode mode, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) + , m_mode(mode) +{ + SetBackgroundColour(wxColour(0xEEEEEE)); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + m_scrolledWindow = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL | wxVSCROLL); + m_scrolledWindow->SetScrollRate(5, 5); + m_scrolledWindow->SetBackgroundColour(*wxWHITE); + + wxBoxSizer* padding_sizer = new wxBoxSizer(wxHORIZONTAL); + padding_sizer->Add(0, 0, 1); + + m_all_pages_sizer = new wxBoxSizer(wxVERTICAL); + padding_sizer->Add(m_all_pages_sizer, 0); + + padding_sizer->Add(0, 0, 1); + + m_scrolledWindow->SetSizer(padding_sizer); + + main_sizer->Add(m_scrolledWindow, 1, wxEXPAND | wxALL, FromDIP(10)); + + this->SetSizer(main_sizer); + this->Layout(); + main_sizer->Fit(this); + + Bind(EVT_CALIBRATION_JOB_FINISHED, &CalibrationWizard::on_cali_job_finished, this); +} + +CalibrationWizard::~CalibrationWizard() +{ + ; +} + +void CalibrationWizard::on_cali_job_finished(wxCommandEvent& event) +{ + this->on_cali_job_finished(event.GetString()); + event.Skip(); +} + +void CalibrationWizard::show_step(CalibrationWizardPageStep* step) +{ + if (!step) + return; + + if (m_curr_step) { + m_curr_step->page->Hide(); + } + + m_curr_step = step; + + if (m_curr_step) { + m_curr_step->page->Show(); + } + + Layout(); +} + +void CalibrationWizard::update(MachineObject* obj) +{ + curr_obj = obj; + + /* only update curr step + if (m_curr_step) { + m_curr_step->page->update(obj); + } + */ + if (!obj) { + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->on_reset_page(); + } + } + + // update all page steps + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->update(obj); + } +} + +void CalibrationWizard::on_device_connected(MachineObject* obj) +{ + if (!m_page_steps.empty()) + show_step(m_page_steps.front()); + + recover_preset_info(obj); + + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->on_device_connected(obj); + } +} + +void CalibrationWizard::set_cali_method(CalibrationMethod method) +{ + m_cali_method = method; + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->set_cali_method(method); + } +} + +bool CalibrationWizard::save_preset(const std::string &old_preset_name, const std::string &new_preset_name, const std::map &key_values, std::string& message) +{ + if (new_preset_name.empty()) { + message = L("The name cannot be empty."); + return false; + } + + PresetCollection *filament_presets = &wxGetApp().preset_bundle->filaments; + Preset* preset = filament_presets->find_preset(old_preset_name); + if (!preset) { + message = (boost::format(L("The selected preset: %1% is not found.")) % old_preset_name).str(); + return false; + } + + Preset temp_preset = *preset; + + std::string new_name = filament_presets->get_preset_name_by_alias(new_preset_name); + bool exist_preset = false; + // If name is current, get the editing preset + Preset *new_preset = filament_presets->find_preset(new_name); + if (new_preset) { + if (new_preset->is_system) { + message = L("The name cannot be the same as the system preset name."); + return false; + } + + if (new_preset != preset) { + message = L("The name is the same as another existing preset name"); + return false; + } + if (new_preset != &filament_presets->get_edited_preset()) new_preset = &temp_preset; + exist_preset = true; + } else { + new_preset = &temp_preset; + } + + for (auto item : key_values) { + new_preset->config.set_key_value(item.first, item.second); + } + + // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini + filament_presets->save_current_preset(new_name, false, false, new_preset); + + // BBS create new settings + new_preset = filament_presets->find_preset(new_name, false, true); + // Preset* preset = &m_presets.preset(it - m_presets.begin(), true); + if (!new_preset) { + BOOST_LOG_TRIVIAL(info) << "create new preset failed"; + message = L("create new preset failed."); + return false; + } + + // set sync_info for sync service + if (exist_preset) { + new_preset->sync_info = "update"; + BOOST_LOG_TRIVIAL(info) << "sync_preset: update preset = " << new_preset->name; + } else { + new_preset->sync_info = "create"; + if (wxGetApp().is_user_login()) new_preset->user_id = wxGetApp().getAgent()->get_user_id(); + BOOST_LOG_TRIVIAL(info) << "sync_preset: create preset = " << new_preset->name; + } + new_preset->save_info(); + + // Mark the print & filament enabled if they are compatible with the currently selected preset. + // If saving the preset changes compatibility with other presets, keep the now incompatible dependent presets selected, however with a "red flag" icon showing that they are + // no more compatible. + wxGetApp().preset_bundle->update_compatible(PresetSelectCompatibleType::Never); + + // BBS if create a new prset name, preset changed from preset name to new preset name + if (!exist_preset) { wxGetApp().plater()->sidebar().update_presets_from_to(Preset::Type::TYPE_FILAMENT, old_preset_name, new_preset->name); } + + // todo: zhimin + // wxGetApp().mainframe->update_filament_tab_ui(); + return true; +} + +void CalibrationWizard::cache_preset_info(MachineObject* obj, float nozzle_dia) +{ + if (!obj) return; + + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + + std::map selected_filaments = preset_page->get_selected_filaments(); + + obj->selected_cali_preset.clear(); + for (auto& item : selected_filaments) { + CaliPresetInfo result; + result.tray_id = item.first; + result.nozzle_diameter = nozzle_dia; + result.filament_id = item.second->filament_id; + result.setting_id = item.second->setting_id; + result.name = item.second->name; + obj->selected_cali_preset.push_back(result); + } + + CaliPresetStage stage; + preset_page->get_cali_stage(stage, obj->cache_flow_ratio); + + back_preset_info(obj, false); +} + +void CalibrationWizard::recover_preset_info(MachineObject *obj) +{ + std::vector back_infos = wxGetApp().app_config->get_printer_cali_infos(); + for (const auto& back_info : back_infos) { + if (obj && (obj->dev_id == back_info.dev_id) ) { + obj->dev_id = back_info.dev_id; + obj->cali_finished = back_info.cali_finished; + obj->cache_flow_ratio = back_info.cache_flow_ratio; + obj->selected_cali_preset = back_info.selected_presets; + } + } +} + +void CalibrationWizard::back_preset_info(MachineObject *obj, bool cali_finish) +{ + PrinterCaliInfo printer_cali_info; + printer_cali_info.dev_id = obj->dev_id; + printer_cali_info.cali_finished = cali_finish; + printer_cali_info.cache_flow_ratio = obj->cache_flow_ratio; + printer_cali_info.selected_presets = obj->selected_cali_preset; + wxGetApp().app_config->save_printer_cali_infos(printer_cali_info); +} + +void CalibrationWizard::msw_rescale() +{ + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->msw_rescale(); + } +} + +void CalibrationWizard::on_sys_color_changed() +{ + for (int i = 0; i < m_page_steps.size(); i++) { + if (m_page_steps[i]->page) + m_page_steps[i]->page->on_sys_color_changed(); + } +} + +void CalibrationWizard::on_cali_go_home() +{ + // can go home? confirm to continue + CalibrationMethod method; + int cali_stage = 0; + CalibMode obj_cali_mode = get_obj_calibration_mode(curr_obj, method, cali_stage); + + bool double_confirm = false; + CaliPageType page_type = get_curr_step()->page->get_page_type(); + if (page_type == CaliPageType::CALI_PAGE_COARSE_SAVE || + page_type == CaliPageType::CALI_PAGE_FINE_SAVE || + page_type == CaliPageType::CALI_PAGE_COMMON_SAVE || + page_type == CaliPageType::CALI_PAGE_FLOW_SAVE || + page_type == CaliPageType::CALI_PAGE_PA_SAVE) { + double_confirm = true; + } + if (obj_cali_mode == m_mode && curr_obj && (curr_obj->is_in_printing() || double_confirm)) { + if (go_home_dialog == nullptr) + go_home_dialog = new SecondaryCheckDialog(this, wxID_ANY, _L("Confirm")); + + go_home_dialog->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, method](wxCommandEvent &e) { + if (curr_obj) { + curr_obj->command_task_abort(); + } else { + assert(false); + } + if (!m_page_steps.empty()) { + back_preset_info(curr_obj, true); + show_step(m_page_steps.front()); + } + }); + + go_home_dialog->update_text(_L("Are you sure to cancel the current calibration and return to the home page?")); + go_home_dialog->on_show(); + } else { + if (!m_page_steps.empty()) { + back_preset_info(curr_obj, true); + show_step(m_page_steps.front()); + } + } +} + +PressureAdvanceWizard::PressureAdvanceWizard(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationWizard(parent, CalibMode::Calib_PA_Line, id, pos, size, style) +{ + create_pages(); +} + +void PressureAdvanceWizard::create_pages() +{ + start_step = new CalibrationWizardPageStep(new CalibrationPAStartPage(m_scrolledWindow)); + preset_step = new CalibrationWizardPageStep(new CalibrationPresetPage(m_scrolledWindow, m_mode, false)); + cali_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode)); + save_step = new CalibrationWizardPageStep(new CalibrationPASavePage(m_scrolledWindow)); + + m_all_pages_sizer->Add(start_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(preset_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(cali_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(save_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + + + m_page_steps.push_back(start_step); + m_page_steps.push_back(preset_step); + m_page_steps.push_back(cali_step); + m_page_steps.push_back(save_step); + + for (int i = 0; i < m_page_steps.size() -1; i++) { + m_page_steps[i]->chain(m_page_steps[i+1]); + } + + for (int i = 0; i < m_page_steps.size(); i++) { + m_page_steps[i]->page->Hide(); + m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &PressureAdvanceWizard::on_cali_action, this); + } + + if (!m_page_steps.empty()) + show_step(m_page_steps.front()); +} + +void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt) +{ + CaliPageActionType action = static_cast(evt.GetInt()); + if (action == CaliPageActionType::CALI_ACTION_MANAGE_RESULT) { + HistoryWindow history_dialog(this, m_calib_results_history); + history_dialog.on_device_connected(curr_obj); + history_dialog.ShowModal(); + } + else if (action == CaliPageActionType::CALI_ACTION_MANUAL_CALI) { + preset_step->page->set_cali_filament_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE); + set_cali_method(CalibrationMethod::CALI_METHOD_MANUAL); + preset_step->page->on_device_connected(curr_obj); + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_AUTO_CALI) { + CalibrationFilamentMode fila_mode = get_cali_filament_mode(curr_obj, m_mode); + preset_step->page->set_cali_filament_mode(fila_mode); + set_cali_method(CalibrationMethod::CALI_METHOD_AUTO); + preset_step->page->on_device_connected(curr_obj); + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_NEXT) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_CALI_NEXT) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_PREV) { + show_step(m_curr_step->prev); + } + else if (action == CaliPageActionType::CALI_ACTION_CALI) { + on_cali_start(); + } + else if (action == CaliPageActionType::CALI_ACTION_GO_HOME) { + on_cali_go_home(); + } else if (action == CaliPageActionType::CALI_ACTION_PA_SAVE) { + on_cali_save(); + } +} + +void PressureAdvanceWizard::update(MachineObject* obj) +{ + CalibrationWizard::update(obj); +} + +void PressureAdvanceWizard::on_device_connected(MachineObject* obj) +{ + CalibrationWizard::on_device_connected(obj); + + CalibrationMethod method; + int cali_stage = 0; + CalibMode obj_cali_mode = get_obj_calibration_mode(obj, method, cali_stage); + + // show cali step when obj is in pa calibration + if (obj) { + CalibrationWizard::set_cali_method(method); + + if (m_curr_step != cali_step) { + if (obj_cali_mode == m_mode) { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { + CalibrationWizard::set_cali_method(method); + show_step(cali_step); + } + } + } + } +} + +static bool get_preset_info(const DynamicConfig& config, const BedType plate_type, int& nozzle_temp, int& bed_temp, float& max_volumetric_speed) +{ + const ConfigOptionInts* nozzle_temp_opt = config.option("nozzle_temperature"); + const ConfigOptionInts* opt_bed_temp_ints = config.option(get_bed_temp_key(plate_type)); + const ConfigOptionFloats* speed_opt = config.option("filament_max_volumetric_speed"); + if (nozzle_temp_opt && speed_opt && opt_bed_temp_ints) { + nozzle_temp = nozzle_temp_opt->get_at(0); + max_volumetric_speed = speed_opt->get_at(0); + bed_temp = opt_bed_temp_ints->get_at(0); + if (bed_temp >= 0 && nozzle_temp >= 0 && max_volumetric_speed >= 0) { + return true; + } + } + return false; +} + +static bool get_flow_ratio(const DynamicConfig& config, float& flow_ratio) +{ + const ConfigOptionFloats *flow_ratio_opt = config.option("filament_flow_ratio"); + if (flow_ratio_opt) { + flow_ratio = flow_ratio_opt->get_at(0); + if (flow_ratio > 0) + return true; + } + return false; +} + +void PressureAdvanceWizard::on_cali_start() +{ + if (!curr_obj) { + MessageDialog msg_dlg(nullptr, _L("No Printer Connected!"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + if (curr_obj->is_connecting() || !curr_obj->is_connected()) { + MessageDialog msg_dlg(nullptr, _L("Printer is not connected yet."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + //clean PA result + curr_obj->reset_pa_cali_result(); + + float nozzle_dia = -1; + std::string setting_id; + BedType plate_type = BedType::btDefault; + + // save preset info to machine object + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + std::map selected_filaments = preset_page->get_selected_filaments(); + if (selected_filaments.empty()) { + MessageDialog msg_dlg(nullptr, _L("Please select filament to calibrate."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + preset_page->get_preset_info(nozzle_dia, plate_type); + + CalibrationWizard::cache_preset_info(curr_obj, nozzle_dia); + + if (nozzle_dia < 0 || plate_type == BedType::btDefault) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get preset info, nozzle and plate type error"; + return; + } + + if (curr_obj->get_printer_series() == PrinterSeries::SERIES_X1) { + X1CCalibInfos calib_infos; + for (auto& item : selected_filaments) { + int nozzle_temp = -1; + int bed_temp = -1; + float max_volumetric_speed = -1; + + if (!get_preset_info(item.second->config, plate_type, nozzle_temp, bed_temp, max_volumetric_speed)) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get preset info error"; + continue; + } + + X1CCalibInfos::X1CCalibInfo calib_info; + calib_info.tray_id = item.first; + calib_info.nozzle_diameter = nozzle_dia; + calib_info.filament_id = item.second->filament_id; + calib_info.setting_id = item.second->setting_id; + calib_info.bed_temp = bed_temp; + calib_info.nozzle_temp = nozzle_temp; + calib_info.max_volumetric_speed = max_volumetric_speed; + calib_infos.calib_datas.push_back(calib_info); + } + + std::string error_message; + wxString wx_err_string; + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + CalibUtils::calib_PA(calib_infos, 0, error_message); // mode = 0 for auto + wx_err_string = from_u8(error_message); + } else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + CalibUtils::calib_PA(calib_infos, 1, error_message); // mode = 1 for manual + wx_err_string = from_u8(error_message); + } else { + assert(false); + } + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + } + else if (curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + if (selected_filaments.empty()) { + BOOST_LOG_TRIVIAL(warning) << "CaliPreset: selected filaments is empty"; + return; + } + + int nozzle_temp = -1; + int bed_temp = -1; + float max_volumetric_speed = -1; + if (!get_preset_info(selected_filaments.begin()->second->config, plate_type, nozzle_temp, bed_temp, max_volumetric_speed)) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get preset info error"; + return; + } + + curr_obj->command_start_extrusion_cali(selected_filaments.begin()->first, + nozzle_temp, bed_temp, max_volumetric_speed, setting_id); + } else { + assert(false); + } + + show_step(m_curr_step->next); + + CalibrationCaliPage* cali_page = (static_cast(cali_step->page)); + cali_page->clear_last_job_status(); +} + +void PressureAdvanceWizard::on_cali_save() +{ + if (curr_obj) { + if (curr_obj->is_connecting() || !curr_obj->is_connected()) + { + MessageDialog msg_dlg(nullptr, _L("Connecting to printer..."), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + return; + } + + if (curr_obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + std::vector new_pa_cali_results; + auto save_page = static_cast(save_step->page); + if (!save_page->get_auto_result(new_pa_cali_results)) { + return; + } + if (save_page->is_all_failed()) { + MessageDialog msg_dlg(nullptr, _L("The failed test result has been dropped."), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + show_step(start_step); + return; + } + + CalibUtils::set_PA_calib_result(new_pa_cali_results, true); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + PACalibResult new_pa_cali_result; + auto save_page = static_cast(save_step->page); + if (!save_page->get_manual_result(new_pa_cali_result)) { + return; + } + CalibUtils::set_PA_calib_result({ new_pa_cali_result }, false); + } + + MessageDialog msg_dlg(nullptr, _L("Flow Dynamics Calibration result has been saved to the printer"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + } + else if (curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + auto save_page = static_cast(save_step->page); + float new_k_value = 0.0f; + float new_n_value = 0.0f; + if (!save_page->get_p1p_result(&new_k_value, &new_n_value)) { + return; + } + + float nozzle_dia = 0.4; + BedType plate_type = BedType::btDefault; + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + preset_page->get_preset_info(nozzle_dia, plate_type); + std::map selected_filaments = get_cached_selected_filament(curr_obj); + if (selected_filaments.empty()) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get selected filaments error"; + return; + } + int tray_id = selected_filaments.begin()->first; + std::string setting_id = selected_filaments.begin()->second->setting_id; + + int nozzle_temp = -1; + int bed_temp = -1; + float max_volumetric_speed = -1; + if (!get_preset_info(selected_filaments.begin()->second->config, plate_type, nozzle_temp, bed_temp, max_volumetric_speed)) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get preset info error"; + return; + } + + curr_obj->command_extrusion_cali_set(tray_id, setting_id, "", new_k_value, new_n_value, bed_temp, nozzle_temp, max_volumetric_speed); + + MessageDialog msg_dlg(nullptr, _L("Flow Dynamics Calibration result has been saved to the printer"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + } + else { + assert(false); + } + } + back_preset_info(curr_obj, true); + show_step(start_step); +} + +FlowRateWizard::FlowRateWizard(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationWizard(parent, CalibMode::Calib_Flow_Rate, id, pos, size, style) +{ + create_pages(); +} + +void FlowRateWizard::create_pages() +{ + start_step = new CalibrationWizardPageStep(new CalibrationFlowRateStartPage(m_scrolledWindow)); + preset_step = new CalibrationWizardPageStep(new CalibrationPresetPage(m_scrolledWindow, m_mode, false)); + + // manual + cali_coarse_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_CALI)); + coarse_save_step = new CalibrationWizardPageStep(new CalibrationFlowCoarseSavePage(m_scrolledWindow)); + cali_fine_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_FINE_CALI)); + fine_save_step = new CalibrationWizardPageStep(new CalibrationFlowFineSavePage(m_scrolledWindow)); + + // auto + cali_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode)); + save_step = new CalibrationWizardPageStep(new CalibrationFlowX1SavePage(m_scrolledWindow)); + + m_all_pages_sizer->Add(start_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(preset_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(cali_coarse_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(coarse_save_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(cali_fine_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(fine_save_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + + m_all_pages_sizer->Add(cali_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(save_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + + m_page_steps.push_back(start_step); + m_page_steps.push_back(preset_step); + m_page_steps.push_back(cali_coarse_step); + m_page_steps.push_back(coarse_save_step); + m_page_steps.push_back(cali_fine_step); + m_page_steps.push_back(fine_save_step); + + //m_page_steps.push_back(cali_step); + //m_page_steps.push_back(save_step); + + for (int i = 0; i < m_page_steps.size() - 1; i++) { + m_page_steps[i]->chain(m_page_steps[i + 1]); + } + + // hide all pages + cali_step->page->Hide(); + save_step->page->Hide(); + for (int i = 0; i < m_page_steps.size(); i++) { + m_page_steps[i]->page->Hide(); + m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this); + } + + + cali_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this); + save_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this); + + if (!m_page_steps.empty()) + show_step(m_page_steps.front()); + + set_cali_method(CalibrationMethod::CALI_METHOD_MANUAL); +} + +void FlowRateWizard::on_cali_action(wxCommandEvent& evt) +{ + CaliPageActionType action = static_cast(evt.GetInt()); + if (action == CaliPageActionType::CALI_ACTION_MANAGE_RESULT) { + ; + } + else if (action == CaliPageActionType::CALI_ACTION_MANUAL_CALI) { + preset_step->page->set_cali_filament_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE); + this->set_cali_method(CalibrationMethod::CALI_METHOD_MANUAL); + preset_step->page->on_device_connected(curr_obj); + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_AUTO_CALI) { + CalibrationFilamentMode fila_mode = get_cali_filament_mode(curr_obj, m_mode); + preset_step->page->set_cali_filament_mode(fila_mode); + this->set_cali_method(CalibrationMethod::CALI_METHOD_AUTO); + preset_step->page->on_device_connected(curr_obj); + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_NEXT) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_CALI_NEXT) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_PREV) { + show_step(m_curr_step->prev); + } + else if (action == CaliPageActionType::CALI_ACTION_CALI) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + on_cali_start(); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + CaliPresetStage stage = CaliPresetStage::CALI_MANULA_STAGE_NONE; + float cali_value = 0.0f; + static_cast(preset_step->page)->get_cali_stage(stage, cali_value); + on_cali_start(stage, cali_value, FlowRatioCaliSource::FROM_PRESET_PAGE); + if (stage == CaliPresetStage::CALI_MANUAL_STAGE_2) { + // set next step page + m_curr_step->chain(cali_fine_step); + } + // automatically jump to next step when print job is sending finished. + } + else { + on_cali_start(); + } + } + else if (action == CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + float new_flow_ratio = 0.0f; + wxString temp_name = ""; // unused + auto coarse_save_page = static_cast(m_curr_step->page); + if (!coarse_save_page->get_result(&new_flow_ratio, &temp_name)) { + return; + } + on_cali_start(CaliPresetStage::CALI_MANUAL_STAGE_2, new_flow_ratio, FlowRatioCaliSource::FROM_COARSE_PAGE); + // automatically jump to next step when print job is sending finished. + } + } + else if (action == CaliPageActionType::CALI_ACTION_FLOW_SAVE) { + on_cali_save(); + } + else if (action == CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE) { + auto coarse_save_page = static_cast(coarse_save_step->page); + if (coarse_save_page->is_skip_fine_calibration()) { + on_cali_save(); + } + } + else if (action == CaliPageActionType::CALI_ACTION_FLOW_FINE_SAVE) { + on_cali_save(); + } + else if (action == CaliPageActionType::CALI_ACTION_GO_HOME) { + on_cali_go_home(); + } +} + +void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, FlowRatioCaliSource from_page) +{ + if (!curr_obj) return; + + //clean flow rate result + curr_obj->reset_flow_rate_cali_result(); + + float nozzle_dia = 0.4; + std::string setting_id; + BedType plate_type = BedType::btDefault; + + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + + preset_page->get_preset_info(nozzle_dia, plate_type); + + std::map selected_filaments = preset_page->get_selected_filaments(); + if (from_page == FlowRatioCaliSource::FROM_PRESET_PAGE) { + if (selected_filaments.empty()) { + MessageDialog msg_dlg(nullptr, _L("Please select filament to calibrate."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + CalibrationWizard::cache_preset_info(curr_obj, nozzle_dia); + } + else if (from_page == FlowRatioCaliSource::FROM_COARSE_PAGE) { + selected_filaments = get_cached_selected_filament(curr_obj); + if (selected_filaments.empty()) { + MessageDialog msg_dlg(nullptr, _L("Please select filament to calibrate."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + cache_coarse_info(curr_obj); + } + + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + X1CCalibInfos calib_infos; + for (auto& item : selected_filaments) { + int nozzle_temp = -1; + int bed_temp = -1; + float max_volumetric_speed = -1; + + if (!get_preset_info(item.second->config, plate_type, nozzle_temp, bed_temp, max_volumetric_speed)) { + BOOST_LOG_TRIVIAL(error) << "CaliPreset: get preset info error"; + } + + X1CCalibInfos::X1CCalibInfo calib_info; + calib_info.tray_id = item.first; + calib_info.nozzle_diameter = nozzle_dia; + calib_info.filament_id = item.second->filament_id; + calib_info.setting_id = item.second->setting_id; + calib_info.bed_temp = bed_temp; + calib_info.nozzle_temp = nozzle_temp; + calib_info.max_volumetric_speed = max_volumetric_speed; + float flow_ratio = 0.98; + if (get_flow_ratio(item.second->config, flow_ratio)) + calib_info.flow_rate = flow_ratio; + calib_infos.calib_datas.push_back(calib_info); + } + + wxString wx_err_string; + std::string error_message; + CalibUtils::calib_flowrate_X1C(calib_infos, error_message); + wx_err_string = from_u8(error_message); + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + show_step(m_curr_step->next); + + CalibrationCaliPage *cali_page = (static_cast(cali_step->page)); + cali_page->clear_last_job_status(); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + CalibInfo calib_info; + calib_info.dev_id = curr_obj->dev_id; + Preset* temp_filament_preset = nullptr; + int cali_stage = -1; + wxString wx_err_string; + + // Recover to coarse and start fine print, should recover the selected_filaments + CalibrationMethod temp_method; + int temp_cali_tage = 0; + CalibMode obj_cali_mode = get_obj_calibration_mode(curr_obj, temp_method, temp_cali_tage); + if (selected_filaments.empty() && stage == CaliPresetStage::CALI_MANUAL_STAGE_2 && obj_cali_mode == CalibMode::Calib_Flow_Rate) { + if (!curr_obj->selected_cali_preset.empty()) { + int selected_tray_id = curr_obj->selected_cali_preset.front().tray_id; + PresetCollection *filament_presets = &wxGetApp().preset_bundle->filaments; + Preset* preset = filament_presets->find_preset(curr_obj->selected_cali_preset.front().name); + if (preset) { + selected_filaments.insert(std::make_pair(selected_tray_id, preset)); + } + } + } + + if (!selected_filaments.empty()) { + calib_info.select_ams = "[" + std::to_string(selected_filaments.begin()->first) + "]"; + Preset* preset = selected_filaments.begin()->second; + temp_filament_preset = new Preset(preset->type, preset->name + "_temp"); + temp_filament_preset->config = preset->config; + + calib_info.bed_type = plate_type; + calib_info.process_bar = preset_page->get_sending_progress_bar(); + calib_info.printer_prest = preset_page->get_printer_preset(curr_obj, nozzle_dia); + calib_info.print_prest = preset_page->get_print_preset(); + calib_info.params.mode = CalibMode::Calib_Flow_Rate; + + if (stage == CaliPresetStage::CALI_MANUAL_STAGE_1) { + cali_stage = 1; + } + else if (stage == CaliPresetStage::CALI_MANUAL_STAGE_2) { + cali_stage = 2; + temp_filament_preset->config.set_key_value("filament_flow_ratio", new ConfigOptionFloats{ cali_value }); + } + calib_info.filament_prest = temp_filament_preset; + + if (cali_stage > 0) { + std::string error_message; + CalibUtils::calib_flowrate(cali_stage, calib_info, error_message); + wx_err_string = from_u8(error_message); + } + else { + wx_err_string = _L("Internal Error") + wxString(": Invalid calibration stage"); + } + } else { + wx_err_string = _L("Please select at least one filament for calibration"); + } + + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + preset_page->on_cali_start_job(); + if (temp_filament_preset) + delete temp_filament_preset; + + if (cali_stage == 1) { + CalibrationCaliPage *cali_coarse_page = (static_cast(cali_coarse_step->page)); + cali_coarse_page->clear_last_job_status(); + } + else if (cali_stage == 2) { + CalibrationCaliPage *cali_fine_page = (static_cast(cali_fine_step->page)); + cali_fine_page->clear_last_job_status(); + } + } else { + assert(false); + } +} + +void FlowRateWizard::on_cali_save() +{ + if (curr_obj) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + std::vector> new_results; + auto save_page = static_cast(save_step->page); + if (!save_page->get_result(new_results)) { + return; + } + if (save_page->is_all_failed()) { + MessageDialog msg_dlg(nullptr, _L("The failed test result has been dropped."), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + show_step(start_step); + return; + } + + std::string old_preset_name; + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + std::map selected_filaments = get_cached_selected_filament(curr_obj); + if (!selected_filaments.empty()) { + old_preset_name = selected_filaments.begin()->second->name; + } + for (int i = 0; i < new_results.size(); i++) { + std::map key_value_map; + key_value_map.insert(std::make_pair("filament_flow_ratio", new ConfigOptionFloats{ new_results[i].second })); + std::string message; + if (!save_preset(old_preset_name, into_u8(new_results[i].first), key_value_map, message)) { + MessageDialog error_msg_dlg(nullptr, message, wxEmptyString, wxICON_WARNING | wxOK); + error_msg_dlg.ShowModal(); + return; + } + } + + MessageDialog msg_dlg(nullptr, _L("Flow rate calibration result has been saved to preset"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + float new_flow_ratio = 0.0f; + wxString new_preset_name = ""; + if(m_curr_step->page->get_page_type() == CaliPageType::CALI_PAGE_COARSE_SAVE) + { + auto coarse_save_page = static_cast(m_curr_step->page); + if (!coarse_save_page->get_result(&new_flow_ratio, &new_preset_name)) { + BOOST_LOG_TRIVIAL(info) << "flow_rate_cali: get coarse result failed"; + return; + } + } + else if (m_curr_step->page->get_page_type() == CaliPageType::CALI_PAGE_FINE_SAVE) + { + auto fine_save_page = static_cast(m_curr_step->page); + if (!fine_save_page->get_result(&new_flow_ratio, &new_preset_name)) { + BOOST_LOG_TRIVIAL(info) << "flow_rate_cali: get fine result failed"; + return; + } + } + else { + BOOST_LOG_TRIVIAL(info) << "flow_rate_cali: get result failed, not get result"; + return; + } + + if (!check_preset_name_valid(new_preset_name)) + return; + + std::string old_preset_name; + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); + std::map selected_filaments = get_cached_selected_filament(curr_obj); + if (!selected_filaments.empty()) { + old_preset_name = selected_filaments.begin()->second->name; + } + std::map key_value_map; + key_value_map.insert(std::make_pair("filament_flow_ratio", new ConfigOptionFloats{ new_flow_ratio })); + + std::string message; + if (!save_preset(old_preset_name, into_u8(new_preset_name), key_value_map, message)) { + MessageDialog error_msg_dlg(nullptr, message, wxEmptyString, wxICON_WARNING | wxOK); + error_msg_dlg.ShowModal(); + return; + } + + MessageDialog msg_dlg(nullptr, _L("Flow rate calibration result has been saved to preset"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + } + else { + assert(false); + } + } + back_preset_info(curr_obj, true); + show_step(start_step); +} + +void FlowRateWizard::update(MachineObject* obj) +{ + CalibrationWizard::update(obj); +} + +void FlowRateWizard::on_device_connected(MachineObject* obj) +{ + CalibrationWizard::on_device_connected(obj); + + CalibrationMethod method; + int cali_stage = 0; + CalibMode obj_cali_mode = get_obj_calibration_mode(obj, method, cali_stage); + + // show cali step when obj is in pa calibration + if (obj) { + this->set_cali_method(method); + if (obj_cali_mode == m_mode) { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { + if (method == CalibrationMethod::CALI_METHOD_MANUAL) { + if (cali_stage == 1) { + if (m_curr_step != cali_coarse_step) + show_step(cali_coarse_step); + } + else if (cali_stage == 2) { + if (m_curr_step != cali_fine_step) { + show_step(cali_fine_step); + } + } + else + show_step(cali_coarse_step); + } + else if (method == CalibrationMethod::CALI_METHOD_AUTO) { + if (m_curr_step != cali_step) + show_step(cali_step); + } + } + } + } +} + +void FlowRateWizard::set_cali_method(CalibrationMethod method) +{ + m_cali_method = method; + if (method == CalibrationMethod::CALI_METHOD_AUTO) { + m_page_steps.clear(); + m_page_steps.push_back(start_step); + m_page_steps.push_back(preset_step); + m_page_steps.push_back(cali_step); + m_page_steps.push_back(save_step); + + for (int i = 0; i < m_page_steps.size() - 1; i++) { + m_page_steps[i]->chain(m_page_steps[i + 1]); + } + } + else if (method == CalibrationMethod::CALI_METHOD_MANUAL) { + m_page_steps.clear(); + m_page_steps.push_back(start_step); + m_page_steps.push_back(preset_step); + m_page_steps.push_back(cali_coarse_step); + m_page_steps.push_back(coarse_save_step); + m_page_steps.push_back(cali_fine_step); + m_page_steps.push_back(fine_save_step); + + for (int i = 0; i < m_page_steps.size() - 1; i++) { + m_page_steps[i]->chain(m_page_steps[i + 1]); + } + } + else { + assert(false); + } + CalibrationWizard::set_cali_method(method); +} + +void FlowRateWizard::on_cali_job_finished(wxString evt_data) +{ + int cali_stage = 0; + CalibMode obj_cali_mode = CalibUtils::get_calib_mode_by_name(evt_data.ToStdString(), cali_stage); + + if (obj_cali_mode == m_mode) { + if (cali_stage == 1) { + if (m_curr_step != cali_coarse_step) + show_step(cali_coarse_step); + } + else if (cali_stage == 2) { + if (m_curr_step != cali_fine_step) { + show_step(cali_fine_step); + } + } + else + show_step(cali_coarse_step); + } + // change ui, hide + static_cast(preset_step->page)->on_cali_finished_job(); +} + +void FlowRateWizard::cache_coarse_info(MachineObject *obj) +{ + if (!obj) return; + + CalibrationFlowCoarseSavePage *coarse_page = (static_cast(coarse_save_step->page)); + if (!coarse_page) + return; + + wxString out_name; + coarse_page->get_result(&obj->cache_flow_ratio, &out_name); + + back_preset_info(obj, false); +} + +MaxVolumetricSpeedWizard::MaxVolumetricSpeedWizard(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationWizard(parent, CalibMode::Calib_Vol_speed_Tower, id, pos, size, style) +{ + create_pages(); +} + +void MaxVolumetricSpeedWizard::create_pages() +{ + start_step = new CalibrationWizardPageStep(new CalibrationMaxVolumetricSpeedStartPage(m_scrolledWindow)); + preset_step = new CalibrationWizardPageStep(new MaxVolumetricSpeedPresetPage(m_scrolledWindow, m_mode, true)); + + // manual + cali_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode)); + save_step = new CalibrationWizardPageStep(new CalibrationMaxVolumetricSpeedSavePage(m_scrolledWindow)); + + m_all_pages_sizer->Add(start_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(preset_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(cali_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + m_all_pages_sizer->Add(save_step->page, 1, wxEXPAND | wxALL, FromDIP(25)); + + m_page_steps.push_back(start_step); + m_page_steps.push_back(preset_step); + m_page_steps.push_back(cali_step); + m_page_steps.push_back(save_step); + + for (int i = 0; i < m_page_steps.size() - 1; i++) { + m_page_steps[i]->chain(m_page_steps[i + 1]); + } + + for (int i = 0; i < m_page_steps.size(); i++) { + m_page_steps[i]->page->Hide(); + m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &MaxVolumetricSpeedWizard::on_cali_action, this); + } + + for (auto page_step : m_page_steps) { + page_step->page->Hide(); + } + + if (!m_page_steps.empty()) + show_step(m_page_steps.front()); + return; +} + +void MaxVolumetricSpeedWizard::on_cali_action(wxCommandEvent& evt) +{ + CaliPageActionType action = static_cast(evt.GetInt()); + + if (action == CaliPageActionType::CALI_ACTION_START) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_PREV) { + show_step(m_curr_step->prev); + } + else if (action == CaliPageActionType::CALI_ACTION_CALI) { + on_cali_start(); + } + else if (action == CaliPageActionType::CALI_ACTION_NEXT) { + show_step(m_curr_step->next); + } + else if (action == CaliPageActionType::CALI_ACTION_COMMON_SAVE) { + on_cali_save(); + } + else if (action == CaliPageActionType::CALI_ACTION_GO_HOME) { + on_cali_go_home(); + } +} + +void MaxVolumetricSpeedWizard::on_cali_start() +{ + float nozzle_dia = 0.4; + std::string setting_id; + BedType plate_type = BedType::btDefault; + + CalibrationPresetPage *preset_page = (static_cast(preset_step->page)); + + preset_page->get_preset_info(nozzle_dia, plate_type); + + CalibrationWizard::cache_preset_info(curr_obj, nozzle_dia); + + wxArrayString values = preset_page->get_custom_range_values(); + Calib_Params params; + if (values.size() != 3) { + MessageDialog msg_dlg(nullptr, _L("The input value size must be 3."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + else { + values[0].ToDouble(¶ms.start); + values[1].ToDouble(¶ms.end); + values[2].ToDouble(¶ms.step); + } + params.mode = m_mode; + + std::map selected_filaments = preset_page->get_selected_filaments(); + if (selected_filaments.empty()) { + MessageDialog msg_dlg(nullptr, _L("Please select filament to calibrate."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + CalibInfo calib_info; + calib_info.params = params; + calib_info.dev_id = curr_obj->dev_id; + if (!selected_filaments.empty()) { + calib_info.select_ams = "[" + std::to_string(selected_filaments.begin()->first) + "]"; + calib_info.filament_prest = selected_filaments.begin()->second; + } + + calib_info.bed_type = plate_type; + calib_info.process_bar = preset_page->get_sending_progress_bar(); + calib_info.printer_prest = preset_page->get_printer_preset(curr_obj, nozzle_dia); + calib_info.print_prest = preset_page->get_print_preset(); + + wxString wx_err_string; + std::string error_message; + CalibUtils::calib_max_vol_speed(calib_info, error_message); + wx_err_string = from_u8(error_message); + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + + preset_page->on_cali_start_job(); + + CalibrationCaliPage* cali_page = (static_cast(cali_step->page)); + cali_page->clear_last_job_status(); +} + +void MaxVolumetricSpeedWizard::on_cali_save() +{ + std::string old_preset_name; + std::string new_preset_name; + + CalibrationPresetPage *preset_page = (static_cast(preset_step->page)); + std::map selected_filaments = get_cached_selected_filament(curr_obj); + if (!selected_filaments.empty()) { + old_preset_name = selected_filaments.begin()->second->name; + } + + double value = 0; + CalibrationMaxVolumetricSpeedSavePage *save_page = (static_cast(save_step->page)); + if (!save_page->get_save_result(value, new_preset_name)) { + BOOST_LOG_TRIVIAL(info) << "max_volumetric_speed_cali: get result failed"; + return; + } + + if (!check_preset_name_valid(new_preset_name)) + return; + + std::map key_value_map; + key_value_map.insert(std::make_pair("filament_max_volumetric_speed", new ConfigOptionFloats{ value })); + + std::string message; + if (!save_preset(old_preset_name, new_preset_name, key_value_map, message)) { + MessageDialog error_msg_dlg(nullptr, message, wxEmptyString, wxICON_WARNING | wxOK); + error_msg_dlg.ShowModal(); + return; + } + + MessageDialog msg_dlg(nullptr, _L("Max volumetric speed calibration result has been saved to preset"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); + show_step(start_step); +} + +void MaxVolumetricSpeedWizard::on_cali_job_finished(wxString evt_data) +{ + int cali_stage = 0; + CalibMode obj_cali_mode = CalibUtils::get_calib_mode_by_name(evt_data.ToStdString(), cali_stage); + + if (obj_cali_mode == m_mode) { + if (m_curr_step != cali_step) { + show_step(cali_step); + } + } + // change ui, hide + static_cast(preset_step->page)->on_cali_finished_job(); +} + +void MaxVolumetricSpeedWizard::on_device_connected(MachineObject *obj) +{ + CalibrationWizard::on_device_connected(obj); + + CalibrationMethod method; + int cali_stage = 0; + CalibMode obj_cali_mode = get_obj_calibration_mode(obj, method, cali_stage); + + if (obj) { + this->set_cali_method(method); + if (obj_cali_mode == m_mode) { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { + if (m_curr_step != cali_step) { + show_step(cali_step); + } + } + } + } +} +}} diff --git a/src/slic3r/GUI/CalibrationWizard.hpp b/src/slic3r/GUI/CalibrationWizard.hpp new file mode 100644 index 000000000..e5e55834f --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizard.hpp @@ -0,0 +1,174 @@ +#ifndef slic3r_GUI_CalibrationWizard_hpp_ +#define slic3r_GUI_CalibrationWizard_hpp_ + +#include "../slic3r/Utils/CalibUtils.hpp" + +#include "DeviceManager.hpp" +#include "CalibrationWizardPage.hpp" +#include "CalibrationWizardStartPage.hpp" +#include "CalibrationWizardPresetPage.hpp" +#include "CalibrationWizardCaliPage.hpp" +#include "CalibrationWizardSavePage.hpp" + +namespace Slic3r { namespace GUI { + + +class CalibrationWizardPageStep +{ +public: + CalibrationWizardPageStep(CalibrationWizardPage* data) { + page = data; + } + + CalibrationWizardPageStep* prev { nullptr }; + CalibrationWizardPageStep* next { nullptr }; + CalibrationWizardPage* page { nullptr }; + void chain(CalibrationWizardPageStep* step) { + if (!step) return; + this->next = step; + step->prev = this; + } +}; + +class CalibrationWizard : public wxPanel { +public: + CalibrationWizard(wxWindow* parent, CalibMode mode, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + ~CalibrationWizard(); + + void on_cali_job_finished(wxCommandEvent& event); + + virtual void on_cali_job_finished(wxString evt_data) {} + + CalibrationWizardPageStep* get_curr_step() { return m_curr_step; } + + void show_step(CalibrationWizardPageStep* step); + + virtual void update(MachineObject* obj); + + virtual void on_device_connected(MachineObject* obj); + + virtual void set_cali_style(CalibrationStyle style) { + m_cali_style = style; + } + + virtual void set_cali_method(CalibrationMethod method); + + CalibMode get_calibration_mode() { return m_mode; } + + bool save_preset(const std::string &old_preset_name, const std::string &new_preset_name, const std::map &key_values, std::string& message); + + virtual void cache_preset_info(MachineObject* obj, float nozzle_dia); + virtual void recover_preset_info(MachineObject *obj); + virtual void back_preset_info(MachineObject *obj, bool cali_finish); + + void msw_rescale(); + void on_sys_color_changed(); + +protected: + void on_cali_go_home(); + +protected: + /* wx widgets*/ + wxScrolledWindow* m_scrolledWindow; + wxBoxSizer* m_all_pages_sizer; + + CalibMode m_mode; + CalibrationStyle m_cali_style; + CalibrationMethod m_cali_method { CalibrationMethod::CALI_METHOD_MANUAL }; + MachineObject* curr_obj { nullptr }; + MachineObject* last_obj { nullptr }; + + CalibrationWizardPageStep* m_curr_step { nullptr }; + + CalibrationWizardPageStep* start_step { nullptr }; + CalibrationWizardPageStep* preset_step { nullptr }; + CalibrationWizardPageStep* cali_step { nullptr }; + CalibrationWizardPageStep* save_step { nullptr }; + + CalibrationWizardPageStep* cali_coarse_step { nullptr }; + CalibrationWizardPageStep* coarse_save_step { nullptr }; + CalibrationWizardPageStep* cali_fine_step { nullptr }; + CalibrationWizardPageStep* fine_save_step { nullptr }; + + /* save steps of calibration pages */ + std::vector m_page_steps; + + SecondaryCheckDialog *go_home_dialog = nullptr; +}; + +class PressureAdvanceWizard : public CalibrationWizard { +public: + PressureAdvanceWizard(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~PressureAdvanceWizard() {}; +protected: + void create_pages(); + + void on_cali_start(); + + void on_cali_save(); + + void on_cali_action(wxCommandEvent& evt); + + void update(MachineObject* obj) override; + + void on_device_connected(MachineObject* obj) override; + + std::vector m_calib_results_history; +}; + +class FlowRateWizard : public CalibrationWizard { +public: + FlowRateWizard(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~FlowRateWizard() {}; + + void set_cali_method(CalibrationMethod method) override; + + void on_cali_job_finished(wxString evt_data) override; + + void cache_coarse_info(MachineObject *obj); + +protected: + void create_pages(); + + void on_cali_action(wxCommandEvent& evt); + + void on_cali_start(CaliPresetStage stage = CaliPresetStage::CALI_MANULA_STAGE_NONE, float cali_value = 0.0f, FlowRatioCaliSource from_page = FlowRatioCaliSource::FROM_PRESET_PAGE); + + void on_cali_save(); + + void update(MachineObject* obj) override; + + void on_device_connected(MachineObject* obj) override; +}; + +class MaxVolumetricSpeedWizard : public CalibrationWizard { +public: + MaxVolumetricSpeedWizard(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~MaxVolumetricSpeedWizard() {}; + + void on_cali_job_finished(wxString evt_data) override; + +protected: + void create_pages(); + + void on_cali_action(wxCommandEvent& evt); + + void on_cali_start(); + + void on_cali_save(); + + void on_device_connected(MachineObject *obj) override; +}; + +// save printer_type in command event +wxDECLARE_EVENT(EVT_DEVICE_CHANGED, wxCommandEvent); +wxDECLARE_EVENT(EVT_CALIBRATION_JOB_FINISHED, wxCommandEvent); + +}} // namespace Slic3r::GUI + +#endif diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp new file mode 100644 index 000000000..23edc25e1 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -0,0 +1,456 @@ +#include "CalibrationWizardCaliPage.hpp" +#include "MainFrame.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" + +namespace Slic3r { namespace GUI { + +static const wxString NA_STR = _L("N/A"); + + +CalibrationCaliPage::CalibrationCaliPage(wxWindow* parent, CalibMode cali_mode, CaliPageType cali_type, + wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationWizardPage(parent, id, pos, size, style) +{ + m_cali_mode = cali_mode; + + m_page_type = cali_type; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +CalibrationCaliPage::~CalibrationCaliPage() +{ + m_printing_panel->get_pause_resume_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CalibrationCaliPage::on_subtask_pause_resume), NULL, this); + m_printing_panel->get_abort_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CalibrationCaliPage::on_subtask_abort), NULL, this); +} + +void CalibrationCaliPage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(1); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + m_picture_panel = new CaliPagePicture(parent); + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + + set_cali_img(); + + m_printing_panel = new PrintingTaskPanel(parent, PrintingTaskType::CALIBRATION); + m_printing_panel->SetDoubleBuffered(true); + m_printing_panel->SetSize({ CALIBRATION_PROGRESSBAR_LENGTH, -1 }); + m_printing_panel->SetMinSize({ CALIBRATION_PROGRESSBAR_LENGTH, -1 }); + m_printing_panel->enable_pause_resume_button(false, "resume_disable"); + m_printing_panel->enable_abort_button(false); + + m_top_sizer->Add(m_printing_panel, 0, wxALIGN_CENTER, 0); + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_CALI); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); + + m_printing_panel->get_pause_resume_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CalibrationCaliPage::on_subtask_pause_resume), NULL, this); + m_printing_panel->get_abort_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CalibrationCaliPage::on_subtask_abort), NULL, this); + + Layout(); +} + +void CalibrationCaliPage::on_subtask_pause_resume(wxCommandEvent& event) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject* obj = dev->get_selected_machine(); + if (!obj) return; + + if (obj->can_resume()) + obj->command_task_resume(); + else + obj->command_task_pause(); +} + +void CalibrationCaliPage::on_subtask_abort(wxCommandEvent& event) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject* obj = dev->get_selected_machine(); + if (!obj) return; + + if (abort_dlg == nullptr) { + abort_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Cancel print")); + abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) obj->command_task_abort(); + }); + } + abort_dlg->update_text(_L("Are you sure you want to cancel this print?")); + abort_dlg->on_show(); +} + +void CalibrationCaliPage::set_cali_img() +{ + if (m_cali_mode == CalibMode::Calib_PA_Line) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_manual", nullptr, 400)); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_auto", nullptr, 400)); + } + } + else if (m_cali_mode == CalibMode::Calib_Flow_Rate) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + if (m_page_type == CaliPageType::CALI_PAGE_CALI) + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_coarse", nullptr, 400)); + if (m_page_type == CaliPageType::CALI_PAGE_FINE_CALI) + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_fine", nullptr, 400)); + else + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_coarse", nullptr, 400)); + } + else if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_auto", nullptr, 400)); + } + } + else if (m_cali_mode == CalibMode::Calib_Vol_speed_Tower) { + m_picture_panel->set_img(create_scaled_bitmap("max_volumetric_speed_calibration", nullptr, 400)); + } +} + +void CalibrationCaliPage::clear_last_job_status() +{ + m_is_between_start_and_running = true; +} + +void CalibrationCaliPage::update(MachineObject* obj) +{ + static int get_result_count = 0; + // enable calibration when finished + bool enable_cali = false; + if (obj) { + if (obj->print_error > 0) { + StatusPanel* status_panel = Slic3r::GUI::wxGetApp().mainframe->m_monitor->get_status_panel(); + status_panel->obj = obj; + status_panel->update_error_message(); + } + + if (obj->print_status == "RUNNING") + m_is_between_start_and_running = false; + if (obj->is_connecting() || !obj->is_connected() || m_is_between_start_and_running) { + reset_printing_values(); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_CALI_NEXT, false); + return; + } + + if (m_cali_mode == CalibMode::Calib_PA_Line) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + if (get_obj_calibration_mode(obj) == m_cali_mode) { + if (obj->is_printing_finished()) { + if (obj->print_status == "FINISH") { + if (obj->get_pa_calib_result) { + enable_cali = true; + } + else { + // use selected diameter, add a counter to timeout, add a warning tips when get result failed + CalibUtils::emit_get_PA_calib_results(get_selected_calibration_nozzle_dia(obj)); + BOOST_LOG_TRIVIAL(trace) << "CalibUtils::emit_get_PA_calib_results, auto count = " << get_result_count++; + enable_cali = false; + } + } + else if (obj->print_status == "FAILED") { + enable_cali = false; + } + } + else { + enable_cali = false; + } + } + } else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + if (get_obj_calibration_mode(obj) == m_cali_mode && obj->is_printing_finished()) { + enable_cali = true; + } else { + enable_cali = false; + } + } else { + assert(false); + } + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_CALI_NEXT, enable_cali); + } else if (m_cali_mode == CalibMode::Calib_Flow_Rate) { + if (m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + if (get_obj_calibration_mode(obj) == m_cali_mode) { + if (obj->is_printing_finished()) { + if (obj->print_status == "FINISH") { + if (obj->get_flow_calib_result) { + enable_cali = true; + } + else { + // use selected diameter, add a counter to timeout, add a warning tips when get result failed + CalibUtils::emit_get_flow_ratio_calib_results(get_selected_calibration_nozzle_dia(obj)); + enable_cali = false; + } + } + else if (obj->print_status == "FAILED") { + enable_cali = false; + } + } + else { + enable_cali = false; + } + } + } else if (m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + if (get_obj_calibration_mode(obj) == m_cali_mode && obj->is_printing_finished()) { + // use selected diameter, add a counter to timeout, add a warning tips when get result failed + CalibUtils::emit_get_flow_ratio_calib_results(get_selected_calibration_nozzle_dia(obj)); + enable_cali = true; + } + else { + enable_cali = false; + } + } else { + assert(false); + } + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_CALI_NEXT, enable_cali); + } + else if (m_cali_mode == CalibMode::Calib_Vol_speed_Tower) { + if (get_obj_calibration_mode(obj) == m_cali_mode && obj->is_printing_finished()) { + enable_cali = true; + } else { + enable_cali = false; + } + } + else { + assert(false); + } + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_NEXT, enable_cali); + } + + // only display calibration printing status + if (get_obj_calibration_mode(obj) == m_cali_mode) { + update_subtask(obj); + } else { + update_subtask(nullptr); + } +} + +void CalibrationCaliPage::update_subtask(MachineObject* obj) +{ + if (!obj) return; + + if (obj->is_support_layer_num) { + m_printing_panel->update_layers_num(true); + } + else { + m_printing_panel->update_layers_num(false); + } + + if (obj->is_system_printing() + || obj->is_in_calibration()) { + reset_printing_values(); + } + else if (obj->is_in_printing() || obj->print_status == "FINISH") { + if (obj->is_in_prepare() || obj->print_status == "SLICING") { + m_printing_panel->get_market_scoring_button()->Hide(); + m_printing_panel->enable_abort_button(false); + m_printing_panel->enable_pause_resume_button(false, "pause_disable"); + wxString prepare_text; + bool show_percent = true; + + if (obj->is_in_prepare()) { + prepare_text = wxString::Format(_L("Downloading...")); + } + else if (obj->print_status == "SLICING") { + if (obj->queue_number <= 0) { + prepare_text = wxString::Format(_L("Cloud Slicing...")); + } + else { + prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead."), std::to_string(obj->queue_number)); + show_percent = false; + } + } + else + prepare_text = wxString::Format(_L("Downloading...")); + + if (obj->gcode_file_prepare_percent >= 0 && obj->gcode_file_prepare_percent <= 100 && show_percent) + prepare_text += wxString::Format("(%d%%)", obj->gcode_file_prepare_percent); + + m_printing_panel->update_stage_value(prepare_text, 0); + m_printing_panel->update_progress_percent(NA_STR, wxEmptyString); + m_printing_panel->update_left_time(NA_STR); + m_printing_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); + m_printing_panel->update_subtask_name(wxString::Format("%s", GUI::from_u8(obj->subtask_name))); + + + if (obj->get_modeltask() && obj->get_modeltask()->design_id > 0) { + m_printing_panel->show_profile_info(true, wxString::FromUTF8(obj->get_modeltask()->profile_name)); + } + else { + m_printing_panel->show_profile_info(false); + } + + if (obj->slice_info) + update_basic_print_data(false, obj->slice_info->weight, obj->slice_info->prediction); + } + else { + if (obj->can_resume()) { + m_printing_panel->enable_pause_resume_button(true, "resume"); + + } + else { + m_printing_panel->enable_pause_resume_button(true, "pause"); + } + if (obj->print_status == "FINISH") { + + m_printing_panel->enable_abort_button(false); + m_printing_panel->enable_pause_resume_button(false, "resume_disable"); + + bool is_market_task = obj->get_modeltask() && obj->get_modeltask()->design_id > 0; + if (is_market_task) { + m_printing_panel->get_market_scoring_button()->Show(); + BOOST_LOG_TRIVIAL(info) << "SHOW_SCORE_BTU: design_id [" << obj->get_modeltask()->design_id << "] print_finish [" << m_print_finish << "]"; + if (!m_print_finish && IsShownOnScreen()) { + m_print_finish = true; + } + } + else { + m_printing_panel->get_market_scoring_button()->Hide(); + } + } + else { + m_printing_panel->enable_abort_button(true); + m_printing_panel->get_market_scoring_button()->Hide(); + if (m_print_finish) { + m_print_finish = false; + } + } + // update printing stage + + m_printing_panel->update_left_time(obj->mc_left_time); + if (obj->subtask_) { + m_printing_panel->update_stage_value(obj->get_curr_stage(), obj->subtask_->task_progress); + m_printing_panel->update_progress_percent(wxString::Format("%d", obj->subtask_->task_progress), "%"); + m_printing_panel->update_layers_num(true, wxString::Format(_L("Layer: %d/%d"), obj->curr_layer, obj->total_layers)); + + } + else { + m_printing_panel->update_stage_value(obj->get_curr_stage(), 0); + m_printing_panel->update_progress_percent(NA_STR, wxEmptyString); + m_printing_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); + } + } + + m_printing_panel->update_subtask_name(wxString::Format("%s", GUI::from_u8(obj->subtask_name))); + + if (obj->get_modeltask() && obj->get_modeltask()->design_id > 0) { + m_printing_panel->show_profile_info(wxString::FromUTF8(obj->get_modeltask()->profile_name)); + } + else { + m_printing_panel->show_profile_info(false); + } + + } + else { + reset_printing_values(); + } + + this->Layout(); +} + +void CalibrationCaliPage::update_basic_print_data(bool def, float weight, int prediction) +{ + if (def) { + wxString str_prediction = wxString::Format("%s", get_bbl_time_dhms(prediction)); + wxString str_weight = wxString::Format("%.2fg", weight); + + m_printing_panel->show_priting_use_info(true, str_prediction, str_weight); + } + else { + m_printing_panel->show_priting_use_info(false, "0m", "0g"); + } +} + +void CalibrationCaliPage::reset_printing_values() +{ + m_printing_panel->enable_pause_resume_button(false, "pause_disable"); + m_printing_panel->enable_abort_button(false); + m_printing_panel->reset_printing_value(); + m_printing_panel->update_subtask_name(NA_STR); + m_printing_panel->show_profile_info(false); + m_printing_panel->update_stage_value(wxEmptyString, 0); + m_printing_panel->update_progress_percent(NA_STR, wxEmptyString); + m_printing_panel->get_market_scoring_button()->Hide(); + m_printing_panel->update_left_time(NA_STR); + m_printing_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); + update_basic_print_data(false); + this->Layout(); +} + +void CalibrationCaliPage::on_device_connected(MachineObject* obj) +{ + ; +} + +void CalibrationCaliPage::set_cali_method(CalibrationMethod method) +{ + m_cali_method = method; + + set_cali_img(); + + wxArrayString auto_steps; + auto_steps.Add(_L("Preset")); + auto_steps.Add(_L("Calibration")); + auto_steps.Add(_L("Record Factor")); + + wxArrayString manual_steps; + manual_steps.Add(_L("Preset")); + manual_steps.Add(_L("Calibration1")); + manual_steps.Add(_L("Calibration2")); + manual_steps.Add(_L("Record Factor")); + + if (method == CalibrationMethod::CALI_METHOD_AUTO) { + m_step_panel->set_steps_string(auto_steps); + m_step_panel->set_steps(1); + } + else if (method == CalibrationMethod::CALI_METHOD_MANUAL) { + if (m_cali_mode == CalibMode::Calib_PA_Line) { + m_step_panel->set_steps_string(auto_steps); + m_step_panel->set_steps(1); + } else { + m_step_panel->set_steps_string(manual_steps); + if (m_page_type == CaliPageType::CALI_PAGE_CALI) + m_step_panel->set_steps(1); + else if (m_page_type == CaliPageType::CALI_PAGE_FINE_CALI) { + m_step_panel->set_steps(2); + } + else { + m_step_panel->set_steps(1); + } + } + } + else { + assert(false); + } +} + +float CalibrationCaliPage::get_selected_calibration_nozzle_dia(MachineObject* obj) +{ + // return selected if this is set + if (obj->cali_selected_nozzle_dia > 1e-3 && obj->cali_selected_nozzle_dia < 10.0f) + return obj->cali_selected_nozzle_dia; + + // return default nozzle if nozzle diameter is set + if (obj->nozzle_diameter > 1e-3 && obj->nozzle_diameter < 10.0f) + return obj->nozzle_diameter; + + // return 0.4 by default + return 0.4; +} + +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.hpp b/src/slic3r/GUI/CalibrationWizardCaliPage.hpp new file mode 100644 index 000000000..cb608ddda --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.hpp @@ -0,0 +1,49 @@ +#ifndef slic3r_GUI_CalibrationWizardCaliPage_hpp_ +#define slic3r_GUI_CalibrationWizardCaliPage_hpp_ + +#include "CalibrationWizardPage.hpp" +#include "StatusPanel.hpp" + +namespace Slic3r { namespace GUI { + +class CalibrationCaliPage : public CalibrationWizardPage +{ +public: + CalibrationCaliPage(wxWindow* parent, + CalibMode cali_mode, + CaliPageType cali_type = CaliPageType::CALI_PAGE_CALI, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + ~CalibrationCaliPage(); + + void create_page(wxWindow* parent); + void on_subtask_pause_resume(wxCommandEvent& event); + void on_subtask_abort(wxCommandEvent& event); + void set_cali_img(); + void update(MachineObject* obj) override; + void update_subtask(MachineObject* obj); + void update_basic_print_data(bool def, float weight = 0.0, int prediction = 0); + void reset_printing_values(); + void clear_last_job_status(); + + void on_device_connected(MachineObject* obj) override; + + void set_cali_method(CalibrationMethod method) override; + +protected: + float get_selected_calibration_nozzle_dia(MachineObject* obj); + + bool m_print_finish {false}; + bool m_is_between_start_and_running { false }; + wxBoxSizer* m_top_sizer; + CaliPageStepGuide* m_step_panel { nullptr }; + PrintingTaskPanel* m_printing_panel { nullptr }; + CaliPagePicture* m_picture_panel; + SecondaryCheckDialog* abort_dlg { nullptr }; +}; + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardPage.cpp b/src/slic3r/GUI/CalibrationWizardPage.cpp new file mode 100644 index 000000000..fbab569d9 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardPage.cpp @@ -0,0 +1,774 @@ +#include "CalibrationWizardPage.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" +#include "MsgDialog.hpp" + +namespace Slic3r { namespace GUI { + +wxDEFINE_EVENT(EVT_CALI_ACTION, wxCommandEvent); +wxDEFINE_EVENT(EVT_CALI_TRAY_CHANGED, wxCommandEvent); + + +CalibrationStyle get_cali_style(MachineObject* obj) +{ + if (!obj) return CalibrationStyle::CALI_STYLE_DEFAULT; + + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) + return CalibrationStyle::CALI_STYLE_X1; + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) + return CalibrationStyle::CALI_STYLE_P1P; + + return CalibrationStyle::CALI_STYLE_DEFAULT; +} + +wxString get_cali_mode_caption_string(CalibMode mode) +{ + if (mode == CalibMode::Calib_PA_Line) + return _L("Flow Dynamics Calibration"); + if (mode == CalibMode::Calib_Flow_Rate) + return _L("Flow Rate Calibration"); + if (mode == CalibMode::Calib_Vol_speed_Tower) + return _L("Max Volumetric Speed Calibration"); + return "no cali_mode_caption"; +} + +wxString get_calibration_wiki_page(CalibMode cali_mode) +{ + switch (cali_mode) { + case CalibMode::Calib_PA_Line: + return wxString("https://wiki.bambulab.com/en/software/bambu-studio/calibration_pa"); + case CalibMode::Calib_Flow_Rate: + return wxString("https://wiki.bambulab.com/en/software/bambu-studio/calibration_flow_rate"); + case CalibMode::Calib_Vol_speed_Tower: + return wxString("https://wiki.bambulab.com/en/software/bambu-studio/calibration_volumetric"); + case CalibMode::Calib_Temp_Tower: + return wxString("https://wiki.bambulab.com/en/software/bambu-studio/calibration_temperature"); + case CalibMode::Calib_Retraction_tower: + return wxString("https://wiki.bambulab.com/en/software/bambu-studio/calibration_retraction"); + default: + return ""; + } +} + +CalibrationFilamentMode get_cali_filament_mode(MachineObject* obj, CalibMode mode) +{ + // default + if (!obj) return CalibrationFilamentMode::CALI_MODEL_SINGLE; + + + if (mode == CalibMode::Calib_PA_Line) { + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) + return CalibrationFilamentMode::CALI_MODEL_MULITI; + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) + return CalibrationFilamentMode::CALI_MODEL_SINGLE; + } + else if (mode == CalibMode::Calib_Flow_Rate) { + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) + return CalibrationFilamentMode::CALI_MODEL_SINGLE; + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) + return CalibrationFilamentMode::CALI_MODEL_SINGLE; + } + + return CalibrationFilamentMode::CALI_MODEL_SINGLE; +} + +CalibMode get_obj_calibration_mode(const MachineObject* obj) +{ + CalibrationMethod method; + int cali_stage; + return get_obj_calibration_mode(obj, method, cali_stage); +} + +CalibMode get_obj_calibration_mode(const MachineObject* obj, int& cali_stage) +{ + CalibrationMethod method; + return get_obj_calibration_mode(obj, method, cali_stage); +} + +CalibMode get_obj_calibration_mode(const MachineObject* obj, CalibrationMethod& method, int& cali_stage) +{ + method = CalibrationMethod::CALI_METHOD_MANUAL; + + if (!obj) return CalibMode::Calib_None; + + if (boost::contains(obj->m_gcode_file, "auto_filament_cali")) { + method = CalibrationMethod::CALI_METHOD_AUTO; + return CalibMode::Calib_PA_Line; + } + if (boost::contains(obj->m_gcode_file, "user_cali_manual_pa")) { + method = CalibrationMethod::CALI_METHOD_MANUAL; + return CalibMode::Calib_PA_Line; + } + if (boost::contains(obj->m_gcode_file, "extrusion_cali")) { + method = CalibrationMethod::CALI_METHOD_MANUAL; + return CalibMode::Calib_PA_Line; + } + + if (boost::contains(obj->m_gcode_file, "abs_flowcalib_cali")) { + method = CalibrationMethod::CALI_METHOD_AUTO; + return CalibMode::Calib_Flow_Rate; + } + + if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + if (boost::contains(obj->subtask_name, "auto_filament_cali")) { + method = CalibrationMethod::CALI_METHOD_AUTO; + return CalibMode::Calib_PA_Line; + } + if (boost::contains(obj->subtask_name, "user_cali_manual_pa")) { + method = CalibrationMethod::CALI_METHOD_MANUAL; + return CalibMode::Calib_PA_Line; + } + if (boost::contains(obj->subtask_name, "extrusion_cali")) { + method = CalibrationMethod::CALI_METHOD_MANUAL; + return CalibMode::Calib_PA_Line; + } + + if (boost::contains(obj->subtask_name, "abs_flowcalib_cali")) { + method = CalibrationMethod::CALI_METHOD_AUTO; + return CalibMode::Calib_Flow_Rate; + } + } + + CalibMode cali_mode = CalibUtils::get_calib_mode_by_name(obj->subtask_name, cali_stage); + if (cali_mode != CalibMode::Calib_None) { + method = CalibrationMethod::CALI_METHOD_MANUAL; + } + return cali_mode; +} + + +CaliPageButton::CaliPageButton(wxWindow* parent, CaliPageActionType type, wxString text) + : m_action_type(type), + Button(parent, text) +{ + StateColor btn_bg_green(std::pair(wxColour(206, 206, 206), StateColor::Disabled), + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Disabled), + std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + + StateColor btn_bd_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(0, 174, 66), StateColor::Enabled)); + + StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + StateColor btn_text_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(255, 255, 254), StateColor::Enabled)); + + StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + switch (m_action_type) + { + case CaliPageActionType::CALI_ACTION_MANAGE_RESULT: + this->SetLabel(_L("Manage Result")); + break; + case CaliPageActionType::CALI_ACTION_MANUAL_CALI: + this->SetLabel(_L("Manual Calibration")); + this->SetToolTip(_L("Result can be read by human eyes.")); + break; + case CaliPageActionType::CALI_ACTION_AUTO_CALI: + this->SetLabel(_L("Auto-Calibration")); + this->SetToolTip(_L("We would use Lidar to read the calibration result")); + break; + case CaliPageActionType::CALI_ACTION_START: + this->SetLabel(_L("Start Calibration")); + break; + case CaliPageActionType::CALI_ACTION_PREV: + this->SetLabel(_L("Prev")); + break; + case CaliPageActionType::CALI_ACTION_RECALI: + this->SetLabel(_L("Recalibration")); + break; + case CaliPageActionType::CALI_ACTION_NEXT: + this->SetLabel(_L("Next")); + break; + case CaliPageActionType::CALI_ACTION_CALI_NEXT: + this->SetLabel(_L("Next")); + break; + case CaliPageActionType::CALI_ACTION_CALI: + this->SetLabel(_L("Calibrate")); + break; + case CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2: + this->SetLabel(_L("Calibrate")); + break; + case CaliPageActionType::CALI_ACTION_PA_SAVE: + this->SetLabel(_L("Finish")); + break; + case CaliPageActionType::CALI_ACTION_FLOW_SAVE: + this->SetLabel(_L("Finish")); + break; + case CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE: + this->SetLabel(_L("Finish")); + break; + case CaliPageActionType::CALI_ACTION_FLOW_FINE_SAVE: + this->SetLabel(_L("Finish")); + break; + case CaliPageActionType::CALI_ACTION_COMMON_SAVE: + this->SetLabel(_L("Finish")); + break; + default: + this->SetLabel("Unknown"); + break; + } + + switch (m_action_type) + { + case CaliPageActionType::CALI_ACTION_PREV: + case CaliPageActionType::CALI_ACTION_RECALI: + SetBackgroundColor(btn_bg_white); + SetBorderColor(btn_bd_white); + SetTextColor(btn_text_white); + break; + case CaliPageActionType::CALI_ACTION_START: + case CaliPageActionType::CALI_ACTION_NEXT: + case CaliPageActionType::CALI_ACTION_CALI: + case CaliPageActionType::CALI_ACTION_CALI_NEXT: + case CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2: + case CaliPageActionType::CALI_ACTION_PA_SAVE: + case CaliPageActionType::CALI_ACTION_FLOW_SAVE: + case CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE: + case CaliPageActionType::CALI_ACTION_FLOW_FINE_SAVE: + case CaliPageActionType::CALI_ACTION_COMMON_SAVE: + SetBackgroundColor(btn_bg_green); + SetBorderColor(btn_bd_green); + SetTextColor(btn_text_green); + break; + default: + break; + } + + SetBackgroundColour(*wxWHITE); + SetFont(Label::Body_13); + SetMinSize(wxSize(-1, FromDIP(24))); + SetCornerRadius(FromDIP(12)); +} + + +FilamentComboBox::FilamentComboBox(wxWindow* parent, const wxPoint& pos, const wxSize& size) + : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL) +{ + SetBackgroundColour(*wxWHITE); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_comboBox = new CalibrateFilamentComboBox(this); + m_comboBox->SetSize(CALIBRATION_FILAMENT_COMBOX_SIZE); + m_comboBox->SetMinSize(CALIBRATION_FILAMENT_COMBOX_SIZE); + main_sizer->Add(m_comboBox->clr_picker, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(8)); + main_sizer->Add(m_comboBox, 0, wxALIGN_CENTER); + + this->SetSizer(main_sizer); + this->Layout(); + main_sizer->Fit(this); +} + +void FilamentComboBox::set_select_mode(CalibrationFilamentMode mode) +{ + m_mode = mode; + if (m_checkBox) + m_checkBox->Show(m_mode == CalibrationFilamentMode::CALI_MODEL_MULITI); + if (m_radioBox) + m_radioBox->Show(m_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE); + + Layout(); +} + +void FilamentComboBox::load_tray_from_ams(int id, DynamicPrintConfig& tray) +{ + m_comboBox->load_tray(tray); + + m_tray_id = id; + m_tray_name = m_comboBox->get_tray_name(); + m_is_bbl_filamnet = MachineObject::is_bbl_filament(m_comboBox->get_tag_uid()); + Enable(m_comboBox->is_tray_exist()); + + if (m_comboBox->is_tray_exist()) { + if (!m_comboBox->is_compatible_with_printer()) { + SetValue(false); + } + + if (m_radioBox) + m_radioBox->Enable(m_comboBox->is_compatible_with_printer()); + + if (m_checkBox) + m_checkBox->Enable(m_comboBox->is_compatible_with_printer()); + + } + + // check compatibility + wxCommandEvent event(EVT_CALI_TRAY_CHANGED); + event.SetEventObject(GetParent()); + wxPostEvent(GetParent(), event); +} + +void FilamentComboBox::update_from_preset() { m_comboBox->update(); } + +bool FilamentComboBox::Show(bool show) +{ + return wxPanel::Show(show); +} + +bool FilamentComboBox::Enable(bool enable) { + if (!enable) + SetValue(false); + + if (m_radioBox) + m_radioBox->Enable(enable); + if (m_checkBox) + m_checkBox->Enable(enable); + return wxPanel::Enable(enable); +} + +void FilamentComboBox::SetValue(bool value, bool send_event) { + if (m_radioBox) { + if (value == m_radioBox->GetValue()) { + if (m_checkBox) { + if (value == m_checkBox->GetValue()) + return; + } + else { + return; + } + } + } + if (m_radioBox) + m_radioBox->SetValue(value); + if (m_checkBox) + m_checkBox->SetValue(value); +} + + + +CaliPageCaption::CaliPageCaption(wxWindow* parent, CalibMode cali_mode, + wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + init_bitmaps(); + + SetBackgroundColour(*wxWHITE); + + auto top_sizer = new wxBoxSizer(wxVERTICAL); + auto caption_sizer = new wxBoxSizer(wxHORIZONTAL); + m_prev_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_prev", + wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 30); + m_prev_btn->SetBackgroundColour(*wxWHITE); + caption_sizer->Add(m_prev_btn, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); + + wxString title = get_cali_mode_caption_string(cali_mode); + Label* title_text = new Label(this, title); + title_text->SetFont(Label::Head_20); + title_text->Wrap(-1); + caption_sizer->Add(title_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); + + m_help_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_help", + wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 30); + m_help_btn->Hide(); + m_help_btn->SetBackgroundColour(*wxWHITE); + caption_sizer->Add(m_help_btn, 0, wxALIGN_CENTER); + + caption_sizer->AddStretchSpacer(); + + m_wiki_url = get_calibration_wiki_page(cali_mode); + create_wiki(this); + caption_sizer->Add(m_wiki_text, 0); + + top_sizer->Add(caption_sizer, 1, wxEXPAND); + top_sizer->AddSpacer(FromDIP(35)); + this->SetSizer(top_sizer); + top_sizer->Fit(this); + + // hover effect + //m_prev_btn->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + // m_prev_btn->SetBitmap(m_prev_bmp_hover.bmp()); + //}); + + //m_prev_btn->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { + // m_prev_btn->SetBitmap(m_prev_bmp_normal.bmp()); + //}); + + // hover effect + //m_help_btn->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { + // m_help_btn->SetBitmap(m_help_bmp_hover.bmp()); + // }); + + //m_help_btn->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { + // m_help_btn->SetBitmap(m_help_bmp_normal.bmp()); + // }); + + // send event + m_prev_btn->Bind(wxEVT_BUTTON, [this](auto& e) { + wxCommandEvent event(EVT_CALI_ACTION); + event.SetEventObject(m_parent); + event.SetInt((int)(CaliPageActionType::CALI_ACTION_GO_HOME)); + wxPostEvent(m_parent, event); + }); + +#ifdef __linux__ + wxGetApp().CallAfter([this, title_text]() { + title_text->SetMinSize(title_text->GetSize() + wxSize{ FromDIP(150), title_text->GetCharHeight() / 2 }); + Layout(); + Fit(); + }); +#endif +} + +void CaliPageCaption::init_bitmaps() { + m_prev_bmp_normal = ScalableBitmap(this, "cali_page_caption_prev", 30); + m_prev_bmp_hover = ScalableBitmap(this, "cali_page_caption_prev_hover", 30); + m_help_bmp_normal = ScalableBitmap(this, "cali_page_caption_help", 30); + m_help_bmp_hover = ScalableBitmap(this, "cali_page_caption_help_hover", 30); +} + +void CaliPageCaption::create_wiki(wxWindow* parent) +{ + m_wiki_text = new Label(parent, _L("Wiki")); + m_wiki_text->SetFont(Label::Head_14); + m_wiki_text->SetForegroundColour({ 0, 88, 220 }); + m_wiki_text->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) { + e.Skip(); + SetCursor(wxCURSOR_HAND); + }); + m_wiki_text->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { + e.Skip(); + SetCursor(wxCURSOR_ARROW); + }); + m_wiki_text->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { + if (!m_wiki_url.empty()) + wxLaunchDefaultBrowser(m_wiki_url); + }); +} + +void CaliPageCaption::show_prev_btn(bool show) +{ + m_prev_btn->Show(show); +} + +void CaliPageCaption::show_help_icon(bool show) +{ + //m_help_btn->Show(show); + m_help_btn->Hide(); +} + +void CaliPageCaption::on_sys_color_changed() +{ + m_prev_btn->msw_rescale(); +} + +CaliPageStepGuide::CaliPageStepGuide(wxWindow* parent, wxArrayString steps, + wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style), + m_steps(steps) +{ + SetBackgroundColour(*wxWHITE); + + auto top_sizer = new wxBoxSizer(wxVERTICAL); + + m_step_sizer = new wxBoxSizer(wxHORIZONTAL); + m_step_sizer->AddSpacer(FromDIP(90)); + for (int i = 0; i < m_steps.size(); i++) { + Label* step_text = new Label(this, m_steps[i]); + step_text->SetForegroundColour(wxColour(206, 206, 206)); + m_text_steps.push_back(step_text); + m_step_sizer->Add(step_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15)); + if (i != m_steps.size() - 1) { + auto line = new wxPanel(this, wxID_ANY, wxDefaultPosition); + line->SetBackgroundColour(*wxBLACK); + m_step_sizer->Add(line, 1, wxALIGN_CENTER); + } + } + m_step_sizer->AddSpacer(FromDIP(90)); + + top_sizer->Add(m_step_sizer, 0, wxEXPAND); + top_sizer->AddSpacer(FromDIP(30)); + this->SetSizer(top_sizer); + top_sizer->Fit(this); + + wxGetApp().UpdateDarkUIWin(this); +} + +void CaliPageStepGuide::set_steps(int index) +{ + for (Label* text_step : m_text_steps) { + text_step->SetForegroundColour(wxColour(206, 206, 206)); + } + m_text_steps[index]->SetForegroundColour(*wxBLACK); + + wxGetApp().UpdateDarkUIWin(this); +} + +void CaliPageStepGuide::set_steps_string(wxArrayString steps) +{ + m_steps.Clear(); + m_text_steps.clear(); + m_step_sizer->Clear(true); + m_steps = steps; + m_step_sizer->AddSpacer(FromDIP(90)); + for (int i = 0; i < m_steps.size(); i++) { + Label* step_text = new Label(this, m_steps[i]); + step_text->SetForegroundColour(wxColour(206, 206, 206)); + m_text_steps.push_back(step_text); + m_step_sizer->Add(step_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15)); + if (i != m_steps.size() - 1) { + auto line = new wxPanel(this, wxID_ANY, wxDefaultPosition); + line->SetBackgroundColour(*wxBLACK); + m_step_sizer->Add(line, 1, wxALIGN_CENTER); + } + } + m_step_sizer->AddSpacer(FromDIP(90)); + + wxGetApp().UpdateDarkUIWin(this); + + Layout(); +} + + +CaliPagePicture::CaliPagePicture(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(wxColour(0xCECECE)); + auto top_sizer = new wxBoxSizer(wxHORIZONTAL); + top_sizer->AddStretchSpacer(); + m_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap); + top_sizer->Add(m_img); + top_sizer->AddStretchSpacer(); + this->SetSizer(top_sizer); + top_sizer->Fit(this); +} + +void CaliPagePicture::set_img(const wxBitmap& bmp) +{ + m_img->SetBitmap(bmp); +} + + +PAPageHelpPanel::PAPageHelpPanel(wxWindow* parent, bool ground_panel, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + if (ground_panel) + SetBackgroundColour(wxColour(238, 238, 238)); + else + SetBackgroundColour(parent->GetBackgroundColour()); + int left_align_padding = ground_panel ? FromDIP(20) : 0; + + wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL); + top_sizer->AddSpacer(FromDIP(10)); + + auto help_text_title = new Label(this, _L("How to use calibration result?")); + help_text_title->SetFont(Label::Head_14); + top_sizer->Add(help_text_title, 0, wxLEFT | wxRIGHT, left_align_padding); + + wxBoxSizer* help_text_sizer = new wxBoxSizer(wxHORIZONTAL); + auto help_text = new Label(this, _L("You could change the Flow Dynamics Calibration Factor in material editing")); + help_text->SetFont(Label::Body_14); + m_help_btn = new ScalableButton(this, wxID_ANY, "cali_page_caption_help", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 24); + m_help_btn->SetBackgroundColour(m_help_btn->GetParent()->GetBackgroundColour()); + help_text_sizer->Add(help_text, 0, wxALIGN_CENTER | wxLEFT, left_align_padding); + help_text_sizer->Add(m_help_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(8)); + help_text_sizer->AddSpacer(FromDIP(20)); + + top_sizer->Add(help_text_sizer); + + top_sizer->AddSpacer(FromDIP(6)); + + create_pop_window(); + + SetSizer(top_sizer); + top_sizer->Fit(this); +} + +void PAPageHelpPanel::create_pop_window() +{ + m_pop_win = new PopupWindow(this); + m_pop_win->SetBackgroundColour(*wxWHITE); + wxBoxSizer* pop_sizer = new wxBoxSizer(wxVERTICAL); + m_pop_win->SetSizer(pop_sizer); + + wxStaticBitmap* img = new wxStaticBitmap(m_pop_win, wxID_ANY, wxNullBitmap); + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + img->SetBitmap(ScalableBitmap(this, "cali_fdc_editing_diagram_CN", 206).bmp()); + } else { + img->SetBitmap(ScalableBitmap(this, "cali_fdc_editing_diagram", 206).bmp()); + } + pop_sizer->Add(img, 1, wxEXPAND | wxALL, FromDIP(20)); + + m_pop_win->Layout(); + m_pop_win->Fit(); + + m_pop_win->Bind(wxEVT_PAINT, [this](auto&) { + wxPaintDC dc(m_pop_win); + dc.SetPen({ 0xACACAC }); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRectangle({ 0, 0 }, m_pop_win->GetSize()); + }); + + m_help_btn->Bind(wxEVT_ENTER_WINDOW, [this](auto&) { + wxPoint pop_pos = m_help_btn->ClientToScreen(wxPoint(0, 0)); + pop_pos.x -= FromDIP(60); + pop_pos.y -= m_pop_win->GetSize().y + FromDIP(10); + + m_pop_win->Position(pop_pos, wxSize(0, 0)); + m_pop_win->Popup(); + }); + m_help_btn->Bind(wxEVT_LEAVE_WINDOW, [this](auto&) { + m_pop_win->Dismiss(); + }); +} + + +CaliPageActionPanel::CaliPageActionPanel(wxWindow* parent, + CalibMode cali_mode, + CaliPageType page_type, + wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + m_parent = parent; + + wxWindow* btn_parent = this; + + if (cali_mode == CalibMode::Calib_PA_Line) { + if (page_type == CaliPageType::CALI_PAGE_START) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_MANAGE_RESULT)); + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_MANUAL_CALI)); + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_AUTO_CALI)); + } + else if (page_type == CaliPageType::CALI_PAGE_PRESET) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI)); + } + else if (page_type == CaliPageType::CALI_PAGE_CALI) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI_NEXT)); + } + else if (page_type == CaliPageType::CALI_PAGE_PA_SAVE) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_PA_SAVE)); + } + } + else if (cali_mode == CalibMode::Calib_Flow_Rate) { + if (page_type == CaliPageType::CALI_PAGE_START) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_MANUAL_CALI)); + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_AUTO_CALI)); + } + else if (page_type == CaliPageType::CALI_PAGE_PRESET) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI)); + } + else if (page_type == CaliPageType::CALI_PAGE_CALI) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI_NEXT)); + } + else if (page_type == CaliPageType::CALI_PAGE_COARSE_SAVE) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE)); + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2)); + } + else if (page_type == CaliPageType::CALI_PAGE_FINE_SAVE) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_FLOW_FINE_SAVE)); + } + else if (page_type == CaliPageType::CALI_PAGE_FLOW_SAVE) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_FLOW_SAVE)); + } + } + else { + if (page_type == CaliPageType::CALI_PAGE_START) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_START)); + } + else if (page_type == CaliPageType::CALI_PAGE_PRESET) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI)); + } + else if (page_type == CaliPageType::CALI_PAGE_CALI) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_CALI_NEXT)); + } + else if (page_type == CaliPageType::CALI_PAGE_COMMON_SAVE) { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_COMMON_SAVE)); + } + else { + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_PREV)); + m_action_btns.push_back(new CaliPageButton(btn_parent, CaliPageActionType::CALI_ACTION_NEXT)); + } + + } + + auto top_sizer = new wxBoxSizer(wxHORIZONTAL); + + top_sizer->Add(0, 0, 1, wxEXPAND, 0); + for (int i = 0; i < m_action_btns.size(); i++) { + top_sizer->Add(m_action_btns[i], 0, wxALL, FromDIP(5)); + + m_action_btns[i]->Bind(wxEVT_BUTTON, + [this, i](wxCommandEvent& evt) { + wxCommandEvent event(EVT_CALI_ACTION); + event.SetEventObject(m_parent); + event.SetInt((int)m_action_btns[i]->get_action_type()); + wxPostEvent(m_parent, event); + }); + } + top_sizer->Add(0, 0, 1, wxEXPAND, 0); + + this->SetSizer(top_sizer); + top_sizer->Fit(this); +} + +void CaliPageActionPanel::bind_button(CaliPageActionType action_type, bool is_block) +{ + for (int i = 0; i < m_action_btns.size(); i++) { + if (m_action_btns[i]->get_action_type() == action_type) { + + if (is_block) { + m_action_btns[i]->Bind(wxEVT_BUTTON, + [this](wxCommandEvent& evt) { + MessageDialog msg(nullptr, _L("The current firmware version of the printer does not support calibration.\nPlease upgrade the printer firmware."), _L("Calibration not supported"), wxOK | wxICON_WARNING); + msg.ShowModal(); + }); + } + else { + m_action_btns[i]->Bind(wxEVT_BUTTON, + [this, i](wxCommandEvent& evt) { + wxCommandEvent event(EVT_CALI_ACTION); + event.SetEventObject(m_parent); + event.SetInt((int)m_action_btns[i]->get_action_type()); + wxPostEvent(m_parent, event); + }); + } + } + } + +} + +void CaliPageActionPanel::show_button(CaliPageActionType action_type, bool show) +{ + for (int i = 0; i < m_action_btns.size(); i++) { + if (m_action_btns[i]->get_action_type() == action_type) { + m_action_btns[i]->Show(show); + } + } + Layout(); +} + +void CaliPageActionPanel::enable_button(CaliPageActionType action_type, bool enable) +{ + for (int i = 0; i < m_action_btns.size(); i++) { + if (m_action_btns[i]->get_action_type() == action_type) { + m_action_btns[i]->Enable(enable); + } + } +} + +CalibrationWizardPage::CalibrationWizardPage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) + , m_parent(parent) +{ + SetBackgroundColour(*wxWHITE); + SetMinSize({ MIN_CALIBRATION_PAGE_WIDTH, -1 }); +} + +void CalibrationWizardPage::msw_rescale() +{ +} + +void CalibrationWizardPage::on_sys_color_changed() +{ + m_page_caption->on_sys_color_changed(); +} + +}} diff --git a/src/slic3r/GUI/CalibrationWizardPage.hpp b/src/slic3r/GUI/CalibrationWizardPage.hpp new file mode 100644 index 000000000..746c58628 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardPage.hpp @@ -0,0 +1,306 @@ +#ifndef slic3r_GUI_CalibrationWizardPage_hpp_ +#define slic3r_GUI_CalibrationWizardPage_hpp_ + +#include "wx/event.h" +#include "Widgets/Button.hpp" +#include "Widgets/ComboBox.hpp" +#include "Widgets/TextInput.hpp" +#include "Widgets/AMSControl.hpp" +#include "Widgets/ProgressBar.hpp" +#include "wxExtensions.hpp" +#include "PresetComboBoxes.hpp" + +#include "../slic3r/Utils/CalibUtils.hpp" +#include "../../libslic3r/Calib.hpp" + +namespace Slic3r { namespace GUI { + + +#define MIN_CALIBRATION_PAGE_WIDTH FromDIP(1100) +#define PRESET_GAP FromDIP(25) +#define CALIBRATION_COMBOX_SIZE wxSize(FromDIP(500), FromDIP(24)) +#define CALIBRATION_FILAMENT_COMBOX_SIZE wxSize(FromDIP(250), FromDIP(24)) +#define CALIBRATION_OPTIMAL_INPUT_SIZE wxSize(FromDIP(300), FromDIP(24)) +#define CALIBRATION_FROM_TO_INPUT_SIZE wxSize(FromDIP(160), FromDIP(24)) +#define CALIBRATION_FGSIZER_HGAP FromDIP(50) +#define CALIBRATION_TEXT_MAX_LENGTH FromDIP(90) + CALIBRATION_FGSIZER_HGAP + 2 * CALIBRATION_FILAMENT_COMBOX_SIZE.x +#define CALIBRATION_PROGRESSBAR_LENGTH FromDIP(690) + +class CalibrationWizard; + +enum class CalibrationStyle : int +{ + CALI_STYLE_DEFAULT = 0, + CALI_STYLE_X1, + CALI_STYLE_P1P, +}; + +CalibrationStyle get_cali_style(MachineObject* obj); + +wxString get_cali_mode_caption_string(CalibMode mode); + +enum CalibrationFilamentMode { + /* calibration single filament at once */ + CALI_MODEL_SINGLE = 0, + /* calibration multi filament at once */ + CALI_MODEL_MULITI, +}; + +enum CalibrationMethod { + CALI_METHOD_MANUAL = 0, + CALI_METHOD_AUTO, + CALI_METHOD_NONE, +}; + +wxString get_calibration_wiki_page(CalibMode cali_mode); + +CalibrationFilamentMode get_cali_filament_mode(MachineObject* obj, CalibMode mode); + +CalibMode get_obj_calibration_mode(const MachineObject* obj); + +CalibMode get_obj_calibration_mode(const MachineObject* obj, int& cali_stage); + +CalibMode get_obj_calibration_mode(const MachineObject* obj, CalibrationMethod& method, int& cali_stage); + + +enum class CaliPageType { + CALI_PAGE_START = 0, + CALI_PAGE_PRESET, + CALI_PAGE_CALI, + CALI_PAGE_COARSE_SAVE, + CALI_PAGE_FINE_CALI, + CALI_PAGE_FINE_SAVE, + CALI_PAGE_PA_SAVE, + CALI_PAGE_FLOW_SAVE, + CALI_PAGE_COMMON_SAVE, +}; + +class FilamentComboBox : public wxPanel +{ +public: + FilamentComboBox(wxWindow* parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + ~FilamentComboBox() {}; + + void set_select_mode(CalibrationFilamentMode mode); + CalibrationFilamentMode get_select_mode() { return m_mode; } + void load_tray_from_ams(int id, DynamicPrintConfig& tray); + void update_from_preset(); + int get_tray_id() { return m_tray_id; } + bool is_bbl_filament() { return m_is_bbl_filamnet; } + std::string get_tray_name() { return m_tray_name; } + CalibrateFilamentComboBox* GetComboBox() { return m_comboBox; } + CheckBox* GetCheckBox() { return m_checkBox; } + void SetCheckBox(CheckBox* cb) { m_checkBox = cb; } + wxRadioButton* GetRadioBox() { return m_radioBox; } + void SetRadioBox(wxRadioButton* btn) { m_radioBox = btn; } + virtual bool Show(bool show = true); + virtual bool Enable(bool enable); + virtual void SetValue(bool value, bool send_event = true); + +protected: + int m_tray_id { -1 }; + std::string m_tray_name; + bool m_is_bbl_filamnet{ false }; + + CheckBox* m_checkBox{ nullptr }; + wxRadioButton* m_radioBox{ nullptr }; + CalibrateFilamentComboBox* m_comboBox{ nullptr }; + CalibrationFilamentMode m_mode { CalibrationFilamentMode::CALI_MODEL_SINGLE }; +}; + +typedef std::vector FilamentComboBoxList; + +class CaliPageCaption : public wxPanel +{ +public: + CaliPageCaption(wxWindow* parent, + CalibMode cali_mode, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void show_prev_btn(bool show = true); + void show_help_icon(bool show = true); + void on_sys_color_changed(); + +protected: + ScalableButton* m_prev_btn; + ScalableButton* m_help_btn; + +private: + void init_bitmaps(); + void create_wiki(wxWindow* parent); + + Label* m_wiki_text; + wxString m_wiki_url; + ScalableBitmap m_prev_bmp_normal; + ScalableBitmap m_prev_bmp_hover; + ScalableBitmap m_help_bmp_normal; + ScalableBitmap m_help_bmp_hover; +}; + +class CaliPageStepGuide : public wxPanel +{ +public: + CaliPageStepGuide(wxWindow* parent, + wxArrayString steps, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void set_steps(int index); + void set_steps_string(wxArrayString steps); +protected: + wxArrayString m_steps; + wxBoxSizer* m_step_sizer; + std::vector m_text_steps; +}; + +class CaliPagePicture : public wxPanel +{ +public: + CaliPagePicture(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void set_img(const wxBitmap& bmp); + void paint_on_img(); +protected: + wxStaticBitmap* m_img; +}; + +class PAPageHelpPanel : public wxPanel +{ +public: + PAPageHelpPanel(wxWindow* parent, + bool ground_panel = true, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + +protected: + void create_pop_window(); + + ScalableButton* m_help_btn; + PopupWindow* m_pop_win; + wxStaticBitmap* m_img; +}; + +enum class CaliPageActionType : int +{ + CALI_ACTION_MANAGE_RESULT = 0, + CALI_ACTION_MANUAL_CALI, + CALI_ACTION_AUTO_CALI, + CALI_ACTION_START, + CALI_ACTION_CALI, + CALI_ACTION_FLOW_CALI_STAGE_2, + CALI_ACTION_RECALI, + CALI_ACTION_PREV, + CALI_ACTION_NEXT, + CALI_ACTION_CALI_NEXT, + CALI_ACTION_PA_SAVE, + CALI_ACTION_FLOW_SAVE, + CALI_ACTION_FLOW_COARSE_SAVE, + CALI_ACTION_FLOW_FINE_SAVE, + CALI_ACTION_COMMON_SAVE, + CALI_ACTION_GO_HOME, + CALI_ACTION_COUNT +}; + +class CaliPageButton : public Button +{ +public: + CaliPageButton(wxWindow* parent, CaliPageActionType type, wxString text = wxEmptyString); + + CaliPageActionType get_action_type() { return m_action_type; } +private: + CaliPageActionType m_action_type; +}; + +class CaliPageActionPanel : public wxPanel +{ +public: + CaliPageActionPanel(wxWindow* parent, + CalibMode cali_mode, + CaliPageType page_type, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void bind_button(CaliPageActionType action_type, bool is_block); + void show_button(CaliPageActionType action_type, bool show = true); + void enable_button(CaliPageActionType action_type, bool enable = true); + +protected: + std::vector m_action_btns; +}; + +class CalibrationWizardPage : public wxPanel +{ +public: + CalibrationWizardPage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~CalibrationWizardPage() {}; + + CaliPageType get_page_type() { return m_page_type; } + + CalibrationWizardPage* get_prev_page() { return m_prev_page; } + CalibrationWizardPage* get_next_page() { return m_next_page; } + void set_prev_page(CalibrationWizardPage* prev) { m_prev_page = prev; } + void set_next_page(CalibrationWizardPage* next) { m_next_page = next; } + CalibrationWizardPage* chain(CalibrationWizardPage* next) + { + set_next_page(next); + next->set_prev_page(this); + return next; + } + + virtual void update(MachineObject* obj) { curr_obj = obj; } + /* device changed and connected */ + virtual void on_device_connected(MachineObject* obj) { curr_obj = obj; } + + virtual void on_reset_page() {} + + virtual void set_cali_filament_mode(CalibrationFilamentMode mode) { + m_cali_filament_mode = mode; + } + + virtual void set_cali_method(CalibrationMethod method) { + m_cali_method = method; + if (method == CalibrationMethod::CALI_METHOD_MANUAL) { + set_cali_filament_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE); + } + } + + void msw_rescale(); + void on_sys_color_changed(); + +protected: + CalibMode m_cali_mode; + CaliPageType m_page_type; + CalibrationFilamentMode m_cali_filament_mode; + CalibrationMethod m_cali_method{ CalibrationMethod::CALI_METHOD_MANUAL }; + MachineObject* curr_obj { nullptr }; + + wxWindow* m_parent { nullptr }; + CaliPageCaption* m_page_caption { nullptr }; + CaliPageActionPanel* m_action_panel { nullptr }; + Label* m_statictext_printer_msg{ nullptr }; + +private: + CalibrationWizardPage* m_prev_page {nullptr}; + CalibrationWizardPage* m_next_page {nullptr}; +}; + +wxDECLARE_EVENT(EVT_CALI_ACTION, wxCommandEvent); +wxDECLARE_EVENT(EVT_CALI_TRAY_CHANGED, wxCommandEvent); + + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp new file mode 100644 index 000000000..3c1a63e9b --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -0,0 +1,1870 @@ +#include "CalibrationWizardPresetPage.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" +#include "MsgDialog.hpp" +#include "libslic3r/Print.hpp" + +namespace Slic3r { namespace GUI { +CaliPresetCaliStagePanel::CaliPresetCaliStagePanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPresetCaliStagePanel::create_panel(wxWindow* parent) +{ + auto title = new Label(parent, _L("Calibration Type")); + title->SetFont(Label::Head_14); + m_top_sizer->Add(title); + m_top_sizer->AddSpacer(FromDIP(15)); + + m_complete_radioBox = new wxRadioButton(parent, wxID_ANY, _L("Complete Calibration")); + m_complete_radioBox->SetForegroundColour(*wxBLACK); + m_complete_radioBox->SetValue(true); + m_stage = CALI_MANUAL_STAGE_1; + m_top_sizer->Add(m_complete_radioBox); + m_top_sizer->AddSpacer(FromDIP(10)); + + m_fine_radioBox = new wxRadioButton(parent, wxID_ANY, _L("Fine Calibration based on flow ratio")); + m_fine_radioBox->SetForegroundColour(*wxBLACK); + m_top_sizer->Add(m_fine_radioBox); + + auto input_panel = new wxPanel(parent); + input_panel->Hide(); + auto input_sizer = new wxBoxSizer(wxHORIZONTAL); + input_panel->SetSizer(input_sizer); + flow_ratio_input = new TextInput(input_panel, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE); + flow_ratio_input->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + float default_flow_ratio = 1.0f; + auto flow_ratio_str = wxString::Format("%.2f", default_flow_ratio); + flow_ratio_input->GetTextCtrl()->SetValue(flow_ratio_str); + input_sizer->AddSpacer(FromDIP(18)); + input_sizer->Add(flow_ratio_input, 0, wxTOP, FromDIP(10)); + m_top_sizer->Add(input_panel); + + m_top_sizer->AddSpacer(PRESET_GAP); + + // events + m_complete_radioBox->Bind(wxEVT_RADIOBUTTON, [this, input_panel](auto& e) { + input_panel->Show(false); + m_stage = CALI_MANUAL_STAGE_1; + GetParent()->Layout(); + GetParent()->Fit(); + }); + m_fine_radioBox->Bind(wxEVT_RADIOBUTTON, [this, input_panel](auto& e) { + input_panel->Show(); + m_stage = CALI_MANUAL_STAGE_2; + GetParent()->Layout(); + GetParent()->Fit(); + }); + flow_ratio_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this](auto& e) { + float flow_ratio = 0.0f; + if (!CalibUtils::validate_input_flow_ratio(flow_ratio_input->GetTextCtrl()->GetValue(), &flow_ratio)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (0.0 < flow ratio < 2.0)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + auto flow_ratio_str = wxString::Format("%.3f", flow_ratio); + flow_ratio_input->GetTextCtrl()->SetValue(flow_ratio_str); + m_flow_ratio_value = flow_ratio; + }); + flow_ratio_input->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + float flow_ratio = 0.0f; + if (!CalibUtils::validate_input_flow_ratio(flow_ratio_input->GetTextCtrl()->GetValue(), &flow_ratio)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (0.0 < flow ratio < 2.0)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + auto flow_ratio_str = wxString::Format("%.3f", flow_ratio); + flow_ratio_input->GetTextCtrl()->SetValue(flow_ratio_str); + m_flow_ratio_value = flow_ratio; + e.Skip(); + }); + Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + SetFocusIgnoringChildren(); + }); +} + +void CaliPresetCaliStagePanel::set_cali_stage(CaliPresetStage stage, float value) +{ + if (stage == CaliPresetStage::CALI_MANUAL_STAGE_1) { + wxCommandEvent radioBox_evt(wxEVT_RADIOBUTTON); + radioBox_evt.SetEventObject(m_complete_radioBox); + wxPostEvent(m_complete_radioBox, radioBox_evt); + m_stage = stage; + } + else if(stage == CaliPresetStage::CALI_MANUAL_STAGE_2){ + wxCommandEvent radioBox_evt(wxEVT_RADIOBUTTON); + radioBox_evt.SetEventObject(m_fine_radioBox); + wxPostEvent(m_fine_radioBox, radioBox_evt); + m_stage = stage; + m_flow_ratio_value = value; + } +} + +void CaliPresetCaliStagePanel::get_cali_stage(CaliPresetStage& stage, float& value) +{ + stage = m_stage; + value = (m_stage == CALI_MANUAL_STAGE_2) ? m_flow_ratio_value : value; +} + +void CaliPresetCaliStagePanel::set_flow_ratio_value(float flow_ratio) +{ + flow_ratio_input->GetTextCtrl()->SetValue(wxString::Format("%.2f", flow_ratio)); + m_flow_ratio_value = flow_ratio; +} + +CaliPresetWarningPanel::CaliPresetWarningPanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxHORIZONTAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPresetWarningPanel::create_panel(wxWindow* parent) +{ + m_warning_text = new Label(parent, wxEmptyString); + m_warning_text->SetFont(Label::Body_13); + m_warning_text->SetForegroundColour(wxColour(230, 92, 92)); + m_warning_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); + m_top_sizer->Add(m_warning_text, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(5)); +} + +void CaliPresetWarningPanel::set_warning(wxString text) +{ + m_warning_text->SetLabel(text); +} + +CaliPresetCustomRangePanel::CaliPresetCustomRangePanel( + wxWindow* parent, + int input_value_nums, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) + , m_input_value_nums(input_value_nums) +{ + SetBackgroundColour(*wxWHITE); + + m_title_texts.resize(input_value_nums); + m_value_inputs.resize(input_value_nums); + + m_top_sizer = new wxBoxSizer(wxHORIZONTAL); + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPresetCustomRangePanel::set_unit(wxString unit) +{ + for (size_t i = 0; i < m_input_value_nums; ++i) { + m_value_inputs[i]->SetLabel(unit); + } +} + +void CaliPresetCustomRangePanel::set_titles(wxArrayString titles) +{ + if (titles.size() != m_input_value_nums) + return; + + for (size_t i = 0; i < m_input_value_nums; ++i) { + m_title_texts[i]->SetLabel(titles[i]); + } +} + +void CaliPresetCustomRangePanel::set_values(wxArrayString values) { + if (values.size() != m_input_value_nums) + return; + + for (size_t i = 0; i < m_input_value_nums; ++i) { + m_value_inputs[i]->GetTextCtrl()->SetValue(values[i]); + } +} + +wxArrayString CaliPresetCustomRangePanel::get_values() +{ + wxArrayString result; + for (size_t i = 0; i < m_input_value_nums; ++i) { + result.push_back(m_value_inputs[i]->GetTextCtrl()->GetValue()); + } + return result; +} + +void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) +{ + wxBoxSizer* horiz_sizer; + horiz_sizer = new wxBoxSizer(wxHORIZONTAL); + + for (size_t i = 0; i < m_input_value_nums; ++i) { + if (i > 0) { + horiz_sizer->Add(FromDIP(10), 0, 0, wxEXPAND, 0); + } + + wxBoxSizer *item_sizer; + item_sizer = new wxBoxSizer(wxVERTICAL); + m_title_texts[i] = new Label(parent, _L("Title")); + m_title_texts[i]->Wrap(-1); + m_title_texts[i]->SetFont(::Label::Body_14); + item_sizer->Add(m_title_texts[i], 0, wxALL, 0); + m_value_inputs[i] = new TextInput(parent, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, 0); + m_value_inputs[i]->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + item_sizer->Add(m_value_inputs[i], 0, wxALL, 0); + horiz_sizer->Add(item_sizer, 0, wxEXPAND, 0); + } + + m_top_sizer->Add(horiz_sizer, 0, wxEXPAND, 0); +} + + +CaliPresetTipsPanel::CaliPresetTipsPanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + this->SetBackgroundColour(wxColour(238, 238, 238)); + this->SetMinSize(wxSize(MIN_CALIBRATION_PAGE_WIDTH, -1)); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPresetTipsPanel::create_panel(wxWindow* parent) +{ + m_top_sizer->AddSpacer(FromDIP(10)); + + auto preset_panel_tips = new Label(parent, _L("A test model will be printed. Please clear the build plate and place it back to the hot bed before calibration.")); + preset_panel_tips->SetFont(Label::Body_14); + preset_panel_tips->Wrap(CALIBRATION_TEXT_MAX_LENGTH * 1.5f); + m_top_sizer->Add(preset_panel_tips, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + + m_top_sizer->AddSpacer(FromDIP(10)); + + auto info_sizer = new wxFlexGridSizer(0, 3, 0, FromDIP(10)); + info_sizer->SetFlexibleDirection(wxBOTH); + info_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + auto nozzle_temp_sizer = new wxBoxSizer(wxVERTICAL); + auto nozzle_temp_text = new Label(parent, _L("Nozzle temperature")); + nozzle_temp_text->SetFont(Label::Body_12); + m_nozzle_temp = new TextInput(parent, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); + m_nozzle_temp->SetBorderWidth(0); + nozzle_temp_sizer->Add(nozzle_temp_text, 0, wxALIGN_LEFT); + nozzle_temp_sizer->Add(m_nozzle_temp, 0, wxEXPAND); + nozzle_temp_text->Hide(); + m_nozzle_temp->Hide(); + + auto bed_temp_sizer = new wxBoxSizer(wxHORIZONTAL); + auto printing_param_text = new Label(parent, _L("Printing Parameters")); + printing_param_text->SetFont(Label::Head_12); + printing_param_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); + bed_temp_sizer->Add(printing_param_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); + auto bed_temp_text = new Label(parent, _L("Bed temperature")); + bed_temp_text->SetFont(Label::Body_12); + + m_bed_temp = new Label(parent, _L("- \u2103")); + m_bed_temp->SetFont(Label::Body_12); + bed_temp_sizer->Add(bed_temp_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); + bed_temp_sizer->Add(m_bed_temp, 0, wxALIGN_CENTER); + + auto max_flow_sizer = new wxBoxSizer(wxVERTICAL); + auto max_flow_text = new Label(parent, _L("Max volumetric speed")); + max_flow_text->SetFont(Label::Body_12); + m_max_volumetric_speed = new TextInput(parent, wxEmptyString, _L("mm\u00B3"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); + m_max_volumetric_speed->SetBorderWidth(0); + max_flow_sizer->Add(max_flow_text, 0, wxALIGN_LEFT); + max_flow_sizer->Add(m_max_volumetric_speed, 0, wxEXPAND); + max_flow_text->Hide(); + m_max_volumetric_speed->Hide(); + + m_nozzle_temp->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto&) {}); + m_max_volumetric_speed->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto&) {}); + + info_sizer->Add(nozzle_temp_sizer); + info_sizer->Add(bed_temp_sizer); + info_sizer->Add(max_flow_sizer); + m_top_sizer->Add(info_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + + m_top_sizer->AddSpacer(FromDIP(10)); +} + +void CaliPresetTipsPanel::set_params(int nozzle_temp, int bed_temp, float max_volumetric) +{ + wxString text_nozzle_temp = wxString::Format("%d", nozzle_temp); + m_nozzle_temp->GetTextCtrl()->SetValue(text_nozzle_temp); + + wxString bed_temp_text = wxString::Format("%d", bed_temp); + if (bed_temp == 0) + bed_temp_text = "-"; + m_bed_temp->SetLabel(bed_temp_text + _L(" \u2103")); + + wxString flow_val_text = wxString::Format("%0.2f", max_volumetric); + m_max_volumetric_speed->GetTextCtrl()->SetValue(flow_val_text); +} + +void CaliPresetTipsPanel::get_params(int& nozzle_temp, int& bed_temp, float& max_volumetric) +{ + try { + nozzle_temp = stoi(m_nozzle_temp->GetTextCtrl()->GetValue().ToStdString()); + } + catch (...) { + nozzle_temp = 0; + } + try { + bed_temp = stoi(m_bed_temp->GetLabel().ToStdString()); + } + catch (...) { + bed_temp = 0; + } + try { + max_volumetric = stof(m_max_volumetric_speed->GetTextCtrl()->GetValue().ToStdString()); + } + catch (...) { + max_volumetric = 0.0f; + } +} + +CalibrationPresetPage::CalibrationPresetPage( + wxWindow* parent, + CalibMode cali_mode, + bool custom_range, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : CalibrationWizardPage(parent, id, pos, size, style) + , m_show_custom_range(custom_range) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = cali_mode; + m_page_type = CaliPageType::CALI_PAGE_PRESET; + m_cali_filament_mode = CalibrationFilamentMode::CALI_MODEL_SINGLE; + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationPresetPage::create_selection_panel(wxWindow* parent) +{ + auto panel_sizer = new wxBoxSizer(wxVERTICAL); + + auto nozzle_combo_text = new Label(parent, _L("Nozzle Diameter")); + nozzle_combo_text->SetFont(Label::Head_14); + nozzle_combo_text->Wrap(-1); + panel_sizer->Add(nozzle_combo_text, 0, wxALL, 0); + panel_sizer->AddSpacer(FromDIP(10)); + m_comboBox_nozzle_dia = new ComboBox(parent, wxID_ANY, "", wxDefaultPosition, CALIBRATION_COMBOX_SIZE, 0, nullptr, wxCB_READONLY); + panel_sizer->Add(m_comboBox_nozzle_dia, 0, wxALL, 0); + + panel_sizer->AddSpacer(PRESET_GAP); + + auto plate_type_combo_text = new Label(parent, _L("Plate Type")); + plate_type_combo_text->SetFont(Label::Head_14); + plate_type_combo_text->Wrap(-1); + panel_sizer->Add(plate_type_combo_text, 0, wxALL, 0); + panel_sizer->AddSpacer(FromDIP(10)); + m_comboBox_bed_type = new ComboBox(parent, wxID_ANY, "", wxDefaultPosition, CALIBRATION_COMBOX_SIZE, 0, nullptr, wxCB_READONLY); + panel_sizer->Add(m_comboBox_bed_type, 0, wxALL, 0); + + panel_sizer->AddSpacer(PRESET_GAP); + + m_filament_from_panel = new wxPanel(parent); + m_filament_from_panel->Hide(); + auto filament_from_sizer = new wxBoxSizer(wxVERTICAL); + auto filament_from_text = new Label(m_filament_from_panel, _L("filament position")); + filament_from_text->SetFont(Label::Head_14); + filament_from_sizer->Add(filament_from_text, 0); + auto raioBox_sizer = new wxFlexGridSizer(2, 1, 0, FromDIP(10)); + m_ams_radiobox = new wxRadioButton(m_filament_from_panel, wxID_ANY, _L("AMS")); + m_ams_radiobox->SetValue(true); + + raioBox_sizer->Add(m_ams_radiobox, 0); + m_ext_spool_radiobox = new wxRadioButton(m_filament_from_panel, wxID_ANY, _L("External Spool")); + raioBox_sizer->Add(m_ext_spool_radiobox, 0); + filament_from_sizer->Add(raioBox_sizer, 0); + m_filament_from_panel->SetSizer(filament_from_sizer); + panel_sizer->Add(m_filament_from_panel, 0, wxBOTTOM, PRESET_GAP); + + auto filament_for_title_sizer = new wxBoxSizer(wxHORIZONTAL); + auto filament_for_text = new Label(parent, _L("Filament For Calibration")); + filament_for_text->SetFont(Label::Head_14); + filament_for_title_sizer->Add(filament_for_text, 0, wxALIGN_CENTER); + filament_for_title_sizer->AddSpacer(FromDIP(25)); + m_ams_sync_button = new ScalableButton(parent, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 18); + m_ams_sync_button->SetBackgroundColour(*wxWHITE); + m_ams_sync_button->SetToolTip(_L("Synchronize filament list from AMS")); + filament_for_title_sizer->Add(m_ams_sync_button, 0, wxALIGN_CENTER); + panel_sizer->Add(filament_for_title_sizer); + panel_sizer->AddSpacer(FromDIP(6)); + + parent->SetSizer(panel_sizer); + panel_sizer->Fit(parent); + + m_ams_radiobox->Bind(wxEVT_RADIOBUTTON, &CalibrationPresetPage::on_choose_ams, this); + m_ext_spool_radiobox->Bind(wxEVT_RADIOBUTTON, &CalibrationPresetPage::on_choose_ext_spool, this); + m_ams_sync_button->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + sync_ams_info(curr_obj); + }); + + m_comboBox_nozzle_dia->Bind(wxEVT_COMBOBOX, &CalibrationPresetPage::on_select_nozzle, this); + + m_comboBox_bed_type->Bind(wxEVT_COMBOBOX, &CalibrationPresetPage::on_select_plate_type, this); +} + +#define NOZZLE_LIST_COUNT 4 +#define NOZZLE_LIST_DEFAULT 1 +float nozzle_diameter_list[NOZZLE_LIST_COUNT] = {0.2, 0.4, 0.6, 0.8 }; + +void CalibrationPresetPage::init_selection_values() +{ + // init nozzle diameter + for (int i = 0; i < NOZZLE_LIST_COUNT; i++) { + m_comboBox_nozzle_dia->AppendString(wxString::Format("%1.1f mm", nozzle_diameter_list[i])); + } + m_comboBox_nozzle_dia->SetSelection(NOZZLE_LIST_DEFAULT); + + // init plate type + int curr_selection = 0; + const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); + if (bed_type_def && bed_type_def->enum_keys_map) { + for (auto item : bed_type_def->enum_labels) { + m_comboBox_bed_type->AppendString(_L(item)); + } + m_comboBox_bed_type->SetSelection(curr_selection); + } +} + +void CalibrationPresetPage::create_filament_list_panel(wxWindow* parent) +{ + auto panel_sizer = new wxBoxSizer(wxVERTICAL); + + m_filament_list_tips = new Label(parent, _L("Tips for calibration material: \n- Materials that can share same hot bed temperature\n- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)")); + m_filament_list_tips->Hide(); + m_filament_list_tips->SetFont(Label::Body_13); + m_filament_list_tips->SetForegroundColour(wxColour(145, 145, 145)); + m_filament_list_tips->Wrap(CALIBRATION_TEXT_MAX_LENGTH); + panel_sizer->Add(m_filament_list_tips, 0, wxBOTTOM, FromDIP(10)); + + // ams panel + m_multi_ams_panel = new wxPanel(parent); + auto multi_ams_sizer = new wxBoxSizer(wxVERTICAL); + auto ams_items_sizer = new wxBoxSizer(wxHORIZONTAL); + for (int i = 0; i < 4; i++) { + AMSinfo temp_info = AMSinfo{ std::to_string(i), std::vector{} }; + auto amsitem = new AMSItem(m_multi_ams_panel, wxID_ANY, temp_info); + amsitem->Bind(wxEVT_LEFT_DOWN, [this, amsitem](wxMouseEvent& e) { + on_switch_ams(amsitem->m_amsinfo.ams_id); + e.Skip(); + }); + m_ams_item_list.push_back(amsitem); + ams_items_sizer->Add(amsitem, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(6)); + } + multi_ams_sizer->Add(ams_items_sizer, 0); + multi_ams_sizer->AddSpacer(FromDIP(10)); + m_multi_ams_panel->SetSizer(multi_ams_sizer); + + panel_sizer->Add(m_multi_ams_panel); + m_multi_ams_panel->Hide(); + + auto filament_fgSizer = new wxFlexGridSizer(2, 2, FromDIP(10), CALIBRATION_FGSIZER_HGAP); + for (int i = 0; i < 4; i++) { + auto filament_comboBox_sizer = new wxBoxSizer(wxHORIZONTAL); + wxRadioButton* radio_btn = new wxRadioButton(m_filament_list_panel, wxID_ANY, ""); + CheckBox* check_box = new CheckBox(m_filament_list_panel); + check_box->SetBackgroundColour(*wxWHITE); + FilamentComboBox* fcb = new FilamentComboBox(m_filament_list_panel); + fcb->SetRadioBox(radio_btn); + fcb->SetCheckBox(check_box); + fcb->set_select_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE); + filament_comboBox_sizer->Add(radio_btn, 0, wxALIGN_CENTER); + filament_comboBox_sizer->Add(check_box, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(8)); + filament_comboBox_sizer->Add(fcb, 0, wxALIGN_CENTER); + filament_fgSizer->Add(filament_comboBox_sizer, 0); + + fcb->Bind(EVT_CALI_TRAY_CHANGED, &CalibrationPresetPage::on_select_tray, this); + + radio_btn->Bind(wxEVT_RADIOBUTTON, [this](wxCommandEvent& evt) { + wxCommandEvent event(EVT_CALI_TRAY_CHANGED); + event.SetEventObject(this); + wxPostEvent(this, event); + }); + check_box->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& evt) { + wxCommandEvent event(EVT_CALI_TRAY_CHANGED); + event.SetEventObject(this); + wxPostEvent(this, event); + evt.Skip(); + }); + m_filament_comboBox_list.push_back(fcb); + + if (i == 0) + radio_btn->SetValue(true); + } + panel_sizer->Add(filament_fgSizer, 0); + + parent->SetSizer(panel_sizer); + panel_sizer->Fit(parent); +} + +void CalibrationPresetPage::create_ext_spool_panel(wxWindow* parent) +{ + auto panel_sizer = new wxBoxSizer(wxHORIZONTAL); + panel_sizer->AddSpacer(FromDIP(10)); + wxRadioButton* radio_btn = new wxRadioButton(parent, wxID_ANY, ""); + CheckBox* check_box = new CheckBox(parent); + m_virtual_tray_comboBox = new FilamentComboBox(parent); + m_virtual_tray_comboBox->SetRadioBox(radio_btn); + m_virtual_tray_comboBox->SetCheckBox(check_box); + m_virtual_tray_comboBox->set_select_mode(CalibrationFilamentMode::CALI_MODEL_SINGLE); + radio_btn->SetValue(true); + + m_virtual_tray_comboBox->Bind(EVT_CALI_TRAY_CHANGED, &CalibrationPresetPage::on_select_tray, this); + + panel_sizer->Add(radio_btn, 0, wxALIGN_CENTER | wxTOP, FromDIP(4)); + panel_sizer->Add(check_box, 0, wxALIGN_CENTER | wxTOP, FromDIP(4)); + panel_sizer->Add(m_virtual_tray_comboBox, 0, wxALIGN_CENTER | wxTOP, FromDIP(4)); + parent->SetSizer(panel_sizer); + panel_sizer->Fit(parent); + + radio_btn->Bind(wxEVT_RADIOBUTTON, [this](wxCommandEvent& evt) { + wxCommandEvent event(EVT_CALI_TRAY_CHANGED); + event.SetEventObject(this); + wxPostEvent(this, event); + }); +} + +void CalibrationPresetPage::create_sending_panel(wxWindow* parent) +{ + parent->SetMinSize({ FromDIP(475), FromDIP(200) }); + parent->SetMaxSize({ FromDIP(475), FromDIP(200) }); + + auto panel_sizer = new wxBoxSizer(wxVERTICAL); + parent->SetSizer(panel_sizer); + + m_send_progress_bar = std::shared_ptr(new BBLStatusBarSend(parent)); + m_send_progress_bar->set_cancel_callback_fina([this]() { + BOOST_LOG_TRIVIAL(info) << "CalibrationWizard::print_job: enter canceled"; + if (CalibUtils::print_job) { + if (CalibUtils::print_job->is_running()) { + BOOST_LOG_TRIVIAL(info) << "calibration_print_job: canceled"; + CalibUtils::print_job->cancel(); + } + CalibUtils::print_job->join(); + } + show_status(CaliPresetStatusNormal); + }); + panel_sizer->Add(m_send_progress_bar->get_panel(), 0, wxEXPAND); + + m_sw_print_failed_info = new wxScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(380), FromDIP(125)), wxVSCROLL); + m_sw_print_failed_info->SetBackgroundColour(*wxWHITE); + m_sw_print_failed_info->SetScrollRate(0, 5); + m_sw_print_failed_info->SetMinSize(wxSize(FromDIP(380), FromDIP(125))); + m_sw_print_failed_info->SetMaxSize(wxSize(FromDIP(380), FromDIP(125))); + + m_sw_print_failed_info->Hide(); + + panel_sizer->Add(m_sw_print_failed_info, 0, wxEXPAND); + + // create error info panel + wxBoxSizer* sizer_print_failed_info = new wxBoxSizer(wxVERTICAL); + m_sw_print_failed_info->SetSizer(sizer_print_failed_info); + + wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL); + + auto st_title_error_code = new Label(m_sw_print_failed_info, _L("Error code")); + auto st_title_error_code_doc = new Label(m_sw_print_failed_info, ": "); + m_st_txt_error_code = new Label(m_sw_print_failed_info, wxEmptyString); + st_title_error_code->SetForegroundColour(0x909090); + st_title_error_code_doc->SetForegroundColour(0x909090); + m_st_txt_error_code->SetForegroundColour(0x909090); + st_title_error_code->SetFont(::Label::Body_13); + st_title_error_code_doc->SetFont(::Label::Body_13); + m_st_txt_error_code->SetFont(::Label::Body_13); + st_title_error_code->SetMinSize(wxSize(FromDIP(74), -1)); + st_title_error_code->SetMaxSize(wxSize(FromDIP(74), -1)); + m_st_txt_error_code->SetMinSize(wxSize(FromDIP(260), -1)); + m_st_txt_error_code->SetMaxSize(wxSize(FromDIP(260), -1)); + sizer_error_code->Add(st_title_error_code, 0, wxALL, 0); + sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0); + sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0); + + auto st_title_error_desc = new Label(m_sw_print_failed_info, _L("Error desc")); + auto st_title_error_desc_doc = new Label(m_sw_print_failed_info, ": "); + m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString); + st_title_error_desc->SetForegroundColour(0x909090); + st_title_error_desc_doc->SetForegroundColour(0x909090); + m_st_txt_error_desc->SetForegroundColour(0x909090); + st_title_error_desc->SetFont(::Label::Body_13); + st_title_error_desc_doc->SetFont(::Label::Body_13); + m_st_txt_error_desc->SetFont(::Label::Body_13); + st_title_error_desc->SetMinSize(wxSize(FromDIP(74), -1)); + st_title_error_desc->SetMaxSize(wxSize(FromDIP(74), -1)); + m_st_txt_error_desc->SetMinSize(wxSize(FromDIP(260), -1)); + m_st_txt_error_desc->SetMaxSize(wxSize(FromDIP(260), -1)); + sizer_error_desc->Add(st_title_error_desc, 0, wxALL, 0); + sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0); + sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0); + + auto st_title_extra_info = new Label(m_sw_print_failed_info, _L("Extra info")); + auto st_title_extra_info_doc = new Label(m_sw_print_failed_info, ": "); + m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString); + st_title_extra_info->SetForegroundColour(0x909090); + st_title_extra_info_doc->SetForegroundColour(0x909090); + m_st_txt_extra_info->SetForegroundColour(0x909090); + st_title_extra_info->SetFont(::Label::Body_13); + st_title_extra_info_doc->SetFont(::Label::Body_13); + m_st_txt_extra_info->SetFont(::Label::Body_13); + st_title_extra_info->SetMinSize(wxSize(FromDIP(74), -1)); + st_title_extra_info->SetMaxSize(wxSize(FromDIP(74), -1)); + m_st_txt_extra_info->SetMinSize(wxSize(FromDIP(260), -1)); + m_st_txt_extra_info->SetMaxSize(wxSize(FromDIP(260), -1)); + sizer_extra_info->Add(st_title_extra_info, 0, wxALL, 0); + sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0); + sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0); + + sizer_print_failed_info->Add(sizer_error_code, 0, wxLEFT, 5); + sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3)); + sizer_print_failed_info->Add(sizer_error_desc, 0, wxLEFT, 5); + sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3)); + sizer_print_failed_info->Add(sizer_extra_info, 0, wxLEFT, 5); + + Bind(EVT_SHOW_ERROR_INFO, [this](auto& e) { + show_send_failed_info(true); + }); +} + +void CalibrationPresetPage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + if (m_cali_mode == CalibMode::Calib_Flow_Rate) { + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration1")); + steps.Add(_L("Calibration2")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(0); + } + else { + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(0); + } + + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + m_cali_stage_panel = new CaliPresetCaliStagePanel(parent); + m_top_sizer->Add(m_cali_stage_panel, 0); + + m_selection_panel = new wxPanel(parent); + m_selection_panel->SetBackgroundColour(*wxWHITE); + create_selection_panel(m_selection_panel); + init_selection_values(); + + m_filament_list_panel = new wxPanel(parent); + m_filament_list_panel->SetBackgroundColour(*wxWHITE); + create_filament_list_panel(m_filament_list_panel); + + m_ext_spool_panel = new wxPanel(parent); + create_ext_spool_panel(m_ext_spool_panel); + m_ext_spool_panel->Hide(); + + m_warning_panel = new CaliPresetWarningPanel(parent); + + m_tips_panel = new CaliPresetTipsPanel(parent); + + m_sending_panel = new wxPanel(parent); + m_sending_panel->SetBackgroundColour(*wxWHITE); + create_sending_panel(m_sending_panel); + + m_sending_panel->Hide(); + + if (m_show_custom_range) { + m_custom_range_panel = new CaliPresetCustomRangePanel(parent); + } + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_PRESET); + + m_statictext_printer_msg = new Label(this, wxEmptyString, wxALIGN_CENTER_HORIZONTAL); + m_statictext_printer_msg->SetFont(::Label::Body_13); + m_statictext_printer_msg->Hide(); + + m_top_sizer->Add(m_selection_panel, 0); + m_top_sizer->Add(m_filament_list_panel, 0); + m_top_sizer->Add(m_ext_spool_panel, 0); + m_top_sizer->Add(m_warning_panel, 0); + if (m_show_custom_range) { + m_top_sizer->Add(m_custom_range_panel, 0); + m_top_sizer->AddSpacer(FromDIP(15)); + } + m_top_sizer->Add(m_tips_panel, 0); + m_top_sizer->AddSpacer(PRESET_GAP); + m_top_sizer->Add(m_sending_panel, 0, wxALIGN_CENTER); + m_top_sizer->Add(m_statictext_printer_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); + + Bind(EVT_CALI_TRAY_CHANGED, &CalibrationPresetPage::on_select_tray, this); +} + +void CalibrationPresetPage::update_print_status_msg(wxString msg, bool is_warning) +{ + update_priner_status_msg(msg, is_warning); +} + +wxString CalibrationPresetPage::format_text(wxString& m_msg) +{ + if (wxGetApp().app_config->get("language") != "zh_CN") { return m_msg; } + + wxString out_txt = m_msg; + wxString count_txt = ""; + int new_line_pos = 0; + + for (int i = 0; i < m_msg.length(); i++) { + auto text_size = m_statictext_printer_msg->GetTextExtent(count_txt); + if (text_size.x < (FromDIP(600))) { + count_txt += m_msg[i]; + } + else { + out_txt.insert(i - 1, '\n'); + count_txt = ""; + } + } + return out_txt; +} + +void CalibrationPresetPage::stripWhiteSpace(std::string& str) +{ + if (str == "") { return; } + + string::iterator cur_it; + cur_it = str.begin(); + + while (cur_it != str.end()) { + if ((*cur_it) == '\n' || (*cur_it) == ' ') { + cur_it = str.erase(cur_it); + } + else { + cur_it++; + } + } +} + +void CalibrationPresetPage::update_priner_status_msg(wxString msg, bool is_warning) +{ + auto colour = is_warning ? wxColour(0xFF, 0x6F, 0x00) : wxColour(0x6B, 0x6B, 0x6B); + m_statictext_printer_msg->SetForegroundColour(colour); + + if (msg.empty()) { + if (!m_statictext_printer_msg->GetLabel().empty()) { + m_statictext_printer_msg->SetLabel(wxEmptyString); + m_statictext_printer_msg->Hide(); + Layout(); + Fit(); + } + } + else { + msg = format_text(msg); + + auto str_new = msg.ToStdString(); + stripWhiteSpace(str_new); + + auto str_old = m_statictext_printer_msg->GetLabel().ToStdString(); + stripWhiteSpace(str_old); + + if (str_new != str_old) { + if (m_statictext_printer_msg->GetLabel() != msg) { + m_statictext_printer_msg->SetLabel(msg); + m_statictext_printer_msg->SetMinSize(wxSize(FromDIP(600), -1)); + m_statictext_printer_msg->SetMaxSize(wxSize(FromDIP(600), -1)); + m_statictext_printer_msg->Wrap(FromDIP(600)); + m_statictext_printer_msg->Show(); + Layout(); + Fit(); + } + } + } +} + +void CalibrationPresetPage::on_select_nozzle(wxCommandEvent& evt) +{ + update_combobox_filaments(curr_obj); +} + +void CalibrationPresetPage::on_select_plate_type(wxCommandEvent& evt) +{ + select_default_compatible_filament(); + check_filament_compatible(); +} + +void CalibrationPresetPage::on_choose_ams(wxCommandEvent& event) +{ + select_default_compatible_filament(); + + m_filament_list_panel->Show(); + m_ams_sync_button->Show(); + m_ext_spool_panel->Hide(); + Layout(); +} + +void CalibrationPresetPage::on_choose_ext_spool(wxCommandEvent& event) +{ + m_filament_list_panel->Hide(); + m_ams_sync_button->Hide(); + m_ext_spool_panel->Show(); + Layout(); +} + +void CalibrationPresetPage::on_select_tray(wxCommandEvent& event) +{ + check_filament_compatible(); + + on_recommend_input_value(); +} + +void CalibrationPresetPage::on_switch_ams(std::string ams_id) +{ + for (auto i = 0; i < m_ams_item_list.size(); i++) { + AMSItem* item = m_ams_item_list[i]; + if (item->m_amsinfo.ams_id == ams_id) { + item->OnSelected(); + } + else { + item->UnSelected(); + } + } + + update_filament_combobox(ams_id); + + select_default_compatible_filament(); + + Layout(); +} + +void CalibrationPresetPage::on_recommend_input_value() +{ + //TODO fix this + std::map selected_filaments = get_selected_filaments(); + if (selected_filaments.empty()) + return; + + if (m_cali_mode == CalibMode::Calib_PA_Line) { + + } + else if (m_cali_mode == CalibMode::Calib_Flow_Rate && m_cali_stage_panel) { + Preset *selected_filament_preset = selected_filaments.begin()->second; + if (selected_filament_preset) { + const ConfigOptionFloats* flow_ratio_opt = selected_filament_preset->config.option("filament_flow_ratio"); + if (flow_ratio_opt) { + m_cali_stage_panel->set_flow_ratio_value(flow_ratio_opt->get_at(0)); + } + } + } + else if (m_cali_mode == CalibMode::Calib_Vol_speed_Tower) { + Preset* selected_filament_preset = selected_filaments.begin()->second; + if (selected_filament_preset) { + if (m_custom_range_panel) { + const ConfigOptionFloats* speed_opt = selected_filament_preset->config.option("filament_max_volumetric_speed"); + if (speed_opt) { + double max_volumetric_speed = speed_opt->get_at(0); + wxArrayString values; + values.push_back(wxString::Format("%.2f", max_volumetric_speed - 5)); + values.push_back(wxString::Format("%.2f", max_volumetric_speed + 5)); + values.push_back(wxString::Format("%.2f", 0.5f)); + m_custom_range_panel->set_values(values); + } + } + } + } +} + +void CalibrationPresetPage::check_filament_compatible() +{ + std::map selected_filaments = get_selected_filaments(); + std::string incompatiable_filament_name; + std::string error_tips; + int bed_temp = 0; + + std::vector selected_filaments_list; + for (auto& item: selected_filaments) + selected_filaments_list.push_back(item.second); + + if (!is_filaments_compatiable(selected_filaments_list, bed_temp, incompatiable_filament_name, error_tips)) { + m_tips_panel->set_params(0, 0, 0.0f); + if (!error_tips.empty()) { + wxString tips = from_u8(error_tips); + m_warning_panel->set_warning(tips); + } else { + wxString tips = wxString::Format(_L("%s is not compatible with %s"), m_comboBox_bed_type->GetValue(), incompatiable_filament_name); + m_warning_panel->set_warning(tips); + } + m_has_filament_incompatible = true; + update_show_status(); + } else { + m_tips_panel->set_params(0, bed_temp, 0); + m_warning_panel->set_warning(""); + m_has_filament_incompatible = false; + update_show_status(); + } + + Layout(); +} + +bool CalibrationPresetPage::is_filaments_compatiable(const std::vector& prests) +{ + std::string incompatiable_filament_name; + std::string error_tips; + int bed_temp = 0; + return is_filaments_compatiable(prests, bed_temp, incompatiable_filament_name, error_tips); +} + +bool CalibrationPresetPage::is_filament_in_blacklist(Preset* preset, std::string& error_tips) +{ + if (m_ams_radiobox->GetValue() && wxGetApp().app_config->get("skip_ams_blacklist_check") != "true") { + bool in_blacklist = false; + std::string action; + std::string info; + std::string filamnt_type; + preset->get_filament_type(filamnt_type); + + if (preset->vendor) { + DeviceManager::check_filaments_in_blacklist(preset->vendor->name, filamnt_type, in_blacklist, action, info); + } + + if (in_blacklist) { + error_tips = info; + if (action == "prohibition") { + return false; + } + else if (action == "warning") { + return true; + } + } + else { + error_tips = ""; + return true; + } + } + if (m_ext_spool_radiobox->GetValue()) { + if (m_cali_mode == CalibMode::Calib_PA_Line && m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + std::string filamnt_type; + preset->get_filament_type(filamnt_type); + if (filamnt_type == "TPU") { + error_tips = _u8L("TPU is not supported for Flow Dynamics Auto-Calibration."); + return false; + } + } + } + return true; +} + +bool CalibrationPresetPage::is_filaments_compatiable(const std::vector &prests, + int& bed_temp, + std::string& incompatiable_filament_name, + std::string& error_tips) +{ + if (prests.empty()) return true; + + bed_temp = 0; + std::vector filament_types; + for (auto &item : prests) { + if (!item) + continue; + + // update bed temperature + BedType curr_bed_type = BedType(m_comboBox_bed_type->GetSelection() + btDefault + 1); + const ConfigOptionInts *opt_bed_temp_ints = item->config.option(get_bed_temp_key(curr_bed_type)); + int bed_temp_int = 0; + if (opt_bed_temp_ints) { + bed_temp_int = opt_bed_temp_ints->get_at(0); + } + + if (bed_temp_int <= 0) { + if (!item->alias.empty()) + incompatiable_filament_name = item->alias; + else + incompatiable_filament_name = item->name; + + return false; + } else { + // set for first preset + if (bed_temp == 0) + bed_temp = bed_temp_int; + } + std::string display_filament_type; + filament_types.push_back(item->config.get_filament_type(display_filament_type, 0)); + + // check is it in the filament blacklist + if (!is_filament_in_blacklist(item, error_tips)) + return false; + } + + if (!Print::check_multi_filaments_compatibility(filament_types)) { + error_tips = _u8L("Can not print multiple filaments which have large difference of temperature together. Otherwise, the extruder and nozzle may be blocked or damaged during printing"); + return false; + } + + return true; +} + +void CalibrationPresetPage::update_plate_type_collection(CalibrationMethod method) +{ + m_comboBox_bed_type->Clear(); + const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); + if (bed_type_def && bed_type_def->enum_keys_map) { + for (int i = 0; i < bed_type_def->enum_labels.size(); i++) { + if(btDefault + 1 + i == btPTE) { + if (method == CalibrationMethod::CALI_METHOD_AUTO) { + continue; + } + } + m_comboBox_bed_type->AppendString(_L(bed_type_def->enum_labels[i])); + } + m_comboBox_bed_type->SetSelection(0); + } +} + +void CalibrationPresetPage::update_combobox_filaments(MachineObject* obj) +{ + if (!obj) return; + + //step 1: update combobox filament list + float nozzle_value = get_nozzle_value(); + obj->cali_selected_nozzle_dia = nozzle_value; + if (nozzle_value < 1e-3) { + return; + } + + Preset* printer_preset = get_printer_preset(obj, nozzle_value); + + // sync ams filaments list info + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle && printer_preset) { + preset_bundle->set_calibrate_printer(printer_preset->name); + } + + //step 2: sync ams info from object by default + sync_ams_info(obj); + + //step 3: select the default compatible filament to calibration + select_default_compatible_filament(); +} + +bool CalibrationPresetPage::is_blocking_printing() +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return true; + + MachineObject* obj_ = dev->get_selected_machine(); + if (obj_ == nullptr) return true; + + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + auto source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + auto target_model = obj_->printer_type; + + if (source_model != target_model) { + std::vector compatible_machine = dev->get_compatible_machine(target_model); + vector::iterator it = find(compatible_machine.begin(), compatible_machine.end(), source_model); + if (it == compatible_machine.end()) { + return true; + } + } + + return false; +} + +void CalibrationPresetPage::update_show_status() +{ + if (get_status() == CaliPresetPageStatus::CaliPresetStatusSending) + return; + + if (get_status() == CaliPresetPageStatus::CaliPresetStatusSendingCanceled) + return; + + NetworkAgent* agent = Slic3r::GUI::wxGetApp().getAgent(); + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!agent) {return;} + if (!dev) return; + dev->check_pushing(); + + MachineObject* obj_ = dev->get_selected_machine(); + if (!obj_) { + if (agent->is_user_login()) { + show_status(CaliPresetPageStatus::CaliPresetStatusInvalidPrinter); + } + else { + show_status(CaliPresetPageStatus::CaliPresetStatusNoUserLogin); + } + return; + } + + if (!obj_->is_lan_mode_printer()) { + if (!agent->is_server_connected()) { + agent->refresh_connection(); + show_status(CaliPresetPageStatus::CaliPresetStatusConnectingServer); + return; + } + } + + if (wxGetApp().app_config && wxGetApp().app_config->get("internal_debug").empty()) { + if (obj_->upgrade_force_upgrade) { + show_status(CaliPresetPageStatus::CaliPresetStatusNeedForceUpgrading); + return; + } + + if (obj_->upgrade_consistency_request) { + show_status(CaliPresetStatusNeedConsistencyUpgrading); + return; + } + } + + //if (is_blocking_printing()) { + // show_status(CaliPresetPageStatus::CaliPresetStatusUnsupportedPrinter); + // return; + //} + //else + if (obj_->is_connecting() || !obj_->is_connected()) { + show_status(CaliPresetPageStatus::CaliPresetStatusInConnecting); + return; + } + else if (obj_->is_in_upgrading()) { + show_status(CaliPresetPageStatus::CaliPresetStatusInUpgrading); + return; + } + else if (obj_->is_system_printing()) { + show_status(CaliPresetPageStatus::CaliPresetStatusInSystemPrinting); + return; + } + else if (obj_->is_in_printing()) { + show_status(CaliPresetPageStatus::CaliPresetStatusInPrinting); + return; + } + else if (need_check_sdcard(obj_) && obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { + show_status(CaliPresetPageStatus::CaliPresetStatusNoSdcard); + return; + } + + // check sdcard when if lan mode printer + if (obj_->is_lan_mode_printer()) { + if (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { + show_status(CaliPresetPageStatus::CaliPresetStatusLanModeNoSdcard); + return; + } + } + + if (m_has_filament_incompatible) { + show_status(CaliPresetPageStatus::CaliPresetStatusFilamentIncompatible); + return; + } + + show_status(CaliPresetPageStatus::CaliPresetStatusNormal); +} + + +bool CalibrationPresetPage::need_check_sdcard(MachineObject* obj) +{ + if (!obj) return false; + + bool need_check = false; + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (m_cali_mode == CalibMode::Calib_Flow_Rate && m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + need_check = true; + } + else if (m_cali_mode == CalibMode::Calib_Vol_speed_Tower && m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) + { + need_check = true; + } + } + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + if (m_cali_mode == CalibMode::Calib_Flow_Rate && m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + need_check = true; + } + else if (m_cali_mode == CalibMode::Calib_Vol_speed_Tower && m_cali_method == CalibrationMethod::CALI_METHOD_MANUAL) { + need_check = true; + } + } + else { + assert(false); + return false; + } + + return need_check; +} + +void CalibrationPresetPage::show_status(CaliPresetPageStatus status) +{ + if (status == CaliPresetPageStatus::CaliPresetStatusSending) { + sending_mode(); + } + else { + prepare_mode(); + } + + if (m_page_status != status) + //BOOST_LOG_TRIVIAL(info) << "CalibrationPresetPage: show_status = " << status << "(" << get_print_status_info(status) << ")"; + m_page_status = status; + + // other + if (status == CaliPresetPageStatus::CaliPresetStatusInit) { + update_print_status_msg(wxEmptyString, false); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusNormal) { + m_sending_panel->Show(false); + update_print_status_msg(wxEmptyString, false); + Enable_Send_Button(true); + Layout(); + Fit(); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusNoUserLogin) { + wxString msg_text = _L("No login account, only printers in LAN mode are displayed"); + update_print_status_msg(msg_text, false); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusInvalidPrinter) { + update_print_status_msg(wxEmptyString, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusConnectingServer) { + wxString msg_text = _L("Connecting to server"); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusInUpgrading) { + wxString msg_text = _L("Cannot send the print job when the printer is updating firmware"); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusInSystemPrinting) { + wxString msg_text = _L("The printer is executing instructions. Please restart printing after it ends"); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusInPrinting) { + wxString msg_text = _L("The printer is busy on other print job"); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusSending) { + m_sending_panel->Show(); + Enable_Send_Button(false); + Layout(); + Fit(); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusSendingCanceled) { + Enable_Send_Button(true); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusLanModeNoSdcard) { + wxString msg_text = _L("An SD card needs to be inserted before printing via LAN."); + update_print_status_msg(msg_text, true); + Enable_Send_Button(true); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusNoSdcard) { + wxString msg_text = _L("An SD card needs to be inserted before printing."); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusNeedForceUpgrading) { + wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated."); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusNeedConsistencyUpgrading) { + wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated."); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusFilamentIncompatible) { + update_print_status_msg(wxEmptyString, false); + Enable_Send_Button(false); + } + else if (status == CaliPresetPageStatus::CaliPresetStatusInConnecting) { + wxString msg_text = _L("Connecting to printer"); + update_print_status_msg(msg_text, true); + Enable_Send_Button(false); + } + + Layout(); +} + +void CalibrationPresetPage::Enable_Send_Button(bool enable) +{ + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_CALI, enable); +} + +void CalibrationPresetPage::prepare_mode() +{ + Enable_Send_Button(true); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_CALI, true); +} + +void CalibrationPresetPage::sending_mode() +{ + Enable_Send_Button(false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_CALI, false); +} + + +float CalibrationPresetPage::get_nozzle_value() +{ + double nozzle_value = 0.0; + wxString nozzle_value_str = m_comboBox_nozzle_dia->GetValue(); + try { + nozzle_value_str.ToDouble(&nozzle_value); + } + catch (...) { + ; + } + + return nozzle_value; +} + +void CalibrationPresetPage::update(MachineObject* obj) +{ + curr_obj = obj; + + //update printer status + update_show_status(); + +} + +void CalibrationPresetPage::on_device_connected(MachineObject* obj) +{ + init_with_machine(obj); + update_combobox_filaments(obj); +} + +void CalibrationPresetPage::update_print_error_info(int code, const std::string& msg, const std::string& extra) +{ + m_print_error_code = code; + m_print_error_msg = msg; + m_print_error_extra = extra; +} + +void CalibrationPresetPage::show_send_failed_info(bool show, int code, wxString description, wxString extra) +{ + if (show) { + if (!m_sw_print_failed_info->IsShown()) { + m_sw_print_failed_info->Show(true); + + m_st_txt_error_code->SetLabelText(wxString::Format("%d", m_print_error_code)); + m_st_txt_error_desc->SetLabelText(wxGetApp().filter_string(m_print_error_msg)); + m_st_txt_extra_info->SetLabelText(wxGetApp().filter_string(m_print_error_extra)); + + m_st_txt_error_code->Wrap(FromDIP(260)); + m_st_txt_error_desc->Wrap(FromDIP(260)); + m_st_txt_extra_info->Wrap(FromDIP(260)); + } + else { + m_sw_print_failed_info->Show(false); + } + Layout(); + Fit(); + } + else { + if (!m_sw_print_failed_info->IsShown()) { return; } + m_sw_print_failed_info->Show(false); + m_st_txt_error_code->SetLabelText(wxEmptyString); + m_st_txt_error_desc->SetLabelText(wxEmptyString); + m_st_txt_extra_info->SetLabelText(wxEmptyString); + Layout(); + Fit(); + } +} + +void CalibrationPresetPage::set_cali_filament_mode(CalibrationFilamentMode mode) +{ + CalibrationWizardPage::set_cali_filament_mode(mode); + + for (int i = 0; i < m_filament_comboBox_list.size(); i++) { + m_filament_comboBox_list[i]->set_select_mode(mode); + } + + if (mode == CALI_MODEL_MULITI) { + m_filament_list_tips->Show(); + } + else { + m_filament_list_tips->Hide(); + } +} + +void CalibrationPresetPage::set_cali_method(CalibrationMethod method) +{ + CalibrationWizardPage::set_cali_method(method); + if (method == CalibrationMethod::CALI_METHOD_MANUAL && m_cali_mode == CalibMode::Calib_Flow_Rate) { + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration1")); + steps.Add(_L("Calibration2")); + steps.Add(_L("Record Factor")); + m_step_panel->set_steps_string(steps); + m_step_panel->set_steps(0); + if (m_cali_stage_panel) + m_cali_stage_panel->Show(); + } + else { + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel->set_steps_string(steps); + m_step_panel->set_steps(0); + if (m_cali_stage_panel) + m_cali_stage_panel->Show(false); + } +} + +void CalibrationPresetPage::on_cali_start_job() +{ + m_send_progress_bar->reset(); + m_sw_print_failed_info->Show(false); + show_status(CaliPresetPageStatus::CaliPresetStatusSending); +} + +void CalibrationPresetPage::on_cali_finished_job() +{ + show_status(CaliPresetPageStatus::CaliPresetStatusNormal); +} + +void CalibrationPresetPage::init_with_machine(MachineObject* obj) +{ + if (!obj) return; + + // set nozzle value from machine + bool nozzle_is_set = false; + for (int i = 0; i < NOZZLE_LIST_COUNT; i++) { + if (abs(obj->nozzle_diameter - nozzle_diameter_list[i]) < 1e-3) { + if (m_comboBox_nozzle_dia->GetCount() > i) { + m_comboBox_nozzle_dia->SetSelection(i); + nozzle_is_set = true; + } + } + } + + if (nozzle_is_set) { + wxCommandEvent event(wxEVT_COMBOBOX); + event.SetEventObject(this); + wxPostEvent(m_comboBox_nozzle_dia, event); + m_comboBox_nozzle_dia->SetToolTip(_L("The nozzle diameter has been synchronized from the printer Settings")); + } else { + m_comboBox_nozzle_dia->SetToolTip(wxEmptyString); + // set default to 0.4 + if (m_comboBox_nozzle_dia->GetCount() > NOZZLE_LIST_DEFAULT) + m_comboBox_nozzle_dia->SetSelection(NOZZLE_LIST_DEFAULT); + } + + // set bed type collection from machine + if (m_cali_mode == CalibMode::Calib_PA_Line) + update_plate_type_collection(m_cali_method); + + // init default for filament source + // TODO if user change ams/ext, need to update + if ( !obj->has_ams() || (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) ) + { + m_ext_spool_radiobox->SetValue(true); + m_ams_radiobox->SetValue(false); + wxCommandEvent event(wxEVT_RADIOBUTTON); + event.SetEventObject(this); + wxPostEvent(this->m_ext_spool_radiobox, event); + } + else { + m_ams_radiobox->SetValue(true); + m_ext_spool_radiobox->SetValue(false); + wxCommandEvent event(wxEVT_RADIOBUTTON); + event.SetEventObject(this); + wxPostEvent(this->m_ams_radiobox, event); + } + Layout(); + + // init filaments for calibration + sync_ams_info(obj); +} + +void CalibrationPresetPage::sync_ams_info(MachineObject* obj) +{ + if (!obj) return; + + std::map full_filament_ams_list = wxGetApp().sidebar().build_filament_ams_list(obj); + + // sync filament_ams_list from obj ams list + filament_ams_list.clear(); + for (auto& ams_item : obj->amsList) { + for (auto& tray_item: ams_item.second->trayList) { + int tray_id = -1; + if (!tray_item.second->id.empty()) { + try { + tray_id = stoi(tray_item.second->id) + stoi(ams_item.second->id) * 4; + } + catch (...) { + ; + } + } + auto filament_ams = full_filament_ams_list.find(tray_id); + if (filament_ams != full_filament_ams_list.end()) { + filament_ams_list[tray_id] = filament_ams->second; + } + } + } + + // init virtual tray info + if (full_filament_ams_list.find(VIRTUAL_TRAY_ID) != full_filament_ams_list.end()) { + filament_ams_list[VIRTUAL_TRAY_ID] = full_filament_ams_list[VIRTUAL_TRAY_ID]; + } + + + // update filament from panel, display only obj has ams + // update multi ams panel, display only obj has multi ams + if (obj->has_ams()) { + if (obj->amsList.size() > 1) { + m_multi_ams_panel->Show(); + on_switch_ams(obj->amsList.begin()->first); + } else { + m_multi_ams_panel->Hide(); + if (!obj->amsList.empty()) + update_filament_combobox(obj->amsList.begin()->first); + } + } + else { + update_filament_combobox(); + m_multi_ams_panel->Hide(); + } + + std::vector ams_info; + for (auto ams = obj->amsList.begin(); ams != obj->amsList.end(); ams++) { + AMSinfo info; + info.ams_id = ams->first; + if (ams->second->is_exists + && info.parse_ams_info(obj, ams->second, obj->ams_calibrate_remain_flag, obj->is_support_ams_humidity)) { + ams_info.push_back(info); + } + } + + for (auto i = 0; i < m_ams_item_list.size(); i++) { + AMSItem* item = m_ams_item_list[i]; + if (ams_info.size() > 1) { + if (i < ams_info.size()) { + item->Update(ams_info[i]); + item->Open(); + } else { + item->Close(); + } + } else { + item->Close(); + } + } + + Layout(); +} + +void CalibrationPresetPage::select_default_compatible_filament() +{ + if (!curr_obj) + return; + + if (m_ams_radiobox->GetValue()) { + std::vector multi_select_filaments; + for (auto &fcb : m_filament_comboBox_list) { + if (!fcb->GetRadioBox()->IsEnabled()) + continue; + + Preset* preset = const_cast(fcb->GetComboBox()->get_selected_preset()); + if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE) { + if (preset && is_filaments_compatiable({preset})) { + fcb->GetRadioBox()->SetValue(true); + wxCommandEvent event(wxEVT_RADIOBUTTON); + event.SetEventObject(this); + wxPostEvent(fcb->GetRadioBox(), event); + Layout(); + break; + } else + fcb->GetRadioBox()->SetValue(false); + } else if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_MULITI) { + if (!preset) { + fcb->GetCheckBox()->SetValue(false); + continue; + } + multi_select_filaments.push_back(preset); + if (!is_filaments_compatiable(multi_select_filaments)) { + multi_select_filaments.pop_back(); + fcb->GetCheckBox()->SetValue(false); + } + else + fcb->GetCheckBox()->SetValue(true); + + wxCommandEvent event(wxEVT_CHECKBOX); + event.SetEventObject(this); + wxPostEvent(fcb->GetCheckBox(), event); + Layout(); + } + } + } + else if (m_ext_spool_radiobox->GetValue()){ + Preset *preset = const_cast(m_virtual_tray_comboBox->GetComboBox()->get_selected_preset()); + if (preset && is_filaments_compatiable({preset})) { + m_virtual_tray_comboBox->GetRadioBox()->SetValue(true); + } else + m_virtual_tray_comboBox->GetRadioBox()->SetValue(false); + + wxCommandEvent event(wxEVT_RADIOBUTTON); + event.SetEventObject(this); + wxPostEvent(m_virtual_tray_comboBox->GetRadioBox(), event); + Layout(); + } + else { + assert(false); + } + + check_filament_compatible(); +} + +std::vector CalibrationPresetPage::get_selected_filament_combobox() +{ + std::vector fcb_list; + + if (m_ext_spool_radiobox->GetValue()) { + if (m_ext_spool_panel) { + if (m_virtual_tray_comboBox->GetRadioBox()->GetValue()) + fcb_list.push_back(m_virtual_tray_comboBox); + } + } else if (m_ams_radiobox->GetValue()) { + if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_MULITI) { + for (auto& fcb : m_filament_comboBox_list) { + if (fcb->GetCheckBox()->GetValue()) { + fcb_list.push_back(fcb); + } + } + } + else if (m_cali_filament_mode == CalibrationFilamentMode::CALI_MODEL_SINGLE) { + for (auto& fcb : m_filament_comboBox_list) { + if (fcb->GetRadioBox()->GetValue()) { + fcb_list.push_back(fcb); + } + } + } + } else { + assert(false); + } + + return fcb_list; +} + +std::map CalibrationPresetPage::get_selected_filaments() +{ + std::map out; + std::vector fcb_list = get_selected_filament_combobox(); + + for (int i = 0; i < fcb_list.size(); i++) { + Preset* preset = const_cast(fcb_list[i]->GetComboBox()->get_selected_preset()); + // valid tray id + if (fcb_list[i]->get_tray_id() >= 0) { + out.emplace(std::make_pair(fcb_list[i]->get_tray_id(), preset)); + } + } + + + return out; +} + +void CalibrationPresetPage::get_preset_info(float& nozzle_dia, BedType& plate_type) +{ + if (m_comboBox_nozzle_dia->GetSelection() >=0 && m_comboBox_nozzle_dia->GetSelection() < NOZZLE_LIST_COUNT) { + nozzle_dia = nozzle_diameter_list[m_comboBox_nozzle_dia->GetSelection()]; + } else { + nozzle_dia = -1.0f; + } + + if (m_comboBox_bed_type->GetSelection() >= 0) + plate_type = static_cast(m_comboBox_bed_type->GetSelection() + 1); +} + +void CalibrationPresetPage::get_cali_stage(CaliPresetStage& stage, float& value) +{ + m_cali_stage_panel->get_cali_stage(stage, value); + + if (stage != CaliPresetStage::CALI_MANUAL_STAGE_2) { + std::map selected_filaments = get_selected_filaments(); + if (!selected_filaments.empty()) { + const ConfigOptionFloats* flow_ratio_opt = selected_filaments.begin()->second->config.option("filament_flow_ratio"); + if (flow_ratio_opt) { + m_cali_stage_panel->set_flow_ratio_value(flow_ratio_opt->get_at(0)); + value = flow_ratio_opt->get_at(0); + } + } + } +} + +void CalibrationPresetPage::update_filament_combobox(std::string ams_id) +{ + for (auto& fcb : m_filament_comboBox_list) { + fcb->update_from_preset(); + fcb->set_select_mode(m_cali_filament_mode); + } + + DynamicPrintConfig empty_config; + empty_config.set_key_value("filament_id", new ConfigOptionStrings{ "" }); + empty_config.set_key_value("tag_uid", new ConfigOptionStrings{ "" }); + empty_config.set_key_value("filament_type", new ConfigOptionStrings{ "" }); + empty_config.set_key_value("tray_name", new ConfigOptionStrings{ "" }); + empty_config.set_key_value("filament_colour", new ConfigOptionStrings{ "" }); + empty_config.set_key_value("filament_exist", new ConfigOptionBools{ false }); + + /* update virtual tray combo box*/ + m_virtual_tray_comboBox->update_from_preset(); + auto it = std::find_if(filament_ams_list.begin(), filament_ams_list.end(), [](auto& entry) { + return entry.first == VIRTUAL_TRAY_ID; + }); + + if (it != filament_ams_list.end()) { + m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_ID, it->second); + } + else { + m_virtual_tray_comboBox->load_tray_from_ams(VIRTUAL_TRAY_ID, empty_config); + } + + if (filament_ams_list.empty()) + return; + + int ams_id_int = 0; + try { + if (!ams_id.empty()) + ams_id_int = stoi(ams_id.c_str()); + + } catch (...) {} + + for (int i = 0; i < 4; i++) { + int tray_index = ams_id_int * 4 + i; + + auto it = std::find_if(filament_ams_list.begin(), filament_ams_list.end(), [tray_index](auto& entry) { + return entry.first == tray_index; + }); + + if (it != filament_ams_list.end()) { + m_filament_comboBox_list[i]->load_tray_from_ams(tray_index, it->second); + } + else { + m_filament_comboBox_list[i]->load_tray_from_ams(tray_index, empty_config); + } + } +} + +Preset* CalibrationPresetPage::get_printer_preset(MachineObject* obj, float nozzle_value) +{ + if (!obj) return nullptr; + + Preset* printer_preset = nullptr; + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { + // only use system printer preset + if (!printer_it->is_system) continue; + + ConfigOption* printer_nozzle_opt = printer_it->config.option("nozzle_diameter"); + ConfigOptionFloats* printer_nozzle_vals = nullptr; + if (printer_nozzle_opt) + printer_nozzle_vals = dynamic_cast(printer_nozzle_opt); + std::string model_id = printer_it->get_current_printer_type(preset_bundle); + if (model_id.compare(obj->printer_type) == 0 + && printer_nozzle_vals + && abs(printer_nozzle_vals->get_at(0) - nozzle_value) < 1e-3) { + printer_preset = &(*printer_it); + } + } + + return printer_preset; +} + +Preset* CalibrationPresetPage::get_print_preset() +{ + Preset* printer_preset = get_printer_preset(curr_obj, get_nozzle_value()); + + Preset* print_preset = nullptr; + wxArrayString print_items; + + // get default print profile + std::string default_print_profile_name; + if (printer_preset && printer_preset->config.has("default_print_profile")) { + default_print_profile_name = printer_preset->config.opt_string("default_print_profile"); + } + + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle) { + for (auto print_it = preset_bundle->prints.begin(); print_it != preset_bundle->prints.end(); print_it++) { + if (print_it->name == default_print_profile_name) { + print_preset = &(*print_it); + BOOST_LOG_TRIVIAL(trace) << "CaliPresetPage: get_print_preset = " << print_preset->name; + } + } + } + + return print_preset; +} + +std::string CalibrationPresetPage::get_print_preset_name() +{ + Preset* print_preset = get_print_preset(); + if (print_preset) + return print_preset->name; + return ""; +} + +wxArrayString CalibrationPresetPage::get_custom_range_values() +{ + if (m_show_custom_range && m_custom_range_panel) { + return m_custom_range_panel->get_values(); + } + return wxArrayString(); +} + +MaxVolumetricSpeedPresetPage::MaxVolumetricSpeedPresetPage( + wxWindow *parent, CalibMode cali_mode, bool custom_range, wxWindowID id, const wxPoint &pos, const wxSize &size, long style) + : CalibrationPresetPage(parent, cali_mode, custom_range, id, pos, size, style) +{ + if (custom_range && m_custom_range_panel) { + wxArrayString titles; + titles.push_back(_L("From Volumetric Speed")); + titles.push_back(_L("To Volumetric Speed")); + titles.push_back(_L("Step")); + m_custom_range_panel->set_titles(titles); + + m_custom_range_panel->set_unit(_L("mm\u00B3/s")); + } +} +}} diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp new file mode 100644 index 000000000..2816c4d7d --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp @@ -0,0 +1,292 @@ +#ifndef slic3r_GUI_CalibrationWizardPresetPage_hpp_ +#define slic3r_GUI_CalibrationWizardPresetPage_hpp_ + +#include "CalibrationWizardPage.hpp" + +namespace Slic3r { namespace GUI { + +enum CaliPresetStage { + CALI_MANULA_STAGE_NONE = 0, + CALI_MANUAL_STAGE_1, + CALI_MANUAL_STAGE_2, +}; + +enum FlowRatioCaliSource { + FROM_PRESET_PAGE = 0, + FROM_COARSE_PAGE, +}; + +class CaliPresetCaliStagePanel : public wxPanel +{ +public: + CaliPresetCaliStagePanel(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + void create_panel(wxWindow* parent); + + void set_cali_stage(CaliPresetStage stage, float value); + void get_cali_stage(CaliPresetStage& stage, float& value); + + void set_flow_ratio_value(float flow_ratio); + +protected: + CaliPresetStage m_stage; + wxBoxSizer* m_top_sizer; + wxRadioButton* m_complete_radioBox; + wxRadioButton* m_fine_radioBox; + TextInput * flow_ratio_input; + float m_flow_ratio_value; +}; + +class CaliPresetWarningPanel : public wxPanel +{ +public: + CaliPresetWarningPanel(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_panel(wxWindow* parent); + + void set_warning(wxString text); +protected: + wxBoxSizer* m_top_sizer; + Label* m_warning_text; +}; + +class CaliPresetTipsPanel : public wxPanel +{ +public: + CaliPresetTipsPanel(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_panel(wxWindow* parent); + + void set_params(int nozzle_temp, int bed_temp, float max_volumetric); + void get_params(int& nozzle_temp, int& bed_temp, float& max_volumetric); +protected: + wxBoxSizer* m_top_sizer; + TextInput* m_nozzle_temp; + Label* m_bed_temp; + TextInput* m_max_volumetric_speed; +}; + +class CaliPresetCustomRangePanel : public wxPanel +{ +public: + CaliPresetCustomRangePanel(wxWindow* parent, + int input_value_nums = 3, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_panel(wxWindow* parent); + + void set_unit(wxString unit); + void set_titles(wxArrayString titles); + void set_values(wxArrayString values); + wxArrayString get_values(); + +protected: + wxBoxSizer* m_top_sizer; + int m_input_value_nums; + std::vector m_title_texts; + std::vector m_value_inputs; +}; + +enum CaliPresetPageStatus +{ + CaliPresetStatusInit = 0, + CaliPresetStatusNormal, + CaliPresetStatusSending, + CaliPresetStatusNoUserLogin, + CaliPresetStatusInvalidPrinter, + CaliPresetStatusConnectingServer, + CaliPresetStatusInUpgrading, + CaliPresetStatusInSystemPrinting, + CaliPresetStatusInPrinting, + CaliPresetStatusSendingCanceled, + CaliPresetStatusLanModeNoSdcard, + CaliPresetStatusNoSdcard, + CaliPresetStatusNeedForceUpgrading, + CaliPresetStatusNeedConsistencyUpgrading, + CaliPresetStatusUnsupportedPrinter, + CaliPresetStatusInConnecting, + CaliPresetStatusFilamentIncompatible, +}; + +class CalibrationPresetPage : public CalibrationWizardPage +{ +public: + CalibrationPresetPage(wxWindow* parent, + CalibMode cali_mode, + bool custom_range = false, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + + void update_print_status_msg(wxString msg, bool is_warning); + wxString format_text(wxString& m_msg); + void stripWhiteSpace(std::string& str); + void update_priner_status_msg(wxString msg, bool is_warning); + void update(MachineObject* obj) override; + + void on_device_connected(MachineObject* obj) override; + + void update_print_error_info(int code, const std::string& msg, const std::string& extra); + + void show_send_failed_info(bool show, int code = 0, wxString description = wxEmptyString, wxString extra = wxEmptyString); + + void set_cali_filament_mode(CalibrationFilamentMode mode) override; + + void set_cali_method(CalibrationMethod method) override; + + void on_cali_start_job(); + + void on_cali_finished_job(); + + void init_with_machine(MachineObject* obj); + + void sync_ams_info(MachineObject* obj); + + void select_default_compatible_filament(); + + std::vector get_selected_filament_combobox(); + + // key is tray_id + std::map get_selected_filaments(); + + void get_preset_info( + float& nozzle_dia, + BedType& plate_type); + + void get_cali_stage(CaliPresetStage& stage, float& value); + + std::shared_ptr get_sending_progress_bar() { + return m_send_progress_bar; + } + + Preset* get_printer_preset(MachineObject* obj, float nozzle_value); + Preset* get_print_preset(); + std::string get_print_preset_name(); + + wxArrayString get_custom_range_values(); + + CaliPresetPageStatus get_page_status() { return m_page_status; } +protected: + void create_selection_panel(wxWindow* parent); + void create_filament_list_panel(wxWindow* parent); + void create_ext_spool_panel(wxWindow* parent); + void create_sending_panel(wxWindow* parent); + + void init_selection_values(); + void update_filament_combobox(std::string ams_id = ""); + + void on_select_nozzle(wxCommandEvent& evt); + void on_select_plate_type(wxCommandEvent& evt); + + void on_choose_ams(wxCommandEvent& event); + void on_choose_ext_spool(wxCommandEvent& event); + + void on_select_tray(wxCommandEvent& event); + + void on_switch_ams(std::string ams_id = ""); + + void on_recommend_input_value(); + + void check_filament_compatible(); + bool is_filaments_compatiable(const std::vector& prests); + bool is_filament_in_blacklist(Preset* preset, std::string& error_tips); + bool is_filaments_compatiable(const std::vector& prests, + int& bed_temp, + std::string& incompatiable_filament_name, + std::string& error_tips); + + float get_nozzle_value(); + + void update_plate_type_collection(CalibrationMethod method); + void update_combobox_filaments(MachineObject* obj); + void update_show_status(); + void show_status(CaliPresetPageStatus status); + void Enable_Send_Button(bool enable); + void prepare_mode(); + void sending_mode(); + bool is_blocking_printing(); + bool need_check_sdcard(MachineObject* obj); + + CaliPresetPageStatus get_status() { return m_page_status; } + + CaliPageStepGuide* m_step_panel{ nullptr }; + CaliPresetCaliStagePanel* m_cali_stage_panel { nullptr }; + wxPanel* m_selection_panel { nullptr }; + wxPanel* m_filament_from_panel { nullptr }; + Label* m_filament_list_tips{ nullptr }; + wxPanel* m_multi_ams_panel { nullptr }; + wxPanel* m_filament_list_panel { nullptr }; + wxPanel* m_ext_spool_panel { nullptr }; + CaliPresetWarningPanel* m_warning_panel { nullptr }; + CaliPresetCustomRangePanel* m_custom_range_panel { nullptr }; + CaliPresetTipsPanel* m_tips_panel { nullptr }; + wxPanel* m_sending_panel { nullptr }; + + wxBoxSizer* m_top_sizer; + + // m_selection_panel widgets + ComboBox* m_comboBox_nozzle_dia; + ComboBox* m_comboBox_bed_type; + ComboBox* m_comboBox_process; + + wxRadioButton* m_ams_radiobox; + wxRadioButton* m_ext_spool_radiobox; + + ScalableButton* m_ams_sync_button; + FilamentComboBoxList m_filament_comboBox_list; + FilamentComboBox* m_virtual_tray_comboBox; + + // m_sending panel widgets + std::shared_ptr m_send_progress_bar; + wxScrolledWindow* m_sw_print_failed_info { nullptr }; + Label* m_st_txt_error_code { nullptr }; + Label* m_st_txt_error_desc { nullptr }; + Label* m_st_txt_extra_info { nullptr }; + int m_print_error_code; + std::string m_print_error_msg; + std::string m_print_error_extra; + + std::vector m_ams_item_list; + + // for update filament combobox, key : tray_id + std::map filament_ams_list; + + CaliPresetPageStatus m_page_status { CaliPresetPageStatus::CaliPresetStatusInit }; + + bool m_show_custom_range { false }; + bool m_has_filament_incompatible { false }; + MachineObject* curr_obj { nullptr }; +}; + +class MaxVolumetricSpeedPresetPage : public CalibrationPresetPage +{ +public: + MaxVolumetricSpeedPresetPage(wxWindow * parent, + CalibMode cali_mode, + bool custom_range = false, + wxWindowID id = wxID_ANY, + const wxPoint &pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); +}; + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp new file mode 100644 index 000000000..48831693f --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -0,0 +1,1500 @@ +#include "CalibrationWizardSavePage.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" +#include "MsgDialog.hpp" + + +namespace Slic3r { namespace GUI { + +#define CALIBRATION_SAVE_INPUT_SIZE wxSize(FromDIP(240), FromDIP(24)) +#define FLOW_RATE_MAX_VALUE 1.15 + +static wxString get_default_name(wxString filament_name, CalibMode mode){ + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + if (filament_name.compare(it->name) == 0) { + if (!it->alias.empty()) + filament_name = from_u8(it->alias); + else + filament_name = from_u8(it->name); + } + } + + switch (mode) + { + case Slic3r::CalibMode::Calib_None: + break; + case Slic3r::CalibMode::Calib_PA_Line: + if (filament_name.StartsWith("Generic")) { + filament_name.Replace("Generic", "Brand", false); + } + break; + case Slic3r::CalibMode::Calib_PA_Tower: + break; + case Slic3r::CalibMode::Calib_Flow_Rate: + filament_name += " Flow Rate Calibrated"; + break; + case Slic3r::CalibMode::Calib_Temp_Tower: + filament_name += " Temperature Calibrated"; + break; + case Slic3r::CalibMode::Calib_Vol_speed_Tower: + filament_name += " Max Vol Speed Calibrated"; + break; + case Slic3r::CalibMode::Calib_VFA_Tower: + break; + case Slic3r::CalibMode::Calib_Retraction_tower: + break; + default: + break; + } + return filament_name; +} + +static wxString get_tray_name_by_tray_id(int tray_id) +{ + wxString tray_name; + if (tray_id == VIRTUAL_TRAY_ID) { + tray_name = "Ext"; + } + else { + char prefix = 'A' + (tray_id / 4); + char suffix = '0' + 1 + tray_id % 4; + tray_name = std::string(1, prefix) + std::string(1, suffix); + } + return tray_name; +} + +CalibrationCommonSavePage::CalibrationCommonSavePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationWizardPage(parent, id, pos, size, style) +{ + ; +} + +enum class GridTextInputType { + K, + N, + FlowRatio, + Name +}; + +class GridTextInput : public TextInput +{ +public: + GridTextInput(wxWindow* parent, wxString text, wxString label, wxSize size, int col_idx, GridTextInputType type); + int get_col_idx() { return m_col_idx; } + void set_col_idx(int idx) { m_col_idx = idx; } + GridTextInputType get_type() { return m_type; } + void set_type(GridTextInputType type) { m_type = type; } +private: + int m_col_idx; + GridTextInputType m_type; +}; + +GridTextInput::GridTextInput(wxWindow* parent, wxString text, wxString label, wxSize size, int col_idx, GridTextInputType type) + : TextInput(parent, text, label, "", wxDefaultPosition, size, wxTE_PROCESS_ENTER) + , m_col_idx(col_idx) + , m_type(type) +{ +} + +class GridComboBox : public ComboBox { +public: + GridComboBox(wxWindow* parent, wxSize size, int col_idx); + int get_col_idx() { return m_col_idx; } + void set_col_idx(int idx) { m_col_idx = idx; } +private: + int m_col_idx; +}; + +GridComboBox::GridComboBox(wxWindow* parent, wxSize size, int col_idx) + : ComboBox(parent, wxID_ANY, "", wxDefaultPosition, size, 0, nullptr) + , m_col_idx(col_idx) +{ + +} + +CaliPASaveAutoPanel::CaliPASaveAutoPanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + + +void CaliPASaveAutoPanel::create_panel(wxWindow* parent) +{ + m_complete_text_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_complete_text_panel->SetBackgroundColour(*wxWHITE); + m_complete_text_panel->Hide(); + wxBoxSizer* complete_text_sizer = new wxBoxSizer(wxVERTICAL); + auto complete_text = new Label(m_complete_text_panel, _L("We found the best Flow Dynamics Calibration Factor")); + complete_text->SetFont(Label::Head_14); + complete_text_sizer->Add(complete_text, 0, wxEXPAND); + m_complete_text_panel->SetSizer(complete_text_sizer); + + m_part_failed_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_part_failed_panel->SetBackgroundColour(wxColour(238, 238, 238)); + wxBoxSizer* part_failed_sizer = new wxBoxSizer(wxVERTICAL); + m_part_failed_panel->SetSizer(part_failed_sizer); + part_failed_sizer->AddSpacer(FromDIP(10)); + auto part_failed_text = new Label(m_part_failed_panel, _L("Part of the calibration failed! You may clean the plate and retry. The failed test result would be dropped.")); + part_failed_text->SetFont(Label::Body_14); + part_failed_sizer->Add(part_failed_text, 0, wxLEFT | wxRIGHT, FromDIP(20)); + part_failed_sizer->AddSpacer(FromDIP(10)); + + m_top_sizer->Add(m_part_failed_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_top_sizer->Add(m_complete_text_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_grid_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_grid_panel->SetBackgroundColour(*wxWHITE); + m_top_sizer->Add(m_grid_panel, 0, wxALIGN_CENTER); + + m_top_sizer->AddSpacer(FromDIP(10)); + + auto naming_hints = new Label(parent, _L("*We recommend you to add brand, materia, type, and even humidity level in the Name")); + naming_hints->SetFont(Label::Body_14); + naming_hints->SetForegroundColour(wxColour(157, 157, 157)); + m_top_sizer->Add(naming_hints, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); +} + +std::vector> CaliPASaveAutoPanel::default_naming(std::vector> preset_names) +{ + std::unordered_set set; + int i = 1; + for (auto& item : preset_names) { + if (!set.insert(item.second).second) { + item.second = get_default_name(item.second, CalibMode::Calib_PA_Line).ToUTF8().data(); + item.second += "_" + std::to_string(i); + i++; + } + else { + item.second = get_default_name(item.second, CalibMode::Calib_PA_Line).ToUTF8().data(); + } + } + return preset_names; +} + +void CaliPASaveAutoPanel::sync_cali_result(const std::vector& cali_result, const std::vector& history_result) +{ + m_history_results = history_result; + m_calib_results.clear(); + for (auto& item : cali_result) { + if (item.confidence == 0) + m_calib_results[item.tray_id] = item; + } + m_grid_panel->DestroyChildren(); + auto grid_sizer = new wxBoxSizer(wxHORIZONTAL); + const int COLUMN_GAP = FromDIP(20); + const int ROW_GAP = FromDIP(30); + wxBoxSizer* left_title_sizer = new wxBoxSizer(wxVERTICAL); + left_title_sizer->AddSpacer(FromDIP(52)); + auto k_title = new Label(m_grid_panel, _L("Factor K")); + k_title->SetFont(Label::Head_14); + left_title_sizer->Add(k_title, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + auto n_title = new Label(m_grid_panel, _L("Factor N")); + n_title->SetFont(Label::Head_14); + // hide n value + n_title->Hide(); + left_title_sizer->Add(n_title, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + auto brand_title = new Label(m_grid_panel, _L("Name")); + brand_title->SetFont(Label::Head_14); + left_title_sizer->Add(brand_title, 0, wxALIGN_CENTER); + grid_sizer->Add(left_title_sizer); + grid_sizer->AddSpacer(COLUMN_GAP); + + m_is_all_failed = true; + bool part_failed = false; + if (cali_result.empty()) + part_failed = true; + + std::vector> preset_names; + for (auto& info : m_obj->selected_cali_preset) { + preset_names.push_back({ info.tray_id, info.name }); + } + preset_names = default_naming(preset_names); + + for (auto& item : cali_result) { + bool result_failed = false; + if (item.confidence != 0) { + result_failed = true; + part_failed = true; + } + else { + m_is_all_failed = false; + } + + wxBoxSizer* column_data_sizer = new wxBoxSizer(wxVERTICAL); + auto tray_title = new Label(m_grid_panel, ""); + tray_title->SetFont(Label::Head_14); + wxString tray_name = get_tray_name_by_tray_id(item.tray_id); + tray_title->SetLabel(tray_name); + + auto k_value = new GridTextInput(m_grid_panel, "", "", CALIBRATION_SAVE_INPUT_SIZE, item.tray_id, GridTextInputType::K); + auto n_value = new GridTextInput(m_grid_panel, "", "", CALIBRATION_SAVE_INPUT_SIZE, item.tray_id, GridTextInputType::N); + k_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + n_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + auto k_value_failed = new Label(m_grid_panel, _L("Failed")); + auto n_value_failed = new Label(m_grid_panel, _L("Failed")); + + auto comboBox_tray_name = new GridComboBox(m_grid_panel, CALIBRATION_SAVE_INPUT_SIZE, item.tray_id); + auto tray_name_failed = new Label(m_grid_panel, " - "); + wxArrayString selections; + static std::vector filtered_results; + filtered_results.clear(); + for (auto history : history_result) { + for (auto& info : m_obj->selected_cali_preset) { + if (history.filament_id == info.filament_id) { + filtered_results.push_back(history); + selections.push_back(from_u8(history.name)); + } + } + } + comboBox_tray_name->Set(selections); + + column_data_sizer->Add(tray_title, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(k_value, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(n_value, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(k_value_failed, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(n_value_failed, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(comboBox_tray_name, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(tray_name_failed, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + + auto set_edit_mode = [this, k_value, n_value, k_value_failed, n_value_failed, comboBox_tray_name, tray_name_failed](std::string str) { + if (str == "normal") { + comboBox_tray_name->Show(); + tray_name_failed->Show(false); + k_value->Show(); + n_value->Show(); + k_value_failed->Show(false); + n_value_failed->Show(false); + } + if (str == "failed") { + comboBox_tray_name->Show(false); + tray_name_failed->Show(); + k_value->Show(false); + n_value->Show(false); + k_value_failed->Show(); + n_value_failed->Show(); + } + + // hide n value + n_value->Hide(); + n_value_failed->Hide(); + + m_grid_panel->Layout(); + m_grid_panel->Update(); + }; + + if (!result_failed) { + set_edit_mode("normal"); + + auto k_str = wxString::Format("%.3f", item.k_value); + auto n_str = wxString::Format("%.3f", item.n_coef); + k_value->GetTextCtrl()->SetValue(k_str); + n_value->GetTextCtrl()->SetValue(n_str); + + for (auto& name : preset_names) { + if (item.tray_id == name.first) { + comboBox_tray_name->SetValue(from_u8(name.second)); + } + } + + comboBox_tray_name->Bind(wxEVT_COMBOBOX, [this, comboBox_tray_name, k_value, n_value](auto& e) { + int selection = comboBox_tray_name->GetSelection(); + auto history = filtered_results[selection]; + }); + } + else { + set_edit_mode("failed"); + } + + grid_sizer->Add(column_data_sizer); + grid_sizer->AddSpacer(COLUMN_GAP); + } + + m_grid_panel->SetSizer(grid_sizer, true); + m_grid_panel->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + SetFocusIgnoringChildren(); + }); + + if (part_failed) { + m_part_failed_panel->Show(); + m_complete_text_panel->Show(); + if (m_is_all_failed) { + m_complete_text_panel->Hide(); + } + } + else { + m_complete_text_panel->Show(); + m_part_failed_panel->Hide(); + } + + wxGetApp().UpdateDarkUIWin(this); + + Layout(); +} + +void CaliPASaveAutoPanel::save_to_result_from_widgets(wxWindow* window, bool* out_is_valid, wxString* out_msg) { + if (!window) + return; + + //operate + auto input = dynamic_cast(window); + if (input && input->IsShown()) { + int tray_id = input->get_col_idx(); + if (input->get_type() == GridTextInputType::K) { + float k = 0.0f; + if (!CalibUtils::validate_input_k_value(input->GetTextCtrl()->GetValue(), &k)) { + *out_msg = _L("Please input a valid value (K in 0~0.5)"); + *out_is_valid = false; + } + m_calib_results[tray_id].k_value = k; + } + else if (input->get_type() == GridTextInputType::N) { + } + } + + auto comboBox = dynamic_cast(window); + if (comboBox && comboBox->IsShown()) { + int tray_id = comboBox->get_col_idx(); + wxString name = comboBox->GetTextCtrl()->GetValue().ToStdString(); + if (name.IsEmpty()) { + *out_msg = _L("Please enter the name you want to save to printer."); + *out_is_valid = false; + } + else if (name.Length() > 40) { + *out_msg = _L("The name cannot exceed 40 characters."); + *out_is_valid = false; + } + m_calib_results[tray_id].name = into_u8(name); + } + + auto childern = window->GetChildren(); + for (auto child : childern) { + save_to_result_from_widgets(child, out_is_valid, out_msg); + } +}; + +bool CaliPASaveAutoPanel::get_result(std::vector& out_result) { + bool is_valid = true; + wxString err_msg; + // Check if the input value is valid and save to m_calib_results + save_to_result_from_widgets(m_grid_panel, &is_valid, &err_msg); + if (is_valid) { + // Check for duplicate names + struct PACalibResult { + size_t operator()(const std::pair& item) const { + return std::hash()(item.first) * std::hash()(item.second); + } + }; + std::unordered_set, PACalibResult> set; + for (auto& result : m_calib_results) { + if (!set.insert({ result.second.name, result.second.filament_id }).second) { + MessageDialog msg_dlg(nullptr, _L("Only one of the results with the same name will be saved. Are you sure you want to overrides the other results?"), wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) { + return false; + } + else { + break; + } + } + } + // Check for duplicate names from history + for (auto& result : m_history_results) { + if (!set.insert({ result.name, result.filament_id }).second) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("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?"), result.name), wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) { + return false; + } + } + } + + for (auto& result : m_calib_results) { + out_result.push_back(result.second); + } + return true; + } + else { + MessageDialog msg_dlg(nullptr, err_msg, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } +} + +CaliPASaveManualPanel::CaliPASaveManualPanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPASaveManualPanel::create_panel(wxWindow* parent) +{ + auto complete_text_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + complete_text_panel->SetBackgroundColour(*wxWHITE); + wxBoxSizer* complete_text_sizer = new wxBoxSizer(wxVERTICAL); + auto complete_text = new Label(complete_text_panel, _L("Please find the best line on your plate")); + complete_text->SetFont(Label::Head_14); + complete_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); + complete_text_sizer->Add(complete_text, 0); + complete_text_panel->SetSizer(complete_text_sizer); + m_top_sizer->Add(complete_text_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_picture_panel = new CaliPagePicture(parent); + set_save_img(); + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + auto k_value_text = new Label(parent, _L("Factor K")); + k_value_text->SetFont(::Label::Head_14); + k_value_text->Wrap(-1); + auto n_value_text = new Label(parent, _L("Factor N")); + n_value_text->SetFont(::Label::Head_14); + n_value_text->Wrap(-1); + n_value_text->Hide(); + m_k_val = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0); + m_k_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_n_val = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0); + m_n_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_n_val->Hide(); + m_top_sizer->Add(k_value_text, 0); + m_top_sizer->Add(m_k_val, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + auto save_text = new Label(parent, _L("Name")); + save_text->SetFont(Label::Head_14); + m_top_sizer->Add(save_text, 0, 0, 0); + + m_save_name_input = new TextInput(parent, "", "", "", wxDefaultPosition, { CALIBRATION_TEXT_MAX_LENGTH, FromDIP(24) }, 0); + m_top_sizer->Add(m_save_name_input, 0, 0, 0); + + m_top_sizer->AddSpacer(FromDIP(10)); + + auto naming_hints = new Label(parent, _L("*We recommend you to add brand, materia, type, and even humidity level in the Name")); + naming_hints->SetFont(Label::Body_14); + naming_hints->SetForegroundColour(wxColour(157, 157, 157)); + m_top_sizer->Add(naming_hints, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + SetFocusIgnoringChildren(); + }); +} + +void CaliPASaveManualPanel::set_save_img() { + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_manual_result_CN", nullptr, 330)); + } else { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_manual_result", nullptr, 330)); + } +} + +void CaliPASaveManualPanel::set_default_name(const wxString& name) { + m_save_name_input->GetTextCtrl()->SetValue(name); +} + +bool CaliPASaveManualPanel::get_result(PACalibResult& out_result) { + // Check if the value is valid + float k; + if (!CalibUtils::validate_input_k_value(m_k_val->GetTextCtrl()->GetValue(), &k)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (K in 0~0.5)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + + wxString name = m_save_name_input->GetTextCtrl()->GetValue(); + if (name.IsEmpty()) { + MessageDialog msg_dlg(nullptr, _L("Please enter the name you want to save to printer."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + else if (name.Length() > 40) { + MessageDialog msg_dlg(nullptr, _L("The name cannot exceed 40 characters."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + + out_result.k_value = k; + out_result.name = into_u8(name); + if (m_obj) { + assert(m_obj->selected_cali_preset.size() <= 1); + if (!m_obj->selected_cali_preset.empty()) { + out_result.tray_id = m_obj->selected_cali_preset[0].tray_id; + out_result.nozzle_diameter = m_obj->selected_cali_preset[0].nozzle_diameter; + out_result.filament_id = m_obj->selected_cali_preset[0].filament_id; + out_result.setting_id = m_obj->selected_cali_preset[0].setting_id; + } + else { + BOOST_LOG_TRIVIAL(trace) << "CaliPASaveManual: obj->selected_cali_preset is empty"; + return false; + } + } + else { + BOOST_LOG_TRIVIAL(trace) << "CaliPASaveManual::get_result(): obj is nullptr"; + return false; + } + + return true; +} + +bool CaliPASaveManualPanel::Show(bool show) { + if (show) { + if (m_obj) { + assert(m_obj->selected_cali_preset.size() <= 1); + if (!m_obj->selected_cali_preset.empty()) { + wxString default_name = get_default_name(m_obj->selected_cali_preset[0].name, CalibMode::Calib_PA_Line); + set_default_name(default_name); + } + } + else { + BOOST_LOG_TRIVIAL(trace) << "CaliPASaveManual::Show(): obj is nullptr"; + } + } + return wxPanel::Show(show); +} + +CaliPASaveP1PPanel::CaliPASaveP1PPanel( + wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliPASaveP1PPanel::create_panel(wxWindow* parent) +{ + auto complete_text_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + complete_text_panel->SetBackgroundColour(*wxWHITE); + wxBoxSizer* complete_text_sizer = new wxBoxSizer(wxVERTICAL); + auto complete_text = new Label(complete_text_panel, _L("Please find the best line on your plate")); + complete_text->SetFont(Label::Head_14); + complete_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); + complete_text_sizer->Add(complete_text, 0, wxEXPAND); + complete_text_panel->SetSizer(complete_text_sizer); + m_top_sizer->Add(complete_text_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_picture_panel = new CaliPagePicture(parent); + set_save_img(); + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + auto value_sizer = new wxBoxSizer(wxHORIZONTAL); + auto k_value_text = new Label(parent, _L("Factor K")); + k_value_text->Wrap(-1); + k_value_text->SetFont(::Label::Head_14); + auto n_value_text = new Label(parent, _L("Factor N")); + n_value_text->Wrap(-1); + n_value_text->SetFont(::Label::Head_14); + m_k_val = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0); + m_k_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_n_val = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0); + m_n_val->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + n_value_text->Hide(); + m_n_val->Hide(); + value_sizer->Add(k_value_text, 0, wxALIGN_CENTER_VERTICAL, 0); + value_sizer->AddSpacer(FromDIP(10)); + value_sizer->Add(m_k_val, 0); + value_sizer->AddSpacer(FromDIP(50)); + value_sizer->Add(n_value_text, 0, wxALIGN_CENTER_VERTICAL, 0); + value_sizer->AddSpacer(FromDIP(10)); + value_sizer->Add(m_n_val, 0); + m_top_sizer->Add(value_sizer, 0, wxALIGN_CENTER); + + m_top_sizer->AddSpacer(FromDIP(20)); + + Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + SetFocusIgnoringChildren(); + }); +} + +void CaliPASaveP1PPanel::set_save_img() { + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_manual_result_CN", nullptr, 350)); + } else { + m_picture_panel->set_img(create_scaled_bitmap("fd_calibration_manual_result", nullptr, 350)); + } +} + +bool CaliPASaveP1PPanel::get_result(float* out_k, float* out_n){ + // Check if the value is valid + if (!CalibUtils::validate_input_k_value(m_k_val->GetTextCtrl()->GetValue(), out_k)) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (K in 0~0.5)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + return true; +} + +CaliSavePresetValuePanel::CaliSavePresetValuePanel( + wxWindow *parent, + wxWindowID id, + const wxPoint &pos, + const wxSize &size, + long style) + : wxPanel(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_panel(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CaliSavePresetValuePanel::create_panel(wxWindow *parent) +{ + m_picture_panel = new CaliPagePicture(parent); + + m_value_title = new Label(parent, _L("Input Value")); + m_value_title->SetFont(Label::Head_14); + m_value_title->Wrap(-1); + m_input_value = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, wxTE_PROCESS_ENTER); + m_input_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + + m_save_name_title = new Label(parent, _L("Save to Filament Preset")); + m_save_name_title->Wrap(-1); + m_save_name_title->SetFont(Label::Head_14); + + m_input_name = new TextInput(parent, wxEmptyString, "", "", wxDefaultPosition, {CALIBRATION_TEXT_MAX_LENGTH, FromDIP(24)}, 0); + + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + m_top_sizer->Add(m_value_title, 0); + m_top_sizer->AddSpacer(FromDIP(10)); + m_top_sizer->Add(m_input_value, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + m_top_sizer->Add(m_save_name_title, 0); + m_top_sizer->AddSpacer(FromDIP(10)); + m_top_sizer->Add(m_input_name, 0); + m_top_sizer->AddSpacer(FromDIP(20)); +} + +void CaliSavePresetValuePanel::set_img(const std::string& bmp_name_in) +{ + m_picture_panel->set_img(create_scaled_bitmap(bmp_name_in, nullptr, 400)); +} + +void CaliSavePresetValuePanel::set_value_title(const wxString& title) { + m_value_title->SetLabel(title); +} + +void CaliSavePresetValuePanel::set_save_name_title(const wxString& title) { + m_save_name_title->SetLabel(title); +} + +void CaliSavePresetValuePanel::get_value(double& value) +{ + m_input_value->GetTextCtrl()->GetValue().ToDouble(&value); +} + +void CaliSavePresetValuePanel::get_save_name(std::string& name) +{ + name = into_u8(m_input_name->GetTextCtrl()->GetValue()); +} + +void CaliSavePresetValuePanel::set_save_name(const std::string& name) +{ + m_input_name->GetTextCtrl()->SetValue(name); +} + +CalibrationPASavePage::CalibrationPASavePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationCommonSavePage(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = CalibMode::Calib_PA_Line; + + m_page_type = CaliPageType::CALI_PAGE_PA_SAVE; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationPASavePage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(2); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + m_manual_panel = new CaliPASaveManualPanel(parent, wxID_ANY); + m_auto_panel = new CaliPASaveAutoPanel(parent, wxID_ANY); + m_p1p_panel = new CaliPASaveP1PPanel(parent, wxID_ANY); + m_help_panel = new PAPageHelpPanel(parent); + m_manual_panel->Hide(); + m_p1p_panel->Hide(); + + m_top_sizer->Add(m_manual_panel, 0, wxEXPAND); + m_top_sizer->Add(m_auto_panel, 0, wxEXPAND); + m_top_sizer->Add(m_p1p_panel, 0, wxEXPAND); + m_top_sizer->Add(m_help_panel, 0, wxEXPAND); + m_top_sizer->AddSpacer(FromDIP(20)); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_PA_SAVE); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +void CalibrationPASavePage::sync_cali_result(MachineObject* obj) +{ + // only auto need sync cali_result + if (obj && m_cali_method == CalibrationMethod::CALI_METHOD_AUTO) { + m_auto_panel->sync_cali_result(obj->pa_calib_results, obj->pa_calib_tab); + } else { + std::vector empty_result; + m_auto_panel->sync_cali_result(empty_result, empty_result); + } +} + +void CalibrationPASavePage::show_panels(CalibrationMethod method, const PrinterSeries printer_ser) { + if (printer_ser == PrinterSeries::SERIES_X1) { + if (method == CalibrationMethod::CALI_METHOD_MANUAL) { + m_manual_panel->Show(); + m_auto_panel->Show(false); + } + else { + m_auto_panel->Show(); + m_manual_panel->Show(false); + } + m_p1p_panel->Show(false); + } + else if (printer_ser == PrinterSeries::SERIES_P1P) { + m_auto_panel->Show(false); + m_manual_panel->Show(false); + m_p1p_panel->Show(); + } else { + m_auto_panel->Show(false); + m_manual_panel->Show(false); + m_p1p_panel->Show(); + assert(false); + } + Layout(); +} + +void CalibrationPASavePage::set_cali_method(CalibrationMethod method) +{ + CalibrationWizardPage::set_cali_method(method); + if (curr_obj) { + show_panels(method, curr_obj->get_printer_series()); + } +} + +void CalibrationPASavePage::on_device_connected(MachineObject* obj) +{ + curr_obj = obj; + if (curr_obj) + show_panels(m_cali_method, curr_obj->get_printer_series()); +} + +void CalibrationPASavePage::update(MachineObject* obj) +{ + CalibrationWizardPage::update(obj); + + if (m_auto_panel && m_auto_panel->IsShown()) + m_auto_panel->set_machine_obj(obj); + if (m_manual_panel && m_manual_panel->IsShown()) + m_manual_panel->set_machine_obj(obj); +} + +bool CalibrationPASavePage::Show(bool show) { + if (show) { + if (curr_obj) { + show_panels(m_cali_method, curr_obj->get_printer_series()); + sync_cali_result(curr_obj); + } + } + return wxPanel::Show(show); +} + +CalibrationFlowX1SavePage::CalibrationFlowX1SavePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationCommonSavePage(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = CalibMode::Calib_Flow_Rate; + + m_page_type = CaliPageType::CALI_PAGE_FLOW_SAVE; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationFlowX1SavePage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(2); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + m_complete_text_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_complete_text_panel->SetBackgroundColour(*wxWHITE); + m_complete_text_panel->Hide(); + wxBoxSizer* complete_text_sizer = new wxBoxSizer(wxVERTICAL); + auto complete_text = new Label(m_complete_text_panel, _L("We found the best flow ratio for you")); + complete_text->SetFont(Label::Head_14); + complete_text_sizer->Add(complete_text, 0, wxEXPAND); + m_complete_text_panel->SetSizer(complete_text_sizer); + + m_part_failed_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_part_failed_panel->SetBackgroundColour(wxColour(238, 238, 238)); + wxBoxSizer* part_failed_sizer = new wxBoxSizer(wxVERTICAL); + m_part_failed_panel->SetSizer(part_failed_sizer); + part_failed_sizer->AddSpacer(FromDIP(10)); + auto part_failed_text = new Label(m_part_failed_panel, _L("Part of the calibration failed! You may clean the plate and retry. The failed test result would be dropped.")); + part_failed_text->SetFont(Label::Body_14); + part_failed_sizer->Add(part_failed_text, 0, wxLEFT | wxRIGHT, FromDIP(20)); + part_failed_sizer->AddSpacer(FromDIP(10)); + + m_top_sizer->Add(m_part_failed_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_top_sizer->Add(m_complete_text_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_grid_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_grid_panel->SetBackgroundColour(*wxWHITE); + m_top_sizer->Add(m_grid_panel, 0, wxALIGN_CENTER); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_FLOW_SAVE); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +void CalibrationFlowX1SavePage::sync_cali_result(const std::vector& cali_result) +{ + m_save_results.clear(); + m_grid_panel->DestroyChildren(); + wxBoxSizer* grid_sizer = new wxBoxSizer(wxHORIZONTAL); + const int COLUMN_GAP = FromDIP(20); + const int ROW_GAP = FromDIP(30); + wxBoxSizer* left_title_sizer = new wxBoxSizer(wxVERTICAL); + left_title_sizer->AddSpacer(FromDIP(49)); + auto flow_ratio_title = new Label(m_grid_panel, _L("Flow Ratio")); + flow_ratio_title->SetFont(Label::Head_14); + left_title_sizer->Add(flow_ratio_title, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP + FromDIP(10)); + auto brand_title = new Label(m_grid_panel, _L("Save to Filament Preset")); + brand_title->SetFont(Label::Head_14); + left_title_sizer->Add(brand_title, 0, wxALIGN_CENTER); + grid_sizer->Add(left_title_sizer); + grid_sizer->AddSpacer(COLUMN_GAP); + + m_is_all_failed = true; + bool part_failed = false; + if (cali_result.empty()) + part_failed = true; + for (auto& item : cali_result) { + bool result_failed = false; + if (item.confidence != 0 || item.flow_ratio < 1e-3 || item.flow_ratio > FLOW_RATE_MAX_VALUE) { + result_failed = true; + part_failed = true; + } + else { + m_is_all_failed = false; + } + + wxBoxSizer* column_data_sizer = new wxBoxSizer(wxVERTICAL); + auto tray_title = new Label(m_grid_panel, ""); + tray_title->SetFont(Label::Head_14); + wxString tray_name = get_tray_name_by_tray_id(item.tray_id); + tray_title->SetLabel(tray_name); + + auto flow_ratio_value = new GridTextInput(m_grid_panel, "", "", CALIBRATION_SAVE_INPUT_SIZE, item.tray_id, GridTextInputType::FlowRatio); + flow_ratio_value->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + auto flow_ratio_value_failed = new Label(m_grid_panel, _L("Failed")); + + auto save_name_input = new GridTextInput(m_grid_panel, "", "", { CALIBRATION_TEXT_MAX_LENGTH, FromDIP(24) }, item.tray_id, GridTextInputType::Name); + auto save_name_input_failed = new Label(m_grid_panel, " - "); + + column_data_sizer->Add(tray_title, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(flow_ratio_value, 0, wxALIGN_LEFT | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(flow_ratio_value_failed, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(save_name_input, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + column_data_sizer->Add(save_name_input_failed, 0, wxALIGN_CENTER | wxBOTTOM, ROW_GAP); + + auto set_edit_mode = [this, flow_ratio_value, flow_ratio_value_failed, save_name_input, save_name_input_failed](std::string str) { + if (str == "normal") { + save_name_input->Show(); + save_name_input_failed->Show(false); + flow_ratio_value->Show(); + flow_ratio_value_failed->Show(false); + } + if (str == "failed") { + save_name_input->Show(false); + save_name_input_failed->Show(); + flow_ratio_value->Show(false); + flow_ratio_value_failed->Show(); + } + m_grid_panel->Layout(); + m_grid_panel->Update(); + }; + + if (!result_failed) { + set_edit_mode("normal"); + + auto flow_ratio_str = wxString::Format("%.3f", item.flow_ratio); + flow_ratio_value->GetTextCtrl()->SetValue(flow_ratio_str); + for (auto& info : curr_obj->selected_cali_preset) { + if (item.tray_id == info.tray_id) { + save_name_input->GetTextCtrl()->SetValue(get_default_name(info.name, CalibMode::Calib_Flow_Rate) + "_" + tray_name); + break; + } + else { + BOOST_LOG_TRIVIAL(trace) << "CalibrationFlowX1Save : obj->selected_cali_preset doesn't contain correct tray_id"; + } + } + } + else { + set_edit_mode("failed"); + } + + grid_sizer->Add(column_data_sizer); + grid_sizer->AddSpacer(COLUMN_GAP); + } + m_grid_panel->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_grid_panel->SetFocusIgnoringChildren(); + }); + m_grid_panel->SetSizer(grid_sizer, true); + + if (part_failed) { + m_part_failed_panel->Show(); + m_complete_text_panel->Show(); + if (m_is_all_failed) { + m_complete_text_panel->Hide(); + } + } + else { + m_complete_text_panel->Show(); + m_part_failed_panel->Hide(); + } + + wxGetApp().UpdateDarkUIWin(this); + + Layout(); +} + +void CalibrationFlowX1SavePage::save_to_result_from_widgets(wxWindow* window, bool* out_is_valid, wxString* out_msg) +{ + if (!window) + return; + + //operate + auto input = dynamic_cast(window); + if (input && input->IsShown()) { + int tray_id = input->get_col_idx(); + if (input->get_type() == GridTextInputType::FlowRatio) { + float flow_ratio = 0.0f; + if (!CalibUtils::validate_input_flow_ratio(input->GetTextCtrl()->GetValue(), &flow_ratio)) { + *out_msg = _L("Please input a valid value (0.0 < flow ratio < 2.0)"); + *out_is_valid = false; + } + m_save_results[tray_id].second = flow_ratio; + } + else if (input->get_type() == GridTextInputType::Name) { + if (input->GetTextCtrl()->GetValue().IsEmpty()) { + *out_msg = _L("Please enter the name of the preset you want to save."); + *out_is_valid = false; + } + m_save_results[tray_id].first = input->GetTextCtrl()->GetValue().ToStdString(); + } + } + + auto childern = window->GetChildren(); + for (auto child : childern) { + save_to_result_from_widgets(child, out_is_valid, out_msg); + } +} + +bool CalibrationFlowX1SavePage::get_result(std::vector>& out_results) +{ + bool is_valid = true; + wxString err_msg; + // Check if the value is valid and save to m_calib_results + save_to_result_from_widgets(m_grid_panel, &is_valid, &err_msg); + if (is_valid) { + // obj->cali_result contain failure results, so use m_save_results to record value + for (auto& item : m_save_results) { + out_results.push_back(item.second); + } + return true; + } + else { + MessageDialog msg_dlg(nullptr, err_msg, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } +} + +bool CalibrationFlowX1SavePage::Show(bool show) { + if (show) { + if (curr_obj) { + sync_cali_result(curr_obj->flow_ratio_results); + } + } + return wxPanel::Show(show); +} + +CalibrationFlowCoarseSavePage::CalibrationFlowCoarseSavePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationCommonSavePage(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = CalibMode::Calib_Flow_Rate; + + m_page_type = CaliPageType::CALI_PAGE_COARSE_SAVE; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationFlowCoarseSavePage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration1")); + steps.Add(_L("Calibration2")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(1); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + auto complete_text = new Label(parent, _L("Please find the best object on your plate")); + complete_text->SetFont(Label::Head_14); + complete_text->Wrap(-1); + m_top_sizer->Add(complete_text, 0, wxEXPAND, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + + m_picture_panel = new CaliPagePicture(parent); + set_save_img(); + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + auto coarse_value_sizer = new wxBoxSizer(wxVERTICAL); + auto coarse_value_text = new Label(parent, _L("Fill in the value above the block with smoothest top surface")); + coarse_value_text->SetFont(Label::Head_14); + coarse_value_text->Wrap(-1); + m_optimal_block_coarse = new ComboBox(parent, wxID_ANY, "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0, nullptr, wxCB_READONLY); + wxArrayString coarse_block_items; + for (int i = 0; i < 9; i++) { + coarse_block_items.Add(std::to_string(-20 + (i * 5))); + } + m_optimal_block_coarse->Set(coarse_block_items); + auto coarse_calc_result_text = new Label(parent, ""); + coarse_value_sizer->Add(coarse_value_text, 0, 0); + coarse_value_sizer->Add(m_optimal_block_coarse, 0, 0); + coarse_value_sizer->Add(coarse_calc_result_text, 0); + m_top_sizer->Add(coarse_value_sizer, 0, 0, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + + auto checkBox_panel = new wxPanel(parent); + checkBox_panel->SetBackgroundColour(*wxWHITE); + auto cb_sizer = new wxBoxSizer(wxHORIZONTAL); + checkBox_panel->SetSizer(cb_sizer); + auto checkBox_skip_calibration = new CheckBox(checkBox_panel); + cb_sizer->Add(checkBox_skip_calibration); + + auto cb_text = new Label(checkBox_panel, _L("Skip Calibration2")); + cb_sizer->Add(cb_text); + cb_text->Bind(wxEVT_LEFT_DOWN, [this, checkBox_skip_calibration](auto&) { + checkBox_skip_calibration->SetValue(!checkBox_skip_calibration->GetValue()); + wxCommandEvent event(wxEVT_TOGGLEBUTTON); + event.SetEventObject(checkBox_skip_calibration); + checkBox_skip_calibration->GetEventHandler()->ProcessEvent(event); + }); + + m_top_sizer->Add(checkBox_panel, 0, 0, 0); + + auto save_panel = new wxPanel(parent); + save_panel->SetBackgroundColour(*wxWHITE); + auto save_sizer = new wxBoxSizer(wxVERTICAL); + save_panel->SetSizer(save_sizer); + + auto save_text = new Label(save_panel, _L("Save to Filament Preset")); + save_text->Wrap(-1); + save_text->SetFont(Label::Head_14); + save_sizer->Add(save_text, 0, 0, 0); + + m_save_name_input = new TextInput(save_panel, "", "", "", wxDefaultPosition, {CALIBRATION_TEXT_MAX_LENGTH, FromDIP(24)}, 0); + save_sizer->Add(m_save_name_input, 0, 0, 0); + + m_top_sizer->Add(save_panel, 0, 0, 0); + save_panel->Hide(); + + m_top_sizer->AddSpacer(FromDIP(20)); + + checkBox_skip_calibration->Bind(wxEVT_TOGGLEBUTTON, [this, save_panel, checkBox_skip_calibration](wxCommandEvent& e) { + if (checkBox_skip_calibration->GetValue()) { + m_skip_fine_calibration = true; + save_panel->Show(); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2, false); + } + else { + m_skip_fine_calibration = false; + save_panel->Hide(); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_FLOW_CALI_STAGE_2); + } + Layout(); + Fit(); + e.Skip(); + }); + + m_optimal_block_coarse->Bind(wxEVT_COMBOBOX, [this, coarse_calc_result_text](auto& e) { + m_coarse_flow_ratio = m_curr_flow_ratio * (100.0f + stof(m_optimal_block_coarse->GetValue().ToStdString())) / 100.0f; + coarse_calc_result_text->SetLabel(wxString::Format(_L("flow ratio : %s "), std::to_string(m_coarse_flow_ratio))); + }); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_COARSE_SAVE); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_FLOW_COARSE_SAVE, false); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +void CalibrationFlowCoarseSavePage::set_save_img() { + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_coarse_result_CN", nullptr, 350)); + } else { + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_coarse_result", nullptr, 350)); + } +} + +void CalibrationFlowCoarseSavePage::set_default_name(const wxString& name) { + m_save_name_input->GetTextCtrl()->SetValue(name); +} + +bool CalibrationFlowCoarseSavePage::is_skip_fine_calibration() { + return m_skip_fine_calibration; +} + +void CalibrationFlowCoarseSavePage::set_curr_flow_ratio(const float value) { + m_curr_flow_ratio = value; +} + +bool CalibrationFlowCoarseSavePage::get_result(float* out_value, wxString* out_name) { + // Check if the value is valid + if (m_coarse_flow_ratio <= 0.0 || m_coarse_flow_ratio >= 2.0) { + MessageDialog msg_dlg(nullptr, _L("Please choose a block with smoothest top surface"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + if (m_save_name_input->GetTextCtrl()->GetValue().IsEmpty()) { + MessageDialog msg_dlg(nullptr, _L("Please enter the name of the preset you want to save."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + *out_value = m_coarse_flow_ratio; + *out_name = m_save_name_input->GetTextCtrl()->GetValue(); + return true; +} + +bool CalibrationFlowCoarseSavePage::Show(bool show) { + if (show) { + if (curr_obj) { + assert(curr_obj->selected_cali_preset.size() <= 1); + if (!curr_obj->selected_cali_preset.empty()) { + wxString default_name = get_default_name(curr_obj->selected_cali_preset[0].name, CalibMode::Calib_Flow_Rate); + set_default_name(default_name); + set_curr_flow_ratio(curr_obj->cache_flow_ratio); + } + } + else { + BOOST_LOG_TRIVIAL(trace) << "CalibrationFlowCoarseSave::Show(): obj is nullptr"; + } + } + return wxPanel::Show(show); +} + +CalibrationFlowFineSavePage::CalibrationFlowFineSavePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationCommonSavePage(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = CalibMode::Calib_Flow_Rate; + + m_page_type = CaliPageType::CALI_PAGE_FINE_SAVE; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationFlowFineSavePage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration1")); + steps.Add(_L("Calibration2")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(3); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + auto complete_text = new Label(parent, _L("Please find the best object on your plate")); + complete_text->SetFont(Label::Head_14); + complete_text->Wrap(-1); + m_top_sizer->Add(complete_text, 0, wxEXPAND, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + + m_picture_panel = new CaliPagePicture(parent); + set_save_img(); + m_top_sizer->Add(m_picture_panel, 0, wxEXPAND, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + auto fine_value_sizer = new wxBoxSizer(wxVERTICAL); + auto fine_value_text = new Label(parent, _L("Fill in the value above the block with smoothest top surface")); + fine_value_text->Wrap(-1); + fine_value_text->SetFont(::Label::Head_14); + m_optimal_block_fine = new ComboBox(parent, wxID_ANY, "", wxDefaultPosition, CALIBRATION_OPTIMAL_INPUT_SIZE, 0, nullptr, wxCB_READONLY); + wxArrayString fine_block_items; + for (int i = 0; i < 10; i++) { + fine_block_items.Add(std::to_string(-9 + (i))); + } + m_optimal_block_fine->Set(fine_block_items); + auto fine_calc_result_text = new Label(parent, ""); + fine_value_sizer->Add(fine_value_text, 0, 0); + fine_value_sizer->Add(m_optimal_block_fine, 0, 0); + fine_value_sizer->Add(fine_calc_result_text, 0); + m_top_sizer->Add(fine_value_sizer, 0, 0, 0); + m_top_sizer->AddSpacer(FromDIP(20)); + + auto save_text = new Label(parent, _L("Save to Filament Preset")); + save_text->Wrap(-1); + save_text->SetFont(Label::Head_14); + m_top_sizer->Add(save_text, 0, 0, 0); + + m_save_name_input = new TextInput(parent, "", "", "", wxDefaultPosition, {CALIBRATION_TEXT_MAX_LENGTH, FromDIP(24)}, 0); + m_top_sizer->Add(m_save_name_input, 0, 0, 0); + + m_top_sizer->AddSpacer(FromDIP(20)); + + m_optimal_block_fine->Bind(wxEVT_COMBOBOX, [this, fine_calc_result_text](auto& e) { + m_fine_flow_ratio = m_curr_flow_ratio * (100.0f + stof(m_optimal_block_fine->GetValue().ToStdString())) / 100.0f; + fine_calc_result_text->SetLabel(wxString::Format(_L("flow ratio : %s "), std::to_string(m_fine_flow_ratio))); + }); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_FINE_SAVE); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +void CalibrationFlowFineSavePage::set_save_img() { + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_fine_result_CN", nullptr, 350)); + } else { + m_picture_panel->set_img(create_scaled_bitmap("flow_rate_calibration_fine_result", nullptr, 350)); + } +} + +void CalibrationFlowFineSavePage::set_default_name(const wxString& name) { + m_save_name_input->GetTextCtrl()->SetValue(name); +} + +void CalibrationFlowFineSavePage::set_curr_flow_ratio(const float value) { + m_curr_flow_ratio = value; +} + +bool CalibrationFlowFineSavePage::get_result(float* out_value, wxString* out_name) { + // Check if the value is valid + if (m_fine_flow_ratio <= 0.0 || m_fine_flow_ratio >= 2.0) { + MessageDialog msg_dlg(nullptr, _L("Please choose a block with smoothest top surface."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + if (m_save_name_input->GetTextCtrl()->GetValue().IsEmpty()) { + MessageDialog msg_dlg(nullptr, _L("Please enter the name of the preset you want to save."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + *out_value = m_fine_flow_ratio; + *out_name = m_save_name_input->GetTextCtrl()->GetValue(); + return true; +} + +bool CalibrationFlowFineSavePage::Show(bool show) { + if (show) { + if (curr_obj) { + assert(curr_obj->selected_cali_preset.size() <= 1); + if (!curr_obj->selected_cali_preset.empty()) { + wxString default_name = get_default_name(curr_obj->selected_cali_preset[0].name, CalibMode::Calib_Flow_Rate); + set_default_name(default_name); + set_curr_flow_ratio(curr_obj->cache_flow_ratio); + } + } + else { + BOOST_LOG_TRIVIAL(trace) << "CalibrationFlowFineSave::Show(): obj is nullptr"; + } + } + return wxPanel::Show(show); +} + +CalibrationMaxVolumetricSpeedSavePage::CalibrationMaxVolumetricSpeedSavePage( + wxWindow *parent, + wxWindowID id, + const wxPoint &pos, + const wxSize &size, + long style) + : CalibrationCommonSavePage(parent, id, pos, size, style) +{ + SetBackgroundColour(*wxWHITE); + + m_cali_mode = CalibMode::Calib_Vol_speed_Tower; + + m_page_type = CaliPageType::CALI_PAGE_COMMON_SAVE; + + m_top_sizer = new wxBoxSizer(wxVERTICAL); + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationMaxVolumetricSpeedSavePage::create_page(wxWindow *parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(true); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + + wxArrayString steps; + steps.Add(_L("Preset")); + steps.Add(_L("Calibration")); + steps.Add(_L("Record Factor")); + m_step_panel = new CaliPageStepGuide(parent, steps); + m_step_panel->set_steps(2); + m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); + + m_save_preset_panel = new CaliSavePresetValuePanel(parent, wxID_ANY); + + set_save_img(); + + m_top_sizer->Add(m_save_preset_panel, 0, wxEXPAND); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_COMMON_SAVE); + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +void CalibrationMaxVolumetricSpeedSavePage::set_save_img() { + m_save_preset_panel->set_img("max_volumetric_speed_calibration"); +} + +bool CalibrationMaxVolumetricSpeedSavePage::get_save_result(double& value, std::string& name) { + // Check if the value is valid + m_save_preset_panel->get_save_name(name); + m_save_preset_panel->get_value(value); + if (value < 0 || value > 60) { + MessageDialog msg_dlg(nullptr, _L("Please input a valid value (0 <= Max Volumetric Speed <= 60)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + if (name.empty()) { + MessageDialog msg_dlg(nullptr, _L("Please enter the name of the preset you want to save."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return false; + } + return true; +} + +bool CalibrationMaxVolumetricSpeedSavePage::Show(bool show) { + if (show) { + if (curr_obj) { + assert(curr_obj->selected_cali_preset.size() <= 1); + if (!curr_obj->selected_cali_preset.empty()) { + wxString default_name = get_default_name(curr_obj->selected_cali_preset[0].name, CalibMode::Calib_Vol_speed_Tower); + m_save_preset_panel->set_save_name(default_name.ToStdString()); + } + } + else { + BOOST_LOG_TRIVIAL(trace) << "CalibrationMaxVolumetricSpeedSave::Show(): obj is nullptr"; + } + } + return wxPanel::Show(show); +} + + +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.hpp b/src/slic3r/GUI/CalibrationWizardSavePage.hpp new file mode 100644 index 000000000..7a3b01c95 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardSavePage.hpp @@ -0,0 +1,296 @@ +#ifndef slic3r_GUI_CalibrationWizardSavePage_hpp_ +#define slic3r_GUI_CalibrationWizardSavePage_hpp_ + +#include "CalibrationWizardPage.hpp" +#include "Widgets/TextInput.hpp" + +namespace Slic3r { namespace GUI { + +enum CaliSaveStyle { + CALI_SAVE_P1P_STYLE = 0, + CALI_SAVE_X1_STYLE, +}; + + +class CalibrationCommonSavePage : public CalibrationWizardPage +{ +public: + CalibrationCommonSavePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + +protected: + wxBoxSizer* m_top_sizer; +}; + +class PAColumnDataPanel : wxPanel { +public: + PAColumnDataPanel( + wxWindow* parent, + bool is_failed, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + bool is_failed() { return m_is_failed; } + int get_col_idx() { return m_col_idx; } + wxString get_k_str(); + wxString get_n_str(); + wxString get_name(); + void set_data(wxString k_str, wxString n_str, wxString name); + +private: + wxBoxSizer* m_top_sizer; + TextInput* m_k_value_input; + TextInput* m_n_value_input; + ComboBox* m_comboBox_tray_name; + int m_col_idx; + bool m_is_failed; +}; + +class CaliSavePresetValuePanel : public wxPanel +{ +protected: + wxBoxSizer* m_top_sizer; + CaliPagePicture* m_picture_panel; + Label* m_value_title; + Label* m_save_name_title; + ::TextInput* m_input_value; + ::TextInput* m_input_name; + + +public: + CaliSavePresetValuePanel( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_panel(wxWindow* parent); + + void set_img(const std::string& bmp_name_in); + void set_value_title(const wxString& title); + void set_save_name_title(const wxString& title); + void get_value(double& value); + void get_save_name(std::string& name); + void set_save_name(const std::string& name); +}; + + +class CaliPASaveAutoPanel : public wxPanel +{ +public: + CaliPASaveAutoPanel( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_panel(wxWindow* parent); + + void set_machine_obj(MachineObject* obj) { m_obj = obj; } + + std::vector> default_naming(std::vector> preset_names); + void sync_cali_result(const std::vector& cali_result, const std::vector& history_result); + void save_to_result_from_widgets(wxWindow* window, bool* out_is_valid, wxString* out_msg); + bool get_result(std::vector& out_result); + bool is_all_failed() { return m_is_all_failed; } + +protected: + wxBoxSizer* m_top_sizer; + wxPanel* m_complete_text_panel; + wxPanel* m_part_failed_panel; + wxPanel* m_grid_panel{ nullptr }; + std::map m_calib_results;// map + std::vector m_history_results; + bool m_is_all_failed{ true }; + MachineObject* m_obj{ nullptr }; +}; + +class CaliPASaveManualPanel : public wxPanel +{ +public: + CaliPASaveManualPanel( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + void create_panel(wxWindow* parent); + void set_save_img(); + + void set_machine_obj(MachineObject* obj) { m_obj = obj; } + + void set_default_name(const wxString& name); + + bool get_result(PACalibResult& out_result); + + virtual bool Show(bool show = true) override; + +protected: + wxBoxSizer* m_top_sizer; + CaliPagePicture* m_picture_panel; + ::TextInput* m_save_name_input; + ::TextInput* m_k_val; + ::TextInput* m_n_val; + + MachineObject* m_obj{ nullptr }; +}; + +class CaliPASaveP1PPanel : public wxPanel +{ +public: + CaliPASaveP1PPanel( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + void create_panel(wxWindow* parent); + void set_save_img(); + + bool get_result(float* out_k, float* out_n); + +protected: + wxBoxSizer* m_top_sizer; + CaliPagePicture* m_picture_panel; + ::TextInput* m_k_val; + ::TextInput* m_n_val; +}; + +class CalibrationPASavePage : public CalibrationCommonSavePage +{ +public: + CalibrationPASavePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + void set_cali_method(CalibrationMethod method) override; + // sync widget value from obj cali result + void sync_cali_result(MachineObject* obj); + bool get_auto_result(std::vector& result) { return m_auto_panel->get_result(result); } + bool is_all_failed() { return m_auto_panel->is_all_failed(); } + bool get_manual_result(PACalibResult& result) { return m_manual_panel->get_result(result); } + bool get_p1p_result(float* k, float* n) { return m_p1p_panel->get_result(k, n); } + + void show_panels(CalibrationMethod method, const PrinterSeries printer_ser); + + void on_device_connected(MachineObject* obj); + + void update(MachineObject* obj) override; + + virtual bool Show(bool show = true) override; + +protected: + CaliPageStepGuide* m_step_panel { nullptr }; + CaliPASaveAutoPanel* m_auto_panel { nullptr }; + CaliPASaveManualPanel* m_manual_panel { nullptr }; + CaliPASaveP1PPanel* m_p1p_panel{ nullptr }; + PAPageHelpPanel* m_help_panel; + + CaliSaveStyle m_save_style; +}; + +class CalibrationFlowX1SavePage : public CalibrationCommonSavePage +{ +public: + CalibrationFlowX1SavePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + + // sync widget value from cali flow rate result + void sync_cali_result(const std::vector& cali_result); + void save_to_result_from_widgets(wxWindow* window, bool* out_is_valid, wxString* out_msg); + bool get_result(std::vector>& out_results); + bool is_all_failed() { return m_is_all_failed; } + + virtual bool Show(bool show = true) override; + +protected: + CaliPageStepGuide* m_step_panel{ nullptr }; + wxPanel* m_complete_text_panel; + wxPanel* m_part_failed_panel; + wxPanel* m_grid_panel{ nullptr }; + std::map> m_save_results; // map> + bool m_is_all_failed{ true }; +}; + +class CalibrationFlowCoarseSavePage : public CalibrationCommonSavePage +{ +public: + CalibrationFlowCoarseSavePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + void set_save_img(); + + void set_default_name(const wxString& name); + + bool is_skip_fine_calibration(); + + void set_curr_flow_ratio(float value); + + bool get_result(float* out_value, wxString* out_name); + + virtual bool Show(bool show = true) override; + +protected: + CaliPageStepGuide* m_step_panel{ nullptr }; + CaliPagePicture* m_picture_panel; + ComboBox* m_optimal_block_coarse; + TextInput* m_save_name_input; + + bool m_skip_fine_calibration = false; + float m_curr_flow_ratio; + float m_coarse_flow_ratio; +}; + +class CalibrationFlowFineSavePage : public CalibrationCommonSavePage +{ +public: + CalibrationFlowFineSavePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + void set_save_img(); + + void set_default_name(const wxString& name); + + void set_curr_flow_ratio(float value); + + bool get_result(float* out_value, wxString* out_name); + + virtual bool Show(bool show = true) override; + +protected: + CaliPageStepGuide* m_step_panel{ nullptr }; + CaliPagePicture* m_picture_panel; + ComboBox* m_optimal_block_fine; + TextInput* m_save_name_input; + + float m_curr_flow_ratio; + float m_fine_flow_ratio; +}; + +class CalibrationMaxVolumetricSpeedSavePage : public CalibrationCommonSavePage +{ +public: + CalibrationMaxVolumetricSpeedSavePage(wxWindow *parent, wxWindowID id = wxID_ANY, + const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow *parent); + void set_save_img(); + + bool get_save_result(double &value, std::string &name); + + void set_prest_name(const std::string &name) { m_save_preset_panel->set_save_name(name); }; + + virtual bool Show(bool show = true) override; + +protected: + CaliPageStepGuide *m_step_panel{nullptr}; + CaliSavePresetValuePanel *m_save_preset_panel; +}; + + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardStartPage.cpp b/src/slic3r/GUI/CalibrationWizardStartPage.cpp new file mode 100644 index 000000000..a15d59edf --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardStartPage.cpp @@ -0,0 +1,352 @@ +#include "CalibrationWizardStartPage.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" + +namespace Slic3r { namespace GUI { + +#define CALIBRATION_START_PAGE_TEXT_MAX_LENGTH FromDIP(1000) +CalibrationStartPage::CalibrationStartPage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + :CalibrationWizardPage(parent, id, pos, size, style) +{ + m_top_sizer = new wxBoxSizer(wxVERTICAL); +} + +void CalibrationStartPage::create_when(wxWindow* parent, wxString title, wxString content) +{ + m_when_title = new Label(this, title); + m_when_title->SetFont(Label::Head_14); + m_when_title->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + + m_when_content = new Label(this, content);; + m_when_content->SetFont(Label::Body_14); + m_when_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); +} + +void CalibrationStartPage::create_about(wxWindow* parent, wxString title, wxString content) +{ + m_about_title = new Label(this, title); + m_about_title->SetFont(Label::Head_14); + m_about_title->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + + m_about_content = new Label(this, content); + m_about_content->SetFont(Label::Body_14); + m_about_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); +} + +void CalibrationStartPage::create_bitmap(wxWindow* parent, const wxBitmap& before_img, const wxBitmap& after_img) +{ + m_images_sizer = new wxBoxSizer(wxHORIZONTAL); + m_before_bmp = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0); + m_before_bmp->SetBitmap(before_img); + m_images_sizer->Add(m_before_bmp, 0, wxALL, 0); + m_images_sizer->AddSpacer(FromDIP(20)); + m_after_bmp = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0); + m_after_bmp->SetBitmap(after_img); + m_images_sizer->Add(m_after_bmp, 0, wxALL, 0); +} + +void CalibrationStartPage::create_bitmap(wxWindow* parent, std::string before_img, std::string after_img) +{ + wxBitmap before_bmp = create_scaled_bitmap(before_img, nullptr, 350); + wxBitmap after_bmp = create_scaled_bitmap(after_img, nullptr, 350); + + create_bitmap(parent, before_bmp, after_bmp); +} + +void CalibrationStartPage::create_bitmap(wxWindow* parent, std::string img) { + wxBitmap before_bmp = create_scaled_bitmap(img, nullptr, 350); + m_images_sizer = new wxBoxSizer(wxHORIZONTAL); + m_bmp_intro = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0); + m_bmp_intro->SetBitmap(before_bmp); + m_images_sizer->Add(m_bmp_intro, 0, wxALL, 0); +} + +CalibrationPAStartPage::CalibrationPAStartPage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationStartPage(parent, id, pos, size, style) +{ + m_cali_mode = CalibMode::Calib_PA_Line; + m_page_type = CaliPageType::CALI_PAGE_START; + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationPAStartPage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, CalibMode::Calib_PA_Line); + m_page_caption->show_prev_btn(false); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + create_when(parent, + _L("When do you need Flow Dynamics Calibration"), + _L("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:\ +\n1. If you introduce a new filament of different brands/models or the filament is damp;\ +\n2. if the nozzle is worn out or replaced with a new one;\ +\n3. If the max volumetric speed or print temperature is changed in the filament setting.")); + + m_top_sizer->Add(m_when_title); + m_top_sizer->Add(m_when_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + create_bitmap(parent, "cali_page_before_pa_CN", "cali_page_after_pa_CN"); + } else { + create_bitmap(parent, "cali_page_before_pa", "cali_page_after_pa"); + } + m_top_sizer->Add(m_images_sizer, 0, wxALL, 0); + m_top_sizer->AddSpacer(PRESET_GAP); + + PAPageHelpPanel* m_help_panel = new PAPageHelpPanel(parent, false); + m_top_sizer->Add(m_help_panel, 0, wxALL, 0); + m_top_sizer->AddSpacer(PRESET_GAP); + + create_about(parent, + _L("About this calibration"), + _L("Please find the details of Flow Dynamics Calibration from our wiki.\ +\n\nUsually 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\nPlease 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\nThe 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.")); + m_top_sizer->Add(m_about_title); + m_top_sizer->Add(m_about_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + m_action_panel = new CaliPageActionPanel(parent, CalibMode::Calib_PA_Line, CaliPageType::CALI_PAGE_START); + + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); + +#ifdef __linux__ + wxGetApp().CallAfter([this]() { + m_when_content->SetMinSize(m_when_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() / 2 }); + m_about_content->SetMinSize(m_about_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() / 2 }); + Layout(); + Fit(); + }); +#endif +} + +void CalibrationPAStartPage::on_reset_page() +{ + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); +} + +void CalibrationPAStartPage::on_device_connected(MachineObject* obj) +{ + //enable all button + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, true); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, true); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + if (obj->cali_version <= -1) { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, true); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + } + else { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + } + } + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + if (!obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + } + else { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); + } + } + + //is support auto cali + bool is_support_pa_auto = (obj->home_flag >> 16 & 1) == 1; + if (!is_support_pa_auto) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + } +} + +CalibrationFlowRateStartPage::CalibrationFlowRateStartPage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationStartPage(parent, id, pos, size, style) +{ + m_cali_mode = CalibMode::Calib_Flow_Rate; + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationFlowRateStartPage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, CalibMode::Calib_Flow_Rate); + m_page_caption->show_prev_btn(false); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + create_when(parent, + _L("When to use Flow Rate Calibration"), + _L("After using Flow Dynamics Calibration, there might still be some extrusion issues, such as:\ +\n1. Over-Extrusion: Excess material on your printed object, forming blobs or zits, or the layers seem thicker than expected and not uniform.\ +\n2. Under-Extrusion: Very thin layers, weak infill strength, or gaps in the top layer of the model, even when printing slowly.\ +\n3. Poor Surface Quality: The surface of your prints seems rough or uneven.\ +\n4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as they should be.")); + + m_top_sizer->Add(m_when_title); + m_top_sizer->Add(m_when_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + create_bitmap(parent, "cali_page_flow_introduction_CN"); + } else { + create_bitmap(parent, "cali_page_flow_introduction"); + } + m_top_sizer->Add(m_images_sizer, 0, wxALL, 0); + m_top_sizer->AddSpacer(PRESET_GAP); + + auto extra_text = new Label(parent, _L("In addition, Flow Rate Calibration is crucial for foaming materials like LW-PLA used in RC planes. These materials expand greatly when heated, and calibration provides a useful reference flow rate.")); + extra_text->SetFont(Label::Body_14); + extra_text->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + m_top_sizer->Add(extra_text); + m_top_sizer->AddSpacer(PRESET_GAP); + + create_about(parent, + _L("About this calibration"), + _L("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.")); + + m_top_sizer->Add(m_about_title); + m_top_sizer->Add(m_about_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + auto auto_cali_title = new Label(parent, _L("Auto-Calibration")); + auto_cali_title->SetFont(Label::Head_14); + auto_cali_title->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + + auto auto_cali_content = new Label(this, + _L("Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, 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\nThe 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\nCaution: 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.")); + auto_cali_content->SetFont(Label::Body_14); + auto_cali_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + + m_top_sizer->Add(auto_cali_title); + m_top_sizer->Add(auto_cali_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + m_action_panel = new CaliPageActionPanel(parent, CalibMode::Calib_Flow_Rate, CaliPageType::CALI_PAGE_START); + + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); + +#ifdef __linux__ + wxGetApp().CallAfter([this, auto_cali_content]() { + m_when_content->SetMinSize(m_when_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() / 2 }); + auto_cali_content->SetMinSize(auto_cali_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() / 2 }); + Layout(); + Fit(); + }); +#endif +} + +void CalibrationFlowRateStartPage::on_reset_page() +{ + //disable all button + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); +} + +void CalibrationFlowRateStartPage::on_device_connected(MachineObject* obj) +{ + //enable all button + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, true); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + m_action_panel->enable_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + if (obj->cali_version <= -1) { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, true); + } + else { + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); + } + } + else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, true); + + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); + } + + //is support auto cali + bool is_support_flow_rate_auto = (obj->home_flag >> 15 & 1) == 1; + if (!is_support_flow_rate_auto) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); + } +} + +CalibrationMaxVolumetricSpeedStartPage::CalibrationMaxVolumetricSpeedStartPage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : CalibrationStartPage(parent, id, pos, size, style) +{ + m_cali_mode = CalibMode::Calib_Vol_speed_Tower; + + create_page(this); + + this->SetSizer(m_top_sizer); + m_top_sizer->Fit(this); +} + +void CalibrationMaxVolumetricSpeedStartPage::create_page(wxWindow* parent) +{ + m_page_caption = new CaliPageCaption(parent, m_cali_mode); + m_page_caption->show_prev_btn(false); + m_top_sizer->Add(m_page_caption, 0, wxEXPAND, 0); + create_when(parent, _L("When you need Max Volumetric Speed Calibration"), _L("Over-extrusion or under extrusion")); + + m_top_sizer->Add(m_when_title); + m_top_sizer->Add(m_when_content); + m_top_sizer->AddSpacer(PRESET_GAP); + + auto recommend_title = new Label(parent, _L("Max Volumetric Speed calibration is recommended when you print with:")); + recommend_title->SetFont(Label::Head_14); + recommend_title->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + m_top_sizer->Add(recommend_title); + auto recommend_text1 = new Label(parent, _L("material with significant thermal shrinkage/expansion, such as...")); + recommend_text1->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + recommend_text1->SetFont(Label::Body_14); + m_top_sizer->Add(recommend_text1); + auto recommend_text2 = new Label(parent, _L("materials with inaccurate filament diameter")); + recommend_text2->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + recommend_text2->SetFont(Label::Body_14); + m_top_sizer->Add(recommend_text2); + + m_top_sizer->AddSpacer(PRESET_GAP); + + if (wxGetApp().app_config->get_language_code() == "zh-cn") { + create_bitmap(parent, "cali_page_before_pa_CN", "cali_page_after_pa_CN"); + } else { + create_bitmap(parent, "cali_page_before_pa", "cali_page_after_pa"); + } + + m_top_sizer->Add(m_images_sizer, 0, wxALL, 0); + + m_top_sizer->AddSpacer(PRESET_GAP); + + m_action_panel = new CaliPageActionPanel(parent, m_cali_mode, CaliPageType::CALI_PAGE_START); + + m_top_sizer->Add(m_action_panel, 0, wxEXPAND, 0); +} + +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardStartPage.hpp b/src/slic3r/GUI/CalibrationWizardStartPage.hpp new file mode 100644 index 000000000..41bead831 --- /dev/null +++ b/src/slic3r/GUI/CalibrationWizardStartPage.hpp @@ -0,0 +1,82 @@ +#ifndef slic3r_GUI_CalibrationWizardStartPage_hpp_ +#define slic3r_GUI_CalibrationWizardStartPage_hpp_ + +#include "CalibrationWizardPage.hpp" + +namespace Slic3r { namespace GUI { + + + +class CalibrationStartPage : public CalibrationWizardPage +{ +public: + CalibrationStartPage(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + +protected: + CalibMode m_cali_mode; + + wxBoxSizer* m_top_sizer; + wxBoxSizer* m_images_sizer; + Label* m_when_title; + Label* m_when_content; + Label* m_about_title; + Label* m_about_content; + wxStaticBitmap* m_before_bmp{ nullptr }; + wxStaticBitmap* m_after_bmp{ nullptr }; + wxStaticBitmap* m_bmp_intro{ nullptr }; + + void create_when(wxWindow* parent, wxString title, wxString content); + void create_about(wxWindow* parent, wxString title, wxString content); + void create_bitmap(wxWindow* parent, const wxBitmap& before_img, const wxBitmap& after_img); + void create_bitmap(wxWindow* parent, std::string before_img, std::string after_img); + void create_bitmap(wxWindow* parent, std::string img); +}; + +class CalibrationPAStartPage : public CalibrationStartPage +{ +public: + CalibrationPAStartPage(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + + void on_reset_page(); + void on_device_connected(MachineObject* obj); +}; + +class CalibrationFlowRateStartPage : public CalibrationStartPage +{ +public: + CalibrationFlowRateStartPage(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); + void on_reset_page(); + void on_device_connected(MachineObject* obj); +}; + +class CalibrationMaxVolumetricSpeedStartPage : public CalibrationStartPage +{ +public: + CalibrationMaxVolumetricSpeedStartPage(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL); + + void create_page(wxWindow* parent); +}; + +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index e96bbda03..0e7b438b0 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -55,6 +55,7 @@ void Camera::select_next_type() void Camera::translate(const Vec3d& displacement) { if (!displacement.isApprox(Vec3d::Zero())) { m_view_matrix.translate(-displacement); + update_target(); } } @@ -62,6 +63,7 @@ void Camera::set_target(const Vec3d& target) { //BBS do not check validation //const Vec3d new_target = validate_target(target); + update_target(); const Vec3d new_target = target; const Vec3d new_displacement = new_target - m_target; if (!new_displacement.isApprox(Vec3d::Zero())) { @@ -84,7 +86,7 @@ void Camera::set_zoom(double zoom) void Camera::select_view(const std::string& direction) { if (direction == "iso") - set_default_orientation(); + set_iso_orientation(); else if (direction == "left") look_at(m_target - m_distance * Vec3d::UnitX(), m_target, Vec3d::UnitZ()); else if (direction == "right") @@ -505,6 +507,8 @@ void Camera::set_distance(double distance) if (m_distance != distance) { m_view_matrix.translate((distance - m_distance) * get_dir_forward()); m_distance = distance; + + update_target(); } } @@ -570,6 +574,19 @@ void Camera::set_default_orientation() m_view_matrix.fromPositionOrientationScale(m_view_rotation * (-camera_pos), m_view_rotation, Vec3d::Ones()); } +void Camera::set_iso_orientation() +{ + m_zenit = 45.0f; + const double theta_rad = Geometry::deg2rad(-(double)m_zenit); + const double phi_rad = Geometry::deg2rad(45.0); + const double sin_theta = ::sin(theta_rad); + const Vec3d camera_pos = m_target + m_distance * Vec3d(sin_theta * ::sin(phi_rad), sin_theta * ::cos(phi_rad), ::cos(theta_rad)); + m_view_rotation = Eigen::AngleAxisd(theta_rad, Vec3d::UnitX()) * Eigen::AngleAxisd(phi_rad, Vec3d::UnitZ()); + m_view_rotation.normalize(); + m_view_matrix.fromPositionOrientationScale(m_view_rotation * (-camera_pos), m_view_rotation, Vec3d::Ones()); +} + + Vec3d Camera::validate_target(const Vec3d& target) const { BoundingBoxf3 test_box = m_scene_box; @@ -587,7 +604,13 @@ Vec3d Camera::validate_target(const Vec3d& target) const void Camera::update_zenit() { - m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); + m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); } + +void Camera::update_target() { + Vec3d temptarget = get_position() + m_distance * get_dir_forward(); + if (!(temptarget-m_target).isApprox(Vec3d::Zero())){ + m_target = temptarget; + } } } // GUI diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index 3bc1385e8..2a84b4156 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -69,10 +69,12 @@ public: void enable_update_config_on_type_change(bool enable) { m_update_config_on_type_change_enabled = enable; } void translate(const Vec3d& displacement); - const Vec3d& get_target() const { return m_target; } + const Vec3d& get_target() { + update_target(); + return m_target; } void set_target(const Vec3d& target); - double get_distance() const { return (get_position() - m_target).norm(); } + double get_distance() { return (get_position() - get_target()).norm(); } double get_gui_scale() const { return m_gui_scale; } float get_zenit() const { return m_zenit; } @@ -161,8 +163,10 @@ private: void set_distance(double distance); void set_default_orientation(); + void set_iso_orientation(); Vec3d validate_target(const Vec3d& target) const; void update_zenit(); + void update_target(); }; } // GUI diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index fbf0450a9..b21c37878 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -28,9 +28,8 @@ wxDEFINE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent); const wxColour TEXT_COL = wxColour(43, 52, 54); -CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) - : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), - m_obj(obj) +CameraPopup::CameraPopup(wxWindow *parent) + : PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) { #ifdef __WINDOWS__ SetDoubleBuffered(true); @@ -52,8 +51,6 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) m_text_recording->SetFont(Label::Head_14); m_text_recording->SetForegroundColour(TEXT_COL); m_switch_recording = new SwitchButton(m_panel); - if (obj) - m_switch_recording->SetValue(obj->camera_recording_when_printing); //vcamera m_text_vcamera = new wxStaticText(m_panel, wxID_ANY, _L("Go Live")); @@ -80,8 +77,6 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) top_sizer->Add(m_resolution_options[i], 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); top_sizer->Add(0, 0, wxALL, 0); } - if (obj) - sync_resolution_setting(obj->camera_resolution); main_sizer->Add(top_sizer, 0, wxALL, FromDIP(10)); @@ -127,7 +122,6 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj) m_interval_timer = new wxTimer(); m_interval_timer->SetOwner(this); - check_func_supported(); wxGetApp().UpdateDarkUIWin(this); } @@ -260,8 +254,11 @@ void CameraPopup::sync_vcamera_state(bool show_vcamera) rescale(); } -void CameraPopup::check_func_supported() +void CameraPopup::check_func_supported(MachineObject *obj2) { + m_obj = obj2; + if (m_obj == nullptr) + return; // function supported if (m_obj->is_function_supported(PrinterFunction::FUNC_RECORDING) && m_obj->has_ipcam) { m_text_recording->Show(); @@ -300,12 +297,21 @@ void CameraPopup::check_func_supported() auto curr_res = to_resolution_msg_string(CameraResolution(i)); std::vector ::iterator it = std::find(resolution_supported.begin(), resolution_supported.end(), curr_res); if ((it == resolution_supported.end())||(support_count <= 1) || !obj->is_support_1080dpi) - m_resolution_options[i] -> Hide(); + m_resolution_options[i]->Hide(); + else { + m_resolution_options[i]->Show(); + if (m_obj->camera_resolution == curr_res) { + resolution_rbtns[i]->SetValue(true); + } + } } //hide resolution if there is only one choice if (support_count <= 1 || !obj->is_support_1080dpi) { m_text_resolution->Hide(); } + else { + m_text_resolution->Show(); + } } void CameraPopup::update(bool vcamera_streaming) diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index bab08850c..a9b53a621 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -24,7 +24,7 @@ wxDECLARE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent); class CameraPopup : public PopupWindow { public: - CameraPopup(wxWindow *parent, MachineObject* obj = nullptr); + CameraPopup(wxWindow *parent); virtual ~CameraPopup() {} // PopupWindow virtual methods are all overridden to log them @@ -34,7 +34,7 @@ public: virtual bool Show(bool show = true) wxOVERRIDE; void sync_vcamera_state(bool show_vcamera); - void check_func_supported(); + void check_func_supported(MachineObject* obj); void update(bool vcamera_streaming); enum CameraResolution diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 649fd3045..06e810d5a 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -173,11 +173,10 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con return; // layer_height shouldn't be equal to zero - auto gpreset = GUI::wxGetApp().preset_bundle->printers.get_edited_preset(); if (config->opt_float("layer_height") < EPSILON) { const wxString msg_text = _(L("Too small layer height.\nReset to 0.2")); - MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); + MessageDialog dialog(m_msg_dlg_parent, msg_text,"", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; dialog.ShowModal(); @@ -187,15 +186,14 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } //BBS: limite the max layer_herght - auto max_lh = gpreset.config.opt_float("max_layer_height",0); - if (max_lh > 0.2 && config->opt_float("layer_height") > max_lh+ EPSILON) + if (config->opt_float("layer_height") > 0.6 + EPSILON) { - const wxString msg_text = wxString::Format(L"Too large layer height.\nReset to %0.3f", max_lh); + const wxString msg_text = _(L("Too large layer height.\nReset to 0.2")); MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; dialog.ShowModal(); - new_conf.set_key_value("layer_height", new ConfigOptionFloat(max_lh)); + new_conf.set_key_value("layer_height", new ConfigOptionFloat(0.2)); apply(config, &new_conf); is_msg_dlg_already_exist = false; } @@ -321,6 +319,37 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con is_msg_dlg_already_exist = false; } + //BBS + //if (config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne && + // config->opt_bool("enable_overhang_speed")) + //{ + // wxString msg_text = _(L("Arachne engine only works when overhang slowing down is disabled.\n" + // "This may cause decline in the quality of overhang surface when print fastly")) + "\n"; + // if (is_global_config) + // msg_text += "\n" + _(L("Disable overhang slowing down automatically? \n" + // "Yes - Enable arachne and disable overhang slowing down\n" + // "No - Give up using arachne this time")); + // MessageDialog dialog(m_msg_dlg_parent, msg_text, "", + // wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK)); + // DynamicPrintConfig new_conf = *config; + // is_msg_dlg_already_exist = true; + // auto answer = dialog.ShowModal(); + // bool enable_overhang_slow_down = true; + // if (!is_global_config || answer == wxID_YES) { + // new_conf.set_key_value("enable_overhang_speed", new ConfigOptionBool(false)); + // enable_overhang_slow_down = false; + // } + // else { + // new_conf.set_key_value("wall_generator", new ConfigOptionEnum(PerimeterGeneratorType::Classic)); + // } + // apply(config, &new_conf); + // if (cb_value_change) { + // if (!enable_overhang_slow_down) + // cb_value_change("enable_overhang_speed", false); + // } + // is_msg_dlg_already_exist = false; + //} + // BBS int filament_cnt = wxGetApp().preset_bundle->filament_presets.size(); #if 0 @@ -479,8 +508,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con void ConfigManipulation::apply_null_fff_config(DynamicPrintConfig *config, std::vector const &keys, std::map const &configs) { for (auto &k : keys) { - if (/*k == "adaptive_layer_height" || */ k == "independent_support_layer_height" || k == "enable_support" || - k == "detect_thin_wall" || k == "tree_support_adaptive_layer_height") + if (/*k == "adaptive_layer_height" || */k == "independent_support_layer_height" || k == "enable_support" || k == "detect_thin_wall") config->set_key_value(k, new ConfigOptionBool(true)); else if (k == "wall_loops") config->set_key_value(k, new ConfigOptionInt(0)); @@ -503,25 +531,20 @@ void ConfigManipulation::apply_null_fff_config(DynamicPrintConfig *config, std:: void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, const bool is_global_config) { - PresetBundle *preset_bundle = wxGetApp().preset_bundle; - //SoftFever - auto gcflavor = preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor")->value; - bool have_perimeters = config->opt_int("wall_loops") > 0; for (auto el : { "ensure_vertical_shell_thickness", "detect_thin_wall", "detect_overhang_wall", - "seam_position", "staggered_inner_seams", "wall_infill_order", "outer_wall_line_width", - "inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "small_perimeter_threshold" }) + "seam_position","seam_gap","wipe_speed", "wall_infill_order", "outer_wall_line_width", + "inner_wall_speed", "outer_wall_speed" }) toggle_field(el, have_perimeters); bool have_infill = config->option("sparse_infill_density")->value > 0; // sparse_infill_filament uses the same logic as in Print::extruders() - for (auto el : { "sparse_infill_pattern", "infill_combination", - "minimum_sparse_infill_area", "sparse_infill_filament", "infill_anchor_max"}) + for (auto el : { "sparse_infill_pattern", "sparse_infill_anchor_max", "infill_combination", + "minimum_sparse_infill_area", "sparse_infill_filament"}) toggle_line(el, have_infill); - // Only allow configuration of open anchors if the anchoring is enabled. - bool has_infill_anchors = have_infill && config->option("infill_anchor_max")->value > 0; - toggle_field("infill_anchor", has_infill_anchors); + bool has_infill_anchors = have_infill && config->option("sparse_infill_anchor_max")->value > 0; + toggle_line("sparse_infill_anchor", has_infill_anchors); bool has_spiral_vase = config->opt_bool("spiral_mode"); bool has_top_solid_infill = config->opt_int("top_shell_layers") > 0; @@ -531,8 +554,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co for (auto el : { "top_surface_pattern", "bottom_surface_pattern", "internal_solid_infill_pattern", "solid_infill_filament"}) toggle_field(el, has_solid_infill); - for (auto el : { "infill_direction", "sparse_infill_line_width", - "sparse_infill_speed", "bridge_speed", "internal_bridge_speed", "bridge_angle" }) + for (auto el : { "infill_direction", "sparse_infill_line_width", "bridge_angle", + "sparse_infill_speed", "bridge_speed" }) toggle_field(el, have_infill || has_solid_infill); toggle_field("top_shell_thickness", ! has_spiral_vase && has_top_solid_infill); @@ -546,14 +569,19 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool have_default_acceleration = config->opt_float("default_acceleration") > 0; //BBS - for (auto el : {"outer_wall_acceleration", "inner_wall_acceleration", "initial_layer_acceleration", - "top_surface_acceleration", "travel_acceleration", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration"}) + for (auto el : { "initial_layer_acceleration", "outer_wall_acceleration", "top_surface_acceleration", "inner_wall_acceleration", "sparse_infill_acceleration" }) toggle_field(el, have_default_acceleration); + if (is_BBL_Printer) { + for (auto el : {"default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk", "travel_jerk"}) + toggle_line(el, false); + } else { + for (auto el : {"default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk", "travel_jerk"}) + toggle_line(el, true); - bool have_default_jerk = config->opt_float("default_jerk") > 0; - - for (auto el : { "outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk", "top_surface_jerk","travel_jerk", "infill_jerk"}) - toggle_field(el, have_default_jerk); + bool quality_default_jerk = config->opt_float("default_jerk") > 0; + for (auto el : {"outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk", "travel_jerk"}) + toggle_field(el, quality_default_jerk); + } bool have_skirt = config->opt_int("skirt_loops") > 0; toggle_field("skirt_height", have_skirt && config->opt_enum("draft_shield") != dsEnabled); @@ -567,15 +595,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co // wall_filament uses the same logic as in Print::extruders() toggle_field("wall_filament", have_perimeters || have_brim); - bool have_brim_ear = (config->opt_enum("brim_type") == btEar); - const auto brim_width = config->opt_float("brim_width"); - // disable brim_ears_max_angle and brim_ears_detection_length if brim_width is 0 - toggle_field("brim_ears_max_angle", brim_width > 0.0f); - toggle_field("brim_ears_detection_length", brim_width > 0.0f); - // hide brim_ears_max_angle and brim_ears_detection_length if brim_ear is not selected - toggle_line("brim_ears_max_angle", have_brim_ear); - toggle_line("brim_ears_detection_length", have_brim_ear); - bool have_raft = config->opt_int("raft_layers") > 0; bool have_support_material = config->opt_bool("enable_support") || have_raft; // BBS @@ -588,23 +607,22 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "support_interface_pattern", "support_interface_top_layers", "support_interface_bottom_layers", "bridge_no_support", "max_bridge_length", "support_top_z_distance", "support_bottom_z_distance", //BBS: add more support params to dependent of enable_support - "support_type", "support_on_build_plate_only", "support_critical_regions_only", + "support_type", "support_on_build_plate_only", + "support_remove_small_overhang", "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_closing_radius", have_support_material && support_style == smsSnug); bool support_is_tree = config->opt_bool("enable_support") && is_tree(support_type); - for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", - "tree_support_branch_diameter", "tree_support_adaptive_layer_height", "tree_support_auto_brim", "tree_support_brim_width"}) + for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter","tree_support_brim_width"}) toggle_field(el, support_is_tree); // hide tree support settings when normal is selected - for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", - "tree_support_branch_diameter", "max_bridge_length", "tree_support_adaptive_layer_height", "tree_support_auto_brim", "tree_support_brim_width"}) + for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter", "max_bridge_length","tree_support_brim_width" }) toggle_line(el, support_is_tree); + toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_tree); - toggle_field("tree_support_brim_width", support_is_tree && !config->opt_bool("tree_support_auto_brim")); // tree support use max_bridge_length instead of bridge_no_support toggle_line("bridge_no_support", !support_is_tree); @@ -629,7 +647,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line(el, have_raft); bool has_ironing = (config->opt_enum("ironing_type") != IroningType::NoIroning); - for (auto el : { "ironing_flow", "ironing_spacing", "ironing_speed" }) + for (auto el : {"ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_speed"}) toggle_line(el, has_ironing); // bool have_sequential_printing = (config->opt_enum("print_sequence") == PrintSequence::ByObject); @@ -646,16 +664,11 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"}) toggle_field(el, have_prime_tower); - // BBS: MusangKing - Hide "Independent support layer height" option - toggle_line("independent_support_layer_height", have_support_material && !have_prime_tower); - bool have_avoid_crossing_perimeters = config->opt_bool("reduce_crossing_wall"); toggle_line("max_travel_detour_distance", have_avoid_crossing_perimeters); bool has_overhang_speed = config->opt_bool("enable_overhang_speed"); - for (auto el : - {"overhang_speed_classic", "overhang_1_4_speed", - "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"}) + for (auto el : { "overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"}) toggle_line(el, has_overhang_speed); toggle_line("flush_into_objects", !is_global_config); @@ -669,24 +682,22 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "min_feature_size", "min_bead_width", "wall_distribution_count" }) toggle_line(el, have_arachne); toggle_field("detect_thin_wall", !have_arachne); - - // Orca - auto is_role_based_wipe_speed = config->opt_bool("role_based_wipe_speed"); - toggle_field("wipe_speed",!is_role_based_wipe_speed); - - for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"}) - toggle_line(el, gcflavor == gcfKlipper); - if(gcflavor == gcfKlipper) + + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + // OrcaSlicer + auto gcflavor = preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor")->value; + if( gcflavor != gcfKlipper ) + { + for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"}) + toggle_line(el, false); + } + else { + for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"}) + toggle_line(el, true); + toggle_field("accel_to_decel_factor", config->opt_bool("accel_to_decel_enable")); - - bool have_make_overhang_printable = config->opt_bool("make_overhang_printable"); - toggle_line("make_overhang_printable_angle", have_make_overhang_printable); - toggle_line("make_overhang_printable_hole_size", have_make_overhang_printable); - + } toggle_line("exclude_object", gcflavor == gcfKlipper); - - toggle_line("min_width_top_surface",config->opt_bool("only_one_wall_top")); - } void ConfigManipulation::update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config/* = false*/) diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index 1f6b566c4..db4389d94 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -23,6 +23,7 @@ class ConfigManipulation bool is_msg_dlg_already_exist{ false }; bool m_is_initialized_support_material_overhangs_queried{ false }; bool m_support_material_overhangs_queried{ false }; + bool is_BBL_Printer{false}; // function to loading of changed configuration std::function load_config = nullptr; @@ -77,7 +78,7 @@ public: void check_nozzle_temperature_initial_layer_range(DynamicPrintConfig* config); void check_bed_temperature_difference(int bed_type, DynamicPrintConfig* config); void check_filament_max_volumetric_speed(DynamicPrintConfig *config); - + void set_is_BBL_Printer(bool is_bbl_printer) { is_BBL_Printer = is_bbl_printer; }; // SLA print void update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config = false); void toggle_print_sla_options(DynamicPrintConfig* config); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 167d8273e..572fb829f 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -2735,6 +2735,16 @@ ConfigWizard::ConfigWizard(wxWindow *parent) p->init_dialog_size(); }); + p->btn_prev->Bind(wxEVT_BUTTON, [this](const wxCommandEvent&) + { + ConfigWizardPage* active_page = this->p->index->active_page(); + if ((active_page == p->page_filaments || active_page == p->page_sla_materials) && + !p->check_and_install_missing_materials(dynamic_cast(active_page)->materials->technology)) + // In that case don't leave the page and the function above queried the user whether to install default materials. + return; + this->p->index->go_prev(); + }); + p->btn_next->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &) { ConfigWizardPage* active_page = this->p->index->active_page(); diff --git a/src/slic3r/GUI/ConnectPrinter.cpp b/src/slic3r/GUI/ConnectPrinter.cpp index 0ceeb5d44..93ea0c34b 100644 --- a/src/slic3r/GUI/ConnectPrinter.cpp +++ b/src/slic3r/GUI/ConnectPrinter.cpp @@ -149,7 +149,9 @@ void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event) } if (m_obj) { m_obj->set_user_access_code(code.ToStdString()); - wxGetApp().getDeviceManager()->set_selected_machine(m_obj->dev_id); + if (m_need_connect) { + wxGetApp().getDeviceManager()->set_selected_machine(m_obj->dev_id); + } } EndModal(wxID_OK); } diff --git a/src/slic3r/GUI/ConnectPrinter.hpp b/src/slic3r/GUI/ConnectPrinter.hpp index 54f502141..d73a3ba63 100644 --- a/src/slic3r/GUI/ConnectPrinter.hpp +++ b/src/slic3r/GUI/ConnectPrinter.hpp @@ -25,6 +25,7 @@ class ConnectPrinterDialog : public DPIDialog { private: protected: + bool m_need_connect{true}; wxStaticText * m_staticText_connection_code; TextInput * m_textCtrl_code; Button * m_button_confirm; @@ -45,6 +46,7 @@ public: ~ConnectPrinterDialog(); + void go_connect_printer(bool need) {m_need_connect = need;}; void end_modal(wxStandardID id); void init_bitmap(); void set_machine_object(MachineObject* obj); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index c3ae18ae5..c0a3fb500 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -17,6 +17,7 @@ #include #include +#define CALI_DEBUG namespace pt = boost::property_tree; @@ -102,6 +103,24 @@ wxString get_stage_string(int stage) return ""; } +std::string to_string_nozzle_diameter(float nozzle_diameter) +{ + float eps = 1e-3; + if (abs(nozzle_diameter - 0.2) < eps) { + return "0.2"; + } + else if (abs(nozzle_diameter - 0.4) < eps) { + return "0.4"; + } + else if (abs(nozzle_diameter - 0.6) < eps) { + return "0.6"; + } + else if (abs(nozzle_diameter - 0.8) < eps) { + return "0.8"; + } + return "0"; +} + namespace Slic3r { /* Common Functions */ @@ -337,14 +356,6 @@ std::string MachineObject::get_ftp_folder() return DeviceManager::get_ftp_folder(printer_type); } -void MachineObject::set_access_code(std::string code) -{ - this->access_code = code; - AppConfig *config = GUI::wxGetApp().app_config; - if (config && !code.empty()) { - GUI::wxGetApp().app_config->set_str("access_code", dev_id, code); - } -} std::string MachineObject::get_access_code() { @@ -353,12 +364,35 @@ std::string MachineObject::get_access_code() return get_user_access_code(); } -void MachineObject::set_user_access_code(std::string code) +void MachineObject::set_access_code(std::string code, bool only_refresh) { - this->user_access_code = code; + this->access_code = code; + if (only_refresh) { + AppConfig* config = GUI::wxGetApp().app_config; + if (config && !code.empty()) { + GUI::wxGetApp().app_config->set_str("access_code", dev_id, code); + } + } +} + +void MachineObject::erase_user_access_code() +{ + this->user_access_code = ""; AppConfig* config = GUI::wxGetApp().app_config; if (config) { - GUI::wxGetApp().app_config->set_str("user_access_code", dev_id, code); + GUI::wxGetApp().app_config->erase("user_access_code", dev_id); + GUI::wxGetApp().app_config->save(); + } +} + +void MachineObject::set_user_access_code(std::string code, bool only_refresh) +{ + this->user_access_code = code; + if (only_refresh && !code.empty()) { + AppConfig* config = GUI::wxGetApp().app_config; + if (config) { + GUI::wxGetApp().app_config->set_str("user_access_code", dev_id, code); + } } } @@ -379,11 +413,27 @@ bool MachineObject::is_lan_mode_printer() return result; } +bool MachineObject::is_high_printer_type() +{ + return get_printer_series() == PrinterSeries::SERIES_X1; +} + +PrinterSeries MachineObject::get_printer_series() const +{ + if (printer_type == "BL-P001" || printer_type == "BL-P002") + return PrinterSeries::SERIES_X1; + else if (printer_type == "C11" || printer_type == "C12") + return PrinterSeries::SERIES_P1P; + else + return PrinterSeries::SERIES_P1P; +} + MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string id, std::string ip) :dev_name(name), dev_id(id), dev_ip(ip), subtask_(nullptr), + model_task(nullptr), slice_info(nullptr), m_is_online(false), vt_tray(std::to_string(VIRTUAL_TRAY_ID)) @@ -449,6 +499,11 @@ MachineObject::~MachineObject() subtask_ = nullptr; } + if (model_task) { + delete model_task; + model_task = nullptr; + } + if (get_slice_info_thread) { if (get_slice_info_thread->joinable()) { get_slice_info_thread->join(); @@ -638,7 +693,7 @@ bool MachineObject::is_U0_firmware() bool MachineObject::is_support_ams_mapping() { - if (printer_type == "BL-P001" || printer_type == "BL-P002") { + if (get_printer_series() == PrinterSeries::SERIES_X1) { AppConfig* config = Slic3r::GUI::wxGetApp().app_config; if (config) { if (config->get("check_ams_version") == "0") @@ -697,68 +752,6 @@ static float calc_color_distance(wxColour c1, wxColour c2) return DeltaE76(lab[0][0], lab[0][1], lab[0][2], lab[1][0], lab[1][1], lab[1][2]); } -/* use common colors to calc a threshold */ -static float calc_threshold() -{ - //common colors from https://www.ebaomonthly.com/window/photo/lesson/colorList.htm - - const int common_color_num = 32; - wxColour colors[common_color_num] = { - wxColour(255, 0, 0), - wxColour(255, 36, 0), - wxColour(255, 77, 0), - wxColour(255, 165, 0), - wxColour(255, 191, 0), - wxColour(255, 215, 0), - wxColour(255, 255, 0), - wxColour(204, 255, 0), - wxColour(102, 255, 0), - wxColour(0, 255, 0), - - wxColour(0, 255, 255), - wxColour(0, 127, 255), - wxColour(0, 0, 255), - wxColour(127, 255, 212), - wxColour(224, 255, 255), - wxColour(240, 248, 245), - wxColour(48, 213, 200), - wxColour(100, 149, 237), - wxColour(0, 51, 153), - wxColour(65, 105, 225), - - wxColour(0, 51, 102), - wxColour(42, 82, 190), - wxColour(0, 71, 171), - wxColour(30, 144, 255), - wxColour(0, 47, 167), - wxColour(0, 0, 128), - wxColour(94, 134, 193), - wxColour(204, 204, 255), - wxColour(8, 37, 103), - wxColour(139, 0, 255), - - wxColour(227, 38, 54), - wxColour(255, 0, 255) - }; - - float min_val = INT_MAX; - int a = -1; - int b = -1; - for (int i = 0; i < common_color_num; i++) { - for (int j = i+1; j < common_color_num; j++) { - float distance = calc_color_distance(colors[i], colors[j]); - if (min_val > distance) { - min_val = distance; - a = i; - b = j; - } - } - } - BOOST_LOG_TRIVIAL(trace) << "min_distance = " << min_val << ", a = " << a << ", b = " << b; - - return min_val; -} - int MachineObject::ams_filament_mapping(std::vector filaments, std::vector& result, std::vector exclude_id) { if (filaments.empty()) @@ -863,11 +856,14 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std DisValue val; val.tray_id = tray->second.id; wxColour c = wxColour(filaments[i].color); - val.distance = calc_color_distance(c, AmsTray::decode_color(tray->second.color)); + wxColour tray_c = AmsTray::decode_color(tray->second.color); + val.distance = calc_color_distance(c, tray_c); if (filaments[i].type != tray->second.type) { val.distance = 999999; val.is_type_match = false; } else { + if (c.Alpha() != tray_c.Alpha()) + val.distance = 999999; val.is_type_match = true; } ::sprintf(buffer, " %6.0f", val.distance); @@ -1097,6 +1093,17 @@ std::string MachineObject::get_firmware_type_str() return "engineer"; } +std::string MachineObject::get_lifecycle_type_str() +{ + if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) + return "engineer"; + else if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) + return "product"; + + // return engineer by default; + return "engineer"; +} + bool MachineObject::is_in_upgrading() { return upgrade_display_state == (int)UpgradingInProgress; @@ -1189,6 +1196,14 @@ bool MachineObject::is_system_printing() return false; } +bool MachineObject::check_pa_result_validation(PACalibResult& result) +{ + if (result.k_value < 0 || result.k_value > 10) + return false; + + return true; +} + bool MachineObject::is_axis_at_home(std::string axis) { if (home_flag < 0) @@ -1251,6 +1266,8 @@ bool MachineObject::is_in_calibration() return false; } + + bool MachineObject::is_calibration_done() { return calibration_done; @@ -1307,7 +1324,7 @@ PrintingSpeedLevel MachineObject::_parse_printing_speed_lvl(int lvl) int MachineObject::get_bed_temperature_limit() { - if (printer_type == "BL-P001" || printer_type == "BL-P002") { + if (get_printer_series() == PrinterSeries::SERIES_X1) { if (is_220V_voltage) return 110; else { @@ -1361,8 +1378,8 @@ void MachineObject::parse_version_func() { auto ota_version = module_vers.find("ota"); auto esp32_version = module_vers.find("esp32"); - if (printer_type == "BL-P001" || - printer_type == "BL-P002") { + auto rv1126_version = module_vers.find("rv1126"); + if (get_printer_series() == PrinterSeries::SERIES_X1) { if (ota_version != module_vers.end()) { if (ota_version->second.sw_ver.compare("01.01.01.00") <= 0) { ams_support_remain = false; @@ -1383,25 +1400,75 @@ void MachineObject::parse_version_func() is_support_ai_monitoring = true; is_support_ams_humidity = true; } - if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) - local_use_ssl = false; - else { - local_use_ssl = ota_version->second.sw_ver.compare("01.03.01.04") >= 0; + + if (ota_version != module_vers.end()) { + if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) { + local_use_ssl_for_mqtt = ota_version->second.sw_ver.compare("01.03.01.04") >= 0; + } + + if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.05.06.05") >= 0; + } + else if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("00.03.10.05") >= 0; + } + else { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.05.06.05") >= 0; + } + + is_support_remote_tunnel = true; + is_support_tunnel_mqtt = (ota_version->second.sw_ver.compare("01.05.06.06") >= 0 + || (rv1126_version != module_vers.end() && rv1126_version->second.sw_ver.compare("00.00.21.20") >= 0)); } + local_camera_proto = local_rtsp_url.empty() ? -1 : local_rtsp_url == "disable" ? 0 + : boost::algorithm::starts_with(local_rtsp_url, "rtsps") ? 2 : 3; + file_proto = 2; } - } else if (printer_type == "C11" || printer_type == "C12") { - if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) - local_use_ssl = false; - else { - local_use_ssl = true; - } + } else if (printer_type == "C11") { is_cloud_print_only = true; if (ota_version != module_vers.end()) { is_support_send_to_sdcard = ota_version->second.sw_ver.compare("01.02.00.00") >= 0; + is_support_ai_monitoring = ota_version->second.sw_ver.compare("01.02.99.00") >= 0; + is_support_remote_tunnel = ota_version->second.sw_ver.compare("01.02.99.00") >= 0; + is_support_tunnel_mqtt = (ota_version->second.sw_ver.compare("01.03.50.01") >= 0 || + (esp32_version != module_vers.end() && esp32_version->second.sw_ver.compare("01.05.15.00") >= 0)); } + local_camera_proto = 1; + if (esp32_version != module_vers.end()) { ams_support_auto_switch_filament_flag = esp32_version->second.sw_ver.compare("00.03.11.50") >= 0; } + + if (ota_version != module_vers.end()) { + if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.03.50.01") >= 0; + } + else if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("00.06.03.51") >= 0; + } + else { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.03.50.01") >= 0; + } + } + } else if (printer_type == "C12") { + is_support_ai_monitoring = true; + is_cloud_print_only = true; + local_camera_proto = 1; + + if (ota_version != module_vers.end()) { + is_support_tunnel_mqtt = (ota_version->second.sw_ver.compare("01.03.50.01") >= 0 || + (esp32_version != module_vers.end() && esp32_version->second.sw_ver.compare("01.05.15.00") >= 0)); + is_support_remote_tunnel = ota_version->second.sw_ver.compare("01.03.50.01") >= 0; + if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.03.50.01") >= 0; + } + else if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("00.06.03.51") >= 0; + } + else { + is_support_mqtt_alive = ota_version->second.sw_ver.compare("01.03.50.01") >= 0; + } + } } } @@ -1424,20 +1491,30 @@ int MachineObject::command_get_version(bool with_retry) return this->publish_json(j.dump(), 1); } -int MachineObject::command_request_push_all() +int MachineObject::command_request_push_all(bool request_now) { auto curr_time = std::chrono::system_clock::now(); auto diff = std::chrono::duration_cast(curr_time - last_request_push); + if (diff.count() < REQUEST_PUSH_MIN_TIME) { - BOOST_LOG_TRIVIAL(trace) << "static: command_request_push_all: send request too fast, dev_id=" << dev_id; - return -1; + if (request_now) { + BOOST_LOG_TRIVIAL(trace) << "static: command_request_push_all, dev_id=" << dev_id; + last_request_push = std::chrono::system_clock::now(); + } + else { + BOOST_LOG_TRIVIAL(trace) << "static: command_request_push_all: send request too fast, dev_id=" << dev_id; + return -1; + } } else { BOOST_LOG_TRIVIAL(trace) << "static: command_request_push_all, dev_id=" << dev_id; last_request_push = std::chrono::system_clock::now(); } + json j; j["pushing"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["pushing"]["command"] = "pushall"; + j["pushing"]["version"] = 1; + j["pushing"]["push_target"] = 1; return this->publish_json(j.dump()); } @@ -1543,12 +1620,29 @@ int MachineObject::command_go_home() int MachineObject::command_control_fan(FanType fan_type, bool on_off) { std::string gcode = (boost::format("M106 P%1% S%2% \n") % (int)fan_type % (on_off ? 255 : 0)).str(); + try { + json j; + j["fan_control"] = "fan_control"; + + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("printer_control", j.dump()); + } + catch (...) {} + return this->publish_gcode(gcode); } int MachineObject::command_control_fan_val(FanType fan_type, int val) { std::string gcode = (boost::format("M106 P%1% S%2% \n") % (int)fan_type % (val)).str(); + try { + json j; + j["fan_control"] = "fan_control_val"; + + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("printer_control", j.dump()); + } + catch (...) {} return this->publish_gcode(gcode); } @@ -1586,12 +1680,29 @@ int MachineObject::command_task_resume() int MachineObject::command_set_bed(int temp) { std::string gcode_str = (boost::format("M140 S%1%\n") % temp).str(); + try { + json j; + j["temp_control"] = "bed_temp"; + + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("printer_control", j.dump()); + } + catch (...) {} + return this->publish_gcode(gcode_str); } int MachineObject::command_set_nozzle(int temp) { std::string gcode_str = (boost::format("M104 S%1%\n") % temp).str(); + try { + json j; + j["temp_control"] = "nozzle_temp"; + + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("printer_control", j.dump()); + } + catch (...) {} return this->publish_gcode(gcode_str); } @@ -1753,7 +1864,7 @@ int MachineObject::command_set_work_light(LIGHT_EFFECT effect, int on_time, int int MachineObject::command_start_extrusion_cali(int tray_index, int nozzle_temp, int bed_temp, float max_volumetric_speed, std::string setting_id) { - BOOST_LOG_TRIVIAL(info) << "extrusion_cali: tray_id = " << tray_index << ", nozzle_temp = " << nozzle_temp << ", bed_temp = " << bed_temp + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: tray_id = " << tray_index << ", nozzle_temp = " << nozzle_temp << ", bed_temp = " << bed_temp << ", max_volumetric_speed = " << max_volumetric_speed; json j; @@ -1768,12 +1879,13 @@ int MachineObject::command_start_extrusion_cali(int tray_index, int nozzle_temp, // enter extusion cali last_extrusion_cali_start_time = std::chrono::system_clock::now(); + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); return this->publish_json(j.dump()); } int MachineObject::command_stop_extrusion_cali() { - BOOST_LOG_TRIVIAL(info) << "extrusion_cali: stop"; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: stop"; if (is_in_extrusion_cali()) { return command_task_abort(); } @@ -1782,7 +1894,7 @@ int MachineObject::command_stop_extrusion_cali() int MachineObject::command_extrusion_cali_set(int tray_index, std::string setting_id, std::string name, float k, float n, int bed_temp, int nozzle_temp, float max_volumetric_speed) { - BOOST_LOG_TRIVIAL(info) << "extrusion_cali: tray_id = " << tray_index << ", setting_id = " << setting_id << ", k = " << k + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: tray_id = " << tray_index << ", setting_id = " << setting_id << ", k = " << k << ", n = " << n; json j; j["print"]["command"] = "extrusion_cali_set"; @@ -1853,14 +1965,23 @@ int MachineObject::command_axis_control(std::string axis, double unit, double va else { return -1; } + + try { + json j; + j["axis_control"] = axis; + + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("printer_control", j.dump()); + } + catch (...) {} + return this->publish_gcode(cmd); } bool MachineObject::is_support_command_calibration() { - if (printer_type == "BL-P001" - || printer_type == "BL-P002") { + if (get_printer_series() == PrinterSeries::SERIES_X1) { auto ap_ver_it = module_vers.find("rv1126"); if (ap_ver_it != module_vers.end()) { if (ap_ver_it->second.sw_ver.compare("00.00.15.79") < 0) @@ -1890,9 +2011,174 @@ int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, } } +int MachineObject::command_start_pa_calibration(const X1CCalibInfos &pa_data, int mode) +{ + CNumericLocalesSetter locales_setter; + + pa_calib_results.clear(); + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "extrusion_cali"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_data.calib_datas[0].nozzle_diameter); + j["print"]["mode"] = mode; + + for (int i = 0; i < pa_data.calib_datas.size(); ++i) { + j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id; + j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp; + j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id; + j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id; + j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp; + j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(pa_data.calib_datas[i].max_volumetric_speed); + } + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_set_pa_calibration(const std::vector &pa_calib_values, bool is_auto_cali) +{ + CNumericLocalesSetter locales_setter; + + if (get_printer_series() == PrinterSeries::SERIES_X1 && pa_calib_values.size() > 0) { + json j; + j["print"]["command"] = "extrusion_cali_set"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib_values[0].nozzle_diameter); + + for (int i = 0; i < pa_calib_values.size(); ++i) { + if (pa_calib_values[i].tray_id >= 0) + j["print"]["filaments"][i]["tray_id"] = pa_calib_values[i].tray_id; + if (pa_calib_values[i].cali_idx >= 0) + j["print"]["filaments"][i]["cali_idx"] = pa_calib_values[i].cali_idx; + j["print"]["filaments"][i]["tray_id"] = pa_calib_values[i].tray_id; + j["print"]["filaments"][i]["filament_id"] = pa_calib_values[i].filament_id; + j["print"]["filaments"][i]["setting_id"] = pa_calib_values[i].setting_id; + j["print"]["filaments"][i]["name"] = pa_calib_values[i].name; + j["print"]["filaments"][i]["k_value"] = std::to_string(pa_calib_values[i].k_value); + if (is_auto_cali) + j["print"]["filaments"][i]["n_coef"] = std::to_string(pa_calib_values[i].n_coef); + else + j["print"]["filaments"][i]["n_coef"] = "0.0"; + } + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_set: " << j.dump(); + return this->publish_json(j.dump()); + } + + return -1; +} + +int MachineObject::command_delete_pa_calibration(const PACalibIndexInfo& pa_calib) +{ + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "extrusion_cali_del"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["filament_id"] = pa_calib.filament_id; + j["print"]["cali_idx"] = pa_calib.cali_idx; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib.nozzle_diameter); + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_del: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_get_pa_calibration_tab(float nozzle_diameter, const std::string &filament_id) +{ + reset_pa_cali_history_result(); + + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "extrusion_cali_get"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["filament_id"] = filament_id; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_get_pa_calibration_result(float nozzle_diameter) +{ + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "extrusion_cali_get_result"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get_result: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info) +{ + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "extrusion_cali_sel"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["tray_id"] = pa_calib_info.tray_id; + j["print"]["cali_idx"] = pa_calib_info.cali_idx; + j["print"]["filament_id"] = pa_calib_info.filament_id; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib_info.nozzle_diameter); + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data) +{ + CNumericLocalesSetter locales_setter; + + if (get_printer_series() == PrinterSeries::SERIES_X1 && calib_data.calib_datas.size() > 0) { + json j; + j["print"]["command"] = "flowrate_cali"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["tray_id"] = calib_data.calib_datas[0].tray_id; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(calib_data.calib_datas[0].nozzle_diameter); + + for (int i = 0; i < calib_data.calib_datas.size(); ++i) { + j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id; + j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp; + j["print"]["filaments"][i]["filament_id"] = calib_data.calib_datas[i].filament_id; + j["print"]["filaments"][i]["setting_id"] = calib_data.calib_datas[i].setting_id; + j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp; + j["print"]["filaments"][i]["def_flow_ratio"] = std::to_string(calib_data.calib_datas[i].flow_rate); + j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(calib_data.calib_datas[i].max_volumetric_speed); + } + + BOOST_LOG_TRIVIAL(trace) << "flowrate_cali: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_get_flow_ratio_calibration_result(float nozzle_diameter) +{ + if (get_printer_series() == PrinterSeries::SERIES_X1) { + json j; + j["print"]["command"] = "flowrate_get_result"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); + + BOOST_LOG_TRIVIAL(trace) << "flowrate_get_result: " << j.dump(); + return this->publish_json(j.dump()); + } + return -1; +} + int MachineObject::command_unload_filament() { - if ((printer_type == "BL-P001" || printer_type == "BL-P002") + if (get_printer_series() == PrinterSeries::SERIES_X1 && !this->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { // fixed gcode file json j; @@ -1902,7 +2188,7 @@ int MachineObject::command_unload_filament() return this->publish_json(j.dump()); } else if (printer_type == "C11" - || ((printer_type == "BL-P001" || printer_type == "BL-P002") + || (get_printer_series() == PrinterSeries::SERIES_X1 && this->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) ) { std::string gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); @@ -2112,16 +2398,21 @@ void MachineObject::reset() camera_recording = false; camera_recording_when_printing = false; camera_timelapse = false; - camera_resolution = ""; + //camera_resolution = ""; printing_speed_mag = 100; gcode_file_prepare_percent = 0; iot_print_status = ""; print_status = ""; last_mc_print_stage = -1; m_new_ver_list_exist = false; + m_is_support_show_bak = false; extruder_axis_status = LOAD; nozzle_diameter = 0.0f; + // reset print_json + json empty_j; + print_json.diff2all_base_reset(empty_j); + vt_tray.reset(); subtask_ = nullptr; @@ -2133,8 +2424,14 @@ void MachineObject::set_print_state(std::string status) print_status = status; } -int MachineObject::connect(bool is_anonymous) +std::vector MachineObject::get_compatible_machine() { + return DeviceManager::get_compatible_machine(printer_type); +} + +int MachineObject::connect(bool is_anonymous, bool use_openssl) +{ + if (dev_ip.empty()) return -1; std::string username; std::string password; if (!is_anonymous) { @@ -2143,7 +2440,7 @@ int MachineObject::connect(bool is_anonymous) } if (m_agent) { try { - return m_agent->connect_printer(dev_id, dev_ip, username, password); + return m_agent->connect_printer(dev_id, dev_ip, username, password, use_openssl); } catch (...) { ; } @@ -2185,6 +2482,7 @@ bool MachineObject::is_connecting() void MachineObject::set_online_state(bool on_off) { m_is_online = on_off; + if (!on_off) m_active_state = NotActive; } bool MachineObject::is_info_ready() @@ -2222,6 +2520,9 @@ bool MachineObject::is_function_supported(PrinterFunction func) return false; func_name = "FUNC_AI_MONITORING"; break; + case FUNC_LIDAR_CALIBRATION: + func_name = "FUNC_LIDAR_CALIBRATION"; + break; case FUNC_BUILDPLATE_MARKER_DETECT: parse_version_func(); if (!is_xcam_buildplate_supported) @@ -2250,10 +2551,13 @@ bool MachineObject::is_function_supported(PrinterFunction func) func_name = "FUNC_MEDIA_FILE"; break; case FUNC_REMOTE_TUNNEL: - func_name = "FUNC_REMOTE_TUNNEL"; + parse_version_func(); + if (!is_support_remote_tunnel) + return false; break; case FUNC_LOCAL_TUNNEL: - func_name = "FUNC_LOCAL_TUNNEL"; + parse_version_func(); + if (!local_camera_proto) return false; break; case FUNC_PRINT_WITHOUT_SD: func_name = "FUNC_PRINT_WITHOUT_SD"; @@ -2315,6 +2619,31 @@ bool MachineObject::is_support_print_with_timelapse() return true; } +bool MachineObject::is_camera_busy_off() +{ + if (printer_type == "C11" || printer_type == "C12") + return is_in_prepare() || is_in_upgrading(); + return false; +} + +int MachineObject::get_local_camera_proto() +{ + if (!is_function_supported(PrinterFunction::FUNC_LOCAL_TUNNEL)) return 0; + return local_camera_proto; +} + +bool MachineObject::has_local_file_proto() +{ + parse_version_func(); + return file_proto & 1; +} + +bool MachineObject::has_remote_file_proto() +{ + parse_version_func(); + return file_proto & 2; +} + int MachineObject::publish_json(std::string json_str, int qos) { if (is_lan_mode_printer()) { @@ -2344,9 +2673,12 @@ int MachineObject::local_publish_json(std::string json_str, int qos) int MachineObject::parse_json(std::string payload) { + CNumericLocalesSetter locales_setter; + parse_msg_count++; std::chrono::system_clock::time_point clock_start = std::chrono::system_clock::now(); this->set_online_state(true); + if (m_active_state == NotActive) m_active_state = Active; /* update last received time */ last_update_time = std::chrono::system_clock::now(); @@ -2391,7 +2723,7 @@ int MachineObject::parse_json(std::string payload) } if (!restored_json) { - j = json::parse(payload); + j = j_pre; } BOOST_LOG_TRIVIAL(trace) << "parse_json: dev_id=" << dev_id << ", playload=" << j.dump(4); @@ -2485,6 +2817,7 @@ int MachineObject::parse_json(std::string payload) online_rfid = false; } } + std::string str = jj.dump(); if (jj["online"].contains("version")) { online_version = jj["online"]["version"].get(); } @@ -2692,6 +3025,7 @@ int MachineObject::parse_json(std::string payload) /*get filam_bak*/ try { if (jj.contains("filam_bak")) { + m_is_support_show_bak = true; filam_bak.clear(); if (jj["filam_bak"].is_array()) { for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { @@ -2699,18 +3033,33 @@ int MachineObject::parse_json(std::string payload) } } } + else { + m_is_support_show_bak = false; + } } catch (...) { ; } /* get fimware type */ + try { + if (jj.contains("mess_production_state")) { + if (jj["mess_production_state"].get() == "engineer") + firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; + else if (jj["mess_production_state"].get() == "product") + firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; + } + } + catch (...) { + ; + } + try { if (jj.contains("lifecycle")) { if (jj["lifecycle"].get() == "engineer") - firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; else if (jj["lifecycle"].get() == "product") - firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; } } catch (...) { @@ -2899,6 +3248,12 @@ int MachineObject::parse_json(std::string payload) camera_resolution = jj["ipcam"]["resolution"].get(); } } + if (jj["ipcam"].contains("rtsp_url")) { + local_rtsp_url = jj["ipcam"]["rtsp_url"].get(); + } + if (jj["ipcam"].contains("tutk_server")) { + tutk_state = jj["ipcam"]["tutk_server"].get(); + } } } catch (...) { @@ -2984,6 +3339,11 @@ int MachineObject::parse_json(std::string payload) int ams_status = jj["ams_status"].get(); this->_parse_ams_status(ams_status); } + std::string str_j = jj.dump(); + if (jj.contains("cali_version")) { + cali_version = jj["cali_version"].get(); + } + std::string str = jj.dump(); } catch (...) { ; @@ -3244,6 +3604,12 @@ int MachineObject::parse_json(std::string payload) curr_tray->n = (*tray_it)["n"].get(); } } + + std::string temp = tray_it->dump(); + + if (tray_it->contains("cali_idx")) { + curr_tray->cali_idx = (*tray_it)["cali_idx"].get(); + } } // remove not in trayList for (auto tray_it = tray_id_set.begin(); tray_it != tray_id_set.end(); tray_it++) { @@ -3360,6 +3726,11 @@ int MachineObject::parse_json(std::string payload) vt_tray.color = ""; } + if (jj["vt_tray"].contains("cali_idx")) + vt_tray.cali_idx = jj["vt_tray"]["cali_idx"].get(); + else + vt_tray.cali_idx = -1; + vt_tray.cols.clear(); if (jj["vt_tray"].contains("cols")) { if (jj["vt_tray"].is_array()) { @@ -3516,11 +3887,33 @@ int MachineObject::parse_json(std::string payload) } catch(...) { } - } else if (jj["command"].get() == "extrusion_cali") { - if (jj.contains("result") && jj["result"].get() == "success") { - // enter extrusion cali + } else if (jj["command"].get() == "extrusion_cali" || jj["command"].get() == "flowrate_cali") { + if (jj.contains("result")) { + if (jj["result"].get() == "success") { + ; + } + else if (jj["result"].get() == "fail") { + std::string cali_mode = jj["command"].get(); + std::string reason = jj["reason"].get(); + GUI::wxGetApp().CallAfter([cali_mode, reason] { + wxString info = ""; + if (reason == "invalid nozzle_diameter") { + info = _L("Invalid nozzle diameter"); + } + else { + info = reason; + } + GUI::MessageDialog msg_dlg(nullptr, info, _L("Calibration error"), wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + BOOST_LOG_TRIVIAL(trace) << cali_mode << " result fail, reason = " << reason; + }); + } } } else if (jj["command"].get() == "extrusion_cali_set") { +#ifdef CALI_DEBUG + std::string str = jj.dump(); + BOOST_LOG_TRIVIAL(info) << "extrusion_cali_set: " << str; +#endif int ams_id = -1; int tray_id = -1; int curr_tray_id = -1; @@ -3560,6 +3953,191 @@ int MachineObject::parse_json(std::string payload) extrusion_cali_set_tray_id = curr_tray_id; extrusion_cali_set_hold_start = std::chrono::system_clock::now(); } + else if (jj["command"].get() == "extrusion_cali_sel") { +#ifdef CALI_DEBUG + std::string str = jj.dump(); + BOOST_LOG_TRIVIAL(info) << "extrusion_cali_sel: " << str; +#endif + int ams_id = -1; + int tray_id = -1; + int curr_tray_id = -1; + if (jj.contains("tray_id")) { + try { + curr_tray_id = jj["tray_id"].get(); + if (curr_tray_id == VIRTUAL_TRAY_ID) + tray_id = curr_tray_id; + else if (curr_tray_id >= 0 && curr_tray_id < 16) { + ams_id = curr_tray_id / 4; + tray_id = curr_tray_id % 4; + } else { + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: unsupported tray_id = " << curr_tray_id; + } + } catch (...) { + ; + } + } + if (tray_id == VIRTUAL_TRAY_ID) { + if (jj.contains("cali_idx")) { + vt_tray.cali_idx = jj["cali_idx"].get(); + vt_tray.set_hold_count(); + } + } else { + auto ams_item = this->amsList.find(std::to_string(ams_id)); + if (ams_item != this->amsList.end()) { + auto tray_item = ams_item->second->trayList.find(std::to_string(tray_id)); + if (tray_item != ams_item->second->trayList.end()) { + if (jj.contains("cali_idx")) { + tray_item->second->cali_idx = jj["cali_idx"].get(); + tray_item->second->set_hold_count(); + } + } + } + } + } + else if (jj["command"].get() == "extrusion_cali_get") { + reset_pa_cali_history_result(); + has_get_pa_calib_tab = true; + + if (jj.contains("nozzle_diameter")) { + if (jj["nozzle_diameter"].is_number_float()) { + pa_calib_tab_nozzle_dia = jj["nozzle_diameter"].get(); + } + else if (jj["nozzle_diameter"].is_string()) { + pa_calib_tab_nozzle_dia = stof(jj["nozzle_diameter"].get().c_str()); + } + else { + assert(false); + } + } + else { + assert(false); + } + + if (jj.contains("filaments") && jj["filaments"].is_array()) { + try { +#ifdef CALI_DEBUG + std::string str = jj.dump(); + BOOST_LOG_TRIVIAL(info) << "extrusion_cali_get: " << str; +#endif + + for (auto it = jj["filaments"].begin(); it != jj["filaments"].end(); it++) { + PACalibResult pa_calib_result; + pa_calib_result.filament_id = (*it)["filament_id"].get(); + pa_calib_result.setting_id = (*it)["setting_id"].get(); + pa_calib_result.name = (*it)["name"].get(); + pa_calib_result.cali_idx = (*it)["cali_idx"].get(); + + if (jj["nozzle_diameter"].is_number_float()) { + pa_calib_result.nozzle_diameter = jj["nozzle_diameter"].get(); + } else if (jj["nozzle_diameter"].is_string()) { + pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + } + + if ((*it)["k_value"].is_number_float()) + pa_calib_result.k_value = (*it)["k_value"].get(); + else if ((*it)["k_value"].is_string()) + pa_calib_result.k_value = stof((*it)["k_value"].get().c_str()); + + if ((*it)["n_coef"].is_number_float()) + pa_calib_result.n_coef = (*it)["n_coef"].get(); + else if ((*it)["n_coef"].is_string()) + pa_calib_result.n_coef = stof((*it)["n_coef"].get().c_str()); + + if (check_pa_result_validation(pa_calib_result)) + pa_calib_tab.push_back(pa_calib_result); + else { + BOOST_LOG_TRIVIAL(info) << "pa result is invalid"; + } + } + + } + catch (...) { + + } + } + // notify cali history to update + } + else if (jj["command"].get() == "extrusion_cali_get_result") { + reset_pa_cali_result(); + get_pa_calib_result = true; + + if (jj.contains("filaments") && jj["filaments"].is_array()) { + try { +#ifdef CALI_DEBUG + std::string str = jj.dump(); + BOOST_LOG_TRIVIAL(info) << "extrusion_cali_get_result: " << str; +#endif + + for (auto it = jj["filaments"].begin(); it != jj["filaments"].end(); it++) { + PACalibResult pa_calib_result; + pa_calib_result.tray_id = (*it)["tray_id"].get(); + pa_calib_result.filament_id = (*it)["filament_id"].get(); + pa_calib_result.setting_id = (*it)["setting_id"].get(); + + if (jj["nozzle_diameter"].is_number_float()) { + pa_calib_result.nozzle_diameter = jj["nozzle_diameter"].get(); + } else if (jj["nozzle_diameter"].is_string()) { + pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + } + + if ((*it)["k_value"].is_number_float()) + pa_calib_result.k_value = (*it)["k_value"].get(); + else if ((*it)["k_value"].is_string()) + pa_calib_result.k_value = stof((*it)["k_value"].get().c_str()); + + if ((*it)["n_coef"].is_number_float()) + pa_calib_result.n_coef = (*it)["n_coef"].get(); + else if ((*it)["n_coef"].is_string()) + pa_calib_result.n_coef = stof((*it)["n_coef"].get().c_str()); + + if (it->contains("confidence")) { + pa_calib_result.confidence = (*it)["confidence"].get(); + } else { + pa_calib_result.confidence = 0; + } + + if (check_pa_result_validation(pa_calib_result)) + pa_calib_results.push_back(pa_calib_result); + else { + BOOST_LOG_TRIVIAL(info) << "pa result is invalid"; + } + } + } catch (...) {} + } + + if (pa_calib_results.empty()) { + BOOST_LOG_TRIVIAL(info) << "no pa calib result"; + } + } + else if (jj["command"].get() == "flowrate_get_result") { + this->reset_flow_rate_cali_result(); + + get_flow_calib_result = true; + if (jj.contains("filaments") && jj["filaments"].is_array()) { + try { +#ifdef CALI_DEBUG + std::string str = jj.dump(); + BOOST_LOG_TRIVIAL(info) << "flowrate_get_result: " << str; +#endif + for (auto it = jj["filaments"].begin(); it != jj["filaments"].end(); it++) { + FlowRatioCalibResult flow_ratio_calib_result; + flow_ratio_calib_result.tray_id = (*it)["tray_id"].get(); + flow_ratio_calib_result.filament_id = (*it)["filament_id"].get(); + flow_ratio_calib_result.setting_id = (*it)["setting_id"].get(); + flow_ratio_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + flow_ratio_calib_result.flow_ratio = stof((*it)["flow_ratio"].get().c_str()); + if (it->contains("confidence")) { + flow_ratio_calib_result.confidence = (*it)["confidence"].get(); + } else { + flow_ratio_calib_result.confidence = 0; + } + + flow_ratio_results.push_back(flow_ratio_calib_result); + } + + } catch (...) {} + } + } } } @@ -3627,7 +4205,7 @@ int MachineObject::parse_json(std::string payload) if (j.contains("upgrade")) { if (j["upgrade"].contains("command")) { if (j["upgrade"]["command"].get() == "upgrade_confirm") { - this->upgrade_display_state = (int)UpgradingDisplayState::UpgradingInProgress; + this->upgrade_display_state = UpgradingInProgress; upgrade_display_hold_count = HOLD_COUNT_MAX; BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; } @@ -3651,6 +4229,18 @@ int MachineObject::parse_json(std::string payload) } catch (...) {} + if (m_active_state == Active && !module_vers.empty() && check_version_valid() + && !is_camera_busy_off()) { + m_active_state = UpdateToDate; + parse_version_func(); + if (is_support_tunnel_mqtt && connection_type() != "lan") { + m_agent->start_subscribe("tunnel"); + } + } else if (m_active_state == UpdateToDate && is_camera_busy_off()) { + m_active_state = Active; + m_agent->stop_subscribe("tunnel"); + } + parse_state_changed_event(); } catch (...) { @@ -3689,6 +4279,16 @@ BBLSubTask* MachineObject::get_subtask() return subtask_; } +BBLModelTask* MachineObject::get_modeltask() +{ + return model_task; +} + +void MachineObject::set_modeltask(BBLModelTask* task) +{ + model_task = task; +} + void MachineObject::update_slice_info(std::string project_id, std::string profile_id, std::string subtask_id, int plate_idx) { if (!m_agent) return; @@ -3875,10 +4475,34 @@ void DeviceManager::set_agent(NetworkAgent* agent) m_agent = agent; } -void DeviceManager::check_pushing() +void DeviceManager::keep_alive() { MachineObject* obj = this->get_selected_machine(); if (obj) { + if (obj->keep_alive_count == 0) { + obj->last_keep_alive = std::chrono::system_clock::now(); + } + obj->keep_alive_count++; + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); + auto internal = std::chrono::duration_cast(start - obj->last_keep_alive); + if (internal.count() > TIMEOUT_FOR_KEEPALIVE && (internal.count() < 1000 * 60 * 60 * 300) ) { + BOOST_LOG_TRIVIAL(info) << "keep alive = " << internal.count() << ", count = " << obj->keep_alive_count; + obj->command_request_push_all(); + obj->last_keep_alive = start; + } + else if(obj->m_push_count == 0){ + BOOST_LOG_TRIVIAL(info) << "keep alive = " << internal.count() << ", push_count = 0, count = " << obj->keep_alive_count; + obj->command_request_push_all(); + obj->last_keep_alive = start; + } + } +} + +void DeviceManager::check_pushing() +{ + keep_alive(); + MachineObject* obj = this->get_selected_machine(); + if (obj && !obj->is_support_mqtt_alive) { std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); auto internal = std::chrono::duration_cast(start - obj->last_update_time); if (internal.count() > TIMEOUT_FOR_STRAT && internal.count() < 1000 * 60 * 60 * 300) { @@ -3910,9 +4534,10 @@ void DeviceManager::on_machine_alive(std::string json_str) /* update userMachineList info */ auto it = userMachineList.find(dev_id); if (it != userMachineList.end()) { - it->second->dev_ip = dev_ip; - it->second->bind_state = bind_state; - it->second->bind_sec_link = sec_link; + it->second->dev_ip = dev_ip; + it->second->bind_state = bind_state; + it->second->bind_sec_link = sec_link; + it->second->dev_connection_type = connect_type; } /* update localMachineList */ @@ -4107,11 +4732,12 @@ bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnec // disconnect last auto last_selected = my_machine_list.find(selected_machine); if (last_selected != my_machine_list.end()) { + last_selected->second->m_active_state = MachineObject::NotActive; if (last_selected->second->connection_type() == "lan") { if (last_selected->second->is_connecting() && !need_disconnect) return false; - if (!need_disconnect) {m_agent->disconnect_printer();} + if (!need_disconnect) {m_agent->disconnect_printer(); } } } @@ -4127,23 +4753,34 @@ bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnec if (m_agent) { if (!need_disconnect) {m_agent->disconnect_printer();} it->second->reset(); - it->second->connect(); +#if !BBL_RELEASE_TO_PUBLIC + it->second->connect(false, Slic3r::GUI::wxGetApp().app_config->get("enable_ssl_for_mqtt") == "true" ? true : false); +#else + it->second->connect(false, it->second->local_use_ssl_for_mqtt); +#endif it->second->set_lan_mode_connection_state(true); } } } else { if (m_agent) { if (it->second->connection_type() != "lan" || it->second->connection_type().empty()) { - if (m_agent->get_user_selected_machine() != dev_id) { + if (m_agent->get_user_selected_machine() == dev_id) { + it->second->reset_update_time(); + } + else { BOOST_LOG_TRIVIAL(info) << "static: set_selected_machine: same dev_id = " << dev_id; m_agent->set_user_selected_machine(dev_id); it->second->reset(); - } else { - it->second->reset_update_time(); } } else { + BOOST_LOG_TRIVIAL(info) << "static: set_selected_machine: same dev_id = empty"; + m_agent->set_user_selected_machine(""); it->second->reset(); - it->second->connect(); +#if !BBL_RELEASE_TO_PUBLIC + it->second->connect(false, Slic3r::GUI::wxGetApp().app_config->get("enable_ssl_for_mqtt") == "true" ? true : false); +#else + it->second->connect(false, it->second->local_use_ssl_for_mqtt); +#endif it->second->set_lan_mode_connection_state(true); } } @@ -4240,7 +4877,10 @@ void DeviceManager::parse_user_print_info(std::string body) if (m_agent) { obj->set_bind_status(m_agent->get_user_name()); } - obj->dev_ip = Slic3r::GUI::wxGetApp().app_config->get("ip_address", dev_id); + + if (obj->dev_ip.empty()) { + obj->dev_ip = Slic3r::GUI::wxGetApp().app_config->get("ip_address", dev_id); + } userMachineList.insert(std::make_pair(dev_id, obj)); } @@ -4479,6 +5119,14 @@ bool DeviceManager::load_filaments_blacklist_config(std::string config_file) void DeviceManager::check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info) { + std::unordered_map blacklist_prompt = + { + {"TPU: not supported", _L("TPU is not supported by AMS.")}, + {"Bambu PET-CF/PA6-CF: not supported", _L("Bambu PET-CF/PA6-CF is not supported by AMS.")}, + {"PVA: flexible", _L("Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use.")}, + {"CF/GF: hard and brittle", _L("CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution.")} + }; + in_blacklist = false; if (filaments_blacklist.contains("blacklist")) { @@ -4498,6 +5146,8 @@ void DeviceManager::check_filaments_in_blacklist(std::string tag_vendor, std::st type = prohibited_filament["type"].get(); action = prohibited_filament["action"].get(); description = prohibited_filament["description"].get(); + + description = blacklist_prompt[description].ToUTF8().data(); } else { return; @@ -4548,4 +5198,20 @@ std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_fi return ""; } +std::vector DeviceManager::get_compatible_machine(std::string type_str) +{ + std::vector compatible_machine; + if (DeviceManager::function_table.contains("printers")) { + for (auto printer : DeviceManager::function_table["printers"]) { + if (printer.contains("model_id") && printer["model_id"].get() == type_str) { + if (printer.contains("compatible_machine")) { + for (auto res : printer["compatible_machine"]) + compatible_machine.emplace_back(res.get()); + } + } + } + } + return compatible_machine; +} + } // namespace Slic3r diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index df13853e7..81f5dad81 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -12,13 +12,15 @@ #include "slic3r/Utils/json_diff.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "CameraPopup.hpp" +#include "libslic3r/Calib.hpp" #define USE_LOCAL_SOCKET_BIND 0 #define DISCONNECT_TIMEOUT 30000.f // milliseconds #define PUSHINFO_TIMEOUT 15000.f // milliseconds #define TIMEOUT_FOR_STRAT 20000.f // milliseconds -#define REQUEST_PUSH_MIN_TIME 15000.f // milliseconds +#define TIMEOUT_FOR_KEEPALIVE 5* 60 * 1000.f // milliseconds +#define REQUEST_PUSH_MIN_TIME 3000.f // milliseconds #define REQUEST_START_MIN_TIME 15000.f // milliseconds #define EXTRUSION_OMIT_TIME 20000.f // milliseconds #define HOLD_TIMEOUT 10000.f // milliseconds @@ -49,6 +51,13 @@ using namespace nlohmann; namespace Slic3r { + +enum PrinterSeries { + SERIES_X1 = 0, + SERIES_P1P, + SERIES_UNKNOWN, +}; + enum PRINTING_STAGE { PRINTING_STAGE_PRINTING = 0, PRINTING_STAGE_BED_LEVELING, @@ -74,6 +83,7 @@ enum PrinterFunction { FUNC_RECORDING, FUNC_FIRSTLAYER_INSPECT, FUNC_AI_MONITORING, + FUNC_LIDAR_CALIBRATION, FUNC_BUILDPLATE_MARKER_DETECT, FUNC_AUTO_RECOVERY_STEP_LOSS, FUNC_FLOW_CALIBRATION, @@ -173,19 +183,19 @@ public: static wxColour decode_color(const std::string &color) { - std::array ret = {0, 0, 0}; + std::array ret = {0, 0, 0, 0}; const char * c = color.data(); if (color.size() == 8) { - for (size_t j = 0; j < 3; ++j) { + for (size_t j = 0; j < 4; ++j) { int digit1 = hex_digit_to_int(*c++); int digit2 = hex_digit_to_int(*c++); if (digit1 == -1 || digit2 == -1) break; ret[j] = float(digit1 * 16 + digit2); } } else { - return wxColour(255, 255, 255); + return wxColour(255, 255, 255, 255); } - return wxColour(ret[0], ret[1], ret[2]); + return wxColour(ret[0], ret[1], ret[2], ret[3]); } std::string id; @@ -208,6 +218,7 @@ public: std::string uuid; float k = 0.0f; // k range: 0 ~ 0.5 float n = 0.0f; // k range: 0.6 ~ 2.0 + int cali_idx = 0; wxColour wx_color; bool is_bbl; @@ -384,6 +395,12 @@ public: SDCARD_STATE_NUM = 3 }; + enum ActiveState { + NotActive, + Active, + UpdateToDate + }; + class ExtrusionRatioInfo { public: @@ -409,23 +426,26 @@ public: std::string dev_name; std::string dev_ip; std::string dev_id; - bool local_use_ssl { false }; + bool local_use_ssl_for_mqtt { true }; + bool local_use_ssl_for_ftp { true }; float nozzle_diameter { 0.0f }; std::string dev_connection_type; /* lan | cloud */ std::string connection_type() { return dev_connection_type; } void set_dev_ip(std::string ip) {dev_ip = ip;}; bool has_access_right() { return !get_access_code().empty(); } std::string get_ftp_folder(); - void set_access_code(std::string code); std::string get_access_code(); - void set_user_access_code(std::string code); - + void set_access_code(std::string code, bool only_refresh = true); + void set_user_access_code(std::string code, bool only_refresh = true); + void erase_user_access_code(); std::string get_user_access_code(); bool is_lan_mode_printer(); + bool is_high_printer_type(); //PRINTER_TYPE printer_type = PRINTER_3DPrinter_UKNOWN; std::string printer_type; /* model_id */ + PrinterSeries get_printer_series() const; std::string printer_thumbnail_img; std::string monitor_upgrade_printer_img; @@ -436,6 +456,7 @@ public: std::string product_name; // set by iot service, get /user/print std::vector filam_bak; + bool m_is_support_show_bak{false}; std::string bind_user_name; std::string bind_user_id; @@ -448,11 +469,17 @@ public: void set_lan_mode_connection_state(bool state) {m_lan_mode_connection_state = state;}; bool get_lan_mode_connection_state() {return m_lan_mode_connection_state;}; int parse_msg_count = 0; + int keep_alive_count = 0; std::chrono::system_clock::time_point last_update_time; /* last received print data from machine */ + std::chrono::system_clock::time_point last_keep_alive; /* last received print data from machine */ std::chrono::system_clock::time_point last_push_time; /* last received print push from machine */ std::chrono::system_clock::time_point last_request_push; /* last received print push from machine */ std::chrono::system_clock::time_point last_request_start; /* last received print push from machine */ + int m_active_state = 0; // 0 - not active, 1 - active, 2 - update-to-date + bool is_support_tunnel_mqtt = false; + bool is_tunnel_mqtt = false; + /* ams properties */ std::map amsList; // key: ams[id], start with 0 AmsTray vt_tray; // virtual tray @@ -484,6 +511,7 @@ public: std::chrono::system_clock::time_point last_extrusion_cali_start_time; int extrusion_cali_set_tray_id = -1; std::chrono::system_clock::time_point extrusion_cali_set_hold_start; + std::string extrusion_cali_filament_name; bool is_in_extrusion_cali(); bool is_extrusion_cali_finished(); @@ -548,6 +576,7 @@ public: int upgrade_display_state = 0; // 0 : upgrade unavailable, 1: upgrade idle, 2: upgrading, 3: upgrade_finished int upgrade_display_hold_count = 0; PrinterFirmwareType firmware_type; // engineer|production + PrinterFirmwareType lifecycle { PrinterFirmwareType::FIRMEARE_TYPE_UKNOWN }; std::string upgrade_progress; std::string upgrade_message; std::string upgrade_status; @@ -564,6 +593,7 @@ public: std::vector firmware_list; std::string get_firmware_type_str(); + std::string get_lifecycle_type_str(); bool is_in_upgrading(); bool is_upgrading_avalable(); int get_upgrade_percent(); @@ -593,6 +623,41 @@ public: int total_layers = 0; bool is_support_layer_num { false }; + int cali_version = -1; + float cali_selected_nozzle_dia { 0.0 }; + // 1: record when start calibration in preset page + // 2: reset when start calibration in start page + // 3: save tray_id, filament_id, setting_id, and name, nozzle_dia + std::vector selected_cali_preset; + float cache_flow_ratio { 0.0 }; + bool cali_finished = true; + + bool has_get_pa_calib_tab{ false }; + std::vector pa_calib_tab; + float pa_calib_tab_nozzle_dia; + bool get_pa_calib_result { false }; + std::vector pa_calib_results; + bool get_flow_calib_result { false }; + std::vector flow_ratio_results; + void reset_pa_cali_history_result() + { + pa_calib_tab_nozzle_dia = 0.4f; + has_get_pa_calib_tab = false; + pa_calib_tab.clear(); + } + + void reset_pa_cali_result() { + get_pa_calib_result = false; + pa_calib_results.clear(); + } + + void reset_flow_rate_cali_result() { + get_flow_calib_result = false; + flow_ratio_results.clear(); + } + + bool check_pa_result_validation(PACalibResult& result); + std::vector stage_list_info; int stage_curr = 0; int m_push_count = 0; @@ -632,6 +697,11 @@ public: std::string camera_resolution = ""; bool xcam_first_layer_inspector { false }; int xcam_first_layer_hold_count = 0; + int local_camera_proto = -1; + int file_proto = 0; + std::string local_rtsp_url; + std::string tutk_state; + bool is_support_remote_tunnel{false}; bool xcam_ai_monitoring{ false }; int xcam_ai_monitoring_hold_count = 0; @@ -648,8 +718,8 @@ public: bool is_support_1080dpi {false}; bool is_support_ai_monitoring {false}; bool is_support_ams_humidity {true}; - bool is_support_filament_edit_virtual_tray {true}; bool is_cloud_print_only {false}; + bool is_support_mqtt_alive {false}; /* sdcard */ MachineObject::SdcardState sdcard_state { NO_SDCARD }; @@ -660,7 +730,7 @@ public: std::vector hms_list; /* machine mqtt apis */ - int connect(bool is_anonymous = false); + int connect(bool is_anonymous = false, bool use_openssl = true); int disconnect(); json_diff print_json; @@ -678,6 +748,7 @@ public: std::string m_gcode_file; int gcode_file_prepare_percent = 0; BBLSubTask* subtask_; + BBLModelTask* model_task; std::string obj_subtask_id; // subtask_id == 0 for sdcard std::string subtask_name; bool is_sdcard_printing(); @@ -694,7 +765,7 @@ public: bool is_studio_cmd(int seq); /* command commands */ int command_get_version(bool with_retry = true); - int command_request_push_all(); + int command_request_push_all(bool request_now = false); int command_pushing(std::string cmd); int command_clean_print_error(std::string task_id, int print_error); @@ -745,6 +816,18 @@ public: bool is_support_command_calibration(); int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali); + // PA calibration + int command_start_pa_calibration(const X1CCalibInfos& pa_data, int mode = 0); // 0: automatic mode; 1: manual mode. default: automatic mode + int command_set_pa_calibration(const std::vector& pa_calib_values, bool is_auto_cali); + int command_delete_pa_calibration(const PACalibIndexInfo& pa_calib); + int command_get_pa_calibration_tab(float nozzle_diameter, const std::string &filament_id = ""); + int command_get_pa_calibration_result(float nozzle_diameter); + int commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info); + + // flow ratio calibration + int command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data); + int command_get_flow_ratio_calibration_result(float nozzle_diameter); + int command_unload_filament(); // camera control @@ -773,6 +856,7 @@ public: static bool is_in_printing_status(std::string status); void set_print_state(std::string status); + std::vector get_compatible_machine(); bool is_connected(); bool is_connecting(); @@ -782,7 +866,10 @@ public: bool is_function_supported(PrinterFunction func); std::vector get_resolution_supported(); bool is_support_print_with_timelapse(); - + bool is_camera_busy_off(); + int get_local_camera_proto(); + bool has_local_file_proto(); + bool has_remote_file_proto(); /* Msg for display MsgFn */ typedef std::function MsgFn; @@ -793,6 +880,8 @@ public: int publish_gcode(std::string gcode_str); BBLSubTask* get_subtask(); + BBLModelTask* get_modeltask(); + void set_modeltask(BBLModelTask* task); void update_slice_info(std::string project_id, std::string profile_id, std::string subtask_id, int plate_idx); bool m_firmware_valid { false }; @@ -817,6 +906,7 @@ public: std::map localMachineList; /* dev_id -> MachineObject*, localMachine SSDP */ std::map userMachineList; /* dev_id -> MachineObject* cloudMachine of User */ + void keep_alive(); void check_pushing(); MachineObject* get_default_machine(); @@ -863,6 +953,7 @@ public: static bool load_filaments_blacklist_config(std::string config_file); static void check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info); static std::string load_gcode(std::string type_str, std::string gcode_file); + static std::vector get_compatible_machine(std::string type_str); }; } // namespace Slic3r diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp index ad5276c83..855989b0b 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.cpp +++ b/src/slic3r/GUI/DownloadProgressDialog.cpp @@ -49,9 +49,9 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title) m_simplebook_status = new wxSimplebook(this); - m_simplebook_status->SetSize(wxSize(FromDIP(400), FromDIP(70))); - m_simplebook_status->SetMinSize(wxSize(FromDIP(400), FromDIP(70))); - m_simplebook_status->SetMaxSize(wxSize(FromDIP(400), FromDIP(70))); + m_simplebook_status->SetSize(wxSize(FromDIP(400), -1)); + m_simplebook_status->SetMinSize(wxSize(FromDIP(400), -1)); + m_simplebook_status->SetMaxSize(wxSize(FromDIP(400), -1)); //mode normal m_status_bar = std::make_shared(m_simplebook_status); @@ -98,8 +98,8 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title) sizer_install_failed->Add(m_install_hyperlink, 0, wxALIGN_CENTER | wxALL, 5); - m_panel_download_failed->SetSizer(sizer_install_failed); - m_panel_download_failed->Layout(); + m_panel_install_failed->SetSizer(sizer_install_failed); + m_panel_install_failed->Layout(); sizer_install_failed->Fit(m_panel_install_failed); m_sizer_main->Add(m_simplebook_status, 0, wxALL, FromDIP(20)); diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 7b1dafb35..4e3577b19 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -217,6 +217,7 @@ wxWindow* BitmapTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRec text_editor->SetInsertionPointEnd(); text_editor->SelectAll(); text_editor->SetBackgroundColour(parent->GetBackgroundColour()); + text_editor->SetForegroundColour(parent->GetForegroundColour()); return text_editor; } diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index a9d71e1aa..a7aef770b 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -675,6 +675,11 @@ void ExtrusionCalibration::update_combobox_filaments() curr_selection = filament_index; } + if (filament_it->name == obj->extrusion_cali_filament_name && !obj->extrusion_cali_filament_name.empty()) + { + curr_selection = filament_index; + } + wxString filament_name = wxString::FromUTF8(filament_it->name); filament_items.Add(filament_name); break; @@ -784,6 +789,11 @@ void ExtrusionCalibration::update_filament_info() if (filament_name.compare(m_comboBox_filament->GetValue()) == 0) { m_filament_type = filament_it->name; + if (obj) { + obj->extrusion_cali_filament_name = filament_it->name; + BOOST_LOG_TRIVIAL(info) << "set extrusion cali filament name = " << obj->extrusion_cali_filament_name; + } + // update nozzle temperature ConfigOption* opt_nozzle_temp = filament_it->config.option("nozzle_temperature"); if (opt_nozzle_temp) { diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index e56e5d3e1..5bf5bba57 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -385,7 +385,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true wxString y_str = thumbnail.GetNextToken(); if (y_str.ToDouble(&y) && !thumbnail.HasMoreTokens()) { if (m_opt_id == "bed_exclude_area") { - if (0 <= x && 0 <= y) { + if (0 <= x && x <= 256 && 0 <= y && y <= 256) { out_values.push_back(Vec2d(x, y)); continue; } @@ -511,10 +511,11 @@ void TextCtrl::BUILD() { m_combine_side_text = !m_opt.multiline; if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double) text_ctrl->GetSize().GetHeight() / m_em_unit; - temp->SetFont(m_opt.is_code ? - Slic3r::GUI::wxGetApp().code_font() : - Slic3r::GUI::wxGetApp().normal_font()); + if (m_opt.is_code) // BBS + temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + + temp->SetForegroundColour(StateColor::darkModeColorFor(*wxBLACK)); wxGetApp().UpdateDarkUI(temp); if (! m_opt.multiline && !wxOSX) @@ -1382,7 +1383,8 @@ boost::any& Choice::get_value() { if (m_opt.nullable && field->GetSelection() == -1) m_value = ConfigOptionEnumsGenericNullable::nil_value(); - else if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" || m_opt_id == "support_style") { + else if (m_opt_id == "top_surface_pattern" || m_opt_id == "bottom_surface_pattern" || m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" || + m_opt_id == "support_style") { const std::string& key = m_opt.enum_values[field->GetSelection()]; m_value = int(m_opt.enum_keys_map->at(key)); } diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 6adb122d9..5b9295222 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -105,6 +105,16 @@ static std::array decode_color(const std::string& color) { ret[j] = float(digit1 * 16 + digit2) * INV_255; } } + else if (color.size() == 9 && color.front() == '#') { + for (size_t j = 0; j < 4; ++j) { + int digit1 = hex_digit_to_int(*c++); + int digit2 = hex_digit_to_int(*c++); + if (digit1 == -1 || digit2 == -1) + break; + + ret[j] = float(digit1 * 16 + digit2) * INV_255; + } + } return ret; } @@ -317,7 +327,7 @@ void GCodeViewer::SequentialRangeCap::reset() { void GCodeViewer::SequentialView::Marker::init(std::string filename) { if (filename.empty()) { - //m_model.init_from(stilized_arrow(16, 1.5f, 3.0f, 0.8f, 3.0f)); + m_model.init_from(stilized_arrow(16, 1.5f, 3.0f, 0.8f, 3.0f)); } else { m_model.init_from_file(filename); } @@ -1150,6 +1160,9 @@ void GCodeViewer::refresh(const GCodeProcessorResult& gcode_result, const std::v for (auto item : m_tools.m_tool_visibles) item = true; } + for (int i = 0; i < m_tools.m_tool_colors.size(); i++) { + m_tools.m_tool_colors[i] = adjust_color_for_rendering(m_tools.m_tool_colors[i]); + } // ensure there are enough colors defined while (m_tools.m_tool_colors.size() < std::max(size_t(1), gcode_result.extruders_count)) { m_tools.m_tool_colors.push_back(decode_color("#FF8000")); @@ -1175,7 +1188,7 @@ void GCodeViewer::refresh(const GCodeProcessorResult& gcode_result, const std::v m_extrusions.ranges.temperature.update_from(curr.temperature); if (curr.extrusion_role != erCustom || is_visible(erCustom)) m_extrusions.ranges.volumetric_rate.update_from(round_to_bin(curr.volumetric_rate())); - + if (curr.layer_duration > 0.f) { m_extrusions.ranges.layer_duration.update_from(curr.layer_duration); m_extrusions.ranges.layer_duration_log.update_from(curr.layer_duration); @@ -1213,7 +1226,7 @@ void GCodeViewer::refresh_render_paths() void GCodeViewer::update_shells_color_by_extruder(const DynamicPrintConfig* config) { if (config != nullptr) - m_shells.volumes.update_colors_by_extruder(config); + m_shells.volumes.update_colors_by_extruder(config,false); } //BBS: always load shell at preview @@ -3829,7 +3842,7 @@ void GCodeViewer::render_toolpaths() #if ENABLE_GCODE_VIEWER_STATISTICS this #endif // ENABLE_GCODE_VIEWER_STATISTICS - ](std::vector::iterator it_path, std::vector::iterator it_end, GLShaderProgram& shader, int uniform_color) { + ](std::vector::reverse_iterator it_path, std::vector::reverse_iterator it_end, GLShaderProgram& shader, int uniform_color) { glsafe(::glEnable(GL_VERTEX_PROGRAM_POINT_SIZE)); glsafe(::glEnable(GL_POINT_SPRITE)); @@ -3856,7 +3869,7 @@ void GCodeViewer::render_toolpaths() #if ENABLE_GCODE_VIEWER_STATISTICS this #endif // ENABLE_GCODE_VIEWER_STATISTICS - ](std::vector::iterator it_path, std::vector::iterator it_end, GLShaderProgram& shader, int uniform_color) { + ](std::vector::reverse_iterator it_path, std::vector::reverse_iterator it_end, GLShaderProgram& shader, int uniform_color) { for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) { const RenderPath& path = *it; // Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415. @@ -3874,7 +3887,7 @@ void GCodeViewer::render_toolpaths() #if ENABLE_GCODE_VIEWER_STATISTICS this #endif // ENABLE_GCODE_VIEWER_STATISTICS - ](std::vector::iterator it_path, std::vector::iterator it_end, GLShaderProgram& shader, int uniform_color) { + ](std::vector::reverse_iterator it_path, std::vector::reverse_iterator it_end, GLShaderProgram& shader, int uniform_color) { for (auto it = it_path; it != it_end && it_path->ibuffer_id == it->ibuffer_id; ++it) { const RenderPath& path = *it; // Some OpenGL drivers crash on empty glMultiDrawElements, see GH #7415. @@ -4004,13 +4017,15 @@ void GCodeViewer::render_toolpaths() default: break; } int uniform_color = shader->get_uniform_location("uniform_color"); - auto it_path = buffer.render_paths.begin(); + auto it_path = buffer.render_paths.rbegin(); //BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":buffer indices size %1%, render_path size %2% ")%buffer.indices.size() %buffer.render_paths.size(); - for (unsigned int ibuffer_id = 0; ibuffer_id < static_cast(buffer.indices.size()); ++ibuffer_id) { + unsigned int indices_count = static_cast(buffer.indices.size()); + for (unsigned int index = 0; index < indices_count; ++index) { + unsigned int ibuffer_id = indices_count - index - 1; const IBuffer& i_buffer = buffer.indices[ibuffer_id]; // Skip all paths with ibuffer_id < ibuffer_id. - for (; it_path != buffer.render_paths.end() && it_path->ibuffer_id < ibuffer_id; ++ it_path) ; - if (it_path == buffer.render_paths.end() || it_path->ibuffer_id > ibuffer_id) + for (; it_path != buffer.render_paths.rend() && it_path->ibuffer_id > ibuffer_id; ++ it_path) ; + if (it_path == buffer.render_paths.rend() || it_path->ibuffer_id < ibuffer_id) // Not found. This shall not happen. continue; @@ -4029,16 +4044,16 @@ void GCodeViewer::render_toolpaths() switch (buffer.render_primitive_type) { case TBuffer::ERenderPrimitiveType::Point: { - render_as_points(it_path, buffer.render_paths.end(), *shader, uniform_color); + render_as_points(it_path, buffer.render_paths.rend(), *shader, uniform_color); break; } case TBuffer::ERenderPrimitiveType::Line: { glsafe(::glLineWidth(static_cast(line_width(zoom)))); - render_as_lines(it_path, buffer.render_paths.end(), *shader, uniform_color); + render_as_lines(it_path, buffer.render_paths.rend(), *shader, uniform_color); break; } case TBuffer::ERenderPrimitiveType::Triangle: { - render_as_triangles(it_path, buffer.render_paths.end(), *shader, uniform_color); + render_as_triangles(it_path, buffer.render_paths.rend(), *shader, uniform_color); break; } default: { break; } @@ -4161,6 +4176,10 @@ void GCodeViewer::render_all_plates_stats(const std::vector filament_densities = gcode_result_list.front()->filament_densities; std::vector filament_colors = decode_colors(wxGetApp().plater()->get_extruder_colors_from_plater_config(gcode_result_list.back())); + for (int i = 0; i < filament_colors.size(); i++) { + filament_colors[i] = adjust_color_for_rendering(filament_colors[i]); + } + bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; float window_padding = 4.0f * m_scale; const float icon_size = ImGui::GetTextLineHeight() * 0.7; @@ -4304,18 +4323,20 @@ void GCodeViewer::render_all_plates_stats(const std::vectorfirst + 1), offsets[0] }); char buf[64]; + double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1.0; if (show_detailed_statistics_page) { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); columns_offsets.push_back({ buf, offsets[1] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m_all_plates[i], flushed_filaments_g_all_plates[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m_all_plates[i], flushed_filaments_g_all_plates[i] / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i] + flushed_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m_all_plates[i] + flushed_filaments_m_all_plates[i]), + (model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i]) / unit_conver); columns_offsets.push_back({ buf, offsets[3] }); } else { - ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i]); + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); } @@ -4409,21 +4430,21 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv default: case EItemType::Rect: { draw_list->AddRectFilled({ pos.x + 1.0f * m_scale, pos.y + 3.0f * m_scale }, { pos.x + icon_size - 1.0f * m_scale, pos.y + icon_size + 1.0f * m_scale }, - ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f })); + ImGui::GetColorU32({color[0], color[1], color[2], color[3]})); break; } case EItemType::Circle: { ImVec2 center(0.5f * (pos.x + pos.x + icon_size), 0.5f * (pos.y + pos.y + icon_size + 5.0f)); - draw_list->AddCircleFilled(center, 0.5f * icon_size, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 16); + draw_list->AddCircleFilled(center, 0.5f * icon_size, ImGui::GetColorU32({color[0], color[1], color[2], color[3]}), 16); break; } case EItemType::Hexagon: { ImVec2 center(0.5f * (pos.x + pos.x + icon_size), 0.5f * (pos.y + pos.y + icon_size + 5.0f)); - draw_list->AddNgonFilled(center, 0.5f * icon_size, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 6); + draw_list->AddNgonFilled(center, 0.5f * icon_size, ImGui::GetColorU32({color[0], color[1], color[2], color[3]}), 6); break; } case EItemType::Line: { - draw_list->AddLine({ pos.x + 1, pos.y + icon_size + 2 }, { pos.x + icon_size - 1, pos.y + 4 }, ImGui::GetColorU32({ color[0], color[1], color[2], 1.0f }), 3.0f); + draw_list->AddLine({pos.x + 1, pos.y + icon_size + 2}, {pos.x + icon_size - 1, pos.y + 4}, ImGui::GetColorU32({color[0], color[1], color[2], color[3]}), 3.0f); break; case EItemType::None: break; @@ -4938,7 +4959,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({ std::to_string(extruder_idx + 1), offsets[0] }); char buf[64]; - ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[0] , model_used_filaments_g[0]); + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[0], model_used_filaments_g[0] / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_idx], columns_offsets, false); @@ -4972,19 +4993,20 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv char buf[64]; if (show_flushed_filaments) { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver); columns_offsets.push_back({ buf, offsets[1] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m[i], flushed_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m[i], flushed_filaments_g[i] / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i] + flushed_filaments_m[i], model_used_filaments_g[i] + flushed_filaments_g[i]); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m[i] + flushed_filaments_m[i]), + (model_used_filaments_g[i] + flushed_filaments_g[i]) / unit_conver); columns_offsets.push_back({ buf, offsets[3] }); } else { char buf[64]; - ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[i], model_used_filaments_g[i]); - columns_offsets.push_back({ buf, offsets[2] }); + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver); + columns_offsets.push_back({buf, offsets[2]}); } append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_idx], columns_offsets, false, filament_visible, [this, extruder_idx]() { @@ -5033,20 +5055,20 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector> columns_offsets; columns_offsets.push_back({ _u8L("Total"), offsets[0] }); if (!show_flushed_filaments) { - ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", total_model_used_filament_m, total_model_used_filament_g); + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", total_model_used_filament_m, total_model_used_filament_g / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets); } else { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m, total_model_used_filament_g); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m, total_model_used_filament_g / unit_conver); columns_offsets.push_back({ buf, offsets[1] }); - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_flushed_filament_m, total_flushed_filament_g); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_flushed_filament_m, total_flushed_filament_g / unit_conver); columns_offsets.push_back({ buf, offsets[2] }); bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (total_model_used_filament_m + total_flushed_filament_m) * 1000 / /*1000*/koef, (total_model_used_filament_g + total_flushed_filament_g) / unit_conver); + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m + total_flushed_filament_m, (total_model_used_filament_g + total_flushed_filament_g) / unit_conver); columns_offsets.push_back({ buf, offsets[3] }); append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index d66c136c8..6bbce3dbf 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -492,7 +492,7 @@ class GCodeViewer std::vector& get_endpoints() { return m_endpoints; } double get_z_at(unsigned int id) const { return (id < m_zs.size()) ? m_zs[id] : 0.0; } Endpoints get_endpoints_at(unsigned int id) const { return (id < m_endpoints.size()) ? m_endpoints[id] : Endpoints(); } - int get_l_at(double z) const + int get_l_at(float z) const { auto iter = std::upper_bound(m_zs.begin(), m_zs.end(), z); return std::distance(m_zs.begin(), iter); @@ -737,7 +737,6 @@ public: //BBS ConflictResultOpt m_conflict_result; - private: std::vector m_plater_extruder; bool m_gl_data_initialized{ false }; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 1f1b60e8f..af4a24d65 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -119,7 +119,7 @@ RetinaHelper::~RetinaHelper() {} float RetinaHelper::get_scale_factor() { return float(m_window->GetContentScaleFactor()); } #endif // __WXGTK3__ -// Fixed the collision between BuildVolume_Type::Convex and macro Convex defined inside /usr/include/X11/X.h that is included by WxWidgets 3.0. +// Fixed the collision between BuildVolume::Type::Convex and macro Convex defined inside /usr/include/X11/X.h that is included by WxWidgets 3.0. #if defined(__linux__) && defined(Convex) #undef Convex #endif @@ -287,7 +287,7 @@ void GLCanvas3D::LayersEditing::render_variable_layer_height_dialog(const GLCanv ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.81f, 0.81f, 0.81f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, ImVec4(0.00f, 0.59f, 0.53f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); if(ImGui::BBLSliderScalar("##radius_slider", ImGuiDataType_S32, &radius, &v_min, &v_max)){ radius = std::clamp(radius, 1, 10); m_smooth_params.radius = (unsigned int)radius; @@ -298,9 +298,9 @@ void GLCanvas3D::LayersEditing::render_variable_layer_height_dialog(const GLCanv input_align = std::max(input_align, ImGui::GetCursorPosX()); ImGui::SetCursorPosX(input_align); ImGui::PushItemWidth(input_box_width); - ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.59f, 0.53f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.00f, 0.59f, 0.53f, 0.00f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.00f, 0.59f, 0.53f, 0.00f)); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.00f, 0.68f, 0.26f, 0.00f)); ImGui::BBLDragScalar("##radius_input", ImGuiDataType_S32, &radius, 1, &v_min, &v_max); ImGui::PopStyleColor(3); @@ -999,6 +999,7 @@ void GLCanvas3D::SequentialPrintClearance::render() wxDEFINE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent); +wxDEFINE_EVENT(EVT_GLCANVAS_PLATE_NAME_CHANGE, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_PLATE_SELECT, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RIGHT_CLICK, RBtnEvent); wxDEFINE_EVENT(EVT_GLCANVAS_PLATE_RIGHT_CLICK, RBtnPlateEvent); @@ -1046,30 +1047,22 @@ const double GLCanvas3D::DefaultCameraZoomToPlateMarginFactor = 1.25; void GLCanvas3D::load_arrange_settings() { std::string dist_fff_str = - wxGetApp().app_config->get("arrange", "min_object_distance_fff"); + wxGetApp().app_config->get("arrange", "min_object_distance"); std::string dist_fff_seq_print_str = - wxGetApp().app_config->get("arrange", "min_object_distance_seq_print_fff"); + wxGetApp().app_config->get("arrange", "min_object_distance_seq_print"); std::string dist_sla_str = wxGetApp().app_config->get("arrange", "min_object_distance_sla"); std::string en_rot_fff_str = - wxGetApp().app_config->get("arrange", "enable_rotation_fff"); + wxGetApp().app_config->get("arrange", "enable_rotation"); std::string en_rot_fff_seqp_str = wxGetApp().app_config->get("arrange", "enable_rotation_seq_print"); std::string en_rot_sla_str = wxGetApp().app_config->get("arrange", "enable_rotation_sla"); - - std::string en_allow_multiple_materials_str = - wxGetApp().app_config->get("arrange", "allow_multi_materials_on_same_plate"); - - std::string en_avoid_region_str = - wxGetApp().app_config->get("arrange", "avoid_extrusion_cali_region"); - - if (!dist_fff_str.empty()) m_arrange_settings_fff.distance = std::stof(dist_fff_str); @@ -1081,27 +1074,27 @@ void GLCanvas3D::load_arrange_settings() m_arrange_settings_sla.distance = std::stof(dist_sla_str); if (!en_rot_fff_str.empty()) - m_arrange_settings_fff.enable_rotation = (en_rot_fff_str == "1" || en_rot_fff_str == "true"); - - if (!en_allow_multiple_materials_str.empty()) - m_arrange_settings_fff.allow_multi_materials_on_same_plate = (en_allow_multiple_materials_str == "1" || en_allow_multiple_materials_str == "true"); - + m_arrange_settings_fff.enable_rotation = (en_rot_fff_str == "1" || en_rot_fff_str == "yes"); if (!en_rot_fff_seqp_str.empty()) - m_arrange_settings_fff_seq_print.enable_rotation = (en_rot_fff_seqp_str == "1" || en_rot_fff_seqp_str == "true"); - - if(!en_avoid_region_str.empty()) - m_arrange_settings_fff.avoid_extrusion_cali_region = (en_avoid_region_str == "1" || en_avoid_region_str == "true"); + m_arrange_settings_fff_seq_print.enable_rotation = (en_rot_fff_seqp_str == "1" || en_rot_fff_seqp_str == "yes"); if (!en_rot_sla_str.empty()) - m_arrange_settings_sla.enable_rotation = (en_rot_sla_str == "1" || en_rot_sla_str == "true"); + m_arrange_settings_sla.enable_rotation = (en_rot_sla_str == "1" || en_rot_sla_str == "yes"); //BBS: add specific arrange settings m_arrange_settings_fff_seq_print.is_seq_print = true; } -PrinterTechnology GLCanvas3D::current_printer_technology() const +int GLCanvas3D::GetHoverId() { + if (m_hover_plate_idxs.size() == 0) { + return -1; } + return m_hover_plate_idxs.front(); + +} + +PrinterTechnology GLCanvas3D::current_printer_technology() const { return m_process->current_printer_technology(); } @@ -3125,15 +3118,12 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case WXK_BACK: { post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); break; } #endif case WXK_ESCAPE: { deselect_all(); break; } - case WXK_F5: { - if (wxGetApp().mainframe->is_printer_view()) - wxGetApp().mainframe->load_printer_url(); - - //if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) || - // (wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty())) - // post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK)); - break; - } + //case WXK_F5: { + // if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) || + // (wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty())) + // post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK)); + // break; + //} // BBS: use keypad to change extruder case '1': @@ -3185,8 +3175,10 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) } //case 'B': //case 'b': { zoom_to_bed(); break; } +#if !BBL_RELEASE_TO_PUBLIC case 'C': case 'c': { m_gcode_viewer.toggle_gcode_window_visibility(); m_dirty = true; request_extra_frame(); break; } +#endif //case 'G': //case 'g': { // if ((evt.GetModifiers() & shiftMask) != 0) { @@ -3384,11 +3376,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) else if (m_tab_down && keyCode == WXK_TAB && !evt.HasAnyModifiers()) { // Enable switching between 3D and Preview with Tab // m_canvas->HandleAsNavigationKey(evt); // XXX: Doesn't work in some cases / on Linux - post_event(SimpleEvent(EVT_GLCANVAS_TAB)); - } - else if (keyCode == WXK_TAB && evt.ShiftDown() && !evt.ControlDown() && ! wxGetApp().is_gcode_viewer()) { - // Collapse side-panel with Shift+Tab - post_event(SimpleEvent(EVT_GLCANVAS_COLLAPSE_SIDEBAR)); + //post_event(SimpleEvent(EVT_GLCANVAS_TAB)); } else if (keyCode == WXK_SHIFT) { translationProcessor.process(evt); @@ -5056,7 +5044,7 @@ void GLCanvas3D::update_sequential_clearance() // the results are then cached for following displacements if (m_sequential_print_clearance_first_displacement) { m_sequential_print_clearance.m_hull_2d_cache.clear(); - float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_radius.value - EPSILON)); + float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_max_radius.value - EPSILON)); double mitter_limit = scale_(0.1); m_sequential_print_clearance.m_hull_2d_cache.reserve(m_model->objects.size()); for (size_t i = 0; i < m_model->objects.size(); ++i) { @@ -5407,22 +5395,20 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo ImGui::Separator(); if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings.enable_rotation)) { settings_out.enable_rotation = settings.enable_rotation; - appcfg->set("arrange", rot_key.c_str(), settings_out.enable_rotation); + appcfg->set("arrange", rot_key.c_str(), settings_out.enable_rotation? "1" : "0"); settings_changed = true; } if (imgui->bbl_checkbox(_L("Allow multiple materials on same plate"), settings.allow_multi_materials_on_same_plate)) { settings_out.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; - appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate ); + appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate ? "1" : "0"); settings_changed = true; } // only show this option if the printer has micro Lidar and can do first layer scan DynamicPrintConfig ¤t_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const bool has_lidar = preset_bundle->printers.get_edited_preset().has_lidar(preset_bundle); auto op = current_config.option("scan_first_layer"); - if (has_lidar && op && op->getBool()) { + if (op && op->getBool()) { if (imgui->bbl_checkbox(_L("Avoid extrusion calibration region"), settings.avoid_extrusion_cali_region)) { settings_out.avoid_extrusion_cali_region = settings.avoid_extrusion_cali_region; appcfg->set("arrange", avoid_extrusion_key.c_str(), settings_out.avoid_extrusion_cali_region ? "1" : "0"); @@ -5581,19 +5567,25 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const //camera.select_view("top"); } else { - camera.zoom_to_box(volumes_box); - const Vec3d& target = camera.get_target(); - double distance = camera.get_distance(); - camera.select_view("iso"); - camera.apply_view_matrix(); + //camera.zoom_to_box(volumes_box); - camera.apply_projection(plate_build_volume); + //const Vec3d& target = camera.get_target(); + //double distance = camera.get_distance(); + //camera.look_at(target - 0.707 * distance * Vec3d::UnitY() + 0.3 * distance * Vec3d::UnitZ(), target, Vec3d::UnitY() + Vec3d::UnitZ()); + + //BBS: use original iso view for thumbnail + camera.select_view("iso"); + camera.zoom_to_box(volumes_box); } camera.apply_view_matrix(); camera.apply_projection(plate_build_volume); + //double near_z = -1.0; + //double far_z = -1.0; + //camera.apply_projection(volumes_box, near_z, far_z); + //GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); if (!for_picking && (shader == nullptr)) { BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail with no picking: shader is null, return directly"); @@ -5601,8 +5593,17 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const } //if (thumbnail_params.transparent_background) - glsafe(::glClearColor(0.f, 0.f, 0.f, 0.f)); - + if (for_picking) + glsafe(::glClearColor(0.f, 0.f, 0.f, 0.f)); + else { + //glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); + //glsafe(::glClearColor(0.50f, 0.5f, 0.5f, 1.0f)); + //glsafe(::glClearColor(0.121568f, 0.121568f, 0.121568f, 1.0f)); + //glsafe(::glClearColor(0.17647f, 0.17647f, 0.17647f, 1.0f)); + //glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); + //glsafe(::glClearColor(0.37647f, 0.37647f, 0.37647f, 0.5f)); too lite + glsafe(::glClearColor(0.0f, 0.0f, 0.0f, 0.0f)); + } glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); @@ -6104,7 +6105,12 @@ bool GLCanvas3D::_init_main_toolbar() item.icon_filename = m_is_dark ? "toolbar_arrange_dark.svg" : "toolbar_arrange.svg"; item.tooltip = _utf8(L("Arrange all objects")) + " [A]\n" + _utf8(L("Arrange objects on selected plates")) + " [Shift+A]"; item.sprite_id++; - item.left.action_callback = []() {}; + item.left.action_callback = [this]() { + if (m_canvas != nullptr) { + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_update_property("auto_arrange", std::to_string(++auto_arrange_count)); + } + }; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); }; item.left.toggable = true; //BBS: GUI refactor: adjust the main toolbar position @@ -6129,7 +6135,13 @@ bool GLCanvas3D::_init_main_toolbar() item.tooltip = _utf8(L("Split to objects")); item.sprite_id++; item.left.render_callback = nullptr; - item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_SPLIT_OBJECTS)); }; + item.left.action_callback = [this]() { + if (m_canvas != nullptr) { + wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_SPLIT_OBJECTS)); + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_update_property("split_to_objects", std::to_string(++split_to_objects_count)); + } + }; item.visibility_callback = GLToolbarItem::Default_Visibility_Callback; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_split_to_objects(); }; if (!m_main_toolbar.add_item(item)) @@ -6139,7 +6151,13 @@ bool GLCanvas3D::_init_main_toolbar() item.icon_filename = m_is_dark ? "split_parts_dark.svg" : "split_parts.svg"; item.tooltip = _utf8(L("Split to parts")); item.sprite_id++; - item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_SPLIT_VOLUMES)); }; + item.left.action_callback = [this]() { + if (m_canvas != nullptr) { + wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_SPLIT_VOLUMES)); + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_update_property("split_to_part", std::to_string(++split_to_part_count)); + } + }; item.visibility_callback = GLToolbarItem::Default_Visibility_Callback; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_split_to_volumes(); }; if (!m_main_toolbar.add_item(item)) @@ -6149,7 +6167,13 @@ bool GLCanvas3D::_init_main_toolbar() item.icon_filename = m_is_dark ? "toolbar_variable_layer_height_dark.svg" : "toolbar_variable_layer_height.svg"; item.tooltip = _utf8(L("Variable layer height")); item.sprite_id++; - item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); }; + item.left.action_callback = [this]() { + if (m_canvas != nullptr) { + wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_update_property("custom_height", std::to_string(++custom_height_count)); + } + }; item.visibility_callback = [this]()->bool { bool res = current_printer_technology() == ptFFF; // turns off if changing printer technology @@ -6173,7 +6197,6 @@ bool GLCanvas3D::_init_select_plate_toolbar() bool result = item->image_texture.load_from_svg_file(path + "im_all_plates_stats.svg", false, false, false, 128); result = result && item->image_texture_transparent.load_from_svg_file(path + "im_all_plates_stats_transparent.svg", false, false, false, 128); m_sel_plate_toolbar.m_all_plates_stats_item = item; - return result; } @@ -6253,7 +6276,13 @@ bool GLCanvas3D::_init_assemble_view_toolbar() item.tooltip = _utf8(L("Assembly View")); item.sprite_id = 1; item.left.toggable = false; - item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLVIEWTOOLBAR_ASSEMBLE)); }; + item.left.action_callback = [this]() { + if (m_canvas != nullptr) { + wxPostEvent(m_canvas, SimpleEvent(EVT_GLVIEWTOOLBAR_ASSEMBLE)); m_gizmos.reset_all_states(); wxGetApp().plater()->get_assmeble_canvas3D()->get_gizmos_manager().reset_all_states(); + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_update_property("custom_painting", std::to_string(++custom_painting_count)); + } + }; item.left.render_callback = GLToolbarItem::Default_Render_Callback; item.visible = true; item.visibility_callback = [this]()->bool { return true; }; @@ -6722,22 +6751,22 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with if (const BuildVolume &build_volume = m_bed.build_volume(); build_volume.valid()) { switch (build_volume.type()) { - case BuildVolume_Type::Rectangle: { + case BuildVolume::Type::Rectangle: { const BoundingBox3Base bed_bb = build_volume.bounding_volume().inflated(BuildVolume::SceneEpsilon); m_volumes.set_print_volume({ 0, // Rectangle { float(bed_bb.min.x()), float(bed_bb.min.y()), float(bed_bb.max.x()), float(bed_bb.max.y()) }, { 0.0f, float(build_volume.printable_height()) } }); break; } - case BuildVolume_Type::Circle: { + case BuildVolume::Type::Circle: { m_volumes.set_print_volume({ 1, // Circle { unscaled(build_volume.circle().center.x()), unscaled(build_volume.circle().center.y()), unscaled(build_volume.circle().radius + BuildVolume::SceneEpsilon), 0.0f }, { 0.0f, float(build_volume.printable_height() + BuildVolume::SceneEpsilon) } }); break; } default: - case BuildVolume_Type::Convex: - case BuildVolume_Type::Custom: { + case BuildVolume::Type::Convex: + case BuildVolume::Type::Custom: { m_volumes.set_print_volume({ static_cast(type), { -FLT_MAX, -FLT_MAX, FLT_MAX, FLT_MAX }, { -FLT_MAX, FLT_MAX } } @@ -8970,8 +8999,8 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) std::string objName2 = m_gcode_viewer.m_conflict_result.value()._objName2; double height = m_gcode_viewer.m_conflict_result.value()._height; int layer = m_gcode_viewer.m_conflict_result.value().layer; - text = (boost::format(_u8L("Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please separate the conflicted objects farther (%s <-> %s).")) % layer % - height % objName1 % objName2) + text = (boost::format(_u8L("Conflicts of gcode paths have been found at layer %d. Please separate the conflicted objects farther (%s <-> %s).")) % (layer + 1) % + objName1 % objName2) .str(); prevConflictText = text; const PrintObject *obj2 = reinterpret_cast(m_gcode_viewer.m_conflict_result.value()._obj2); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 1f2b090f3..8eb5158a0 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -138,6 +138,7 @@ private: wxDECLARE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent); +wxDECLARE_EVENT(EVT_GLCANVAS_PLATE_NAME_CHANGE, SimpleEvent); //BBS: declare EVT_GLCANVAS_PLATE_SELECT wxDECLARE_EVENT(EVT_GLCANVAS_PLATE_SELECT, SimpleEvent); @@ -413,6 +414,7 @@ class GLCanvas3D void render(const std::vector& sorted_instances) const; }; + class Tooltip { std::string m_text; @@ -498,6 +500,8 @@ public: CanvasAssembleView = 2, }; + int GetHoverId(); + private: bool m_is_dark = false; wxGLCanvas* m_canvas; @@ -593,6 +597,7 @@ private: Labels m_labels; Tooltip m_tooltip; bool m_tooltip_enabled{ true }; + Slope m_slope; OrientSettings m_orient_settings_fff, m_orient_settings_sla; diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index 06b89a56b..1a7750d6f 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -483,7 +483,7 @@ bool GLTexture::generate_from_text(const std::string &text_str, wxFont &font, wx return false; } - wxString msg = _(text_str); + wxString msg = from_u8(text_str); wxMemoryDC memDC; memDC.SetFont(font); diff --git a/src/slic3r/GUI/GLTexture.hpp b/src/slic3r/GUI/GLTexture.hpp index 53fbe1a6a..d898a10bd 100644 --- a/src/slic3r/GUI/GLTexture.hpp +++ b/src/slic3r/GUI/GLTexture.hpp @@ -112,6 +112,7 @@ namespace GUI { bool generate_from_text_string(const std::string& text_str, wxFont& font, wxColor background = *wxBLACK, wxColor foreground = *wxWHITE); unsigned int get_id() const { return m_id; } + int get_original_width() const { return m_original_width; } int get_width() const { return m_width; } int get_height() const { return m_height; } diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 40b4ff123..1672726af 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -554,7 +554,7 @@ void desktop_open_any_folder( const std::string path ) #elif __APPLE__ openFolderForFile(from_u8(path)); #else - const char *argv[] = {"xdg-open", path.data(), nullptr}; + const char *argv[] = {"nautilus", path.data(), nullptr}; // Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, // because they may mess up the environment expected by the file manager. diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index a45415392..e4a4df832 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4,7 +4,15 @@ #include "GUI_ObjectList.hpp" #include "GUI_Factories.hpp" #include "format.hpp" -#include "I18N.hpp" + +// Localization headers: include libslic3r version first so everything in this file +// uses the slic3r/GUI version (the macros will take precedence over the functions). +// Also, there is a check that the former is not included from slic3r module. +// This is the only place where we want to allow that, so define an override macro. +#define SLIC3R_ALLOW_LIBSLIC3R_I18N_IN_SLIC3R +#include "libslic3r/I18N.hpp" +#undef SLIC3R_ALLOW_LIBSLIC3R_I18N_IN_SLIC3R +#include "slic3r/GUI/I18N.hpp" #include #include @@ -180,7 +188,7 @@ bool is_associate_files(std::wstring extend) wchar_t app_path[MAX_PATH]; ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); - std::wstring prog_id = L" Orca.Slicer.1"; + std::wstring prog_id = L" Bambu.Studio.1"; std::wstring reg_base = L"Software\\Classes"; std::wstring reg_extension = reg_base + L"\\." + extend; @@ -290,13 +298,14 @@ public: memDc.SetTextForeground(StateColor::darkModeColorFor(wxColor(134, 134, 134))); memDc.DrawLabel(m_constant_text.version, version_rect, wxALIGN_LEFT | wxALIGN_BOTTOM); - auto bs_version = wxString::Format("Based on BambuStudio and PrusaSlicer").ToStdString(); - memDc.SetFont(Label::Body_12); - wxSize text_rect = memDc.GetTextExtent(bs_version); - int start_x = (title_rect.GetLeft() + version_rect.GetRight()) / 2 - text_rect.GetWidth()/2; +#if BBL_INTERNAL_TESTING + wxSize text_rect = memDc.GetTextExtent("Internal Version"); + int start_x = (title_rect.GetLeft() + version_rect.GetRight()) / 2 - text_rect.GetWidth(); int start_y = version_rect.GetBottom() + 10; wxRect internal_sign_rect(wxPoint(start_x, start_y), wxSize(text_rect)); - memDc.DrawLabel(bs_version, internal_sign_rect, wxALIGN_RIGHT); + memDc.SetFont(m_constant_text.title_font); + memDc.DrawLabel("Internal Version", internal_sign_rect, wxALIGN_TOP | wxALIGN_LEFT); +#endif // load bitmap for logo BitmapCache bmp_cache; @@ -564,11 +573,12 @@ private: title = wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME; // dynamically get the version to display -// #if BBL_INTERNAL_TESTING - // version = _L("Internal Version") + " " + std::string(SLIC3R_VERSION); -// #else - // version = _L("") + " " + std::string(SoftFever_VERSION); -// #endif + auto version_text = GUI_App::format_display_version(); +#if BBL_INTERNAL_TESTING + version = _L("Internal Version") + " " + std::string(version_text); +#else + version = _L("Version") + " " + std::string(version_text); +#endif // credits infornation credits = title; @@ -728,7 +738,7 @@ static const FileWildcards file_wildcards_by_type[FT_SIZE] = { /* FT_OBJ */ { "OBJ files"sv, { ".obj"sv } }, /* FT_AMF */ { "AMF files"sv, { ".amf"sv, ".zip.amf"sv, ".xml"sv } }, /* FT_3MF */ { "3MF files"sv, { ".3mf"sv } }, - /* FT_GCODE */ { "G-code files"sv, { ".gcode"sv, ".3mf"sv } }, + /* FT_GCODE */ { "G-code files"sv, { ".gcode"sv } }, /* FT_MODEL */ {"Supported files"sv, {".3mf"sv, ".stl"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv }}, /* FT_PROJECT */ { "Project files"sv, { ".3mf"sv} }, /* FT_GALLERY */ { "Known files"sv, { ".stl"sv, ".obj"sv } }, @@ -952,22 +962,22 @@ static void generic_exception_handle() // and terminate the app so it is at least certain to happen now. BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what(); flush_logs(); - wxString errmsg = wxString::Format(_L("OrcaSlicer will terminate because of running out of memory." + wxString errmsg = wxString::Format(_L("BambuStudio 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.")); wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Fatal error"), wxOK | wxICON_ERROR); std::terminate(); //throw; } catch (const boost::io::bad_format_string& ex) { - BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); - flush_logs(); - wxString errmsg = _L("OrcaSlicer will terminate because of a localization error. " + BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); + flush_logs(); + wxString errmsg = _L("BambuStudio will terminate because of a localization error. " "It will be appreciated if you report the specific scenario this issue happened."); wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Critical error"), wxOK | wxICON_ERROR); std::terminate(); //throw; } catch (const std::exception& ex) { - wxLogError(format_wxstr(_L("OrcaSlicer got an unhandled exception: %1%"), ex.what())); + wxLogError(format_wxstr(_L("BambuStudio got an unhandled exception: %1%"), ex.what())); BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); flush_logs(); throw; @@ -975,18 +985,24 @@ static void generic_exception_handle() //#endif } -static std::vector split_str(const std::string& src, const std::string& separator) +std::vector GUI_App::split_str(std::string src, std::string separator) { - size_t pos; - size_t start_pos = 0; - vector result_str; - while ((pos = src.find(separator, start_pos)) != string::npos) + std::string::size_type pos; + std::vector result; + src += separator; + int size = src.size(); + + for (int i = 0; i < size; i++) { - result_str.emplace_back(src.substr(start_pos, pos - start_pos)); - start_pos = pos + separator.size(); + pos = src.find(separator, i); + if (pos < size) + { + std::string s = src.substr(i, pos - i); + result.push_back(s); + i = pos + separator.size() - 1; + } } - result_str.emplace_back(src.substr(start_pos, src.size() - pos - separator.size())); - return result_str; + return result; } void GUI_App::post_init() @@ -998,26 +1014,29 @@ void GUI_App::post_init() bool switch_to_3d = false; if (!this->init_params->input_files.empty()) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", init with input files, size %1%, input_gcode %2%") %this->init_params->input_files.size() %this->init_params->input_gcode; - - if (this->init_params->input_files.size() == 1 && - boost::starts_with(this->init_params->input_files.front(), "orcaslicer://open")) { - auto input_str_arr = split_str(this->init_params->input_files.front(), "orcaslicer://open/?file="); + boost::starts_with(this->init_params->input_files.front(), "bambustudio://open")) { + + std::string download_params_url = url_decode(this->init_params->input_files.front()); + auto input_str_arr = split_str(download_params_url, "file="); + + std::string download_url; + for (auto input_str : input_str_arr) { + if ( boost::starts_with(input_str, "http://") || boost::starts_with(input_str, "https://")) { + download_url = input_str; + } - std::string download_origin_url; - for (auto input_str:input_str_arr) { - if (!input_str.empty()) download_origin_url = input_str; } - std::string download_file_url = url_decode(download_origin_url); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << download_file_url; - if (!download_file_url.empty() && ( boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://")) ) { - request_model_download(download_origin_url); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("download_url %1%") % download_url; + + if (!download_url.empty()) { + m_download_file_url = from_u8(download_url).ToStdString(); } + } else { switch_to_3d = true; @@ -1029,19 +1048,12 @@ void GUI_App::post_init() else { mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); - Plater::TakeSnapshot snapshot(this->plater(), "Load Project", UndoRedo::SnapshotType::ProjectSeparator); - const std::vector res = this->plater()->load_files(this->init_params->input_files); - if (!res.empty()) { - if (this->init_params->input_files.size() == 1) { - // Update application titlebar when opening a project file - const std::string& filename = this->init_params->input_files.front(); - this->plater()->up_to_date(true, false); - this->plater()->up_to_date(true, true); - //BBS: remove amf logic as project - if (boost::algorithm::iends_with(filename, ".3mf")) - this->plater()->set_project_filename(from_u8(filename)); - } + wxArrayString input_files; + for (auto & file : this->init_params->input_files) { + input_files.push_back(wxString::FromUTF8(file)); } + this->plater()->set_project_filename(_L("Untitled")); + this->plater()->load_files(input_files); } } } @@ -1141,10 +1153,39 @@ void GUI_App::post_init() } #endif - if (app_config->get("stealth_mode") == "false") - hms_query = new HMSQuery(); - - m_show_gcode_window = app_config->get("show_gcode_window") == "true"; + //BBS: check crash log + auto log_dir_path = boost::filesystem::path(data_dir()) / "log"; + if (boost::filesystem::exists(log_dir_path)) + { + boost::filesystem::directory_iterator end_iter; + for (boost::filesystem::directory_iterator iter(log_dir_path); iter != end_iter; ++iter) + { + std::string file_name = iter->path().stem().string(); + if (boost::starts_with(file_name, "crash")) { + if (file_name.find("done") == std::string::npos) { + std::ifstream ifs(iter->path().string(), ios::in); + std::stringstream data; + data << ifs.rdbuf(); + ifs.close(); + + NetworkAgent* agent = wxGetApp().getAgent(); + json j; + j["time"] = file_name.substr(file_name.find("crash") + strlen("crash") + 1); + j["verion"] = std::string(SLIC3R_VERSION); + j["content"] = decode_path(data.str().c_str()); + try { + if (agent) { + agent->track_event("studio_crash", j.dump()); + } + } + catch (...) {} + std::string new_file_name = file_name.append("_done"); + boost::filesystem::rename(iter->path(), iter->path().parent_path() / boost::filesystem::path(new_file_name + iter->path().extension().string())); + } + } + } + } + if (m_networking_need_update) { //updating networking int ret = updating_bambu_networking(); @@ -1174,17 +1215,17 @@ void GUI_App::post_init() bool sys_preset = app_config->get("sync_system_preset") == "true"; this->preset_updater->sync(http_url, language, network_ver, sys_preset ? preset_bundle : nullptr); - this->check_new_version_sf(); - if (is_user_login() && app_config->get("stealth_mode") == "false") { - // this->check_privacy_version(0); - request_user_handle(0); + //BBS: check new version + this->check_new_version(); + //BBS: check privacy version + if (is_user_login()) { + this->check_privacy_version(0); + + this->check_track_enable(); } }); } - if (is_user_login()) - request_user_handle(0); - if(!m_networking_need_update && m_agent) { m_agent->set_on_ssdp_msg_fn( [this](std::string json_str) { @@ -1275,10 +1316,11 @@ GUI_App::GUI_App() , m_app_mode(EAppMode::Editor) , m_em_unit(10) , m_imgui(new ImGuiWrapper()) + , hms_query(new HMSQuery()) , m_removable_drive_manager(std::make_unique()) //, m_other_instance_message_handler(std::make_unique()) { - //app config initializes early becasuse it is used in instance checking in OrcaSlicer.cpp + //app config initializes early becasuse it is used in instance checking in BambuStudio.cpp this->init_app_config(); this->init_download_path(); @@ -1321,7 +1363,7 @@ void GUI_App::shutdown() } -std::string GUI_App::get_http_url(std::string country_code) +std::string GUI_App::get_http_url(std::string country_code, std::string path) { std::string url; if (country_code == "US") { @@ -1343,7 +1385,7 @@ std::string GUI_App::get_http_url(std::string country_code) url = "https://api.bambulab.com/"; } - url += "v1/iot-service/api/slicer/resource"; + url += path.empty() ? "v1/iot-service/api/slicer/resource" : path; return url; } @@ -1351,10 +1393,10 @@ std::string GUI_App::get_model_http_url(std::string country_code) { std::string url; if (country_code == "US") { - url = "https://makerhub.bambu-lab.com/"; + url = "https://makerworld.com/"; } else if (country_code == "CN") { - url = "https://makerhub.bambu-lab.com/zh/"; + url = "https://makerworld.com/"; } else if (country_code == "ENV_CN_DEV") { url = "https://makerhub-dev.bambu-lab.com/"; @@ -1366,7 +1408,7 @@ std::string GUI_App::get_model_http_url(std::string country_code) url = "https://makerhub-pre.bambu-lab.com/"; } else { - url = "https://makerhub.bambu-lab.com/"; + url = "https://makerworld.com/"; } return url; @@ -1718,7 +1760,19 @@ void GUI_App::restart_networking() if (plater_) plater_->get_notification_manager()->bbl_close_plugin_install_notification(); - if (app_config->get("sync_user_preset") == "true") { start_sync_user_preset(); } + if (m_agent->is_user_login()) { + remove_user_presets(); + enable_user_preset_folder(true); + preset_bundle->load_user_presets(m_agent->get_user_id(), ForwardCompatibilitySubstitutionRule::Enable); + mainframe->update_side_preset_ui(); + } + + if (app_config->get("sync_user_preset") == "true") { + start_sync_user_preset(); + } + if (mainframe && this->app_config->get("staff_pick_switch") == "true") { + if (mainframe->m_webview) { mainframe->m_webview->SendDesignStaffpick(has_model_mall()); } + } } BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" exit, m_agent=%1%")%m_agent; } @@ -1785,8 +1839,18 @@ void GUI_App::init_networking_callbacks() // GUI::wxGetApp().request_user_handle(online_login); // }); - m_agent->set_on_server_connected_fn([this]() { + m_agent->set_on_server_connected_fn([this](int return_code, int reason_code) { if (m_is_closing) { + return; + } + if (return_code == 5) { + GUI::wxGetApp().CallAfter([this] { + this->request_user_logout(); + MessageDialog msg_dlg(nullptr, _L("Login information expired. Please login again."), "", wxAPPLY | wxOK); + if (msg_dlg.ShowModal() == wxOK) { + return; + } + }); return; } GUI::wxGetApp().CallAfter([this] { @@ -1804,11 +1868,14 @@ void GUI_App::init_networking_callbacks() GUI::wxGetApp().CallAfter([this, dev_id] { if (m_is_closing) return; + bool tunnel = boost::algorithm::starts_with(dev_id, "tunnel/"); /* request_pushing */ - MachineObject* obj = m_device_manager->get_my_machine(dev_id); + MachineObject* obj = m_device_manager->get_my_machine(tunnel ? dev_id.substr(7) : dev_id); if (obj) { - obj->command_request_push_all(); + obj->is_tunnel_mqtt = tunnel; + obj->command_request_push_all(true); obj->command_get_version(); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } }); }); @@ -1834,16 +1901,17 @@ void GUI_App::init_networking_callbacks() wxCommandEvent event(EVT_CONNECT_LAN_MODE_PRINT); if (obj) { - + if (obj->is_lan_mode_printer()) { if (state == ConnectStatus::ConnectStatusOk) { - obj->command_request_push_all(); + obj->command_request_push_all(true); obj->command_get_version(); - event.SetInt(1); + event.SetInt(0); event.SetString(obj->dev_id); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } else if (state == ConnectStatus::ConnectStatusFailed) { obj->set_access_code(""); - obj->set_user_access_code(""); + obj->erase_user_access_code(); m_device_manager->set_selected_machine("", true); wxString text; if (msg == "5") { @@ -1853,21 +1921,36 @@ void GUI_App::init_networking_callbacks() text = wxString::Format(_L("Connect %s failed! [SN:%s, code=%s]"), from_u8(obj->dev_name), obj->dev_id, msg); wxGetApp().show_dialog(text); } - event.SetInt(0); + event.SetInt(-1); } else if (state == ConnectStatus::ConnectStatusLost) { m_device_manager->set_selected_machine("", true); - event.SetInt(0); + event.SetInt(-1); BOOST_LOG_TRIVIAL(info) << "set_on_local_connect_fn: state = lost"; } else { - event.SetInt(0); + event.SetInt(-1); BOOST_LOG_TRIVIAL(info) << "set_on_local_connect_fn: state = " << state; } obj->set_lan_mode_connection_state(false); } + else { + if (state == ConnectStatus::ConnectStatusOk) { + event.SetInt(1); + event.SetString(obj->dev_id); + } + else if(msg == "5") { + event.SetInt(5); + event.SetString(obj->dev_id); + } + else { + event.SetInt(-2); + event.SetString(obj->dev_id); + } + } + } + if (wxGetApp().plater()->get_select_machine_dialog()) { + wxPostEvent(wxGetApp().plater()->get_select_machine_dialog(), event); } - event.SetEventObject(this); - wxPostEvent(this, event); }); } ); @@ -1886,7 +1969,7 @@ void GUI_App::init_networking_callbacks() auto sel = this->m_device_manager->get_selected_machine(); if ((sel == obj || sel == nullptr) && obj->is_ams_need_update) { - GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } } }); @@ -1910,12 +1993,15 @@ void GUI_App::init_networking_callbacks() if (obj) { obj->parse_json(msg); if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { - GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } } }); }; m_agent->set_on_local_message_fn(lan_message_arrive_fn); + m_agent->set_queue_on_main_fn([this](std::function callback) { + CallAfter(callback); + }); } BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": exit, m_agent=%1%")%m_agent; } @@ -1971,12 +2057,9 @@ static boost::optional parse_semver_from_ini(std::string path) std::stringstream buffer; buffer << stream.rdbuf(); std::string body = buffer.str(); - size_t start = body.find("OrcaSlicer "); - if (start == std::string::npos) { - start = body.find("OrcaSlicer "); - if (start == std::string::npos) - return boost::none; - } + size_t start = body.find("BambuStudio "); + if (start == std::string::npos) + return boost::none; body = body.substr(start + 12); size_t end = body.find_first_of(" \n"); if (end < body.size()) @@ -2016,11 +2099,12 @@ void GUI_App::init_app_config() // Mac : "~/Library/Application Support/Slic3r" if (data_dir().empty()) { - boost::filesystem::path data_dir_path; #ifndef __linux__ std::string data_dir = wxStandardPaths::Get().GetUserDataDir().ToUTF8().data(); //BBS create folder if not exists - data_dir_path = boost::filesystem::path(data_dir); + boost::filesystem::path data_dir_path(data_dir); + if (!boost::filesystem::exists(data_dir_path)) + boost::filesystem::create_directory(data_dir_path); set_data_dir(data_dir); #else // Since version 2.3, config dir on Linux is in ${XDG_CONFIG_HOME}. @@ -2029,19 +2113,10 @@ void GUI_App::init_app_config() if (! wxGetEnv(wxS("XDG_CONFIG_HOME"), &dir) || dir.empty() ) dir = wxFileName::GetHomeDir() + wxS("/.config"); set_data_dir((dir + "/" + GetAppName()).ToUTF8().data()); - data_dir_path = boost::filesystem::path(data_dir()); - #endif - if (!boost::filesystem::exists(data_dir_path)){ - auto older_data_dir = data_dir_path.parent_path() / "BambuStudio-SoftFever"; - if(boost::filesystem::exists(older_data_dir)){ - copy_directory_recursively(older_data_dir,data_dir_path); - boost::system::error_code ec; - boost::filesystem::rename(data_dir_path / "BambuStudio.conf", data_dir_path / "OrcaSlicer.conf", ec); - boost::filesystem::rename(data_dir_path / "BambuStudio.conf.bak", data_dir_path / "OrcaSlicer.conf.bak", ec); - } - else + boost::filesystem::path data_dir_path(data_dir()); + if (!boost::filesystem::exists(data_dir_path)) boost::filesystem::create_directory(data_dir_path); - } + #endif } else { m_datadir_redefined = true; } @@ -2071,7 +2146,7 @@ void GUI_App::init_app_config() if (!error.empty()) { // Error while parsing config file. We'll customize the error message and rethrow to be displayed. throw Slic3r::RuntimeError( - _u8L("OrcaSlicer configuration file may be corrupted and is not abled to be parsed." + _u8L("BambuStudio configuration file may be corrupted and is not abled to be parsed." "Please delete the file and try again.") + "\n\n" + app_config->config_path() + "\n\n" + error); } @@ -2146,6 +2221,24 @@ void GUI_App::update_http_extra_header() m_agent->set_extra_http_header(extra_headers); } +void GUI_App::on_start_subscribe_again(std::string dev_id) +{ + auto start_subscribe_timer = new wxTimer(this, wxID_ANY); + Bind(wxEVT_TIMER, [this, start_subscribe_timer, dev_id](auto& e) { + start_subscribe_timer->Stop(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject* obj = dev->get_selected_machine(); + if (!obj) return; + + if ( (dev_id == obj->dev_id) && obj->is_connecting() ) { + if(wxGetApp().getAgent()) wxGetApp().getAgent()->set_user_selected_machine(dev_id); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": dev_id=" << obj->dev_id; + } + }); + start_subscribe_timer->Start(4000, wxTIMER_ONE_SHOT); +} + std::string GUI_App::get_local_models_path() { std::string local_path = ""; @@ -2181,8 +2274,28 @@ bool GUI_App::OnInit() } } +class wxBoostLog : public wxLog +{ + void DoLogText(const wxString &msg) override { + + BOOST_LOG_TRIVIAL(warning) << msg.ToUTF8().data(); + } + ~wxBoostLog() override + { + // This is a hack. Prevent thread logs from going to wxGuiLog on app quit. + auto t = wxLog::SetActiveTarget(this); + wxLog::FlushActive(); + wxLog::SetActiveTarget(t); + } +}; + bool GUI_App::on_init_inner() { + wxLog::SetActiveTarget(new wxBoostLog()); +#if BBL_RELEASE_TO_PUBLIC + wxLog::SetLogLevel(wxLOG_Message); +#endif + // Set initialization of image handlers before any UI actions - See GH issue #7469 wxInitAllImageHandlers(); #ifdef NDEBUG @@ -2253,7 +2366,7 @@ bool GUI_App::on_init_inner() RichMessageDialog dlg(nullptr, wxString::Format(_L("%s\nDo you want to continue?"), msg), - "OrcaSlicer", wxICON_QUESTION | wxYES_NO); + "BambuStudio", wxICON_QUESTION | wxYES_NO); dlg.ShowCheckBox(_L("Remember my choice")); if (dlg.ShowModal() != wxID_YES) return false; @@ -2271,7 +2384,7 @@ bool GUI_App::on_init_inner() load_language(wxString(), true); #ifdef _MSW_DARK_MODE -#ifdef __APPLE__ +#ifndef __WINDOWS__ wxSystemAppearance app = wxSystemSettings::GetAppearance(); GUI::wxGetApp().app_config->set("dark_color_mode", app.IsDark() ? "1" : "0"); GUI::wxGetApp().app_config->save(); @@ -2327,9 +2440,8 @@ bool GUI_App::on_init_inner() } } - if(app_config->get("version") != SLIC3R_VERSION) { - app_config->set("version", SLIC3R_VERSION); - } + app_config->set("version", SLIC3R_VERSION); + app_config->save(); BBLSplashScreen * scrn = nullptr; const bool show_splash_screen = true; @@ -2388,7 +2500,7 @@ bool GUI_App::on_init_inner() /* wxString tips = wxString::Format(_L("Click to download new version in default browser: %s"), version_info.version_str); DownloadDialog dialog(this->mainframe, tips, - _L("New version of Orca Slicer"), + _L("New version of Bambu Studio"), false, wxCENTER | wxICON_INFORMATION); @@ -2436,7 +2548,7 @@ bool GUI_App::on_init_inner() wxString tips = wxString::Format(_L("Click to download new version in default browser: %s"), version_str); DownloadDialog dialog(this->mainframe, tips, - _L("The Orca Slicer needs an upgrade"), + _L("The Bambu Studio needs an upgrade"), false, wxCENTER | wxICON_INFORMATION); dialog.SetExtendedMessage(description_text); @@ -2464,11 +2576,10 @@ bool GUI_App::on_init_inner() Bind(EVT_SHOW_DIALOG, [this](const wxCommandEvent& evt) { wxString msg = evt.GetString(); InfoDialog dlg(this->mainframe, _L("Info"), msg); + dlg.Bind(wxEVT_DESTROY, [this](auto& e) { + m_info_dialog_content = wxEmptyString; + }); dlg.ShowModal(); - - /*wxString text = evt.GetString(); - Slic3r::GUI::MessageDialog msg_dlg(this->mainframe, text, "", wxAPPLY | wxOK); - msg_dlg.ShowModal();*/ }); } else { @@ -2627,6 +2738,9 @@ bool GUI_App::on_init_inner() if (! plater_) return; + if (app_config->dirty()) + app_config->save(); + // BBS //this->obj_manipul()->update_if_dirty(); @@ -2650,10 +2764,10 @@ bool GUI_App::on_init_inner() request_model_download(m_download_file_url); m_download_file_url = ""; } - } - if (m_post_initialized && app_config->dirty()) - app_config->save(); + update_publish_status(); + + } }); m_initialized = true; @@ -2891,6 +3005,21 @@ void GUI_App::update_label_colours_from_appconfig() } } +void GUI_App::update_publish_status() +{ + mainframe->show_publish_button(has_model_mall()); + if (app_config->get("staff_pick_switch") == "true") { + mainframe->m_webview->SendDesignStaffpick(has_model_mall()); + } +} + +bool GUI_App::has_model_mall() +{ + if (auto cc = app_config->get_country_code(); cc == "CN" || cc == "") + return false; + return false; +} + void GUI_App::update_label_colours() { for (Tab* tab : tabs_list) @@ -2960,7 +3089,7 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju /*if (m_is_dark_mode != dark_mode() ) m_is_dark_mode = dark_mode();*/ - + if (m_is_dark_mode) { auto original_col = window->GetBackgroundColour(); @@ -3089,7 +3218,7 @@ void GUI_App::init_fonts() // wxSYS_OEM_FIXED_FONT and wxSYS_ANSI_FIXED_FONT use the same as // DEFAULT in wxGtk. Use the TELETYPE family as a work-around m_code_font = wxFont(wxFontInfo().Family(wxFONTFAMILY_TELETYPE)); - m_code_font.SetPointSize(m_small_font.GetPointSize()); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::update_fonts(const MainFrame *main_frame) @@ -3106,7 +3235,7 @@ void GUI_App::update_fonts(const MainFrame *main_frame) m_bold_font = m_normal_font.Bold(); m_link_font = m_bold_font.Underlined(); m_em_unit = main_frame->em_unit(); - m_code_font.SetPointSize(m_small_font.GetPointSize()); + m_code_font.SetPointSize(m_normal_font.GetPointSize()); } void GUI_App::set_label_clr_modified(const wxColour& clr) @@ -3147,6 +3276,33 @@ void GUI_App::set_side_menu_popup_status(bool status) m_side_popup_status = status; } +void GUI_App::link_to_network_check() +{ + std::string url; + std::string country_code = app_config->get_country_code(); + + + if (country_code == "US") { + url = "https://status.bambulab.com"; + } + else if (country_code == "CN") { + url = "https://status.bambulab.cn"; + } + else if (country_code == "ENV_CN_DEV") { + url = "https://status.bambu-lab.com"; + } + else if (country_code == "ENV_CN_QA") { + url = "https://status.bambu-lab.com"; + } + else if (country_code == "ENV_CN_PRE") { + url = "https://status.bambu-lab.com"; + } + else { + url = "https://status.bambu-lab.com"; + } + wxLaunchDefaultBrowser(url); +} + bool GUI_App::tabs_as_menu() const { return false; @@ -3215,6 +3371,8 @@ void GUI_App::recreate_GUI(const wxString& msg_name) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "recreate_GUI enter"; m_is_recreating_gui = true; + update_http_extra_header(); + mainframe->shutdown(); ProgressDialog dlg(msg_name, msg_name, 100, nullptr, wxPD_AUTO_HIDE); @@ -3259,20 +3417,8 @@ void GUI_App::recreate_GUI(const wxString& msg_name) // config_wizard_startup(true); // }); - //show publish button - if (m_agent && m_agent->is_user_login() && mainframe) { - int identifier; - int result = m_agent->get_user_info(&identifier); - auto publish_identifier = identifier & 1; -#ifdef __WINDOWS__ - if (result == 0 && publish_identifier >= 0) { - mainframe->m_topbar->show_publish_button(publish_identifier == 0 ? false : true); - } -#else - mainframe->show_publish_button(publish_identifier == 0 ? false : true); -#endif - } + update_publish_status(); m_is_recreating_gui = false; @@ -3301,7 +3447,7 @@ void GUI_App::ShowUserGuide() { res = GuideDlg.run(); if (res) { load_current_presets(); - + update_publish_status(); // BBS: remove SLA related message } } catch (std::exception &e) { @@ -3507,7 +3653,7 @@ void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const { input_file.Clear(); wxFileDialog dialog(parent ? parent : GetTopWindow(), - _L("Choose one file (gcode/3mf):"), + _L("Choose one file (gcode/.gco/.g/.ngc/ngc):"), app_config->get_last_dir(), "", file_wildcards(FT_GCODE), wxFD_OPEN | wxFD_FILE_MUST_EXIST); @@ -3588,25 +3734,25 @@ void GUI_App::request_user_login(int online_login) void GUI_App::request_user_logout() { - if (m_agent) { + if (m_agent && m_agent->is_user_login()) { + // Update data first before showing dialogs + m_agent->user_logout(); + m_agent->set_user_selected_machine(""); + /* delete old user settings */ bool transfer_preset_changes = false; wxString header = _L("Some presets are modified.") + "\n" + _L("You can keep the modifield presets to the new project, discard or save changes as new presets."); using ab = UnsavedChangesDialog::ActionButtons; wxGetApp().check_and_keep_current_preset_changes(_L("User logged out"), header, ab::KEEP | ab::SAVE, &transfer_preset_changes); - m_agent->user_logout(); - m_agent->set_user_selected_machine(""); - /* delete old user settings */ m_device_manager->clean_user_info(); GUI::wxGetApp().sidebar().load_ams_list({}, {}); - GUI::wxGetApp().stop_sync_user_preset(); + remove_user_presets(); + enable_user_preset_folder(false); + preset_bundle->load_user_presets(DEFAULT_USER_FOLDER_NAME, ForwardCompatibilitySubstitutionRule::Enable); + mainframe->update_side_preset_ui(); -#ifdef __WINDOWS__ - wxGetApp().mainframe->topbar()->show_publish_button(false); -#else - wxGetApp().mainframe->show_publish_button(false); -#endif + GUI::wxGetApp().stop_sync_user_preset(); } } @@ -3682,7 +3828,23 @@ std::string GUI_App::handle_web_request(std::string cmd) else if (command_str.compare("get_recent_projects") == 0) { if (mainframe) { if (mainframe->m_webview) { - mainframe->m_webview->SendRecentList(from_u8(sequence_id.value())); + mainframe->m_webview->SendRecentList(INT_MAX); + } + } + } + else if (command_str.compare("modelmall_model_advise_get") == 0) { + if (mainframe && this->app_config->get("staff_pick_switch") == "true") { + if (mainframe->m_webview) { + mainframe->m_webview->SendDesignStaffpick(has_model_mall()); + } + } + } + else if (command_str.compare("modelmall_model_open") == 0) { + if (root.get_child_optional("data") != boost::none) { + pt::ptree data_node = root.get_child("data"); + boost::optional id = data_node.get_optional("id"); + if (id.has_value() && mainframe->m_webview) { + mainframe->m_webview->OpenModelDetail(id.value(), m_agent); } } } @@ -3774,6 +3936,12 @@ std::string GUI_App::handle_web_request(std::string cmd) } } } + else if (command_str.compare("common_openurl") == 0) { + boost::optional path = root.get_optional("url"); + if (path.has_value()) { + wxLaunchDefaultBrowser(path.value()); + } + } } } catch (...) { @@ -3804,7 +3972,7 @@ void GUI_App::handle_script_message(std::string msg) } } -void GUI_App::request_model_download(std::string url) +void GUI_App::request_model_download(wxString url) { if (plater_) { plater_->request_model_download(url); @@ -3869,21 +4037,32 @@ void GUI_App::on_http_error(wxCommandEvent &evt) wxString result; if (status >= 400 && status < 500) { try { - json j = json::parse(evt.GetString()); - if (j.contains("code")) { - if (!j["code"].is_null()) - code = j["code"].get(); - } - if (j.contains("error")) - if (!j["error"].is_null()) - error = j["error"].get(); + wxString body_str = evt.GetString(); + bool found_json = false; + for (int i = 0; i < body_str.size(); i++) { + if (body_str[i] == '{') { + found_json = true; + break; + } + } + if (found_json) { + json j = json::parse(body_str); + if (j.contains("code")) { + if (!j["code"].is_null()) + code = j["code"].get(); + } + if (j.contains("error")) { + if (!j["error"].is_null()) + error = j["error"].get(); + } + } } catch (...) {} } // Version limit if (code == HttpErrorVersionLimited) { - MessageDialog msg_dlg(nullptr, _L("The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally"), "", wxAPPLY | wxOK); + MessageDialog msg_dlg(nullptr, _L("The version of Bambu studio is too low and needs to be updated to the latest version before it can be used normally"), "", wxAPPLY | wxOK); if (msg_dlg.ShowModal() == wxOK) { return; } @@ -3942,35 +4121,19 @@ void GUI_App::on_user_login_handle(wxCommandEvent &evt) wxQueueEvent(this, evt); }); - - - if (online_login) - GUI::wxGetApp().mainframe->show_sync_dialog(); - else if (app_config->get("sync_user_preset") == "true") { + if (online_login) { + remove_user_presets(); enable_user_preset_folder(true); - } else { - enable_user_preset_folder(false); - } - //show publish button - if (m_agent->is_user_login() && mainframe) { - int identifier; - int result = m_agent->get_user_info(&identifier); - auto publish_identifier = identifier & 1; + preset_bundle->load_user_presets(m_agent->get_user_id(), ForwardCompatibilitySubstitutionRule::Enable); + mainframe->update_side_preset_ui(); -#ifdef __WINDOWS__ - if (result == 0 && publish_identifier >= 0) { - mainframe->m_topbar->show_publish_button(publish_identifier == 0 ? false : true); - } -#else - mainframe->show_publish_button(publish_identifier == 0 ? false : true); -#endif + GUI::wxGetApp().mainframe->show_sync_dialog(); } } + void GUI_App::check_track_enable() { - // Orca: alaways disable track event - return; if (app_config && app_config->get("firstguide", "privacyuse") == "true") { //enable track event json header_json; @@ -3979,9 +4142,16 @@ void GUI_App::check_track_enable() int major = 0, minor = 0, micro = 0; header_json["os"] = std::string(os_desc.ToUTF8()); header_json["name"] = std::string(SLIC3R_APP_NAME); + header_json["uuid"] = app_config->get("slicer_uuid"); if (m_agent) { - m_agent->track_header(header_json.dump()); m_agent->track_enable(true); + m_agent->track_header(header_json.dump()); + } + /* record studio start event */ + json j; + j["user_mode"] = this->get_mode_str(); + if (m_agent) { + m_agent->track_event("studio_launch", j.dump()); } } } @@ -4098,108 +4268,6 @@ void GUI_App::check_new_version(bool show_tips, int by_user) }).perform(); } -//parse the string, if it doesn't contain a valid version string, return invalid version. -Semver get_version(const std::string& str, const std::regex& regexp) { - std::smatch match; - if (std::regex_match(str, match, regexp)) { - std::string version_cleaned = match[0]; - const boost::optional version = Semver::parse(version_cleaned); - if (version.has_value()) { - return *version; - } - } - return Semver::invalid(); -} - -void GUI_App::check_new_version_sf(bool show_tips, int by_user) -{ - AppConfig* app_config = wxGetApp().app_config; - auto version_check_url = app_config->version_check_url(); - Http::get(version_check_url) - .on_error([&](std::string body, std::string error, unsigned http_status) { - (void)body; - BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", "check_new_version_sf", http_status, - error); - }) - .timeout_connect(1) - .on_complete([&](std::string body, unsigned http_status) { - // Http response OK - if (http_status != 200) - return; - try { - boost::trim(body); - // SoftFever: parse github release, ported from SS - - boost::property_tree::ptree root; - - std::stringstream json_stream(body); - boost::property_tree::read_json(json_stream, root); - - bool i_am_pre = false; - // at least two number, use '.' as separator. can be followed by -Az23 for prereleased and +Az42 for - // metadata - std::regex matcher("[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[A-Za-z0-9]+)?(\\+[A-Za-z0-9]+)?"); - - Semver current_version = get_version(SoftFever_VERSION, matcher); - Semver best_pre(1, 0, 0); - Semver best_release(1, 0, 0); - std::string best_pre_url; - std::string best_release_url; - std::string best_release_content; - std::string best_pre_content; - const std::regex reg_num("([0-9]+)"); - for (auto json_version : root) { - std::string tag = json_version.second.get("tag_name"); - if (tag[0] == 'v') - tag.erase(0, 1); - for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); - it != std::sregex_iterator(); ++it) { - } - Semver tag_version = get_version(tag, matcher); - if (current_version == tag_version) - i_am_pre = json_version.second.get("prerelease"); - if (json_version.second.get("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = json_version.second.get("html_url"); - best_pre_content = json_version.second.get("body"); - best_pre.set_prerelease("Preview"); - } - } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = json_version.second.get("html_url"); - best_release_content = json_version.second.get("body"); - } - } - } - - // if release is more recent than beta, use release anyway - if (best_pre < best_release) { - best_pre = best_release; - best_pre_url = best_release_url; - best_pre_content = best_release_content; - } - // if we're the most recent, don't do anything - if ((i_am_pre ? best_pre : best_release) <= current_version) - return; - - // BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...", - // SLIC3R_APP_NAME, i_am_pre ? best_pre.to_string(): best_release.to_string()); - - version_info.url = i_am_pre ? best_pre_url : best_release_url; - version_info.version_str = i_am_pre ? best_pre.to_string() : best_release.to_string_sf(); - version_info.description = i_am_pre ? best_pre_content : best_release_content; - version_info.force_upgrade = false; - - wxCommandEvent *evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); - evt->SetString((i_am_pre ? best_pre : best_release).to_string()); - GUI::wxGetApp().QueueEvent(evt); - } catch (...) { - } - }) - .perform(); -} //BBS pop up a dialog and download files void GUI_App::request_new_version(int by_user) @@ -4233,10 +4301,12 @@ void GUI_App::show_check_privacy_dlg(wxCommandEvent& evt) privacy_dlg.Bind(EVT_PRIVACY_UPDATE_CONFIRM, [this, online_login](wxCommandEvent &e) { app_config->set("privacy_version", privacy_version_info.version_str); app_config->set_bool("privacy_update_checked", true); + app_config->save(); request_user_handle(online_login); }); privacy_dlg.Bind(EVT_PRIVACY_UPDATE_CANCEL, [this](wxCommandEvent &e) { app_config->set_bool("privacy_update_checked", false); + app_config->save(); if (m_agent) { m_agent->user_logout(); } @@ -4340,18 +4410,30 @@ void GUI_App::no_new_version() std::string GUI_App::version_display = ""; std::string GUI_App::format_display_version() { - if (!version_display.empty()) - return version_display; + if (!version_display.empty()) return version_display; - version_display = SoftFever_VERSION; + auto version_text = std::string(SLIC3R_VERSION); + int len = version_text.length(); + for (int i = 0, j = 0; i < len; ++i) { + if (!(version_text[i] == '0' && j == 0)) + version_display += version_text[i]; + + if (version_text[i] == '.') + j = 0; + else + ++j; + } return version_display; } void GUI_App::show_dialog(wxString msg) { - wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_DIALOG); - evt->SetString(msg); - GUI::wxGetApp().QueueEvent(evt); + if (m_info_dialog_content.empty()) { + wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_DIALOG); + evt->SetString(msg); + GUI::wxGetApp().QueueEvent(evt); + m_info_dialog_content = msg; + } } void GUI_App::reload_settings() @@ -4487,27 +4569,16 @@ void GUI_App::sync_preset(Preset* preset) } } -void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_dlg) +void GUI_App::start_sync_user_preset(bool with_progress_dlg) { if (!m_agent || !m_agent->is_user_login()) return; - if (load_immediately) - remove_user_presets(); - - enable_user_preset_folder(true); - // has already start sync - if (enable_sync) - return; - - if (load_immediately) { - preset_bundle->load_user_presets(m_agent->get_user_id(), ForwardCompatibilitySubstitutionRule::Enable); - mainframe->update_side_preset_ui(); - } + if (enable_sync) return; ProgressFn progressFn; WasCancelledFn cancelFn; - std::function finishFn; + std::function finishFn; if (with_progress_dlg) { auto dlg = new ProgressDialog(_L("Loading"), "", 100, this->mainframe, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT); @@ -4517,20 +4588,20 @@ void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_d dlg->Update(percent, _L("Loading user preset")); }); }; - cancelFn = [dlg]() { + cancelFn = [this, dlg]() { return dlg->WasCanceled(); }; - finishFn = [this, dlg] { + finishFn = [this, userid = m_agent->get_user_id(), dlg](bool ok) { CallAfter([=]{ dlg->Destroy(); - reload_settings(); + if (ok && m_agent && userid == m_agent->get_user_id()) reload_settings(); }); }; } else { - finishFn = [this] { + finishFn = [this, userid = m_agent->get_user_id()](bool ok) { CallAfter([=] { - reload_settings(); + if (ok && m_agent && userid == m_agent->get_user_id()) reload_settings(); }); }; } @@ -4542,8 +4613,8 @@ void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_d [this, progressFn, cancelFn, finishFn] { // get setting list, update setting list std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); - m_agent->get_setting_list(version, progressFn, cancelFn); - finishFn(); + int ret = m_agent->get_setting_list(version, progressFn, cancelFn); + finishFn(ret == 0); int count = 0, sync_count = 0; std::vector presets_to_sync; @@ -4606,19 +4677,12 @@ void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_d void GUI_App::stop_sync_user_preset() { - if (!wxGetApp().m_is_closing) - remove_user_presets(); - enable_user_preset_folder(false); - - preset_bundle->load_user_presets(DEFAULT_USER_FOLDER_NAME, ForwardCompatibilitySubstitutionRule::Enable); - mainframe->update_side_preset_ui(); - if (!enable_sync) return; enable_sync = false; if (m_sync_update_thread.joinable()) - m_sync_update_thread.join(); + m_sync_update_thread.detach(); } void GUI_App::start_http_server() @@ -4631,6 +4695,11 @@ void GUI_App::stop_http_server() m_http_server.stop(); } +void GUI_App::switch_staff_pick(bool on) +{ + mainframe->m_webview->SendDesignStaffpick(on); +} + bool GUI_App::switch_language() { if (select_language()) { @@ -4694,7 +4763,11 @@ static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguage // Is there a candidate matching a country code of a system language? Move it to the end, // while maintaining the order of matches, so that the best match ends up at the very end. - std::string system_country = "_" + into_u8(system_language->CanonicalName.AfterFirst('_')).substr(0, 2); + std::string temp_local = into_u8(system_language->CanonicalName.AfterFirst('_')); + if (temp_local.size() >= 2) { + temp_local = temp_local.substr(0, 2); + } + std::string system_country = "_" + temp_local; int cnt = locales.size(); for (int i=0; iGetCanonicalName() // 3) new_language_info->CanonicalName is a safe bet. It points to a valid dictionary name. app_config->set("language", new_language_info->CanonicalName.ToUTF8().data()); + app_config->save(); return true; } } @@ -4799,47 +4873,35 @@ bool GUI_App::select_language() // based on the "language" key stored in the application config. bool GUI_App::load_language(wxString language, bool initial) { + BOOST_LOG_TRIVIAL(info) << boost::format("%1%: language %2%, initial: %3%") %__FUNCTION__ %language %initial; if (initial) { // There is a static list of lookup path prefixes in wxWidgets. Add ours. wxFileTranslationsLoader::AddCatalogLookupPathPrefix(from_u8(localization_dir())); // Get the active language from PrusaSlicer.ini, or empty string if the key does not exist. language = app_config->get("language"); if (! language.empty()) - BOOST_LOG_TRIVIAL(trace) << boost::format("language provided by OrcaSlicer.conf: %1%") % language; + BOOST_LOG_TRIVIAL(info) << boost::format("language provided by BambuStudio.conf: %1%") % language; else { // Get the system language. const wxLanguage lang_system = wxLanguage(wxLocale::GetSystemLanguage()); if (lang_system != wxLANGUAGE_UNKNOWN) { m_language_info_system = wxLocale::GetLanguageInfo(lang_system); - BOOST_LOG_TRIVIAL(trace) << boost::format("System language detected (user locales and such): %1%") % m_language_info_system->CanonicalName.ToUTF8().data(); +#ifdef __WXMSW__ + WCHAR wszLanguagesBuffer[LOCALE_NAME_MAX_LENGTH]; + ::LCIDToLocaleName(LOCALE_USER_DEFAULT, wszLanguagesBuffer, LOCALE_NAME_MAX_LENGTH, 0); + wxString lang(wszLanguagesBuffer); + lang.Replace('-', '_'); + if (auto info = wxLocale::FindLanguageInfo(lang)) + m_language_info_system = info; +#endif + BOOST_LOG_TRIVIAL(info) << boost::format("System language detected (user locales and such): %1%") % m_language_info_system->CanonicalName.ToUTF8().data(); // BBS set language to app config app_config->set("language", m_language_info_system->CanonicalName.ToUTF8().data()); } else { - { - std::map language_descptions = { - {"zh_CN", wxString::FromUTF8("\xE4\xB8\xAD\xE6\x96\x87\x28\xE7\xAE\x80\xE4\xBD\x93\x29")}, - {"zh_TW", wxString::FromUTF8("\xE4\xB8\xAD\xE6\x96\x87\x28\xE7\xB9\x81\xE9\xAB\x94\x29")}, - {"de", wxString::FromUTF8("Deutsch")}, - {"cs", wxString::FromUTF8("Czech")}, - {"nl", wxString::FromUTF8("Nederlands")}, - {"sv", wxString::FromUTF8("\x53\x76\x65\x6e\x73\x6b\x61")}, //Svenska - {"en", wxString::FromUTF8("English")}, - {"es", wxString::FromUTF8("\x45\x73\x70\x61\xC3\xB1\x6F\x6C")}, - {"fr", wxString::FromUTF8("\x46\x72\x61\x6E\xC3\xA7\x61\x69\x73")}, - {"it", wxString::FromUTF8("\x49\x74\x61\x6C\x69\x61\x6E\x6F")}, - {"ru", wxString::FromUTF8("\xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9")}, - {"hu", wxString::FromUTF8("Magyar")}, - {"ja", wxString::FromUTF8("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E")}, - {"ko", wxString::FromUTF8("\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4")} - }; - for (auto l : language_descptions) { - const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(l.first); - if (langinfo) const_cast(langinfo)->Description = l.second; - } - } { // Allocating a temporary locale will switch the default wxTranslations to its internal wxTranslations instance. wxLocale temp_locale; + temp_locale.Init(); // Set the current translation's language to default, otherwise GetBestTranslation() may not work (see the wxWidgets source code). wxTranslations::Get()->SetLanguage(wxLANGUAGE_DEFAULT); // Let the wxFileTranslationsLoader enumerate all translation dictionaries for PrusaSlicer @@ -4850,7 +4912,7 @@ bool GUI_App::load_language(wxString language, bool initial) wxString best_language = wxTranslations::Get()->GetBestTranslation(SLIC3R_APP_KEY, wxLANGUAGE_ENGLISH); if (!best_language.IsEmpty()) { m_language_info_best = wxLocale::FindLanguageInfo(best_language); - BOOST_LOG_TRIVIAL(trace) << boost::format("Best translation language detected (may be different from user locales): %1%") % + BOOST_LOG_TRIVIAL(info) << boost::format("Best translation language detected (may be different from user locales): %1%") % m_language_info_best->CanonicalName.ToUTF8().data(); app_config->set("language", m_language_info_best->CanonicalName.ToUTF8().data()); } @@ -4875,7 +4937,7 @@ bool GUI_App::load_language(wxString language, bool initial) } if (language_info != nullptr && language_info->LayoutDirection == wxLayout_RightToLeft) { - BOOST_LOG_TRIVIAL(trace) << boost::format("The following language code requires right to left layout, which is not supported by OrcaSlicer: %1%") % language_info->CanonicalName.ToUTF8().data(); + BOOST_LOG_TRIVIAL(info) << boost::format("The following language code requires right to left layout, which is not supported by BambuStudio: %1%") % language_info->CanonicalName.ToUTF8().data(); language_info = nullptr; } @@ -4889,7 +4951,7 @@ bool GUI_App::load_language(wxString language, bool initial) language_info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US); } - BOOST_LOG_TRIVIAL(trace) << boost::format("Switching wxLocales to %1%") % language_info->CanonicalName.ToUTF8().data(); + BOOST_LOG_TRIVIAL(info) << boost::format("Switching wxLocales to %1%") % language_info->CanonicalName.ToUTF8().data(); // Select language for locales. This language may be different from the language of the dictionary. //if (language_info == m_language_info_best || language_info == m_language_info_system) { @@ -4906,19 +4968,16 @@ bool GUI_App::load_language(wxString language, bool initial) if (language_info->CanonicalName.BeforeFirst('_') == "sk") { // Slovaks understand Czech well. Give them the Czech translation. language_dict = wxLANGUAGE_CZECH; - BOOST_LOG_TRIVIAL(trace) << "Using Czech dictionaries for Slovak language"; + BOOST_LOG_TRIVIAL(info) << "Using Czech dictionaries for Slovak language"; } #ifdef __linux__ // If we can't find this locale , try to use different one for the language // instead of just reporting that it is impossible to switch. - if (! wxLocale::IsAvailable(language_info->Language)) { + if (! wxLocale::IsAvailable(language_info->Language) && m_language_info_system) { std::string original_lang = into_u8(language_info->CanonicalName); - if (nullptr == m_language_info_system) { - m_language_info_system = wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT); - } language_info = linux_get_existing_locale_language(language_info, m_language_info_system); - BOOST_LOG_TRIVIAL(trace) << boost::format("Can't switch language to %1% (missing locales). Using %2% instead.") + BOOST_LOG_TRIVIAL(info) << boost::format("Can't switch language to %1% (missing locales). Using %2% instead.") % original_lang % language_info->CanonicalName.ToUTF8().data(); } #endif @@ -4930,50 +4989,47 @@ bool GUI_App::load_language(wxString language, bool initial) else if (initial) { // bbs supported languages //TODO: use a global one with Preference - wxLanguage supported_languages[]{ - wxLANGUAGE_ENGLISH, - wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_GERMAN, - wxLANGUAGE_FRENCH, - wxLANGUAGE_SPANISH, - wxLANGUAGE_SWEDISH, - wxLANGUAGE_DUTCH, - wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_JAPANESE, - wxLANGUAGE_ITALIAN, - wxLANGUAGE_KOREAN, - wxLANGUAGE_RUSSIAN, - wxLANGUAGE_UKRAINIAN - }; - std::string cur_language = app_config->get("language"); - if (cur_language != "") { - //cleanup the language wrongly set before - const wxLanguageInfo *langinfo = nullptr; - bool embedded_language = false; - int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); - for (auto index = 0; index < language_num; index++) { - langinfo = wxLocale::GetLanguageInfo(supported_languages[index]); - std::string temp_lan = langinfo->CanonicalName.ToUTF8().data(); - if (cur_language == temp_lan) { - embedded_language = true; - break; - } - } - if (!embedded_language) - app_config->erase("app", "language"); - } + //wxLanguage supported_languages[]{ + // wxLANGUAGE_ENGLISH, + // wxLANGUAGE_CHINESE_SIMPLIFIED, + // wxLANGUAGE_GERMAN, + // wxLANGUAGE_FRENCH, + // wxLANGUAGE_SPANISH, + // wxLANGUAGE_SWEDISH, + // wxLANGUAGE_DUTCH, + // wxLANGUAGE_HUNGARIAN, + // wxLANGUAGE_JAPANESE, + // wxLANGUAGE_ITALIAN + //}; + //std::string cur_language = app_config->get("language"); + //if (cur_language != "") { + // //cleanup the language wrongly set before + // const wxLanguageInfo *langinfo = nullptr; + // bool embedded_language = false; + // int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); + // for (auto index = 0; index < language_num; index++) { + // langinfo = wxLocale::GetLanguageInfo(supported_languages[index]); + // std::string temp_lan = langinfo->CanonicalName.ToUTF8().data(); + // if (cur_language == temp_lan) { + // embedded_language = true; + // break; + // } + // } + // if (!embedded_language) + // app_config->erase("app", "language"); + //} } if (! wxLocale::IsAvailable(language_info->Language)) { // Loading the language dictionary failed. - wxString message = "Switching Orca Slicer to language " + language_info->CanonicalName + " failed."; + wxString message = "Switching Bambu Studio to language " + language_info->CanonicalName + " failed."; #if !defined(_WIN32) && !defined(__APPLE__) // likely some linux system message += "\nYou may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n"; #endif if (initial) message + "\n\nApplication will close."; - wxMessageBox(message, "Orca Slicer - Switching language failed", wxOK | wxICON_ERROR); + wxMessageBox(message, "Bambu Studio - Switching language failed", wxOK | wxICON_ERROR); if (initial) std::exit(EXIT_FAILURE); else @@ -5026,6 +5082,13 @@ ConfigOptionMode GUI_App::get_mode() mode == "develop" ? comDevelop : comSimple; } +std::string GUI_App::get_mode_str() +{ + if (!app_config->has("user_mode")) + return "simple"; + return app_config->get("user_mode"); +} + void GUI_App::save_mode(const /*ConfigOptionMode*/int mode) { //BBS @@ -5033,6 +5096,7 @@ void GUI_App::save_mode(const /*ConfigOptionMode*/int mode) mode == comSimple ? "simple" : mode == comDevelop ? "develop" : "simple"; app_config->set("user_mode", mode_str); + app_config->save(); update_mode(); } @@ -5046,7 +5110,6 @@ void GUI_App::update_mode() mainframe->m_param_panel->update_mode(); if (mainframe->m_param_dialog) mainframe->m_param_dialog->panel()->update_mode(); - mainframe->m_webview->update_mode(); #ifdef _MSW_DARK_MODE if (!wxGetApp().tabs_as_menu()) @@ -5063,6 +5126,10 @@ void GUI_App::update_mode() plater()->canvas3D()->update_gizmos_on_off_state(); } +void GUI_App::update_internal_development() { + mainframe->m_webview->update_mode(); +} + void GUI_App::show_ip_address_enter_dialog(wxString title) { auto evt = new wxCommandEvent(EVT_SHOW_IP_DIALOG); @@ -5577,6 +5644,26 @@ void GUI_App::preset_deleted_from_cloud(std::string setting_id) need_delete_presets.erase(std::remove(need_delete_presets.begin(), need_delete_presets.end(), setting_id), need_delete_presets.end()); } +wxString GUI_App::filter_string(wxString str) +{ + std::string result = str.utf8_string(); + std::string input = str.utf8_string(); + + + std::regex domainRegex(R"(([a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?:\.[a-zA-Z]{2,})?))"); + std::sregex_iterator it(input.begin(), input.end(), domainRegex); + std::sregex_iterator end; + + while (it != end) { + std::smatch match = *it; + std::string domain = match.str(); + result.replace(match.position(), domain.length(), "[***]"); + ++it; + } + + return wxString::FromUTF8(result); +} + bool GUI_App::OnExceptionInMainLoop() { generic_exception_handle(); @@ -5595,7 +5682,7 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) if (is_gcode_file(into_u8(filename))) ++ num_gcodes; if (fileNames.size() == num_gcodes) { - // Opening PrusaSlicer by drag & dropping a G-Code onto OrcaSlicer icon in Finder, + // Opening PrusaSlicer by drag & dropping a G-Code onto BambuStudio icon in Finder, // just G-codes were passed. Switch to G-code viewer mode. m_app_mode = EAppMode::GCodeViewer; unlock_lockfile(get_instance_hash_string() + ".lock", data_dir() + "/cache/"); @@ -5611,8 +5698,8 @@ void GUI_App::MacOpenURL(const wxString& url) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "get mac url " << url; - if (!url.empty() && boost::starts_with(url, "orcasliceropen://")) { - auto input_str_arr = split_str(url.ToStdString(), "orcasliceropen://"); + if (!url.empty() && boost::starts_with(url, "bambustudioopen://")) { + auto input_str_arr = split_str(url.ToStdString(), "bambustudioopen://"); std::string download_origin_url; for (auto input_str : input_str_arr) { @@ -5961,7 +6048,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage if (res) { load_current_presets(); - + update_publish_status(); // BBS: remove SLA related message } @@ -6256,8 +6343,8 @@ void GUI_App::associate_files(std::wstring extend) ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); std::wstring prog_path = L"\"" + std::wstring(app_path) + L"\""; - std::wstring prog_id = L" Orca.Slicer.1"; - std::wstring prog_desc = L"OrcaSlicer"; + std::wstring prog_id = L" Bambu.Studio.1"; + std::wstring prog_desc = L"BambuStudio"; std::wstring prog_command = prog_path + L" \"%1\""; std::wstring reg_base = L"Software\\Classes"; std::wstring reg_extension = reg_base + L"\\." + extend; @@ -6279,8 +6366,8 @@ void GUI_App::disassociate_files(std::wstring extend) ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); std::wstring prog_path = L"\"" + std::wstring(app_path) + L"\""; - std::wstring prog_id = L" Orca.Slicer.1"; - std::wstring prog_desc = L"OrcaSlicer"; + std::wstring prog_id = L" Bambu.Studio.1"; + std::wstring prog_desc = L"BambuStudio"; std::wstring prog_command = prog_path + L" \"%1\""; std::wstring reg_base = L"Software\\Classes"; std::wstring reg_extension = reg_base + L"\\." + extend; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 4b6a418f8..ff4b36e98 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -115,9 +115,9 @@ enum ConfigMenuIDs { ConfigMenuCnt, }; -enum OrcaSlicerMenuIDs { - OrcaSlicerMenuAbout, - OrcaSlicerMenuPreferences, +enum BambuStudioMenuIDs { + BambuStudioMenuAbout, + BambuStudioMenuPreferences, }; enum CameraMenuIDs { @@ -292,20 +292,26 @@ private: bool m_is_dark_mode{ false }; bool m_adding_script_handler { false }; bool m_side_popup_status{false}; + wxString m_info_dialog_content; HttpServer m_http_server; - bool m_show_gcode_window{true}; - public: + boost::thread m_check_network_thread; +public: + //try again when subscription fails + void on_start_subscribe_again(std::string dev_id); void check_filaments_in_blacklist(std::string tag_supplier, std::string tag_material, bool& in_blacklist, std::string& action, std::string& info); std::string get_local_models_path(); bool OnInit() override; bool initialized() const { return m_initialized; } + std::map test_url_state; + //BBS: remove GCodeViewer as seperate APP logic explicit GUI_App(); //explicit GUI_App(EAppMode mode = EAppMode::Editor); ~GUI_App() override; + void show_message_box(std::string msg) { wxMessageBox(msg); } EAppMode get_app_mode() const { return m_app_mode; } Slic3r::DeviceManager* getDeviceManager() { return m_device_manager; } @@ -314,12 +320,10 @@ private: bool is_editor() const { return m_app_mode == EAppMode::Editor; } bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; } bool is_recreating_gui() const { return m_is_recreating_gui; } - std::string logo_name() const { return is_editor() ? "OrcaSlicer" : "OrcaSlicer-gcodeviewer"; } - - // SoftFever - bool show_gcode_window() const { return m_show_gcode_window; } - void set_show_gcode_window(bool val) { m_show_gcode_window = val; } + std::string logo_name() const { return is_editor() ? "BambuStudio" : "BambuStudio-gcodeviewer"; } + wxString get_inf_dialog_contect () {return m_info_dialog_content;}; + std::vector split_str(std::string src, std::string separator); // To be called after the GUI is fully built up. // Process command line parameters cached in this->init_params, // load configs, STLs etc. @@ -338,6 +342,8 @@ private: const wxColour get_label_default_clr_modified(); void init_label_colours(); void update_label_colours_from_appconfig(); + void update_publish_status(); + bool has_model_mall(); void update_label_colours(); // update color mode for window void UpdateDarkUI(wxWindow *window, bool highlited = false, bool just_font = false); @@ -357,6 +363,8 @@ private: //update side popup status bool get_side_menu_popup_status(); void set_side_menu_popup_status(bool status); + void link_to_network_check(); + const wxColour& get_label_clr_modified(){ return m_color_label_modified; } const wxColour& get_label_clr_sys() { return m_color_label_sys; } @@ -411,7 +419,7 @@ private: int request_user_unbind(std::string dev_id); std::string handle_web_request(std::string cmd); void handle_script_message(std::string msg); - void request_model_download(std::string url); + void request_model_download(wxString url); void download_project(std::string project_id); void request_project_download(std::string project_id); void request_open_project(std::string project_id); @@ -432,7 +440,6 @@ private: void check_update(bool show_tips, int by_user); void check_new_version(bool show_tips = false, int by_user = 0); - void check_new_version_sf(bool show_tips = false, int by_user = 0); void request_new_version(int by_user); void enter_force_upgrade(); void set_skip_version(bool skip = true); @@ -442,10 +449,11 @@ private: void reload_settings(); void remove_user_presets(); void sync_preset(Preset* preset); - void start_sync_user_preset(bool load_immediately = false, bool with_progress_dlg = false); + void start_sync_user_preset(bool with_progress_dlg = false); void stop_sync_user_preset(); void start_http_server(); void stop_http_server(); + void switch_staff_pick(bool on); void on_show_check_privacy_dlg(int online_login = 0); void show_check_privacy_dlg(wxCommandEvent& evt); @@ -466,8 +474,10 @@ private: Tab* get_model_tab(bool part = false); Tab* get_layer_tab(); ConfigOptionMode get_mode(); + std::string get_mode_str(); void save_mode(const /*ConfigOptionMode*/int mode) ; void update_mode(); + void update_internal_development(); void show_ip_address_enter_dialog(wxString title = wxEmptyString); void show_ip_address_enter_dialog_handler(wxCommandEvent &evt); bool show_modal_ip_address_enter_dialog(wxString title = wxEmptyString); @@ -492,6 +502,7 @@ private: void delete_preset_from_cloud(std::string setting_id); void preset_deleted_from_cloud(std::string setting_id); + wxString filter_string(wxString str); wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); } // Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US". wxString current_language_code_safe() const; @@ -602,7 +613,7 @@ private: std::string get_plugin_url(std::string name, std::string country_code); int download_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr); int install_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr); - std::string get_http_url(std::string country_code); + std::string get_http_url(std::string country_code, std::string path = {}); std::string get_model_http_url(std::string country_code); bool is_compatibility_version(); bool check_networking_version(); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 8637e764b..6519b4dac 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -57,6 +57,7 @@ static SettingsFactory::Bundle FREQ_SETTINGS_BUNDLE_FFF = // BBS { L("Support") , { "enable_support", "support_type", "support_threshold_angle", "support_base_pattern", "support_on_build_plate_only","support_critical_regions_only", + "support_remove_small_overhang", "support_base_pattern_spacing", "support_expansion"}}, //BBS { L("Flush options") , { "flush_into_infill", "flush_into_objects", "flush_into_support"} } @@ -73,18 +74,17 @@ std::map> SettingsFactory::OBJECT_C { { L("Quality"), {{"layer_height", "",1}, //{"initial_layer_print_height", "",2}, - {"seam_position", "",2}, - {"slice_closing_radius", "",3}, {"resolution", "",4}, - {"xy_hole_compensation", "",5}, {"xy_contour_compensation", "",6}, {"elefant_foot_compensation", "",7}, - {"make_overhang_printable_angle","", 8},{"make_overhang_printable_hole_size","",9} + {"seam_position", "",2}, {"seam_gap", "",3}, {"wipe_speed", "",4}, + {"slice_closing_radius", "",5}, {"resolution", "",6}, + {"xy_hole_compensation", "",7}, {"xy_contour_compensation", "",8}, {"elefant_foot_compensation", "",9} }}, { 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}, {"support_filament", "",8},{"support_interface_filament", "",9},{"support_expansion", "",24},{"support_style", "",25}, - {"tree_support_branch_angle", "",10}, {"tree_support_wall_count", "",11},//tree support + {"tree_support_brim_width", "",26}, {"tree_support_branch_angle", "",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}, {"support_interface_top_layers", "",16},{"support_interface_bottom_layers", "",17},{"support_interface_spacing", "",18},{"support_bottom_interface_spacing", "",19}, - {"support_object_xy_distance", "",20}, {"bridge_no_support", "",21},{"max_bridge_length", "",22},{"support_critical_regions_only", "",23} + {"support_object_xy_distance", "",20}, {"bridge_no_support", "",21},{"max_bridge_length", "",22},{"support_critical_regions_only", "",23},{"support_remove_small_overhang","",27} }}, { L("Speed"), {{"support_speed", "",12}, {"support_interface_speed", "",13} }} @@ -92,16 +92,16 @@ 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},{"bridge_flow", "",11} }}, - { 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}, - {"sparse_infill_density", "",1},{"sparse_infill_pattern", "",1},{"infill_anchor", "",1},{"infill_anchor_max", "",1},{"top_surface_pattern", "",1},{"bottom_surface_pattern", "",1}, {"internal_solid_infill_pattern", "",1}, - {"infill_combination", "",1}, {"infill_wall_overlap", "",1}, {"infill_direction", "",1}, {"bridge_angle", "",1}, {"minimum_sparse_infill_area", "",1} + { L("Strength"), {{"wall_loops", "",1},{"top_shell_layers", "",1},{"top_shell_thickness", "",1}, + {"bottom_shell_layers", "",1}, {"bottom_shell_thickness", "",1}, {"sparse_infill_density", "",1}, + {"sparse_infill_pattern", "",1},{"sparse_infill_anchor", "",1},{"sparse_infill_anchor_max", "",1}, {"top_surface_pattern", "",1},{"bottom_surface_pattern", "",1}, {"internal_solid_infill_pattern", "",1}, + {"infill_combination", "",1}, {"infill_wall_overlap", "",1}, {"infill_direction", "",1}, {"bridge_angle", "",1},{"minimum_sparse_infill_area", "",1} }}, { L("Speed"), {{"outer_wall_speed", "",1},{"inner_wall_speed", "",2},{"sparse_infill_speed", "",3},{"top_surface_speed", "",4}, {"internal_solid_infill_speed", "",5}, - {"enable_overhang_speed", "",6}, {"overhang_speed_classic", "",6}, {"overhang_1_4_speed", "",7}, {"overhang_2_4_speed", "",8}, {"overhang_3_4_speed", "",9}, {"overhang_4_4_speed", "",10}, - {"bridge_speed", "",11}, {"gap_infill_speed", "",12}, {"internal_bridge_speed", "", 13} + {"enable_overhang_speed", "",6}, {"overhang_1_4_speed", "",7}, {"overhang_2_4_speed", "",8}, {"overhang_3_4_speed", "",9}, {"overhang_4_4_speed", "",10}, + {"bridge_speed", "",11}, {"gap_infill_speed", "",12} }} }; @@ -141,7 +141,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_on_build_plate_only", "support_critical_regions_only", "enforce_support_layers","support_remove_small_overhang", //tree support "tree_support_wall_count", //support @@ -484,38 +484,18 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty sub_menu->AppendSeparator(); } - for (auto &item : {L("Orca Cube"), L("3DBenchy"), L("Autodesk FDM Test"), - L("Voron Cube")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - std::vector input_files; - std::string file_name = item; - if (file_name == L("Orca Cube")) - file_name = "OrcaCube_v2.3mf"; - else if (file_name == L("3DBenchy")) - file_name = "3DBenchy.stl"; - else if (file_name == L("Autodesk FDM Test")) - file_name = "ksr_fdmtest_v4.stl"; - else if (file_name == L("Voron Cube")) - file_name = "Voron_Design_Cube_v7.stl"; - else - return; - input_files.push_back( - (boost::filesystem::path(Slic3r::resources_dir()) / - "handy_models" / file_name)); - plater()->load_files(input_files, LoadStrategy::LoadModel); - }, - "", menu); + for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone")}) + { + append_menu_item(sub_menu, wxID_ANY, _(item), "", + [type, item](wxCommandEvent&) { obj_list()->load_generic_subobject(item, type); }, "", menu); } - sub_menu->AppendSeparator(); - for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - obj_list()->load_generic_subobject(item, type); - }, - "", menu); + + if (type == ModelVolumeType::INVALID) { + sub_menu->AppendSeparator(); + for (auto &item : {L("Bambu Cube"), L("Bambu Cube V2"), L("3DBenchy"), L("ksr FDMTest")}) { + append_menu_item( + sub_menu, wxID_ANY, _(item), "", [type, item](wxCommandEvent &) { obj_list()->load_generic_subobject(item, type); }, "", menu); + } } return sub_menu; @@ -656,13 +636,6 @@ wxMenuItem* MenuFactory::append_menu_item_instance_to_object(wxMenu* menu) return menu_item; } -void MenuFactory::append_menu_item_fill_bed(wxMenu *menu) -{ - append_menu_item( - menu, wxID_ANY, _L("Fill bed with copies"), _L("Fill the remaining area of bed with copies of the selected object"), - [](wxCommandEvent &) { plater()->fill_bed_with_instances(); }, "", nullptr, []() { return plater()->can_increase_instances(); }, m_parent); -} - wxMenuItem* MenuFactory::append_menu_item_printable(wxMenu* menu) { // BBS: to be checked @@ -824,36 +797,57 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu) DynamicPrintConfig& global_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; ModelConfig& select_object_config = object_list->object(selection.get_object_idx())->config; - auto keys = select_object_config.keys(); - for (auto key : FREQ_SETTINGS_BUNDLE_FFF["Flush options"]) { - if (find(keys.begin(), keys.end(), key) == keys.end()) { - const ConfigOption* option = global_config.option(key); - select_object_config.set_key_value(key, option->clone()); - } - } - - wxMenu* flush_options_menu = new wxMenu(); append_menu_check_item(flush_options_menu, wxID_ANY, _L("Flush into objects' infill"), "", - [&select_object_config](wxCommandEvent&) { + [&select_object_config, &global_config](wxCommandEvent&) { const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]); + } select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0], new ConfigOptionBool(!option->getBool())); wxGetApp().obj_settings()->UpdateAndShow(true); - }, menu, []() {return true; }, [&select_object_config]() {const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]); return option->getBool(); }, m_parent); + }, menu, []() {return true; }, + [&select_object_config, &global_config]() { + const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]); + } + return option->getBool(); + }, m_parent); append_menu_check_item(flush_options_menu, wxID_ANY, _L("Flush into this object"), "", - [&select_object_config](wxCommandEvent&) { + [&select_object_config, &global_config](wxCommandEvent&) { const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]); + } select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1], new ConfigOptionBool(!option->getBool())); wxGetApp().obj_settings()->UpdateAndShow(true); - }, menu, []() {return true; }, [&select_object_config]() {const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]); return option->getBool(); }, m_parent); + }, menu, []() {return true; }, + [&select_object_config, &global_config]() { + const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]); + } + return option->getBool(); + }, m_parent); append_menu_check_item(flush_options_menu, wxID_ANY, _L("Flush into objects' support"), "", - [&select_object_config](wxCommandEvent&) { + [&select_object_config, &global_config](wxCommandEvent&) { const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]); + } select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2], new ConfigOptionBool(!option->getBool())); wxGetApp().obj_settings()->UpdateAndShow(true); - }, menu, []() {return true; }, [&select_object_config]() {const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]); return option->getBool(); }, m_parent); + }, menu, []() {return true; }, + [&select_object_config, &global_config]() { + const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]); + if (!option) { + option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]); + } + return option->getBool(); + }, m_parent); size_t i = 0; for (auto node = menu->GetMenuItems().GetFirst(); node; node = node->GetNext()) @@ -940,9 +934,9 @@ void MenuFactory::append_menu_item_merge_to_single_object(wxMenu* menu) void MenuFactory::append_menu_item_merge_parts_to_single_part(wxMenu* menu) { menu->AppendSeparator(); - append_menu_item(menu, wxID_ANY, _L("Assemble"), _L("Assemble the selected parts to a single part"), - [](wxCommandEvent&) { obj_list()->merge_volumes(); }, "", menu, - []() { return true; }, m_parent); + append_menu_item(menu, wxID_ANY, _L("Mesh boolean"), _L("Mesh boolean operations including union and subtraction"), + [](wxCommandEvent&) { obj_list()->boolean/*merge_volumes*/(); }, "", menu, + []() { return obj_list()->can_mesh_boolean(); }, m_parent); } void MenuFactory::append_menu_items_mirror(wxMenu* menu) @@ -1047,7 +1041,7 @@ void MenuFactory::create_object_menu() // "Add (volumes)" popupmenu will be added later in append_menu_items_add_volume() } -void MenuFactory::create_extra_object_menu() +void MenuFactory::create_bbl_object_menu() { append_menu_item_fill_bed(&m_object_menu); // Object Clone @@ -1056,6 +1050,8 @@ void MenuFactory::create_extra_object_menu() append_menu_item_fix_through_netfabb(&m_object_menu); // Object Simplify append_menu_item_simplify(&m_object_menu); + // merge to single part + append_menu_item_merge_parts_to_single_part(&m_object_menu); // Object Center append_menu_item_center(&m_object_menu); // Object Split @@ -1270,7 +1266,7 @@ void MenuFactory::init(wxWindow* parent) create_sla_object_menu(); //create_part_menu(); - create_extra_object_menu(); + create_bbl_object_menu(); create_bbl_part_menu(); create_bbl_assemble_object_menu(); create_bbl_assemble_part_menu(); @@ -1295,10 +1291,10 @@ wxMenu* MenuFactory::default_menu() wxMenu* MenuFactory::object_menu() { - append_menu_item_change_filament(&m_object_menu); append_menu_items_convert_unit(&m_object_menu); append_menu_items_flush_options(&m_object_menu); append_menu_item_invalidate_cut_info(&m_object_menu); + append_menu_item_change_filament(&m_object_menu); return &m_object_menu; } @@ -1358,13 +1354,13 @@ wxMenu* MenuFactory::multi_selection_menu() //append_menu_item_simplify(menu); append_menu_item_delete(menu); menu->AppendSeparator(); - //BBS - append_menu_item_change_filament(menu); append_menu_item_set_printable(menu); append_menu_item_per_object_process(menu); menu->AppendSeparator(); append_menu_items_convert_unit(menu); + //BBS + append_menu_item_change_filament(menu); menu->AppendSeparator(); append_menu_item_export_stl(menu, true); } @@ -1374,6 +1370,7 @@ wxMenu* MenuFactory::multi_selection_menu() //append_menu_item_simplify(menu); append_menu_item_delete(menu); append_menu_items_convert_unit(menu); + append_menu_item_change_filament(menu); wxMenu* split_menu = new wxMenu(); if (split_menu) { append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), @@ -1386,8 +1383,6 @@ wxMenu* MenuFactory::multi_selection_menu() append_submenu(menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", []() { return plater()->can_split(true); }, m_parent); } - menu->AppendSeparator(); - append_menu_item_change_filament(menu); } return menu; } @@ -1417,6 +1412,7 @@ wxMenu* MenuFactory::assemble_multi_selection_menu() wxMenu* MenuFactory::plate_menu() { append_menu_item_locked(&m_plate_menu); + append_menu_item_plate_name(&m_plate_menu); return &m_plate_menu; } @@ -1621,11 +1617,16 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) } } - wxString menu_text = all_printable ? _L("Set Unprintable") : _L("Set Printable"); - append_menu_item(menu, wxID_ANY, menu_text, "", [this, all_printable](wxCommandEvent&) { + wxString menu_text = _L("Printable"); + wxMenuItem* menu_item_set_printable = append_menu_check_item(menu, wxID_ANY, menu_text, "", [this, all_printable](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_printable(!all_printable); - }, "", nullptr, []() { return true; }, m_parent); + }, menu); + m_parent->Bind(wxEVT_UPDATE_UI, [all_printable](wxUpdateUIEvent& evt) { + evt.Check(all_printable); + plater()->set_current_canvas_as_dirty(); + + }, menu_item_set_printable->GetId()); } void MenuFactory::append_menu_item_locked(wxMenu* menu) @@ -1657,6 +1658,47 @@ void MenuFactory::append_menu_item_locked(wxMenu* menu) }, item->GetId()); } +void MenuFactory::append_menu_item_fill_bed(wxMenu *menu) +{ + append_menu_item( + menu, wxID_ANY, _L("Fill bed with copies"), _L("Fill the remaining area of bed with copies of the selected object"), + [](wxCommandEvent &) { plater()->fill_bed_with_instances(); }, "", nullptr, []() { return plater()->can_increase_instances(); }, m_parent); +} +void MenuFactory::append_menu_item_plate_name(wxMenu *menu) +{ + wxString name= _L("Edit Plate Name"); + // Delete old menu item + const int item_id = menu->FindItem(name); + if (item_id != wxNOT_FOUND) menu->Destroy(item_id); + + PartPlate *plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); + + auto item = append_menu_item( + menu, wxID_ANY, name, "", + [plate](wxCommandEvent &e) { + int hover_idx =plater()->canvas3D()->GetHoverId(); + if (hover_idx == -1) { + int plate_idx=plater()->GetPlateIndexByRightMenuInLeftUI(); + plater()->select_plate_by_hover_id(plate_idx * PartPlate::GRABBER_COUNT, false, true); + } + else + { + plater()->select_plate_by_hover_id(hover_idx, false, true); + } + plater()->get_current_canvas3D()->post_event(SimpleEvent(EVT_GLCANVAS_PLATE_NAME_CHANGE)); + }, + "", nullptr, []() { return true; }, m_parent); + + m_parent->Bind( + wxEVT_UPDATE_UI, + [](wxUpdateUIEvent &evt) { + PartPlate *plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); + plater()->set_current_canvas_as_dirty(); + }, + item->GetId()); +} void MenuFactory::update_object_menu() { diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 2076e630e..31e6ef8c5 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -108,7 +108,7 @@ private: //BBS: add part plate related logic void create_plate_menu(); //BBS: add bbl object menu - void create_extra_object_menu(); + void create_bbl_object_menu(); void create_bbl_part_menu(); void create_bbl_assemble_object_menu(); void create_bbl_assemble_part_menu(); @@ -151,7 +151,7 @@ private: void append_menu_item_set_printable(wxMenu* menu); void append_menu_item_locked(wxMenu* menu); void append_menu_item_fill_bed(wxMenu *menu); - + void append_menu_item_plate_name(wxMenu *menu); }; }} diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index d683cd43d..0d2033646 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -35,7 +35,7 @@ ObjectLayers::ObjectLayers(wxWindow* parent) : void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_edited_range) { - if (is_last_edited_range && m_selection_type == editor->type()) { + //if (is_last_edited_range && m_selection_type == editor->type()) { /* Workaround! Under OSX we should use CallAfter() for SetFocus() after LayerEditors "reorganizations", * because of selected control's strange behavior: * cursor is set to the control, but blue border - doesn't. @@ -44,12 +44,12 @@ void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_ed #ifdef __WXOSX__ wxTheApp->CallAfter([editor]() { #endif - editor->SetFocus(); - editor->SetInsertionPointEnd(); + //editor->SetFocus(); + //editor->SelectAll(); #ifdef __WXOSX__ }); #endif - } + //} } wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinusButton *delete_button, PlusMinusButton *add_button) @@ -131,7 +131,7 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus return wxGetApp().obj_list()->edit_layer_range(range, new_range, dont_update_ui); }); - select_editor(editor, is_last_edited_range); + //select_editor(editor, is_last_edited_range); auto sizer2 = new wxBoxSizer(wxHORIZONTAL); sizer2->Add(editor); @@ -170,11 +170,13 @@ void ObjectLayers::create_layers_list() { for (const auto &layer : m_object->layer_config_ranges) { const t_layer_height_range& range = layer.first; - auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range); + auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range); + del_btn->DisableFocusFromKeyboard(); del_btn->SetBackgroundColour(m_parent->GetBackgroundColour()); del_btn->SetToolTip(_L("Remove height range")); - auto add_btn = new PlusMinusButton(m_parent, m_bmp_add, range); + auto add_btn = new PlusMinusButton(m_parent, m_bmp_add, range); + add_btn->DisableFocusFromKeyboard(); add_btn->SetBackgroundColour(m_parent->GetBackgroundColour()); wxString tooltip = wxGetApp().obj_list()->can_add_new_range_after_current(range); add_btn->SetToolTip(tooltip.IsEmpty() ? _L("Add height range") : tooltip); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 3b7af81a9..2452dfb52 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -21,6 +21,7 @@ #include "NotificationManager.hpp" #include "MsgDialog.hpp" #include "Widgets/ProgressDialog.hpp" +#include "SingleChoiceDialog.hpp" #include #include @@ -169,7 +170,11 @@ ObjectList::ObjectList(wxWindow* parent) : ObjectDataViewModelNode* sel_node = (ObjectDataViewModelNode*)event.GetItem().GetID(); if (sel_node && (sel_node->GetType() & ItemType::itPlate)) { - wxGetApp().plater()->select_plate(sel_node->GetPlateIdx()); + if (wxGetApp().plater()->is_preview_shown()) { + wxGetApp().plater()->select_sliced_plate(sel_node->GetPlateIdx()); + } else { + wxGetApp().plater()->select_plate(sel_node->GetPlateIdx()); + } wxGetApp().plater()->deselect_all(); } else { @@ -267,6 +272,12 @@ ObjectList::ObjectList(wxWindow* parent) : //Bind(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, [this](wxCommandEvent& e) { last_volume_is_deleted(e.GetInt()); }); Bind(wxEVT_SIZE, ([this](wxSizeEvent &e) { + if (m_last_size == this->GetSize()) { + e.Skip(); + return; + } else { + m_last_size = this->GetSize(); + } #ifdef __WXGTK__ // On GTK, the EnsureVisible call is postponed to Idle processing (see wxDataViewCtrl::m_ensureVisibleDefered). // So the postponed EnsureVisible() call is planned for an item, which may not exist at the Idle processing time, if this wxEVT_SIZE @@ -281,7 +292,7 @@ ObjectList::ObjectList(wxWindow* parent) : #endif e.Skip(); })); - + m_last_size = this->GetSize(); } ObjectList::~ObjectList() @@ -377,7 +388,8 @@ void ObjectList::create_objects_ctrl() return m_objects_model->GetDefaultExtruderIdx(GetSelection()); }); bmp_choice_renderer->set_has_default_extruder([this]() { - return m_objects_model->GetVolumeType(GetSelection()) == ModelVolumeType::PARAMETER_MODIFIER; + return m_objects_model->GetVolumeType(GetSelection()) == ModelVolumeType::PARAMETER_MODIFIER || + m_objects_model->GetItemType(GetSelection()) == itLayer; }); AppendColumn(new wxDataViewColumn(_L("Fila."), bmp_choice_renderer, colFilament, m_columns_width[colFilament] * em, wxALIGN_CENTER_HORIZONTAL, 0)); @@ -1193,13 +1205,15 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me } } else if (col_num == colColorPaint) { - ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); - if (node->HasColorPainting()) { - GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); - if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) - gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation); - else - gizmos_mgr.reset_all_states(); + if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) { + ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); + if (node->HasColorPainting()) { + GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); + if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) + gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation); + else + gizmos_mgr.reset_all_states(); + } } } else if (col_num == colSinking) { @@ -1258,7 +1272,7 @@ void ObjectList::show_context_menu(const bool evt_context_menu) const auto item = GetSelection(); if (item) { - const ItemType type = m_objects_model->GetItemType(item); + const ItemType type = m_objects_model->GetItemType(item); if (!(type & (itPlate | itObject | itVolume | itInstance))) return; @@ -1266,6 +1280,14 @@ void ObjectList::show_context_menu(const bool evt_context_menu) type & itInstance ? plater->instance_menu() : type & itVolume ? plater->part_menu() : printer_technology() == ptFFF ? plater->object_menu() : plater->sla_object_menu(); + plater->SetPlateIndexByRightMenuInLeftUI(-1); + if (type & itPlate) { + int plate_idx = -1; + const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); + if (plate_idx >= 0) { + plater->SetPlateIndexByRightMenuInLeftUI(plate_idx); + } + } } else if (evt_context_menu) menu = plater->default_menu(); @@ -1934,12 +1956,13 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo Model model; try { - model = Model::read_from_file(input_file); + model = Model::read_from_file(input_file, nullptr, nullptr, LoadStrategy::LoadModel); } catch (std::exception& e) { - auto msg = _L("Error!") + " " + input_file + " : " + e.what() + "."; + // auto msg = _L("Error!") + " " + input_file + " : " + e.what() + "."; + auto msg = _L("Error!") + " " + _L("Failed to get the model data in the current file."); show_error(parent, msg); - exit(1); + return; } if (from_galery) @@ -1956,6 +1979,7 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo } } + model.add_default_instances(); TriangleMesh mesh = model.mesh(); // Mesh will be centered when loading. ModelVolume* new_volume = model_object.add_volume(std::move(mesh), type); @@ -1996,24 +2020,32 @@ static TriangleMesh create_mesh(const std::string& type_name, const BoundingBoxf { const double side = wxGetApp().plater()->canvas3D()->get_size_proportional_to_max_bed_size(0.1); - indexed_triangle_set mesh; + TriangleMesh mesh; if (type_name == "Cube") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(side, side, side); + mesh = TriangleMesh(its_make_cube(side, side, side)); else if (type_name == "Cylinder") // Centered around 0, sitting on the print bed. // The cylinder has the same volume as the box above. - mesh = its_make_cylinder(0.5 * side, side); + mesh = TriangleMesh(its_make_cylinder(0.5 * side, side)); else if (type_name == "Sphere") // Centered around 0, half the sphere below the print bed, half above. // The sphere has the same volume as the box above. - mesh = its_make_sphere(0.5 * side, PI / 18); + mesh = TriangleMesh(its_make_sphere(0.5 * side, PI / 18)); else if (type_name == "Slab") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5); + mesh = TriangleMesh(its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5)); else if (type_name == "Cone") - mesh = its_make_cone(0.5 * side, side); - return TriangleMesh(mesh); + mesh = TriangleMesh(its_make_cone(0.5 * side, side)); + else if (type_name == "Bambu Cube") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/model/Bambu_Cube.stl").c_str(), true, nullptr); + else if (type_name == "Bambu Cube V2") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/model/Bambu_Cube_V2.stl").c_str(), true, nullptr); + else if (type_name == "3DBenchy") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/model/3DBenchy.stl").c_str(), true, nullptr); + else if (type_name == "ksr FDMTest") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/model/ksr_FDMTest.stl").c_str(), true, nullptr); + return mesh; } void ObjectList::load_generic_subobject(const std::string& type_name, const ModelVolumeType type) @@ -2744,6 +2776,9 @@ void ObjectList::merge(bool to_multipart_object) new_object->center_around_origin(); new_object->translate_instances(-new_object->origin_translation); new_object->origin_translation = Vec3d::Zero(); + //BBS init asssmble transformation + Geometry::Transformation t = new_object->instances[0]->get_transformation(); + new_object->instances[0]->set_assemble_transformation(t); //BBS: notify it before remove notify_instance_updated(m_objects->size() - 1); @@ -2851,6 +2886,45 @@ void ObjectList::layers_editing() Expand(layers_item); } +// BBS: merge parts of a single object into one volume, similar to export_stl, but no need to export and then import +void ObjectList::boolean() +{ + std::vector obj_idxs, vol_idxs; + get_selection_indexes(obj_idxs, vol_idxs); + if (obj_idxs.empty() && vol_idxs.empty()) + return; + + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "boolean"); + + Model* model = (*m_objects)[0]->get_model(); + ModelObject* new_object = model->add_object(); + new_object->name = (*m_objects)[0]->name; + new_object->config.assign_config((*m_objects)[0]->config); + if (new_object->instances.empty()) + new_object->add_instance(); + + ModelObject* object = (*m_objects)[obj_idxs.front()]; + TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [this](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); }); + ModelVolume* new_volume = new_object->add_volume(mesh); + + // BBS: ensure on bed but no need to ensure locate in the center around origin + new_object->ensure_on_bed(); + new_object->center_around_origin(); + new_object->translate_instances(-new_object->origin_translation); + new_object->origin_translation = Vec3d::Zero(); + + // BBS: notify it before move + notify_instance_updated(m_objects->size() - 1); + + // remove selected objects + remove(); + + // Add new object(UNION) to the object_list + add_object_to_list(m_objects->size() - 1); + select_item(m_objects_model->GetItemById(m_objects->size() - 1)); + update_selections_on_canvas(); +} + wxDataViewItem ObjectList::add_layer_root_item(const wxDataViewItem obj_item) { const int obj_idx = m_objects_model->GetIdByItem(obj_item); @@ -2881,7 +2955,7 @@ DynamicPrintConfig ObjectList::get_default_layer_config(const int obj_idx) int extruder = object(obj_idx)->config.has("extruder") ? object(obj_idx)->config.opt_int("extruder") : wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("extruder"); - config.set_key_value("extruder", new ConfigOptionInt(extruder)); + config.set_key_value("extruder", new ConfigOptionInt(0)); return config; } @@ -2988,6 +3062,16 @@ bool ObjectList::can_merge_to_single_object() const return (*m_objects)[obj_idx]->volumes.size() > 1; } +bool ObjectList::can_mesh_boolean() const +{ + int obj_idx = get_selected_obj_idx(); + if (obj_idx < 0) + return false; + + // selected object should be multi mesh + return (*m_objects)[obj_idx]->volumes.size() > 1 || ((*m_objects)[obj_idx]->volumes.size() == 1 && (*m_objects)[obj_idx]->volumes[0]->is_splittable()); +} + bool ObjectList::has_selected_cut_object() const { wxDataViewItemArray sels; @@ -3150,7 +3234,7 @@ void ObjectList::part_selection_changed() for (auto item : sels) { int obj_idx = m_objects_model->GetObjectIdByItem(item); const ModelObject *obj = object(obj_idx); - if (obj->is_cut()) { + if (obj && obj->is_cut()) { if (cut_objects.find(obj->cut_id) == cut_objects.end()) cut_objects[obj->cut_id] = std::set{obj_idx}; else @@ -3295,7 +3379,11 @@ void ObjectList::part_selection_changed() Sidebar& panel = wxGetApp().sidebar(); panel.Freeze(); - //wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false); + + const ItemType type = m_objects_model->GetItemType(item); + if (!(type & itLayer)) { + wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false); + } // BBS //wxGetApp().obj_manipul() ->UpdateAndShow(update_and_show_manipulations); wxGetApp().obj_settings()->UpdateAndShow(update_and_show_settings); @@ -3523,6 +3611,7 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio } } + void ObjectList::add_objects_to_list(std::vector obj_idxs, bool call_selection_changed, bool notify_partplate, bool do_info_update) { #ifdef __WXOSX__ @@ -3536,7 +3625,6 @@ void ObjectList::add_objects_to_list(std::vector obj_idxs, bool call_sel #endif } - void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed, bool notify_partplate, bool do_info_update) { auto model_object = (*m_objects)[obj_idx]; @@ -3778,10 +3866,16 @@ void ObjectList::update_lock_icons_for_model() void ObjectList::delete_all_objects_from_list() { +#ifdef __WXOSX__ + AssociateModel(nullptr); +#endif m_prevent_list_events = true; reload_all_plates(); m_prevent_list_events = false; part_selection_changed(); +#ifdef __WXOSX__ + AssociateModel(m_objects_model); +#endif } void ObjectList::increase_object_instances(const size_t obj_idx, const size_t num) @@ -4438,12 +4532,12 @@ void ObjectList::update_selections() void ObjectList::update_selections_on_canvas() { - Selection& selection = wxGetApp().plater()->get_view3D_canvas3D()->get_selection(); + Selection& selection = wxGetApp().plater()->get_current_canvas3D()->get_selection(); const int sel_cnt = GetSelectedItemsCount(); if (sel_cnt == 0) { selection.remove_all(); - wxGetApp().plater()->get_view3D_canvas3D()->update_gizmos_on_off_state(); + wxGetApp().plater()->get_current_canvas3D()->update_gizmos_on_off_state(); return; } @@ -4547,7 +4641,7 @@ void ObjectList::update_selections_on_canvas() selection.add_volumes(mode, volume_idxs, single_selection); } - wxGetApp().plater()->get_view3D_canvas3D()->update_gizmos_on_off_state(); + wxGetApp().plater()->get_current_canvas3D()->update_gizmos_on_off_state(); wxGetApp().plater()->canvas3D()->render(); } @@ -4922,7 +5016,8 @@ void ObjectList::change_part_type() } const wxString names[] = { _L("Part"), _L("Negative Part"), _L("Modifier"), _L("Support Blocker"), _L("Support Enforcer") }; - auto new_type = ModelVolumeType(wxGetApp().GetSingleChoiceIndex(_L("Type:"), _L("Choose part type"), wxArrayString(5, names), int(type))); + SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), wxArrayString(5, names), int(type)); + auto new_type = ModelVolumeType(dlg.GetSingleChoiceIndex()); if (new_type == type || new_type == ModelVolumeType::INVALID) return; @@ -5516,6 +5611,9 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) } } + if (type & itLayerRoot) + continue; + ModelConfig& config = get_item_config(item); if (config.has("extruder")) config.set("extruder", extruder); @@ -5592,10 +5690,10 @@ void ObjectList::reload_all_plates(bool notify_partplate) m_prevent_canvas_selection_update = false; - // update printable states on canvas - wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(obj_idxs); // update scene wxGetApp().plater()->update(); + // update printable states on canvas + wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(obj_idxs); } void ObjectList::on_plate_selected(int plate_index) diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index bafa0b5ba..125c74803 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -300,6 +300,7 @@ public: void merge_volumes(); // BBS: merge parts to single part void layers_editing(); + void boolean(); // BBS: Boolean Operation of parts wxDataViewItem add_layer_root_item(const wxDataViewItem obj_item); wxDataViewItem add_settings_item(wxDataViewItem parent_item, const DynamicPrintConfig* config); @@ -310,6 +311,7 @@ public: bool can_split_instances(); bool can_merge_to_multipart_object() const; bool can_merge_to_single_object() const; + bool can_mesh_boolean() const; bool has_selected_cut_object() const; void invalidate_cut_info_for_selection(); @@ -477,6 +479,7 @@ private: void apply_object_instance_transfrom_to_all_volumes(ModelObject *model_object, bool need_update_assemble_matrix = true); std::vector m_columns_width; + wxSize m_last_size; }; diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index f11085543..90ea93094 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -356,6 +356,10 @@ void ObjectSettings::update_config_values(ModelConfig* config) //BBS: change local config to DynamicPrintConfig ConfigManipulation config_manipulation(load_config, toggle_field, nullptr, nullptr, &(config->get())); + // BBS: whether the preset is Bambu Lab printer + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + bool is_BBL_printer = preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle); + config_manipulation.set_is_BBL_Printer(is_BBL_printer); if (!is_object_settings) { diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 630688543..2f7178ed4 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -1799,15 +1799,6 @@ wxString ObjectGridTable::convert_filament_string(int index, wxString& filament_ return result_str; } -static wxString brim_choices[] = -{ - L("Auto"), - L("Manual"), - L("No-brim"), - //L("Inner brim only"), - //L("Outer and inner brim") -}; - void ObjectGridTable::init_cols(ObjectGrid *object_grid) { const float font_size = 1.5f * wxGetApp().em_unit(); @@ -1839,7 +1830,7 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) col = new ObjectGridCol(coEnum, "extruder", ObjectGridTable::category_all, false, false, true, true, wxALIGN_CENTRE); col->size = 128; //the spec now guarantees vectors store their elements contiguously - col->choices = &m_panel->m_filaments_name[0]; + col->choices.assign(m_panel->m_filaments_name.begin(), m_panel->m_filaments_name.end()); col->choice_count = m_panel->m_filaments_count; m_col_data.push_back(col); @@ -1886,8 +1877,12 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) //Bed Adhesion col = new ObjectGridCol(coEnum, "brim_type", L("Support"), true, false, true, true, wxALIGN_LEFT); col->size = object_grid->GetTextExtent(L("Auto Brim")).x + 8; //add 8 for border - col->choices = brim_choices; - col->choice_count = WXSIZEOF(brim_choices); + col->choices.Add(_L("Auto")); + col->choices.Add(_L("Outer brim only")); + col->choices.Add(_L("Inner brim only")); + col->choices.Add(_L("Outer and inner brim")); + col->choices.Add(_L("No-brim")); + col->choice_count = col->choices.size(); m_col_data.push_back(col); //reset icon for Bed Adhesion @@ -2240,11 +2235,11 @@ void ObjectGridTable::update_row_properties() break; case coEnum: if (col == ObjectGridTable::col_filaments) { - GridCellFilamentsEditor *filament_editor = new GridCellFilamentsEditor(grid_col->choice_count, grid_col->choices, false, &m_panel->m_color_bitmaps); + GridCellFilamentsEditor *filament_editor = new GridCellFilamentsEditor(grid_col->choices, false, &m_panel->m_color_bitmaps); grid_table->SetCellEditor(row, col, filament_editor); grid_table->SetCellRenderer(row, col, new GridCellFilamentsRenderer()); } else { - GridCellChoiceEditor *combo_editor = new GridCellChoiceEditor(grid_col->choice_count, grid_col->choices); + GridCellChoiceEditor *combo_editor = new GridCellChoiceEditor(grid_col->choices); grid_table->SetCellEditor(row, col, combo_editor); grid_table->SetCellRenderer(row, col, new wxGridCellChoiceRenderer()); //new wxGridCellChoiceEditor(grid_col->choice_count, grid_col->choices)); @@ -2704,7 +2699,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi SetSize(wxSize(-1, FromDIP(450))); SetMinSize(wxSize(-1, FromDIP(450))); - SetMaxSize(wxSize(-1, FromDIP(450))); + //SetMaxSize(wxSize(-1, FromDIP(450))); //m_search_line = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); @@ -2768,13 +2763,13 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi //m_page_sizer->Add(m_page_top_sizer, 0, wxALIGN_CENTER_HORIZONTAL, 0); m_page_sizer->Add(m_object_settings->get_sizer(), 1, wxEXPAND | wxALL, 2 ); - auto m_line_left = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(1,-1), wxTAB_TRAVERSAL); + auto m_line_left = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(2, -1), wxTAB_TRAVERSAL); m_line_left->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA)); m_top_sizer->Add(m_object_grid, 1, wxEXPAND,0); m_top_sizer->Add(m_line_left, 0, wxEXPAND, 0); - m_top_sizer->Add(m_side_window,0,0,0); + m_top_sizer->Add(m_side_window, 0, wxEXPAND, 0); //wxBoxSizer * page_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -2966,7 +2961,7 @@ void ObjectTablePanel::load_data() case coEnum: if (col == ObjectGridTable::col_filaments) { if (grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { - GridCellFilamentsEditor* filament_editor = new GridCellFilamentsEditor(grid_col->choice_count, grid_col->choices, false, &m_color_bitmaps); + GridCellFilamentsEditor* filament_editor = new GridCellFilamentsEditor(grid_col->choices, false, &m_color_bitmaps); m_object_grid->SetCellEditor(row, col, filament_editor); m_object_grid->SetCellRenderer(row, col, new GridCellFilamentsRenderer()); } @@ -2979,7 +2974,7 @@ void ObjectTablePanel::load_data() } } else { - GridCellChoiceEditor* combo_editor = new GridCellChoiceEditor(grid_col->choice_count, grid_col->choices); + GridCellChoiceEditor* combo_editor = new GridCellChoiceEditor(grid_col->choices); m_object_grid->SetCellEditor(row, col, combo_editor); m_object_grid->SetCellRenderer(row, col, new wxGridCellChoiceRenderer()); } @@ -3260,6 +3255,10 @@ void ObjectTablePanel::resetAllValuesInSideWindow(int row, bool is_object, Model m_object_settings->resetAllValues(row, is_object, object, config, category); } +void ObjectTablePanel::msw_rescale() { + m_object_grid->HideRowLabels(); +} + // ---------------------------------------------------------------------------- // ObjectTableDialog // ---------------------------------------------------------------------------- @@ -3299,7 +3298,7 @@ ObjectTableDialog::ObjectTableDialog(wxWindow* parent, Plater* platerObj, Model SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); //top line - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 2), wxTAB_TRAVERSAL); m_line_top->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA)); m_main_sizer->Add(m_line_top, 0, wxEXPAND, 0); @@ -3370,6 +3369,8 @@ void ObjectTableDialog::on_dpi_changed(const wxRect& suggested_rect) const wxSize& size = wxSize(40 * em, 30 * em); SetMinSize(size); + m_obj_panel->msw_rescale(); + Fit(); Refresh(); @@ -3423,9 +3424,9 @@ void ObjectTableDialog::OnSize(wxSizeEvent& event) SetMinSize(wxSize(GetSize().x, -1)); SetSize(wxSize(GetSize().x, -1)); - m_obj_panel->SetSize(wxSize(-1, GetSize().y)); - m_obj_panel->SetMinSize(wxSize(-1, GetSize().y)); - m_obj_panel->SetMaxSize(wxSize(-1, GetSize().y)); + //m_obj_panel->SetSize(wxSize(-1, GetSize().y)); + //m_obj_panel->SetMinSize(wxSize(-1, GetSize().y)); + //m_obj_panel->SetMaxSize(wxSize(-1, GetSize().y)); event.Skip(); } diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 072f211f7..a21436fe0 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -416,7 +416,7 @@ public: bool b_icon; bool b_editable; bool b_from_config; - wxString *choices; + wxArrayString choices; int choice_count; int horizontal_align; @@ -427,13 +427,11 @@ public: size = 32; else size = -1; - choices = nullptr; choice_count = 0; } ~ObjectGridCol() { - choices = nullptr; } }; ObjectGridTable(ObjectTablePanel* panel): m_panel(panel) { } @@ -573,6 +571,7 @@ public: void sort_by_default() { m_object_grid_table->sort_by_default(); } wxSize get_init_size(); void resetAllValuesInSideWindow(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category); + void msw_rescale(); //set ObjectGridTable as friend friend class ObjectGridTable; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 37d4f4dc2..d6937c5a3 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -290,10 +290,20 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ if (field) field->toggle(toggle); }; - ConfigManipulation config_manipulation(nullptr, toggle_field, nullptr, nullptr, &m_current_config); + auto toggle_line = [this, optgroup](const t_config_option_key & opt_key, bool toggle) + { + Line* line = optgroup->get_line(opt_key); + if (line) line->toggle_visible = toggle; + }; + ConfigManipulation config_manipulation(nullptr, toggle_field, toggle_line, nullptr, &m_current_config); + // BBS: whether the preset is Bambu Lab printer + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + bool is_BBL_printer = preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle); + config_manipulation.set_is_BBL_Printer(is_BBL_printer); printer_technology == ptFFF ? config_manipulation.toggle_print_fff_options(&m_current_config) : config_manipulation.toggle_print_sla_options(&m_current_config) ; + optgroup->update_visibility(wxGetApp().get_mode()); } //if (!categories.empty()) { @@ -383,15 +393,30 @@ void ObjectTableSettings::update_config_values(bool is_object, ModelObject* obje if (field) field->toggle(toggle); }; + auto toggle_line = [this](const t_config_option_key &opt_key, bool toggle) { + for (auto og : m_og_settings) { + Line *line = og->get_line(opt_key); + if (line) { line->toggle_visible = toggle; break; } + } + }; - ConfigManipulation config_manipulation(nullptr, toggle_field, nullptr, nullptr, &m_current_config); + ConfigManipulation config_manipulation(nullptr, toggle_field, toggle_line, nullptr, &m_current_config); + // BBS: whether the preset is Bambu Lab printer + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + bool is_BBL_printer = preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle); + config_manipulation.set_is_BBL_Printer(is_BBL_printer); printer_technology == ptFFF ? config_manipulation.update_print_fff_config(&main_config) : config_manipulation.update_print_sla_config(&main_config) ; printer_technology == ptFFF ? config_manipulation.toggle_print_fff_options(&main_config) : config_manipulation.toggle_print_sla_options(&main_config) ; - + for (auto og : m_og_settings) { + og->update_visibility(wxGetApp().get_mode()); + } + m_parent->Layout(); + m_parent->Fit(); + m_parent->GetParent()->Layout(); t_config_option_keys diff_keys; for (const t_config_option_key &opt_key : main_config.keys()) { const ConfigOption *this_opt = main_config.option(opt_key); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 49be6b4e3..d92d99dd7 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -477,7 +477,7 @@ void Preview::update_layers_slider_mode() // BBS if (wxGetApp().filaments_cnt() > 1) { //const ModelObjectPtrs& objects = wxGetApp().plater()->model().objects; - auto plate_extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders(); + auto plate_extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders_without_support(); for (auto extruder : plate_extruders) { if (extruder != plate_extruders[0]) can_change_color = false; @@ -486,23 +486,23 @@ void Preview::update_layers_slider_mode() if (!plate_extruders.empty()) { //const int extruder = objects[0]->config.has("extruder") ? objects[0]->config.option("extruder")->getInt() : 0; only_extruder = plate_extruders[0]; - // auto is_one_extruder_printed_model = [objects, extruder]() { - // for (ModelObject *object : objects) { - // if (object->config.has("extruder") && object->config.option("extruder")->getInt() != extruder) /*return false*/; + // auto is_one_extruder_printed_model = [objects, extruder]() { + // for (ModelObject *object : objects) { + // if (object->config.has("extruder") && object->config.option("extruder")->getInt() != extruder) /*return false*/; - // for (ModelVolume *volume : object->volumes) - // if ((volume->config.has("extruder") && volume->config.option("extruder")->getInt() != extruder) || !volume->mmu_segmentation_facets.empty()) return false; + // for (ModelVolume *volume : object->volumes) + // if ((volume->config.has("extruder") && volume->config.option("extruder")->getInt() != extruder) || !volume->mmu_segmentation_facets.empty()) return false; - // for (const auto &range : object->layer_config_ranges) - // if (range.second.has("extruder") && range.second.option("extruder")->getInt() != extruder) return false; - // } - // return true; - // }; + // for (const auto &range : object->layer_config_ranges) + // if (range.second.has("extruder") && range.second.option("extruder")->getInt() != extruder) return false; + // } + // return true; + // }; - // if (is_one_extruder_printed_model()) - // only_extruder = extruder; - // else - // one_extruder_printed_model = false; + // if (is_one_extruder_printed_model()) + // only_extruder = extruder; + // else + // one_extruder_printed_model = false; } } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index c86f43faa..10e2a6f94 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -52,6 +52,15 @@ static std::array decode_color_to_float_array(const std::string color) ret[j] = float(digit1 * 16 + digit2) / 255.0f; } } + else if (color.size() == 9 && color.front() == '#') { + for (size_t j = 0; j < 4; ++j) { + int digit1 = hex_to_int(*c++); + int digit2 = hex_to_int(*c++); + if (digit1 == -1 || digit2 == -1) break; + + ret[j] = float(digit1 * 16 + digit2) / 255.0f; + } + } return ret; } @@ -189,9 +198,12 @@ public: this->Bind(wxEVT_SYS_COLOUR_CHANGED, [this](wxSysColourChangedEvent& event) { - update_dark_config(); - on_sys_color_changed(); - event.Skip(); +#ifndef __WINDOWS__ + update_dark_config(); + on_sys_color_changed(); + event.Skip(); +#endif // __WINDOWS__ + }); if (std::is_same::value) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index 20107305b..2d7063dab 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -132,7 +132,7 @@ void GLGizmoMeshBoolean::on_render() } float src_color[3] = { 1.0f, 1.0f, 1.0f }; - float tool_color[3] = { 0.0f, 150.0f / 255.0f, 136.0f / 255.0f }; + float tool_color[3] = { 0.0f, 174.0f / 255.0f, 66.0f / 255.0f }; m_parent.get_selection().render_bounding_box(src_bb, src_color, m_parent.get_scale()); m_parent.get_selection().render_bounding_box(tool_bb, tool_color, m_parent.get_scale()); } @@ -179,17 +179,12 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); GizmoImguiBegin("MeshBoolean", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); - const int max_tab_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(_u8L("Union").c_str()).x, - std::max(ImGui::CalcTextSize(_u8L("Difference").c_str()).x, ImGui::CalcTextSize(_u8L("Intersection").c_str()).x)); - const int max_cap_length = ImGui::GetStyle().WindowPadding.x + ImGui::GetStyle().ItemSpacing.x + - std::max({ImGui::CalcTextSize(_u8L("Source Volume").c_str()).x, - ImGui::CalcTextSize(_u8L("Tool Volume").c_str()).x, - ImGui::CalcTextSize(_u8L("Subtract from").c_str()).x, - ImGui::CalcTextSize(_u8L("Subtract with").c_str()).x}); + const int max_tab_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(_L("Union").c_str()).x, + std::max(ImGui::CalcTextSize(_L("Difference").c_str()).x, ImGui::CalcTextSize(_L("Intersection").c_str()).x)); + const int max_cap_length = ImGui::GetStyle().WindowPadding.x + ImGui::GetStyle().ItemSpacing.x + std::max(ImGui::CalcTextSize(_L("Source Volume").c_str()).x, ImGui::CalcTextSize(_L("Tool Volume").c_str()).x); + const int select_btn_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(("1 " + _L("selected")).c_str()).x, ImGui::CalcTextSize(_L("Select").c_str()).x); - const int select_btn_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(("1 " + _u8L("selected")).c_str()).x, ImGui::CalcTextSize(_u8L("Select").c_str()).x); - - auto selectable = [this](const std::string& label, bool selected, const ImVec2& size_arg) { + auto selectable = [this](const wxString& label, bool selected, const ImVec2& size_arg) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 0,0 }); ImGuiWindow* window = ImGui::GetCurrentWindow(); @@ -200,13 +195,13 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l if (selected || hovered) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_Button, { 0, 150.0f / 255.0f, 136.0f / 255.0f, 1.0f }); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0, 150.0f / 255.0f, 136.0f / 255.0f, 1.0f }); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 0, 150.0f / 255.0f, 136.0f / 255.0f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_Button, { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }); } else { - ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0, 150.0f / 255.0f, 136.0f / 255.0f, 1.0f }); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 0, 150.0f / 255.0f, 136.0f / 255.0f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }); } bool res = ImGui::Button(label.c_str(), size_arg); @@ -245,15 +240,15 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l }; ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0); - if (selectable(_u8L("Union"), m_operation_mode == MeshBooleanOperation::Union, ImVec2(max_tab_length, 0.0f))) { + if (selectable(_L("Union").c_str(), m_operation_mode == MeshBooleanOperation::Union, ImVec2(max_tab_length, 0.0f))) { m_operation_mode = MeshBooleanOperation::Union; } ImGui::SameLine(0, 0); - if (selectable(_u8L("Difference"), m_operation_mode == MeshBooleanOperation::Difference, ImVec2(max_tab_length, 0.0f))) { + if (selectable(_L("Difference").c_str(), m_operation_mode == MeshBooleanOperation::Difference, ImVec2(max_tab_length, 0.0f))) { m_operation_mode = MeshBooleanOperation::Difference; } ImGui::SameLine(0, 0); - if (selectable(_u8L("Intersection"), m_operation_mode == MeshBooleanOperation::Intersection, ImVec2(max_tab_length, 0.0f))) { + if (selectable(_L("Intersection").c_str(), m_operation_mode == MeshBooleanOperation::Intersection, ImVec2(max_tab_length, 0.0f))) { m_operation_mode = MeshBooleanOperation::Intersection; } ImGui::PopStyleVar(); @@ -262,10 +257,10 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l std::string cap_str1 = m_operation_mode != MeshBooleanOperation::Difference ? _u8L("Part 1") : _u8L("Subtract from"); m_imgui->text(cap_str1); ImGui::SameLine(max_cap_length); - std::string select_src_str = m_src.mv ? "1 " + _u8L("selected") : _u8L("Select"); - select_src_str += "##select_source_volume"; + wxString select_src_str = m_src.mv ? "1 " + _L("selected") : _L("Select"); + select_src_str << "##select_source_volume"; ImGui::PushItemWidth(select_btn_length); - if (selectable(select_src_str, m_selecting_state == MeshBooleanSelectingState::SelectSource, ImVec2(select_btn_length, 0))) + if (selectable(select_src_str.c_str(), m_selecting_state == MeshBooleanSelectingState::SelectSource, ImVec2(select_btn_length, 0))) m_selecting_state = MeshBooleanSelectingState::SelectSource; ImGui::PopItemWidth(); if (m_src.mv) { @@ -290,10 +285,10 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l std::string cap_str2 = m_operation_mode != MeshBooleanOperation::Difference ? _u8L("Part 2") : _u8L("Subtract with"); m_imgui->text(cap_str2); ImGui::SameLine(max_cap_length); - std::string select_tool_str = m_tool.mv ? "1 " + _u8L("selected") : _u8L("Select"); - select_tool_str += "##select_tool_volume"; + wxString select_tool_str = m_tool.mv ? "1 " + _L("selected") : _L("Select"); + select_tool_str << "##select_tool_volume"; ImGui::PushItemWidth(select_btn_length); - if (selectable(select_tool_str, m_selecting_state == MeshBooleanSelectingState::SelectTool, ImVec2(select_btn_length, 0))) + if (selectable(select_tool_str.c_str(), m_selecting_state == MeshBooleanSelectingState::SelectTool, ImVec2(select_btn_length, 0))) m_selecting_state = MeshBooleanSelectingState::SelectTool; ImGui::PopItemWidth(); if (m_tool.mv) { diff --git a/src/slic3r/GUI/HMSPanel.cpp b/src/slic3r/GUI/HMSPanel.cpp index 810a53b15..9992e37af 100644 --- a/src/slic3r/GUI/HMSPanel.cpp +++ b/src/slic3r/GUI/HMSPanel.cpp @@ -1,5 +1,6 @@ #include "HMS.hpp" #include "HMSPanel.hpp" +#include #include #include #include "GUI.hpp" @@ -231,4 +232,4 @@ bool HMSPanel::Show(bool show) return wxPanel::Show(show); } -}} \ No newline at end of file +}} diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 7cdfa29ce..b195cb733 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -243,8 +243,11 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) ;// post_ticks_changed_event(); if (m_ticks.has_tick_with_code(ToolChange) && !m_can_change_color) { - m_ticks.erase_all_ticks_with_code(ToolChange); - post_ticks_changed_event(); + if (!wxGetApp().plater()->only_gcode_mode() && !wxGetApp().plater()->using_exported_file()) + { + m_ticks.erase_all_ticks_with_code(ToolChange); + post_ticks_changed_event(); + } } if (last_spiral_vase_status != m_is_spiral_vase) { @@ -550,7 +553,7 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r auto draw_band = [this](const ImU32& clr, const ImRect& band_rc) { - if (clr == m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT) { + if (clr == (m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT)) { ImRect rc = band_rc; rc.Min += ImVec2(1, 1) * m_scale; rc.Max -= ImVec2(1, 1) * m_scale; @@ -569,7 +572,7 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r } }; auto draw_main_band = [&main_band, this](const ImU32& clr) { - if (clr == m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT) { + if (clr == (m_is_dark ? BACKGROUND_COLOR_DARK : BACKGROUND_COLOR_LIGHT)) { ImRect rc = main_band; rc.Min += ImVec2(1, 1) * m_scale; rc.Max -= ImVec2(1, 1) * m_scale; @@ -1205,9 +1208,9 @@ void IMSlider::render_menu() { m_ticks.ticks.end(); std::string custom_code; if (tick_it != m_ticks.ticks.end()) { - render_edit_menu(*tick_it); if (tick_it->type == CustomGCode::Custom) custom_code = tick_it->extra; + render_edit_menu(*tick_it); } else { render_add_menu(); @@ -1262,6 +1265,8 @@ void IMSlider::render_add_menu() for (int i = 0; i < extruder_num; i++) { std::array rgba = decode_color_to_float_array(m_extruder_colors[i]); ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); + if (rgba[3] == 0) + icon_clr = 0; if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr, false, true, &hovered)) add_code_as_tick(ToolChange, i + 1); if (hovered) { show_tooltip(_u8L("Change filament at the beginning of this layer.")); } } diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 5a3ed1480..a05a2739c 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -88,6 +88,9 @@ static const std::map font_icons = { {ImGui::ExpandBtn , "expand_btn" }, {ImGui::CollapseBtn , "collapse_btn" }, {ImGui::RevertBtn , "revert_btn" }, + + {ImGui::CloseBlockNotifButton , "block_notification_close" }, + {ImGui::CloseBlockNotifHoverButton , "block_notification_close_hover" }, }; static const std::map font_icons_large = { {ImGui::CloseNotifButton , "notification_close" }, @@ -113,6 +116,7 @@ static const std::map font_icons_large = { {ImGui::CloseNotifHoverDarkButton , "notification_close_hover_dark" }, {ImGui::DocumentationDarkButton , "notification_documentation_dark" }, {ImGui::DocumentationHoverDarkButton, "notification_documentation_hover_dark"}, + {ImGui::BlockNotifErrorIcon, "block_notification_error" }, }; static const std::map font_icons_extra_large = { @@ -1478,7 +1482,13 @@ bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_si float icon_pos_y = selectable_pos_y + (label_size.y + style.ItemSpacing.y - icon_size.y) / 2; float icon_pos_x = pos.x + window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f; ImVec2 icon_pos = ImVec2(icon_pos_x, icon_pos_y); - ImGui::RenderFrame(icon_pos, icon_pos + icon_size, icon_color); + if (icon_color != 0) + ImGui::RenderFrame(icon_pos, icon_pos + icon_size, icon_color); + else { + static ImTextureID transparent; + IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/transparent.svg", icon_size.x, icon_size.y, transparent); + window->DrawList->AddImage(transparent, icon_pos, icon_pos + icon_size, { 0,0 }, { 1,1 }, ImGui::GetColorU32(ImVec4(1.f, 1.f, 1.f, 1.f))); + } } if (shortcut_w > 0.0f) { @@ -2067,6 +2077,7 @@ void ImGuiWrapper::init_font(bool compress) ImVector basic_ranges; ImFontAtlas::GlyphRangesBuilder builder; builder.AddRanges(m_glyph_ranges); + builder.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesDefault()); #ifdef __APPLE__ if (m_font_cjk) // Apple keyboard shortcuts are only contained in the CJK fonts. diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 49e02c85f..ed34579d9 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -5,16 +5,10 @@ #include "I18N.hpp" #include "GUI_App.hpp" #include "GUI.hpp" -#include "MsgDialog.hpp" #include -#ifdef __WXMSW__ -#include -#endif -#ifdef __APPLE__ -#include "../Utils/MacDarkMode.hpp" -#endif +wxDEFINE_EVENT(EVT_ITEM_ACTION, wxCommandEvent); BEGIN_EVENT_TABLE(Slic3r::GUI::ImageGrid, wxPanel) @@ -34,14 +28,21 @@ END_EVENT_TABLE() namespace Slic3r { namespace GUI { +static constexpr int SHADOW_WIDTH = 3; + ImageGrid::ImageGrid(wxWindow * parent) : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) + , m_buttonBackgroundColor(StateColor( + std::make_pair(*wxWHITE, (int) StateColor::Pressed), + std::make_pair(*wxRED, (int) StateColor::Normal))) , m_buttonTextColor(StateColor( std::make_pair(0x3B4446, (int) StateColor::Pressed), std::make_pair(*wxLIGHT_GREY, (int) StateColor::Hovered), std::make_pair(*wxWHITE, (int) StateColor::Normal))) , m_checked_icon(this, "check_on", 16) , m_unchecked_icon(this, "check_off", 16) + , m_model_time_icon(this, "model_time", 14) + , m_model_weight_icon(this, "model_weight", 14) { SetBackgroundStyle(wxBG_STYLE_PAINT); SetBackgroundColour(0xEEEEEE); @@ -82,11 +83,11 @@ void ImageGrid::SetStatus(ScalableBitmap const & icon, wxString const &msg) Refresh(); } -void Slic3r::GUI::ImageGrid::SetFileType(int type) +void Slic3r::GUI::ImageGrid::SetFileType(int type, std::string const &storage) { if (!m_file_sys) return; - m_file_sys->SetFileType((PrinterFileSystem::FileType) type); + m_file_sys->SetFileType((PrinterFileSystem::FileType) type, storage); } void Slic3r::GUI::ImageGrid::SetGroupMode(int mode) @@ -96,7 +97,7 @@ void Slic3r::GUI::ImageGrid::SetGroupMode(int mode) wxSize size = GetClientSize(); int index = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? m_row_offset / 4 * m_col_count - : ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size.y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; + : ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size.y + m_border_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; auto & file = m_file_sys->GetFile(index); m_file_sys->SetGroupMode((PrinterFileSystem::GroupMode) mode); index = m_file_sys->GetIndexAtTime(file.time); @@ -119,6 +120,8 @@ void Slic3r::GUI::ImageGrid::DoActionOnSelection(int action) { DoAction(-1, acti void Slic3r::GUI::ImageGrid::Rescale() { + m_title_mask = wxBitmap(); + m_border_mask = wxBitmap(); UpdateFileSystem(); auto em = em_unit(this); wxSize size1{384 * em / 10, 4 * em}; @@ -149,81 +152,33 @@ void Slic3r::GUI::ImageGrid::Select(size_t index) void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) { - if (action == 0) { - if (m_file_sys->GetSelectCount() > 1) { - MessageDialog dlg(this, - wxString::Format(_L("You are going to delete %u files. Are you sure to continue?"), m_file_sys->GetSelectCount()), - _L("Delete files"), wxYES_NO | wxICON_WARNING); - if (dlg.ShowModal() != wxID_YES) - return; - } - m_file_sys->DeleteFiles(index); - } else if (action == 1) { - if (index != -1) { - auto &file = m_file_sys->GetFile(index); - if (file.IsDownload() && file.progress >= -1) { - if (file.progress >= 100) { - if (!m_file_sys->DownloadCheckFile(index)) { - MessageDialog(this, - wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), - _L("Error"), wxOK).ShowModal(); - Refresh(); - return; - } -#ifdef __WXMSW__ - auto wfile = boost::filesystem::path(file.path).wstring(); - SHELLEXECUTEINFO info{sizeof(info), 0, NULL, L"open", wfile.c_str(), L"", SW_HIDE}; - ::ShellExecuteEx(&info); -#else - wxShell("open " + file.path); -#endif - } else { - m_file_sys->DownloadCancel(index); - } - return; - } - } - m_file_sys->DownloadFiles(index, wxGetApp().app_config->get("download_path")); - } else if (action == 2) { - if (index != -1) { - auto &file = m_file_sys->GetFile(index); - if (file.IsDownload() && file.progress >= -1) { - if (file.progress >= 100) { - if (!m_file_sys->DownloadCheckFile(index)) { - MessageDialog(this, - wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), - _L("Error"), wxOK).ShowModal(); - Refresh(); - return; - } -#ifdef __WIN32__ - wxExecute(L"explorer.exe /select," + from_u8(file.path)); -#elif __APPLE__ - openFolderForFile(from_u8(file.path)); -#else -#endif - } - return; - } - } - m_file_sys->DownloadFiles(index, wxGetApp().app_config->get("download_path")); - } + wxCommandEvent event(EVT_ITEM_ACTION); + event.SetEventObject(this); + event.SetInt(action); + event.SetExtraLong(long(index)); + ProcessEventLocally(event); } void Slic3r::GUI::ImageGrid::UpdateFileSystem() { if (!m_file_sys) return; - wxSize mask_size{0, 60}; - if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - m_image_size.Set(384, 216); - m_cell_size.Set(396, 228); + if (m_file_sys->GetFileType() < PrinterFileSystem::F_MODEL) { + if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { + m_cell_size.Set(396, 228); + m_border_size.Set(384, 216); + } + else { + m_cell_size.Set(496, 286); + m_border_size.Set(480, 270); + } + } else { + m_cell_size.Set(292, 288); + m_border_size.Set(266, 264); } - else { - m_image_size.Set(480, 270); - m_cell_size.Set(496, 296); - } - m_image_size = m_image_size * em_unit(this) / 10; m_cell_size = m_cell_size * em_unit(this) / 10; + m_border_size = m_border_size * em_unit(this) / 10; + m_content_rect = wxRect(SHADOW_WIDTH, SHADOW_WIDTH, m_border_size.GetWidth(), m_border_size.GetHeight()); + m_border_size += wxSize(SHADOW_WIDTH, SHADOW_WIDTH) * 2; UpdateLayout(); } @@ -231,16 +186,16 @@ void ImageGrid::UpdateLayout() { if (!m_file_sys) return; wxSize size = GetClientSize(); - wxSize mask_size{0, 60 * em_unit(this) / 10}; + wxSize title_mask_size{0, 60 * em_unit(this) / 10}; if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - mask_size.y = 20 * em_unit(this) / 10; - size.y -= mask_size.y; + title_mask_size.y = 20 * em_unit(this) / 10; + size.y -= title_mask_size.y; } int cell_width = m_cell_size.GetWidth(); int cell_height = m_cell_size.GetHeight(); - int ncol = (size.GetWidth() - cell_width + m_image_size.GetWidth()) / cell_width; + int ncol = (size.GetWidth() - cell_width + m_border_size.GetWidth()) / cell_width; if (ncol <= 0) ncol = 1; - int total_height = (m_file_sys->GetCount() + ncol - 1) / ncol * cell_height + cell_height - m_image_size.GetHeight(); + int total_height = (m_file_sys->GetCount() + ncol - 1) / ncol * cell_height + cell_height - m_border_size.GetHeight(); int nrow = (total_height - size.GetHeight() + cell_height / 4 - 1) / (cell_height / 4); m_row_offset = m_row_offset * m_col_count / ncol; m_col_count = ncol; @@ -250,13 +205,15 @@ void ImageGrid::UpdateLayout() m_scroll_offset = 0; // create mask if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - mask_size.x = (m_col_count - 1) * m_cell_size.GetWidth() + m_image_size.GetWidth(); + title_mask_size.x = (m_col_count - 1) * m_cell_size.GetWidth() + m_border_size.GetWidth(); } else { - mask_size.x = m_image_size.x; + title_mask_size.x = m_border_size.x; } - if (!m_mask.IsOk() || m_mask.GetSize() != mask_size) - m_mask = createAlphaBitmap(mask_size, 0x6f6f6f, 255, 0); + if (!m_title_mask.IsOk() || m_title_mask.GetSize() != title_mask_size) + m_title_mask = createAlphaBitmap(title_mask_size, 0x6f6f6f, 255, 0); + if (!m_border_mask.IsOk() || m_border_mask.GetSize() != m_border_size) + m_border_mask = createShadowBorder(m_border_size, StateColor::darkModeColorFor(0xEEEEEE), em_unit(this), 3); UpdateFocusRange(); Refresh(); } @@ -280,7 +237,7 @@ std::pair Slic3r::GUI::ImageGrid::HitTest(wxPoint const &pt) return {HIT_NONE, -1}; wxSize size = GetClientSize(); if (m_file_sys->GetCount() == 0) { - if (wxRect({0, 0}, m_image_size).CenterIn(wxRect({0, 0}, size)).Contains(pt)) + if (wxRect({0, 0}, m_border_size).CenterIn(wxRect({0, 0}, size)).Contains(pt)) return {HIT_STATUS, 0}; return {HIT_NONE, -1}; } @@ -292,17 +249,21 @@ std::pair Slic3r::GUI::ImageGrid::HitTest(wxPoint const &pt) ++n; off.x -= m_cell_size.GetWidth(); } - if (off.x < 0 || off.x >= m_image_size.GetWidth()) { return {HIT_NONE, -1}; } index += n; while (off.y > m_cell_size.GetHeight()) { index += m_col_count; off.y -= m_cell_size.GetHeight(); } if (index >= m_file_sys->GetCount()) { return {HIT_NONE, -1}; } + if (!m_content_rect.Contains(off)) { return {HIT_NONE, -1}; } if (!m_selecting) { - wxRect hover_rect{0, m_image_size.y - 40, m_image_size.GetWidth(), 40}; + wxRect hover_rect{0, m_content_rect.GetHeight() - m_buttons_background.GetHeight(), m_content_rect.GetWidth(), m_buttons_background.GetHeight()}; auto & file = m_file_sys->GetFile(index); - int btn = file.IsDownload() && file.progress >= 0 ? 3 : 2; + int btn = file.IsDownload() && file.DownloadProgress() >= 0 ? 3 : 2; + if (m_file_sys->GetFileType() == PrinterFileSystem::F_MODEL) { + btn = 3; + hover_rect.y -= m_content_rect.GetHeight() * 64 / 264; + } if (hover_rect.Contains(off.x, off.y)) { return {HIT_ACTION, index * 4 + off.x * btn / hover_rect.GetWidth()}; } // Two buttons } return {HIT_ITEM, index}; @@ -317,7 +278,7 @@ void ImageGrid::mouseMoved(wxMouseEvent& event) m_hit_type = hit.first; m_hit_item = hit.second; if (hit.first == HIT_ITEM) - SetToolTip(m_file_sys->GetFile(hit.second).name); + SetToolTip(from_u8(m_file_sys->GetFile(hit.second).Title())); else SetToolTip({}); Refresh(); @@ -402,7 +363,8 @@ void ImageGrid::mouseWheelMoved(wxMouseEvent &event) void Slic3r::GUI::ImageGrid::changedEvent(wxCommandEvent& evt) { evt.Skip(); - BOOST_LOG_TRIVIAL(info) << "ImageGrid::changedEvent: " << evt.GetEventType() << " index: " << evt.GetInt() << " name: " << evt.GetString() << " extra: " << evt.GetExtraLong(); + BOOST_LOG_TRIVIAL(debug) << "ImageGrid::changedEvent: " << evt.GetEventType() << " index: " << evt.GetInt() + << " name: " << evt.GetString().ToUTF8().data() << " extra: " << evt.GetExtraLong(); if (evt.GetEventType() == EVT_FILE_CHANGED) { if (evt.GetInt() == -1) m_file_sys->DownloadCheckFiles(wxGetApp().app_config->get("download_path")); @@ -410,6 +372,8 @@ void Slic3r::GUI::ImageGrid::changedEvent(wxCommandEvent& evt) } else if (evt.GetEventType() == EVT_MODE_CHANGED) UpdateFileSystem(); + //else if (evt.GetEventType() == EVT_THUMBNAIL) + // RefreshRect(itemRect(evt.GetInt()), false); else Refresh(); } @@ -425,16 +389,16 @@ size_t Slic3r::GUI::ImageGrid::firstItem(wxSize const &size, wxPoint &off) { int size_y = size.y; if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) - size_y -= m_mask.GetHeight(); - int offx = (size.x - (m_col_count - 1) * m_cell_size.GetWidth() - m_image_size.GetWidth()) / 2; + size_y -= m_title_mask.GetHeight(); + int offx = (size.x - (m_col_count - 1) * m_cell_size.GetWidth() - m_border_size.GetWidth()) / 2; int offy = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? - m_cell_size.GetHeight() - m_image_size.GetHeight() - m_row_offset * m_cell_size.GetHeight() / 4 + m_row_offset / 4 * m_cell_size.GetHeight() : - size_y - (size_y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight() * m_cell_size.GetHeight(); + m_cell_size.GetHeight() - m_border_size.GetHeight() - m_row_offset * m_cell_size.GetHeight() / 4 + m_row_offset / 4 * m_cell_size.GetHeight() : + size_y - (size_y + m_border_size.GetHeight() - 1) / m_cell_size.GetHeight() * m_cell_size.GetHeight(); int index = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? m_row_offset / 4 * m_col_count : - ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size_y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; + ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size_y + m_border_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) - offy += m_mask.GetHeight(); + offy += m_title_mask.GetHeight(); off = wxPoint{offx, offy}; return index; } @@ -454,6 +418,38 @@ wxBitmap Slic3r::GUI::ImageGrid::createAlphaBitmap(wxSize size, wxColour color, return wxBitmap(std::move(image)); } +wxBitmap Slic3r::GUI::ImageGrid::createShadowBorder(wxSize size, wxColour color, int radius, int shadow) +{ + wxImage image(size); + image.InitAlpha(); + memset(image.GetAlpha(), 0, size.GetWidth() * size.GetHeight()); + wxBitmap bmp(std::move(image)); + wxMemoryDC memdc; + memdc.SelectObject(bmp); +#ifdef __WXMSW__ + wxGCDC dc2(memdc); +#else + wxDC &dc2(memdc); +#endif + wxRect rc(0, 0, size.x, size.y); + dc2.SetBrush(*wxTRANSPARENT_BRUSH); + auto n = ((radius + shadow) * 1414 / 1000 - radius); + dc2.SetPen(wxPen(color, n | 1)); + n = n / 2 - shadow + 1; + rc.Inflate(n, n); + dc2.DrawRoundedRectangle(rc, radius + shadow); + rc.Deflate(n, n); + rc.Deflate(shadow, shadow); + for (int i = 0; i < shadow; ++i) { + rc.Inflate(1, 1); + dc2.SetPen(wxColor(0, 0, 0, 100 - i * 30)); + dc2.DrawRoundedRectangle(rc, radius + i); + } + + memdc.SelectObject(wxNullBitmap); + return bmp; +} + wxBitmap Slic3r::GUI::ImageGrid::createCircleBitmap(wxSize size, int borderWidth, int percent, wxColour fillColor, wxColour borderColor) { wxImage image(size); @@ -525,27 +521,37 @@ void ImageGrid::render(wxDC& dc) wxPoint pt{off.x, off.y}; end = (index + m_col_count) < m_file_sys->GetCount() ? index + m_col_count : m_file_sys->GetCount(); while (index < end) { - renderContent(dc, pt, index, hit_image == index); + pt += m_content_rect.GetTopLeft(); + // Draw content + decltype(&ImageGrid::renderContent1) contentRender[] = { + &ImageGrid::renderContent1, + &ImageGrid::renderContent1, + &ImageGrid::renderContent2 + }; + (this->*contentRender[m_file_sys->GetFileType()])(dc, pt, index, hit_image == index); + pt -= m_content_rect.GetTopLeft(); // Draw colume spacing at right - dc.DrawRectangle({pt.x + m_image_size.GetWidth(), pt.y, m_cell_size.GetWidth() - m_image_size.GetWidth(), m_image_size.GetHeight()}); + dc.DrawRectangle({pt.x + m_border_size.GetWidth(), pt.y, m_cell_size.GetWidth() - m_border_size.GetWidth(), m_border_size.GetHeight()}); + // Draw overlay border mask + dc.DrawBitmap(m_border_mask, pt.x, pt.y); ++index; pt.x += m_cell_size.GetWidth(); } // Draw line fill items if (end < index + m_col_count) - dc.DrawRectangle({pt.x, pt.y, size.x - pt.x - off.x, m_image_size.GetHeight()}); + dc.DrawRectangle({pt.x, pt.y, size.x - pt.x - off.x, m_border_size.GetHeight()}); // Draw line spacing at bottom - dc.DrawRectangle({off.x, pt.y + m_image_size.GetHeight(), size.x - off.x * 2, m_cell_size.GetHeight() - m_image_size.GetHeight()}); + dc.DrawRectangle({off.x, pt.y + m_border_size.GetHeight(), size.x - off.x * 2, m_cell_size.GetHeight() - m_border_size.GetHeight()}); off.y += m_cell_size.GetHeight(); } // Draw floating date range for non-group list if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE && m_file_sys->GetCount() > 0) { - //dc.DrawBitmap(m_mask, {off.x, 0}); - dc.DrawRectangle({off.x, 0}, m_mask.GetSize()); + //dc.DrawBitmap(m_title_mask, {off.x, 0}); + dc.DrawRectangle({off.x, 0}, m_title_mask.GetSize()); auto & file1 = m_file_sys->GetFile(start); auto & file2 = m_file_sys->GetFile(end - 1); - auto date1 = wxDateTime((time_t) file1.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); - auto date2 = wxDateTime((time_t) file2.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); + auto date1 = wxDateTime((time_t) file1.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); + auto date2 = wxDateTime((time_t) file2.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); dc.SetFont(Label::Head_16); dc.SetTextForeground(StateColor::darkModeColorFor("#262E30")); dc.DrawText(date1 + " - " + date2, wxPoint{off.x, 2}); @@ -555,7 +561,7 @@ void ImageGrid::render(wxDC& dc) dc.DrawRectangle({off.x, off.y, size.x - off.x * 2, size.y - off.y}); // Draw position bar if (m_timer.IsRunning()) { - int total_height = (m_file_sys->GetCount() + m_col_count - 1) / m_col_count * m_cell_size.GetHeight() + m_cell_size.GetHeight() - m_image_size.GetHeight(); + int total_height = (m_file_sys->GetCount() + m_col_count - 1) / m_col_count * m_cell_size.GetHeight() + m_cell_size.GetHeight() - m_border_size.GetHeight(); if (total_height > size.y) { int offset = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? m_row_offset * (m_cell_size.GetHeight() / 4) : total_height - size.y; wxRect rect = {size.x - 16, offset * size.y / total_height, 8, @@ -566,25 +572,23 @@ void ImageGrid::render(wxDC& dc) } } -void Slic3r::GUI::ImageGrid::renderContent(wxDC &dc, wxPoint const &pt, int index, bool hit) +void Slic3r::GUI::ImageGrid::renderContent1(wxDC &dc, wxPoint const &pt, int index, bool hit) { bool selected = false; auto &file = m_file_sys->GetFile(index, selected); // Draw thumbnail if (file.thumbnail.IsOk()) { - float hs = (float) m_image_size.GetWidth() / file.thumbnail.GetWidth(); - float vs = (float) m_image_size.GetHeight() / file.thumbnail.GetHeight(); + float hs = (float) m_content_rect.GetWidth() / file.thumbnail.GetWidth(); + float vs = (float) m_content_rect.GetHeight() / file.thumbnail.GetHeight(); dc.SetUserScale(hs, vs); dc.DrawBitmap(file.thumbnail, {(int) (pt.x / hs), (int) (pt.y / vs)}); dc.SetUserScale(1, 1); - if (m_file_sys->GetGroupMode() != PrinterFileSystem::G_NONE) { - dc.DrawBitmap(m_mask, pt); - } + if (m_file_sys->GetGroupMode() != PrinterFileSystem::G_NONE) { dc.DrawBitmap(m_title_mask, pt); } } bool show_download_state_always = true; // Draw checked icon if (m_selecting && !show_download_state_always) - dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_content_rect.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); // can't handle alpha // dc.GradientFillLinear({pt.x, pt.y, m_border_size.GetWidth(), 60}, wxColour(0x6F, 0x6F, 0x6F, 0x99), wxColour(0x6F, 0x6F, 0x6F, 0), wxBOTTOM); else if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { @@ -594,25 +598,31 @@ void Slic3r::GUI::ImageGrid::renderContent(wxDC &dc, wxPoint const &pt, int inde int states = 0; // Draw download progress if (file.IsDownload()) { - if (file.progress == -1) { + int progress = file.DownloadProgress(); + if (progress == -1) { secondAction = _L("Cancel"); nonHoverText = _L("Download waiting..."); - } else if (file.progress < 0) { + } else if (progress < 0) { secondAction = _L("Retry"); nonHoverText = _L("Download failed"); states = StateColor::Checked; - } else if (file.progress >= 100) { + } else if (progress >= 100) { secondAction = _L("Play"); thirdAction = _L("Open Folder"); nonHoverText = _L("Download finished"); } else { secondAction = _L("Cancel"); - nonHoverText = wxString::Format(_L("Downloading %d%%..."), file.progress); - thirdAction = wxString::Format(L"%d%%...", file.progress); + nonHoverText = wxString::Format(_L("Downloading %d%%..."), progress); + thirdAction = wxString::Format(L"%d%%...", progress); } } + if (m_file_sys->GetFileType() == PrinterFileSystem::F_MODEL) { + if (secondAction != _L("Play")) + thirdAction = secondAction; + secondAction = _L("Print"); + } // Draw buttons on hovered item - wxRect rect{pt.x, pt.y + m_image_size.GetHeight() - m_buttons_background.GetHeight(), m_image_size.GetWidth(), m_buttons_background.GetHeight()}; + wxRect rect{pt.x, pt.y + m_content_rect.GetBottom() - m_buttons_background.GetHeight(), m_content_rect.GetWidth(), m_buttons_background.GetHeight()}; if (hit) { renderButtons(dc, {_L("Delete"), (wxChar const *) secondAction, thirdAction.IsEmpty() ? nullptr : (wxChar const *) thirdAction, nullptr}, rect, m_hit_type == HIT_ACTION ? m_hit_item & 3 : -1, states); @@ -625,7 +635,42 @@ void Slic3r::GUI::ImageGrid::renderContent(wxDC &dc, wxPoint const &pt, int inde dc.DrawText(date, pt + wxPoint{24, 16}); } if (m_selecting && show_download_state_always) - dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_content_rect.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); +} + +void Slic3r::GUI::ImageGrid::renderContent2(wxDC &dc, wxPoint const &pt, int index, bool hit) +{ + auto &file = m_file_sys->GetFile(index); + // Draw thumbnail & buttons + int h = m_content_rect.GetHeight() * 64 / 264; + m_content_rect.SetHeight(m_content_rect.GetHeight() - h); + auto br = dc.GetBrush(); + auto pn = dc.GetPen(); + dc.SetBrush(StateColor::darkModeColorFor(0xEEEEEE)); + dc.SetPen(StateColor::darkModeColorFor(0xEEEEEE)); + dc.DrawRectangle(pt, m_content_rect.GetSize()); // Fix translucent model thumbnail + renderContent1(dc, pt, index, hit); + m_content_rect.SetHeight(m_content_rect.GetHeight() + h); + // Draw info bar + dc.SetBrush(StateColor::darkModeColorFor(*wxWHITE)); + dc.SetPen(StateColor::darkModeColorFor(*wxWHITE)); + dc.DrawRectangle(pt.x, pt.y + m_content_rect.GetHeight() - h, m_content_rect.GetWidth(), h); + dc.SetBrush(br); + dc.SetPen(pn); + // Draw infos + dc.SetFont(Label::Head_16); + dc.SetTextForeground(StateColor::darkModeColorFor("#323A3D")); + auto em = em_unit(this); + wxRect rect{pt.x, pt.y + m_content_rect.GetHeight() - h, m_content_rect.GetWidth(), h / 2}; + rect.Deflate(em, 0); + renderText2(dc, from_u8(file.name), rect); + rect.Offset(0, h / 2); + rect.SetWidth(rect.GetWidth() / 2 - em); + dc.SetFont(Label::Body_13); + dc.SetTextForeground(StateColor::darkModeColorFor("#6B6B6B")); + renderIconText(dc, m_model_time_icon, file.Metadata("Time", "0m"), rect); + rect.Offset(m_content_rect.GetWidth() / 2, 0); + renderIconText(dc, m_model_weight_icon, file.Metadata("Weight", "0g"), rect); } void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect2, size_t hit, int states) @@ -646,7 +691,9 @@ void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, // Draw button background //dc.Blit(rect.GetTopLeft(), rect.GetSize(), &mdc, {m_buttonBackgroundColor.colorIndexForStates(states) * 128, 0}); //dc.DrawBitmap(m_button_background, rect2.GetTopLeft()); - rect.Deflate(10, 5); + //dc.SetBrush(m_buttonBackgroundColor.colorForStates(states2)); + //dc.DrawRectangle(rect); + //rect.Deflate(10, 5); // Draw button splitter auto pen = dc.GetPen(); dc.SetPen(wxPen("#616161")); @@ -654,7 +701,7 @@ void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, dc.SetPen(pen); // Draw button text renderText(dc, texts[i], rect, states | states2); - rect.Inflate(10, 5); + //rect.Inflate(10, 5); rect.Offset(rect.GetWidth(), 0); } dc.SetFont(GetFont()); @@ -668,4 +715,20 @@ void Slic3r::GUI::ImageGrid::renderText(wxDC &dc, wxString const &text, wxRect c dc.DrawText(text, rc.GetTopLeft()); } +void Slic3r::GUI::ImageGrid::renderText2(wxDC &dc, wxString text, wxRect const &rect) +{ + wxRect rc({0, 0}, dc.GetTextExtent(text)); + rc = rc.CenterIn(rect); + rc.SetLeft(rect.GetLeft()); + if (rc.GetWidth() > rect.GetWidth()) + text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, rect.GetWidth()); + dc.DrawText(text, rc.GetTopLeft()); +} + +void Slic3r::GUI::ImageGrid::renderIconText(wxDC & dc, ScalableBitmap const & icon, wxString text, wxRect const & rect) +{ + dc.DrawBitmap(icon.bmp(), rect.x, rect.y + (rect.height - icon.GetBmpHeight()) / 2); + renderText2(dc, text, {rect.x + icon.GetBmpWidth() + 4, rect.y, rect.width - icon.GetBmpWidth() - 4, rect.height}); +} + }} diff --git a/src/slic3r/GUI/ImageGrid.h b/src/slic3r/GUI/ImageGrid.h index 0aa97b008..42cf8a06e 100644 --- a/src/slic3r/GUI/ImageGrid.h +++ b/src/slic3r/GUI/ImageGrid.h @@ -19,6 +19,8 @@ class Label; class PrinterFileSystem; +wxDECLARE_EVENT(EVT_ITEM_ACTION, wxCommandEvent); + namespace Slic3r { class MachineObject; @@ -36,7 +38,7 @@ public: boost::shared_ptr GetFileSystem() { return m_file_sys; } - void SetFileType(int type); + void SetFileType(int type, std::string const &storage); void SetGroupMode(int mode); @@ -72,15 +74,23 @@ protected: wxBitmap createAlphaBitmap(wxSize size, wxColour color, int alpha1, int alpha2); + wxBitmap createShadowBorder(wxSize size, wxColour color, int radius, int shadow); + wxBitmap createCircleBitmap(wxSize size, int borderWidth, int percent, wxColour fillColor, wxColour borderColor = wxTransparentColour); void render(wxDC &dc); - void renderContent(wxDC &dc, wxPoint const &pt, int index, bool hit); + void renderContent1(wxDC &dc, wxPoint const &pt, int index, bool hit); + + void renderContent2(wxDC &dc, wxPoint const &pt, int index, bool hit); void renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect, size_t hit, int states); - void renderText(wxDC &dc, wxString const & text, wxRect const & rect, int states); + void renderText(wxDC &dc, wxString const &text, wxRect const &rect, int states); + + void renderText2(wxDC &dc, wxString text, wxRect const &rect); + + void renderIconText(wxDC &dc, ScalableBitmap const & icon, wxString text, wxRect const &rect); // some useful events void mouseMoved(wxMouseEvent& event); @@ -100,14 +110,17 @@ private: ScalableBitmap m_checked_icon; ScalableBitmap m_unchecked_icon; - StateColor m_buttonBackgroundColor; + ScalableBitmap m_model_time_icon; + ScalableBitmap m_model_weight_icon; + StateColor m_buttonBackgroundColor; StateColor m_buttonTextColor; bool m_hovered = false; bool m_pressed = false; wxTimer m_timer; - wxBitmap m_mask; + wxBitmap m_title_mask; + wxBitmap m_border_mask; wxBitmap m_buttons_background; wxBitmap m_buttons_background_checked; // wxBitmap m_button_background; @@ -128,8 +141,9 @@ private: int m_row_offset = 0; // 1/4 row height int m_row_count = 0; // 1/4 row height int m_col_count = 1; - wxSize m_image_size; wxSize m_cell_size; + wxSize m_border_size; + wxRect m_content_rect; }; }} diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 2b5fc8075..528ac10c6 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -498,9 +498,7 @@ void ArrangeJob::process() auto& print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const bool has_lidar = preset_bundle->printers.get_edited_preset().has_lidar(preset_bundle); - if (has_lidar && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) + if (params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); update_arrange_params(params, *m_plater, m_selected); @@ -738,7 +736,7 @@ arrangement::ArrangeParams init_arrange_params(Plater *p) params.clearance_height_to_rod = print.config().extruder_clearance_height_to_rod.value; params.clearance_height_to_lid = print.config().extruder_clearance_height_to_lid.value; - params.cleareance_radius = print.config().extruder_clearance_radius.value; + params.cleareance_radius = print.config().extruder_clearance_max_radius.value; params.printable_height = print.config().printable_height.value; params.allow_rotations = settings.enable_rotation; params.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index e28506268..a35047450 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -16,22 +16,6 @@ static wxString waiting_auth_str = _L("Logging in"); static wxString login_failed_str = _L("Login failed"); -wxString get_login_fail_reason(std::string fail_reason) -{ - if (fail_reason == "NO Regions") - return _L("The region parameter is incorrrect"); - else if (fail_reason == "Cloud Timeout") - return _L("Failure of printer login"); - else if (fail_reason == "Ticket Failed") - return _L("Failed to get ticket"); - else if (fail_reason == "Wait Auth Timeout") - return _L("User authorization timeout"); - else if (fail_reason == "Bind Failure") - return _L("Failure of bind"); - else - return _L("Unknown Failure"); -} - BindJob::BindJob(std::shared_ptr pri, Plater *plater, std::string dev_id, std::string dev_ip, std::string sec_link) : PlaterJob{std::move(pri), plater}, m_dev_id(dev_id), @@ -59,7 +43,6 @@ void BindJob::on_success(std::function success) void BindJob::update_status(int st, const wxString &msg) { GUI::Job::update_status(st, msg); - //post_event(wxCommandEvent(EVT_BIND_UPDATE_MESSAGE), msg); wxCommandEvent event(EVT_BIND_UPDATE_MESSAGE); event.SetString(msg); event.SetEventObject(m_event_handle); @@ -68,6 +51,9 @@ void BindJob::update_status(int st, const wxString &msg) void BindJob::process() { + int result_code = 0; + std::string result_info; + /* display info */ wxString msg = waiting_auth_str; int curr_percent = 0; @@ -80,8 +66,12 @@ void BindJob::process() long offset = tz.GetOffset(); std::string timezone = get_timezone_utc_hm(offset); - int result = m_agent->bind(m_dev_ip, m_dev_id, m_sec_link, timezone, - [this, &curr_percent, &msg](int stage, int code, std::string info) { + int result = m_agent->bind(m_dev_ip, m_dev_id, m_sec_link, timezone, m_improved, + [this, &curr_percent, &msg, &result_code, &result_info](int stage, int code, std::string info) { + + result_code = code; + result_info = info; + if (stage == BBL::BindJobStage::LoginStageConnect) { curr_percent = 15; msg = _L("Logging in"); @@ -103,8 +93,9 @@ void BindJob::process() } else { msg = _L("Logging in"); } + if (code != 0) { - msg = _L("Login failed") + wxString::Format("(code=%d,info=%s). ", code, info); + msg = _L("Login failed"); if (code == BAMBU_NETWORK_ERR_TIMEOUT) { msg += _L("Please check the printer network connection."); } @@ -115,14 +106,28 @@ void BindJob::process() if (result < 0) { BOOST_LOG_TRIVIAL(trace) << "login: result = " << result; - post_fail_event(); + + if (result_code == BAMBU_NETWORK_ERR_BIND_ECODE_LOGIN_REPORT_FAILED) { + int error_code; + + try + { + error_code = stoi(result_info); + result_info = wxGetApp().get_hms_query()->query_print_error_msg(error_code).ToStdString(); + } + catch (...) { + ; + } + } + + post_fail_event(result_code, result_info); return; } DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) { BOOST_LOG_TRIVIAL(trace) << "login: dev is null"; - post_fail_event(); + post_fail_event(result_code, result_info); return; } dev->update_user_machine_list_info(); @@ -145,9 +150,11 @@ void BindJob::set_event_handle(wxWindow *hanle) m_event_handle = hanle; } -void BindJob::post_fail_event() +void BindJob::post_fail_event(int code, std::string info) { wxCommandEvent event(EVT_BIND_MACHINE_FAIL); + event.SetInt(code); + event.SetString(info); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); } diff --git a/src/slic3r/GUI/Jobs/BindJob.hpp b/src/slic3r/GUI/Jobs/BindJob.hpp index 4fa9e1ea1..0215834fa 100644 --- a/src/slic3r/GUI/Jobs/BindJob.hpp +++ b/src/slic3r/GUI/Jobs/BindJob.hpp @@ -19,6 +19,7 @@ class BindJob : public PlaterJob std::string m_sec_link; bool m_job_finished{ false }; int m_print_job_completed_id = 0; + bool m_improved{false}; protected: void on_exception(const std::exception_ptr &) override; @@ -37,7 +38,8 @@ public: void process() override; void finalize() override; void set_event_handle(wxWindow* hanle); - void post_fail_event(); + void post_fail_event(int code, std::string info); + void set_improved(bool improved){m_improved = improved;}; }; wxDECLARE_EVENT(EVT_BIND_UPDATE_MESSAGE, wxCommandEvent); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 379885bc0..c00968180 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -211,9 +211,7 @@ void FillBedJob::process() auto &partplate_list = m_plater->get_partplate_list(); auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const bool has_lidar = preset_bundle->printers.get_edited_preset().has_lidar(preset_bundle); - if (has_lidar && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) + if (params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); update_selected_items_inflation(m_selected, *m_plater, params); @@ -233,7 +231,7 @@ void FillBedJob::process() do_stop = ap.bed_idx > 0 && ap.priority == 0; }; // final align用的是凸包,在有fixed item的情况下可能找到的参考点位置是错的,这里就不做了。见STUDIO-3265 - params.do_final_align = !has_lidar; + params.do_final_align = false; arrangement::arrange(m_selected, m_unselected, m_bedpts, params); diff --git a/src/slic3r/GUI/Jobs/Job.cpp b/src/slic3r/GUI/Jobs/Job.cpp index 3cc0ae5aa..19c93643a 100644 --- a/src/slic3r/GUI/Jobs/Job.cpp +++ b/src/slic3r/GUI/Jobs/Job.cpp @@ -35,9 +35,9 @@ void GUI::Job::update_percent_finish() m_progress->clear_percent(); } -void GUI::Job::show_networking_test(wxString msg) +void GUI::Job::show_error_info(wxString msg, int code, wxString description, wxString extra) { - m_progress->show_networking_test(msg); + m_progress->show_error_info(msg, code, description, extra); } GUI::Job::Job(std::shared_ptr pri) diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 5c41bc717..a92dfbfbd 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -47,7 +47,7 @@ protected: void update_percent_finish(); - void show_networking_test(wxString msg); + void show_error_info(wxString msg, int code, wxString description, wxString extra); bool was_canceled() const { return m_canceled.load(); } diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp index d6b4c2aca..13470f7ad 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp @@ -10,7 +10,7 @@ void NotificationProgressIndicator::clear_percent() } -void NotificationProgressIndicator::show_networking_test(wxString msg) +void NotificationProgressIndicator::show_error_info(wxString msg, int code, wxString description, wxString extra) { } diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp index f41659e3d..ba0e89916 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp @@ -15,7 +15,7 @@ public: explicit NotificationProgressIndicator(NotificationManager *nm); void clear_percent() override; - void show_networking_test(wxString msg) override; + void show_error_info(wxString msg, int code, wxString description, wxString extra) override; void set_range(int range) override; void set_cancel_callback(CancelFn = CancelFn()) override; void set_progress(int pr) override; diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 11a0c3631..5760bf724 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -2,27 +2,32 @@ #include "libslic3r/MTUtils.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/PresetBundle.hpp" -#include "bambu_networking.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/MainFrame.hpp" +#include "bambu_networking.hpp" namespace Slic3r { namespace GUI { -static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again"); -static wxString printjob_cancel_str = _L("Task canceled"); -static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network problem and try again"); +static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again."); +static wxString printjob_cancel_str = _L("Task canceled."); +static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network status and try again."); static wxString failed_in_cloud_service_str = _L("Cloud service connection failed. Please try again."); -static wxString file_is_not_exists_str = _L("Print file not found, please slice again"); -static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again"); -static wxString print_canceled_str = _L("Task canceled"); -static wxString upload_failed_str = _L("Failed uploading print file"); -static wxString upload_login_failed_str = _L("Wrong Access code"); +static wxString file_is_not_exists_str = _L("Print file not found. please slice again."); +static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again."); +static wxString print_canceled_str = _L("Task canceled."); +static wxString send_print_failed_str = _L("Failed to send the print job. Please try again."); +static wxString upload_ftp_failed_str = _L("Failed to upload file to ftp. Please try again."); +static wxString desc_network_error = _L("Check the current status of the bambu server by clicking on the link above."); +static wxString desc_file_too_large = _L("The size of the print file is too large. Please adjust the file size and try again."); +static wxString desc_fail_not_exist = _L("Print file not found, Please slice it again and send it for printing."); +static wxString desc_upload_ftp_failed = _L("Failed to upload print file to FTP. Please check the network status and try again."); -static wxString sending_over_lan_str = _L("Sending print job over LAN"); -static wxString sending_over_cloud_str = _L("Sending print job through cloud service"); +static wxString sending_over_lan_str = _L("Sending print job over LAN"); +static wxString sending_over_cloud_str = _L("Sending print job through cloud service"); PrintJob::PrintJob(std::shared_ptr pri, Plater* plater, std::string dev_id) : PlaterJob{ std::move(pri), plater }, @@ -33,7 +38,8 @@ PrintJob::PrintJob(std::shared_ptr pri, Plater* plater, std:: void PrintJob::prepare() { - m_plater->get_print_job_data(&job_data); + 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(); @@ -57,6 +63,21 @@ void PrintJob::on_success(std::function success) m_success_fun = success; } +std::string PrintJob::truncate_string(const std::string& str, size_t maxLength) +{ + if (str.length() <= maxLength) + { + return str; + } + + wxString local_str = wxString::FromUTF8(str); + wxString truncatedStr = local_str.Mid(0, maxLength - 3); + truncatedStr.append("..."); + + return truncatedStr.utf8_string(); +} + + wxString PrintJob::get_http_error_msg(unsigned int status, std::string body) { try { @@ -126,54 +147,62 @@ void PrintJob::process() unsigned int http_code; std::string http_body; - int total_plate_num = m_plater->get_partplate_list().get_plate_count(); + int total_plate_num = plate_data.plate_count; + if (!plate_data.is_valid) { + total_plate_num = m_plater->get_partplate_list().get_plate_count(); + PartPlate *plate = m_plater->get_partplate_list().get_plate(job_data.plate_idx); + if (plate == nullptr) { + plate = m_plater->get_partplate_list().get_curr_plate(); + if (plate == nullptr) return; + } - PartPlate* plate = m_plater->get_partplate_list().get_plate(job_data.plate_idx); - if (plate == nullptr) { - plate = m_plater->get_partplate_list().get_curr_plate(); - if (plate == nullptr) - return; + /* check gcode is valid */ + if (!plate->is_valid_gcode_file() && m_print_type == "from_normal") { + update_status(curr_percent, check_gcode_failed_str); + return; + } + + if (was_canceled()) { + update_status(curr_percent, printjob_cancel_str); + return; + } } - /* check gcode is valid */ - if (!plate->is_valid_gcode_file()) { - update_status(curr_percent, check_gcode_failed_str); - return; - } - - if (was_canceled()) { - update_status(curr_percent, printjob_cancel_str); - return; - } - - // task name - std::string project_name = wxGetApp().plater()->get_project_name().ToUTF8().data(); + m_project_name = truncate_string(m_project_name, 100); int curr_plate_idx = 0; - if (job_data.plate_idx >= 0) - curr_plate_idx = job_data.plate_idx + 1; - else if (job_data.plate_idx == PLATE_CURRENT_IDX) - curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; - else if (job_data.plate_idx == PLATE_ALL_IDX) - curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; - else - curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + + if (m_print_type == "from_normal") { + if (plate_data.is_valid) + curr_plate_idx = plate_data.cur_plate_index; + if (job_data.plate_idx >= 0) + curr_plate_idx = job_data.plate_idx + 1; + else if (job_data.plate_idx == PLATE_CURRENT_IDX) + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + else if (job_data.plate_idx == PLATE_ALL_IDX) + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + else + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + } + else if(m_print_type == "from_sdcard_view") { + curr_plate_idx = m_print_from_sdc_plate_idx; + } PartPlate* curr_plate = m_plater->get_partplate_list().get_curr_plate(); if (curr_plate) { - this->task_bed_type = bed_type_to_gcode_string(curr_plate->get_bed_type(true)); + this->task_bed_type = bed_type_to_gcode_string(plate_data.is_valid ? plate_data.bed_type : curr_plate->get_bed_type(true)); } BBL::PrintParams params; // local print access params.dev_ip = m_dev_ip; - params.use_ssl = m_local_use_ssl; + params.use_ssl_for_ftp = m_local_use_ssl_for_ftp; + params.use_ssl_for_mqtt = m_local_use_ssl_for_mqtt; params.username = "bblp"; params.password = m_access_code; - // check access code and ip address - if (this->connection_type == "lan") { + if (this->connection_type == "lan" && m_print_type == "from_normal") { params.dev_id = m_dev_id; params.project_name = "verify_job"; params.filename = job_data._temp_path.string(); @@ -186,16 +215,16 @@ void PrintJob::process() m_job_finished = true; return; } + + params.project_name = ""; + params.filename = ""; } - params.dev_id = m_dev_id; - params.ftp_folder = m_ftp_folder; - //params.project_name = project_name; - params.project_name = m_project_name; - params.preset_name = wxGetApp().preset_bundle->prints.get_selected_preset_name(); - params.filename = job_data._3mf_path.string(); - params.config_filename = job_data._3mf_config_path.string(); - params.plate_index = curr_plate_idx; + params.dev_id = m_dev_id; + params.ftp_folder = m_ftp_folder; + params.filename = job_data._3mf_path.string(); + params.config_filename = job_data._3mf_config_path.string(); + params.plate_index = curr_plate_idx; params.task_bed_leveling = this->task_bed_leveling; params.task_flow_cali = this->task_flow_cali; params.task_vibration_cali = this->task_vibration_cali; @@ -206,6 +235,13 @@ void PrintJob::process() params.connection_type = this->connection_type; params.task_use_ams = this->task_use_ams; params.task_bed_type = this->task_bed_type; + params.print_type = this->m_print_type; + + if (m_print_type == "from_sdcard_view") { + params.dst_file = m_dst_path; + } + + if (wxGetApp().model().model_info && wxGetApp().model().model_info.get()) { ModelInfo* model_info = wxGetApp().model().model_info.get(); auto origin_profile_id = model_info->metadata_items.find(BBL_DESIGNER_PROFILE_ID_TAG); @@ -222,7 +258,27 @@ void PrintJob::process() } catch(...) {} } + + auto profile_name = model_info->metadata_items.find(BBL_DESIGNER_PROFILE_TITLE_TAG); + if (profile_name != model_info->metadata_items.end()) { + try { + params.preset_name = profile_name->second; + } + catch (...) {} + } + + auto model_name = model_info->metadata_items.find(BBL_DESIGNER_MODEL_TITLE_TAG); + if (model_name != model_info->metadata_items.end()) { + try { + params.project_name = model_name->second; + } + catch (...) {} + } } + + + if (params.preset_name.empty() && m_print_type == "from_normal") { params.preset_name = wxString::Format("%s_plate_%d", m_project_name, curr_plate_idx).ToStdString(); } + if (params.project_name.empty()) {params.project_name = m_project_name;} wxString error_text; wxString msg_text; @@ -240,7 +296,16 @@ void PrintJob::process() bool is_try_lan_mode = false; bool is_try_lan_mode_failed = false; - auto update_fn = [this, &is_try_lan_mode, &is_try_lan_mode_failed, &msg, &error_str, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) { + auto update_fn = [this, + &is_try_lan_mode, + &is_try_lan_mode_failed, + &msg, + &error_str, + &curr_percent, + &error_text, + StagePercentPoint + ](int stage, int code, std::string info) { + if (stage == BBL::SendingPrintJobStage::PrintingStageCreate && !is_try_lan_mode_failed) { if (this->connection_type == "lan") { msg = _L("Sending print job over LAN"); @@ -277,6 +342,9 @@ void PrintJob::process() } else if (stage == BBL::SendingPrintJobStage::PrintingStageFinished) { msg = wxString::Format(_L("Successfully sent. Will automatically jump to the device page in %ss"), info); + if (m_print_job_completed_id == wxGetApp().plater()->get_send_calibration_finished_event()) { + msg = wxString::Format(_L("Successfully sent. Will automatically jump to the next page in %ss"), info); + } this->update_percent_finish(); } else { if (this->connection_type == "lan") { @@ -296,13 +364,21 @@ void PrintJob::process() } } - if (code > 100 || code < 0) { - error_text = this->get_http_error_msg(code, info); - error_str = wxString::Format("[%s]", error_text); - } else { - error_str = wxEmptyString; + //get errors + if (code > 100 || code < 0 || stage == BBL::SendingPrintJobStage::PrintingStageERROR) { + if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE) { + m_plater->update_print_error_info(code, desc_file_too_large.ToStdString(), info); + }else if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST){ + m_plater->update_print_error_info(code, desc_fail_not_exist.ToStdString(), info); + }else if (code == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || code == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) { + m_plater->update_print_error_info(code, desc_upload_ftp_failed.ToStdString(), info); + }else { + m_plater->update_print_error_info(code, desc_network_error.ToStdString(), info); + } + } + else { + this->update_status(curr_percent, msg); } - this->update_status(curr_percent, msg + error_str); }; auto cancel_fn = [this]() { @@ -351,10 +427,7 @@ void PrintJob::process() if (result == 0) { params.comments = ""; } - else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - params.comments = "wrong_code"; - } - else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { + else if (result == BAMBU_NETWORK_ERR_PRINT_WR_UPLOAD_FTP_FAILED) { params.comments = "upload_failed"; } else { @@ -385,45 +458,45 @@ void PrintJob::process() } if (result < 0) { - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - msg_text = _L("Failed to send the print job. Please try again."); - } if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) { + curr_percent = -1; + + if (result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) { msg_text = file_is_not_exists_str; - } else if (result == BAMBU_NETWORK_ERR_FILE_OVER_SIZE) { + } else if (result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE || result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE) { msg_text = file_over_size_str; - } else if (result == BAMBU_NETWORK_ERR_CHECK_MD5_FAILED) { + } else if (result == BAMBU_NETWORK_ERR_PRINT_WR_CHECK_MD5_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SP_CHECK_MD5_FAILED) { msg_text = failed_in_cloud_service_str; - } else if (result == BAMBU_NETWORK_ERR_INVALID_PARAMS) { - msg_text = _L("Failed to send the print job. Please try again."); + } else if (result == BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_TIMEOUT || result == BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_TIMEOUT) { + msg_text = timeout_to_upload_str; + } else if (result == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) { + msg_text = upload_ftp_failed_str; } else if (result == BAMBU_NETWORK_ERR_CANCELED) { msg_text = print_canceled_str; - } else if (result == BAMBU_NETWORK_ERR_TIMEOUT) { - msg_text = timeout_to_upload_str; - } else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { - msg_text = _L("Failed to send the print job. Please try again."); - } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { - msg_text = _L("Failed to send the print job. Please try again."); + this->update_status(0, msg_text); } else { - update_status(curr_percent, failed_in_cloud_service_str); - } - if (!error_text.IsEmpty()) { - curr_percent = 0; - msg_text += wxString::Format("[%d][%s]", result, error_text); - } - - - if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { - this->show_networking_test(msg_text); - } - else { - update_status(curr_percent, msg_text); + msg_text = send_print_failed_str; } + if (result != BAMBU_NETWORK_ERR_CANCELED) { + this->show_error_info(msg_text, 0, "", ""); + } + BOOST_LOG_TRIVIAL(error) << "print_job: failed, result = " << result; } else { + wxGetApp().plater()->record_slice_preset("print"); + BOOST_LOG_TRIVIAL(error) << "print_job: send ok."; wxCommandEvent* evt = new wxCommandEvent(m_print_job_completed_id); - evt->SetString(m_dev_id); + if (!m_completed_evt_data.empty()) + evt->SetString(m_completed_evt_data); + else + evt->SetString(m_dev_id); + if (m_print_job_completed_id == wxGetApp().plater()->get_send_calibration_finished_event()) { + int sel = wxGetApp().mainframe->get_calibration_curr_tab(); + if (sel >= 0) { + evt->SetInt(sel); + } + } wxQueueEvent(m_plater, evt); m_job_finished = true; } @@ -440,6 +513,12 @@ void PrintJob::set_project_name(std::string name) m_project_name = name; } +void PrintJob::set_dst_name(std::string path) +{ + m_dst_path = path; +} + + void PrintJob::on_check_ip_address_fail(std::function func) { m_enter_ip_address_fun_fail = func; @@ -450,4 +529,10 @@ void PrintJob::on_check_ip_address_success(std::function func) m_enter_ip_address_fun_success = func; } +void PrintJob::connect_to_local_mqtt() +{ + this->update_status(0, wxEmptyString); +} + + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Jobs/PrintJob.hpp b/src/slic3r/GUI/Jobs/PrintJob.hpp index 588a6f84e..97616f4af 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.hpp +++ b/src/slic3r/GUI/Jobs/PrintJob.hpp @@ -13,6 +13,7 @@ namespace GUI { class PrintPrepareData { public: + bool is_from_plater = true; int plate_idx; fs::path _3mf_path; fs::path _3mf_config_path; @@ -22,20 +23,31 @@ public: } }; +class PlateListData +{ +public: + bool is_valid = false; + int plate_count = 0; + int cur_plate_index = 0; + BedType bed_type = BedType::btDefault; +}; + class PrintJob : public PlaterJob { std::function m_success_fun{nullptr}; - PrintPrepareData job_data; std::string m_dev_id; bool m_job_finished{ false }; int m_print_job_completed_id = 0; + wxString m_completed_evt_data; std::function m_enter_ip_address_fun_fail{ nullptr }; std::function m_enter_ip_address_fun_success{ nullptr }; +public: + PrintPrepareData job_data; + PlateListData plate_data; + protected: - void prepare() override; - void on_exception(const std::exception_ptr &) override; public: PrintJob(std::shared_ptr pri, Plater *plater, std::string dev_id = ""); @@ -43,17 +55,23 @@ public: std::string m_project_name; std::string m_dev_ip; std::string m_ftp_folder; - bool m_local_use_ssl { true }; std::string m_access_code; std::string task_bed_type; + std::string task_ams_mapping; + std::string task_ams_mapping_info; + std::string connection_type; + std::string m_print_type; + std::string m_dst_path; + + int m_print_from_sdc_plate_idx = 0; + + bool m_local_use_ssl_for_mqtt { true }; + bool m_local_use_ssl_for_ftp { true }; bool task_bed_leveling; bool task_flow_cali; bool task_vibration_cali; bool task_record_timelapse; bool task_layer_inspect; - std::string task_ams_mapping; - std::string task_ams_mapping_info; - std::string connection_type; bool cloud_print_only { false }; bool has_sdcard { false }; bool task_use_ams { true }; @@ -74,15 +92,21 @@ public: } bool is_finished() { return m_job_finished; } - void set_print_job_finished_event(int event_id) { m_print_job_completed_id = event_id; } - + void set_print_job_finished_event(int event_id, wxString evt_data = wxEmptyString) { + m_print_job_completed_id = event_id; + m_completed_evt_data = evt_data; + } void on_success(std::function success); - wxString get_http_error_msg(unsigned int status, std::string body); void process() override; void finalize() override; void set_project_name(std::string name); + void set_dst_name(std::string path); void on_check_ip_address_fail(std::function func); void on_check_ip_address_success(std::function func); + void connect_to_local_mqtt(); + wxString get_http_error_msg(unsigned int status, std::string body); + std::string truncate_string(const std::string& str, size_t maxLength); + }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp index cee698596..7a0b88396 100644 --- a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp @@ -18,7 +18,7 @@ public: virtual ~ProgressIndicator() = default; virtual void clear_percent() = 0; - virtual void show_networking_test(wxString msg) = 0; + virtual void show_error_info(wxString msg, int code, wxString description, wxString extra) = 0; virtual void set_range(int range) = 0; virtual void set_cancel_callback(CancelFn = CancelFn()) = 0; virtual void set_progress(int pr) = 0; diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 4746ab880..76af20cc1 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -9,20 +9,23 @@ namespace Slic3r { namespace GUI { -static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again"); -static wxString printjob_cancel_str = _L("Task canceled"); -static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network problem and try again"); -static wxString failed_in_cloud_service_str = _L("Send to Printer failed. Please try again."); -static wxString file_is_not_exists_str = _L("Print file not found, please slice again"); -static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again"); -static wxString print_canceled_str = _L("Task canceled"); -static wxString upload_failed_str = _L("Failed uploading print file"); -static wxString upload_login_failed_str = _L("Wrong Access code"); -static wxString upload_no_space_left_str = _L("No space left on Printer SD card"); +static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again."); +static wxString printjob_cancel_str = _L("Task canceled."); +static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network status and try again."); +static wxString failed_in_cloud_service_str = _L("Cloud service connection failed. Please try again."); +static wxString file_is_not_exists_str = _L("Print file not found. please slice again."); +static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again."); +static wxString print_canceled_str = _L("Task canceled."); +static wxString send_print_failed_str = _L("Failed to send the print job. Please try again."); +static wxString upload_ftp_failed_str = _L("Failed to upload file to ftp. Please try again."); +static wxString desc_network_error = _L("Check the current status of the bambu server by clicking on the link above."); +static wxString desc_file_too_large = _L("The size of the print file is too large. Please adjust the file size and try again."); +static wxString desc_fail_not_exist = _L("Print file not found, Please slice it again and send it for printing."); +static wxString desc_upload_ftp_failed = _L("Failed to upload print file to FTP. Please check the network status and try again."); -static wxString sending_over_lan_str = _L("Sending gcode file over LAN"); -static wxString sending_over_cloud_str = _L("Sending gcode file through cloud service"); +static wxString sending_over_lan_str = _L("Sending print job over LAN"); +static wxString sending_over_cloud_str = _L("Sending print job through cloud service"); SendJob::SendJob(std::shared_ptr pri, Plater* plater, std::string dev_id) : PlaterJob{ std::move(pri), plater }, @@ -127,7 +130,8 @@ void SendJob::process() params.dev_ip = m_dev_ip; params.username = "bblp"; params.password = m_access_code; - params.use_ssl = m_local_use_ssl; + params.use_ssl_for_ftp = m_local_use_ssl_for_ftp; + params.use_ssl_for_mqtt = m_local_use_ssl_for_mqtt; // check access code and ip address params.dev_id = m_dev_id; @@ -202,12 +206,12 @@ void SendJob::process() else if (job_data.plate_idx == PLATE_CURRENT_IDX) curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; - params.dev_id = m_dev_id; - params.project_name = m_project_name + ".gcode.3mf"; - params.preset_name = wxGetApp().preset_bundle->prints.get_selected_preset_name(); - params.filename = job_data._3mf_path.string(); - params.config_filename = job_data._3mf_config_path.string(); - params.plate_index = curr_plate_idx; + params.dev_id = m_dev_id; + params.project_name = m_project_name + ".gcode.3mf"; + params.preset_name = wxGetApp().preset_bundle->prints.get_selected_preset_name(); + params.filename = job_data._3mf_path.string(); + params.config_filename = job_data._3mf_config_path.string(); + params.plate_index = curr_plate_idx; params.ams_mapping = this->task_ams_mapping; params.connection_type = this->connection_type; params.task_use_ams = this->task_use_ams; @@ -216,7 +220,8 @@ void SendJob::process() params.dev_ip = m_dev_ip; params.username = "bblp"; params.password = m_access_code; - params.use_ssl = m_local_use_ssl; + params.use_ssl_for_ftp = m_local_use_ssl_for_ftp; + params.use_ssl_for_mqtt = m_local_use_ssl_for_mqtt; wxString error_text; wxString msg_text; @@ -271,11 +276,24 @@ void SendJob::process() } } - if (code < 0 || code > 100) { - error_text = this->get_http_error_msg(code, info); - msg += wxString::Format("[%s]", error_text); + //get errors + if (code > 100 || code < 0 || stage == BBL::SendingPrintJobStage::PrintingStageERROR) { + if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE) { + m_plater->update_print_error_info(code, desc_file_too_large.ToStdString(), info); + } + else if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) { + m_plater->update_print_error_info(code, desc_fail_not_exist.ToStdString(), info); + } + else if (code == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || code == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) { + m_plater->update_print_error_info(code, desc_upload_ftp_failed.ToStdString(), info); + } + else { + m_plater->update_print_error_info(code, desc_network_error.ToStdString(), info); + } + } + else { + this->update_status(curr_percent, msg); } - this->update_status(curr_percent, msg); }; auto cancel_fn = [this]() { @@ -300,9 +318,7 @@ void SendJob::process() BOOST_LOG_TRIVIAL(info) << "send_job: try to send gcode to printer"; this->update_status(curr_percent, _L("Sending gcode file over LAN")); result = m_agent->start_send_gcode_to_sdcard(params, update_fn, cancel_fn); - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - params.comments = "wrong_code"; - } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { + if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { params.comments = "upload_failed"; } else { params.comments = (boost::format("failed(%1%)") % result).str(); @@ -332,50 +348,40 @@ void SendJob::process() } if (result < 0) { - if (result == BAMBU_NETWORK_ERR_NO_SPACE_LEFT_ON_DEVICE) { - msg_text = upload_no_space_left_str; - } else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - msg_text = upload_login_failed_str; - } else if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) { + curr_percent = -1; + + if (result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) { msg_text = file_is_not_exists_str; - } else if (result == BAMBU_NETWORK_ERR_FILE_OVER_SIZE) { + } + else if (result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE || result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE) { msg_text = file_over_size_str; - } else if (result == BAMBU_NETWORK_ERR_CHECK_MD5_FAILED) { + } + else if (result == BAMBU_NETWORK_ERR_PRINT_WR_CHECK_MD5_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SP_CHECK_MD5_FAILED) { msg_text = failed_in_cloud_service_str; - } else if (result == BAMBU_NETWORK_ERR_INVALID_PARAMS) { - msg_text = upload_failed_str; - } else if (result == BAMBU_NETWORK_ERR_CANCELED) { + } + else if (result == BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_TIMEOUT || result == BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_TIMEOUT) { + msg_text = timeout_to_upload_str; + } + else if (result == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) { + msg_text = upload_ftp_failed_str; + } + else if (result == BAMBU_NETWORK_ERR_CANCELED) { msg_text = print_canceled_str; - } else if (result == BAMBU_NETWORK_ERR_TIMEOUT) { - msg_text = timeout_to_upload_str; - } else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { - msg_text = upload_failed_str; - } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { - msg_text = upload_failed_str; - } else { - update_status(curr_percent, failed_in_cloud_service_str); + } + else { + msg_text = send_print_failed_str; } - if (!error_text.IsEmpty()) { - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { - msg_text += ". "; - msg_text += _L("Please log out and login to the printer again."); - } - else { - msg_text += wxString::Format("[%s]", error_text); - } + if (result != BAMBU_NETWORK_ERR_CANCELED) { + this->show_error_info(msg_text, 0, "", ""); } - - if (result == BAMBU_NETWORK_ERR_WRONG_IP_ADDRESS) { - msg_text = timeout_to_upload_str; - } - - update_status(curr_percent, msg_text); BOOST_LOG_TRIVIAL(error) << "send_job: failed, result = " << result; - } else { + + } + else { BOOST_LOG_TRIVIAL(error) << "send_job: send ok."; wxCommandEvent* evt = new wxCommandEvent(m_print_job_completed_id); - evt->SetString(from_u8(params.project_name)); + evt->SetString(params.project_name); wxQueueEvent(m_plater, evt); m_job_finished = true; } diff --git a/src/slic3r/GUI/Jobs/SendJob.hpp b/src/slic3r/GUI/Jobs/SendJob.hpp index e35b35bd4..3f5129baf 100644 --- a/src/slic3r/GUI/Jobs/SendJob.hpp +++ b/src/slic3r/GUI/Jobs/SendJob.hpp @@ -37,11 +37,12 @@ public: std::string m_project_name; std::string m_dev_ip; std::string m_access_code; - bool m_local_use_ssl{false}; std::string task_bed_type; std::string task_ams_mapping; std::string connection_type; + bool m_local_use_ssl_for_ftp{true}; + bool m_local_use_ssl_for_mqtt{true}; bool cloud_print_only { false }; bool has_sdcard { false }; bool task_use_ams { true }; diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 4d7443723..7dde189cb 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -175,7 +175,7 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "N", L("New Project") }, { ctrl + "O", L("Open Project") }, { ctrl + "S", L("Save Project") }, - { ctrl + alt + "S", L("Save Project as") }, + { ctrl + "Shift+S", L("Save Project as")}, // File>Import { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, // File>Export diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a6b3c3fa5..686d3dc32 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -12,7 +12,6 @@ //#include #include #include -#include #include #include @@ -93,10 +92,10 @@ enum class ERescaleTarget }; #ifdef __APPLE__ -class OrcaSlicerTaskBarIcon : public wxTaskBarIcon +class BambuStudioTaskBarIcon : public wxTaskBarIcon { public: - OrcaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} + BambuStudioTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} wxMenu *CreatePopupMenu() override { wxMenu *menu = new wxMenu; //if (wxGetApp().app_config->get("single_instance") == "false") { @@ -147,7 +146,7 @@ static wxIcon main_frame_icon(GUI_App::EAppMode app_mode) } return wxIcon(path, wxBITMAP_TYPE_ICO); #else // _WIN32 - return wxIcon(Slic3r::var("OrcaSlicer_128px.png"), wxBITMAP_TYPE_PNG); + return wxIcon(Slic3r::var("BambuStudio_128px.png"), wxBITMAP_TYPE_PNG); #endif // _WIN32 } @@ -184,7 +183,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ wxGetApp().app_config->set("user_mode", "advanced"); } - wxGetApp().app_config->set_bool("dump_video", false); + wxGetApp().app_config->set_bool("internal_developer_mode", false); wxString max_recent_count_str = wxGetApp().app_config->get("max_recent_count"); long max_recent_count = 18; @@ -244,8 +243,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ switch (wxGetApp().get_app_mode()) { default: case GUI_App::EAppMode::Editor: - m_taskbar_icon = std::make_unique(wxTBI_DOCK); - m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("OrcaSlicer-mac_256px.ico"), wxBITMAP_TYPE_ICO), "OrcaSlicer"); + m_taskbar_icon = std::make_unique(wxTBI_DOCK); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var("BambuStudio-mac_256px.ico"), wxBITMAP_TYPE_ICO), "BambuStudio"); break; case GUI_App::EAppMode::GCodeViewer: break; @@ -337,10 +336,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ }); //BBS - Bind(EVT_SELECT_TAB, [this](wxCommandEvent&evt) { - TabPosition pos = (TabPosition)evt.GetInt(); - m_tabpanel->SetSelection(pos); - }); + Bind(EVT_SELECT_TAB, [this](wxCommandEvent&evt) { + TabPosition pos = (TabPosition)evt.GetInt(); + m_tabpanel->SetSelection(pos); + }); Bind(EVT_SYNC_CLOUD_PRESET, &MainFrame::on_select_default_preset, this); @@ -381,6 +380,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ update_layout(); sizer->SetSizeHints(this); + // BBS: fix taskbar overlay on windows #ifdef WIN32 auto setMaxSize = [this]() { wxDisplay display(this); @@ -470,6 +470,56 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ //} #endif + try { + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) { + json j; + std::string value; + agent->track_get_property("auto_orient", value); + j["auto_orient"] = value; + value = ""; + agent->track_get_property("auto_arrange", value); + j["auto_arrange"] = value; + value = ""; + agent->track_get_property("split_to_object", value); + j["split_to_object"] = value; + value = ""; + agent->track_get_property("split_to_part", value); + j["split_to_part"] = value; + value = ""; + agent->track_get_property("custom_height", value); + j["custom_height"] = value; + value = ""; + + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Move), value); + j["move"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Rotate), value); + j["rotate"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Scale), value); + j["scale"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Flatten), value); + j["flatten"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::FdmSupports), value); + j["custom_support"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Seam), value); + j["custom_seam"] = value; + value = ""; + agent->track_get_property(get_name_from_gizmo_etype(GLGizmosManager::EType::Text), value); + j["text_shape"] = value; + value = ""; + agent->track_get_property("custom_painting", value); + j["custom_painting"] = value; + agent->track_event("key_func", j.dump()); + } + + } + catch (...) {} + MarkdownTip::ExitTip(); m_plater->reset(); @@ -556,11 +606,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); if (m_print_enable) { - PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.printers.get_edited_preset().has_lidar(&preset_bundle)) - wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); - else - wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE)); + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); } evt.Skip(); return; @@ -845,8 +891,7 @@ void MainFrame::shutdown() //wxGetApp().other_instance_message_handler()->shutdown(this); // Save the slic3r.ini.Usually the ini file is saved from "on idle" callback, // but in rare cases it may not have been called yet. - if(wxGetApp().app_config->dirty()) - wxGetApp().app_config->save(); + wxGetApp().app_config->save(); // if (m_plater) // m_plater->print = undef; // Slic3r::GUI::deregister_on_request_update_callback(); @@ -862,11 +907,47 @@ void MainFrame::shutdown() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "MainFrame::shutdown exit"; } +void MainFrame::update_filament_tab_ui() +{ + wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT)->reload_config(); + wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT)->update_dirty(); + wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT)->update_tab_ui(); +} + void MainFrame::update_title() { return; } +void MainFrame::show_publish_button(bool show) +{ + m_publish_btn->Show(show); + Layout(); +} + +void MainFrame::show_calibration_button(bool show) +{ +#ifdef __APPLE__ + bool shown = m_menubar->FindMenu(_L("Calibration")) != wxNOT_FOUND; + if (shown == show) + ; + else if (show) + m_menubar->Insert(3, m_calib_menu, wxString::Format("&%s", _L("Calibration"))); + else + m_menubar->Remove(3); +#else + topbar()->ShowCalibrationButton(show); +#endif + show = !show; + auto shown2 = m_tabpanel->FindPage(m_calibration) != wxNOT_FOUND; + if (shown2 == show) + ; + else if (show) + m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + else + m_tabpanel->RemovePage(tpCalibration); +} + void MainFrame::update_title_colour_after_set_title() { #ifdef __APPLE__ @@ -896,13 +977,13 @@ void MainFrame::show_option(bool show) } } -void MainFrame::init_tabpanel() { - // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on - // Windows 10 with multiple high resolution displays connected. - // BBS - wxBoxSizer *side_tools = create_side_tools(); - m_tabpanel = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, side_tools, - wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); +void MainFrame::init_tabpanel() +{ + // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on Windows 10 + // with multiple high resolution displays connected. + // BBS + wxBoxSizer* side_tools = create_side_tools(); + m_tabpanel = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, side_tools, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); m_tabpanel->SetBackgroundColour(*wxWHITE); #ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList @@ -911,32 +992,40 @@ void MainFrame::init_tabpanel() { m_tabpanel->Hide(); m_settings_dialog.set_tabpanel(m_tabpanel); - m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, [this](wxBookCtrlEvent &e) { - int old_sel = e.GetOldSelection(); - int new_sel = e.GetSelection(); - if (wxGetApp().preset_bundle && - wxGetApp().preset_bundle->printers.get_edited_preset().has_lidar(wxGetApp().preset_bundle) && - new_sel == tpMonitor) { - if (!wxGetApp().getAgent()) { - e.Veto(); - BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % - old_sel % new_sel; - if (m_plater) { - wxCommandEvent *evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT); - wxQueueEvent(m_plater, evt); - } + m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, [this](wxBookCtrlEvent& e) { + int old_sel = e.GetOldSelection(); + int new_sel = e.GetSelection(); + if (wxGetApp().preset_bundle && + wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle) && + new_sel == tpMonitor) { + if (!wxGetApp().getAgent()) { + e.Veto(); + BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % + old_sel % new_sel; + if (m_plater) { + wxCommandEvent* evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT); + wxQueueEvent(m_plater, evt); + } + } } - } else { - if (new_sel == tpMonitor && wxGetApp().preset_bundle != nullptr) { - auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; - wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") - : cfg.opt_string("print_host_webui"); - if (url.empty()) { - wxString url = wxString::Format("file://%s/web/orca/missing_connection.html", from_u8(resources_dir())); - m_printer_view->load_url(url); - } + else { + if (new_sel == tpMonitor && wxGetApp().preset_bundle != nullptr) { + auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; + wxString url; + if (cfg.has("print_host_webui") && !cfg.opt_string("print_host_webui").empty()) { + url = cfg.opt_string("print_host_webui"); + } else if (cfg.has("print_host") && !cfg.opt_string("print_host").empty()) { + url = cfg.opt_string("print_host"); + } + else { + ; + } + if (url.empty()) { + wxString url = wxString::Format("file://%s/web/device/missing_connection.html", from_u8(resources_dir())); + m_printer_view->load_url(url); + } + } } - } }); #ifdef __WXMSW__ @@ -964,16 +1053,18 @@ void MainFrame::init_tabpanel() { else if (panel == m_monitor) { //monitor } - #ifndef __APPLE__ if (sel == tp3DEditor) { - m_topbar->Enable3DEditorItems(); + m_topbar->EnableUndoRedoItems(); } else { - m_topbar->Disable3DEditorItems(); + m_topbar->DisableUndoRedoItems(); } #endif + if (panel) + panel->SetFocus(); + /*switch (sel) { case TabPosition::tpHome: show_option(false); @@ -1028,6 +1119,11 @@ void MainFrame::init_tabpanel() { m_project = new ProjectPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_project->SetBackgroundColour(*wxWHITE); m_tabpanel->AddPage(m_project, _L("Project"), std::string("tab_auxiliary_avtice"), std::string("tab_auxiliary_avtice")); + + m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_calibration->SetBackgroundColour(*wxWHITE); + m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + if (m_plater) { // load initial config auto full_config = wxGetApp().preset_bundle->full_config(); @@ -1042,31 +1138,35 @@ void MainFrame::init_tabpanel() { } } - // SoftFever + +// OrcaSlicer void MainFrame::show_device(bool bBBLPrinter) { - if (m_tabpanel->GetPage(3) != m_monitor && - m_tabpanel->GetPage(3) != m_printer_view) { + if (m_tabpanel->GetPage(tpMonitor) != m_monitor && + m_tabpanel->GetPage(tpMonitor) != m_printer_view) { BOOST_LOG_TRIVIAL(error) << "Failed to find device tab"; return; } if (bBBLPrinter) { - if (m_tabpanel->GetPage(3) != m_monitor) { - m_tabpanel->RemovePage(3); - m_tabpanel->InsertPage(3, m_monitor, _L("Device"), + if (m_tabpanel->GetPage(tpMonitor) != m_monitor) { + m_printer_view->Hide(); + m_monitor->Show(true); + m_tabpanel->RemovePage(tpMonitor); + m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + m_tabpanel->SetSelection(tp3DEditor); } } else { - if (m_tabpanel->GetPage(3) != m_printer_view) { - m_tabpanel->RemovePage(3); - m_tabpanel->InsertPage(3, m_printer_view, _L("Device"), + if (m_tabpanel->GetPage(tpMonitor) != m_printer_view) { + m_printer_view->Show(); + m_monitor->Show(false); + m_tabpanel->RemovePage(tpMonitor); + m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); - m_printer_view->Show(); + m_tabpanel->SetSelection(tp3DEditor); } } - - } @@ -1416,14 +1516,18 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_select = eSlicePlate; m_print_select = ePrintPlate; + m_publish_btn = new Button(this, _L("Upload"), "bar_publish", 0, FromDIP(16)); m_slice_btn = new SideButton(this, _L("Slice plate"), ""); m_slice_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14)); m_print_btn = new SideButton(this, _L("Print plate"), ""); m_print_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14)); update_side_button_style(); + m_publish_btn->Hide(); m_slice_option_btn->Enable(); m_print_option_btn->Enable(); + sizer->Add(m_publish_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(1)); + sizer->Add(FromDIP(15), 0, 0, 0, 0); sizer->Add(m_slice_option_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(1)); sizer->Add(m_slice_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(1)); sizer->Add(FromDIP(15), 0, 0, 0, 0); @@ -1433,6 +1537,23 @@ wxBoxSizer* MainFrame::create_side_tools() sizer->Layout(); + m_publish_btn->Bind(wxEVT_BUTTON, [this](auto& e) { + CallAfter([this] { + wxGetApp().open_publish_page_dialog(); + + if (!wxGetApp().getAgent()) { + BOOST_LOG_TRIVIAL(info) << "publish: no agent"; + return; + } + + // record + json j; + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) + agent->track_event("enter_model_mall", j.dump()); + }); + }); + m_slice_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { //this->m_plater->select_view_3D("Preview"); @@ -1513,7 +1634,7 @@ wxBoxSizer* MainFrame::create_side_tools() SidePopup* p = new SidePopup(this); if (wxGetApp().preset_bundle - && !wxGetApp().preset_bundle->printers.get_edited_preset().has_lidar(wxGetApp().preset_bundle)) { + && !wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle)) { // ThirdParty Buttons SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); export_gcode_btn->SetCornerRadius(0); @@ -1538,11 +1659,24 @@ wxBoxSizer* MainFrame::create_side_tools() p->Dismiss(); }); + // upload only + /*SideButton* upload_gcode_btn = new SideButton(p, _L("Send"), ""); + upload_gcode_btn->SetCornerRadius(0); + upload_gcode_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) { + m_print_btn->SetLabel(_L("Send")); + m_print_select = eUploadGcode; + m_print_enable = get_enable_print_status(); + m_print_btn->Enable(m_print_enable); + this->Layout(); + p->Dismiss(); + });*/ + p->append_button(send_gcode_btn); + //p->append_button(upload_gcode_btn); p->append_button(export_gcode_btn); } else { - //Orca Slicer Buttons + //Bambu Studio Buttons SideButton* print_plate_btn = new SideButton(p, _L("Print plate"), ""); print_plate_btn->SetCornerRadius(0); @@ -1613,23 +1747,12 @@ wxBoxSizer* MainFrame::create_side_tools() p->Dismiss(); }); - SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); - export_gcode_btn->SetCornerRadius(0); - export_gcode_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) { - m_print_btn->SetLabel(_L("Export G-code file")); - m_print_select = eExportGcode; - m_print_enable = get_enable_print_status(); - m_print_btn->Enable(m_print_enable); - this->Layout(); - p->Dismiss(); - }); p->append_button(print_plate_btn); p->append_button(print_all_btn); p->append_button(send_to_printer_btn); p->append_button(send_to_printer_all_btn); p->append_button(export_sliced_file_btn); p->append_button(export_all_sliced_file_btn); - p->append_button(export_gcode_btn); } p->Popup(m_print_btn); @@ -1701,7 +1824,7 @@ bool MainFrame::get_enable_print_status() PartPlateList &part_plate_list = m_plater->get_partplate_list(); PartPlate *current_plate = part_plate_list.get_curr_plate(); - + bool is_all_plates = wxGetApp().plater()->get_preview_canvas3D()->is_all_plates_selected(); if (m_print_select == ePrintAll) { if (!part_plate_list.is_all_slice_results_ready_for_print()) @@ -1715,6 +1838,7 @@ bool MainFrame::get_enable_print_status() { enable = false; } + enable = enable && !is_all_plates; } else if (m_print_select == eExportGcode) { @@ -1722,6 +1846,7 @@ bool MainFrame::get_enable_print_status() { enable = false; } + enable = enable && !is_all_plates; } else if (m_print_select == eSendGcode) { @@ -1729,6 +1854,7 @@ bool MainFrame::get_enable_print_status() enable = false; if (!can_send_gcode()) enable = false; + enable = enable && !is_all_plates; } else if (m_print_select == eUploadGcode) { @@ -1736,6 +1862,7 @@ bool MainFrame::get_enable_print_status() enable = false; if (!can_send_gcode()) enable = false; + enable = enable && !is_all_plates; } else if (m_print_select == eExportSlicedFile) { @@ -1743,6 +1870,7 @@ bool MainFrame::get_enable_print_status() { enable = false; } + enable = enable && !is_all_plates; } else if (m_print_select == eSendToPrinter) { @@ -1750,6 +1878,7 @@ bool MainFrame::get_enable_print_status() { enable = false; } + enable = enable && !is_all_plates; } else if (m_print_select == eSendToPrinterAll) { @@ -1782,6 +1911,18 @@ void MainFrame::update_side_button_style() m_slice_btn->SetCornerRadius(FromDIP(12)); m_slice_btn->SetExtraSize(wxSize(FromDIP(38), FromDIP(10))); m_slice_btn->SetBottomColour(wxColour(0x3B4446));*/ + StateColor m_btn_bg_enable = StateColor( + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(48, 221, 112), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal) + ); + + m_publish_btn->SetMinSize(wxSize(FromDIP(125), FromDIP(24))); + m_publish_btn->SetCornerRadius(FromDIP(12)); + m_publish_btn->SetBackgroundColor(m_btn_bg_enable); + m_publish_btn->SetBorderColor(m_btn_bg_enable); + m_publish_btn->SetBackgroundColour(wxColour(59,68,70)); + m_publish_btn->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); m_slice_btn->SetTextLayout(SideButton::EHorizontalOrientation::HO_Left, FromDIP(15)); m_slice_btn->SetCornerRadius(FromDIP(12)); @@ -1873,6 +2014,7 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) m_param_panel->msw_rescale(); m_project->msw_rescale(); m_monitor->msw_rescale(); + m_calibration->msw_rescale(); // BBS #if 0 @@ -1909,7 +2051,7 @@ void MainFrame::on_sys_color_changed() // update label colors in respect to the system mode wxGetApp().init_label_colours(); -#ifdef __APPLE__ +#ifndef __WINDOWS__ wxGetApp().force_colors_update(); wxGetApp().update_ui_from_settings(); #endif //__APPLE__ @@ -1931,7 +2073,7 @@ void MainFrame::on_sys_color_changed() // update Plater wxGetApp().plater()->sys_color_changed(); m_monitor->on_sys_color_changed(); - + m_calibration->on_sys_color_changed(); // update Tabs for (auto tab : wxGetApp().tabs_list) tab->sys_color_changed(); @@ -1975,15 +2117,20 @@ static wxMenu* generate_help_menu() wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); }); + append_menu_item(helpMenu, wxID_ANY, _L("Report issue"), _L("Report issue"), [](wxCommandEvent &) { + std::string url = "https://github.com/bambulab/BambuStudio/issues/new/choose"; + wxLaunchDefaultBrowser(url); + }); + // Report a bug - //append_menu_item(helpMenu, wxID_ANY, _L("Report Bug(TODO)"), _L("Report a bug of OrcaSlicer"), + //append_menu_item(helpMenu, wxID_ANY, _L("Report Bug(TODO)"), _L("Report a bug of BambuStudio"), // [](wxCommandEvent&) { // //TODO // }); // Check New Version append_menu_item(helpMenu, wxID_ANY, _L("Check for Update"), _L("Check for Update"), [](wxCommandEvent&) { - wxGetApp().check_new_version_sf(true, 1); + wxGetApp().check_new_version(true, 1); }, "", nullptr, []() { return true; }); @@ -2014,11 +2161,12 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF return; } + json j; + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + if (agent) + agent->track_event("enter_model_mall", j.dump()); + //if (GUI::wxGetApp().plater()->model().objects.empty()) return; - - if (!wxGetApp().check_login()) - return; - wxGetApp().open_publish_page_dialog(); }); @@ -2030,10 +2178,6 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF } //if (GUI::wxGetApp().plater()->model().objects.empty()) return; - - if (!wxGetApp().check_login()) - return; - wxGetApp().open_mall_page_dialog(); }); #endif @@ -2104,7 +2248,7 @@ void MainFrame::init_menubar_as_editor() size_t file_id = evt.GetId() - wxID_FILE1; wxString filename = m_recent_projects.GetHistoryFile(file_id); open_recent_project(file_id, filename); - }, wxID_FILE1, wxID_FILE9); + }, wxID_FILE1, wxID_FILE1 + 49); // [5050, 5100) std::vector recent_projects = wxGetApp().app_config->get_recent_projects(); std::reverse(recent_projects.begin(), recent_projects.end()); @@ -2399,11 +2543,11 @@ void MainFrame::init_menubar_as_editor() //publish menu - if (m_plater) { + /*if (m_plater) { publishMenu = new wxMenu(); add_common_publish_menu_items(publishMenu, this); publishMenu->AppendSeparator(); - } + }*/ // View menu wxMenu* viewMenu = nullptr; @@ -2435,6 +2579,12 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); + append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Overhang"), _L("Show object overhang highlight in 3D scene"), + [this](wxCommandEvent &) { + m_plater->show_view3D_overhang(!m_plater->is_view3D_overhang_shown()); + m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); + }, + this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->is_view3D_overhang_shown(); }, this); /*viewMenu->AppendSeparator(); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Wireframe") + "\tCtrl+Shift+Enter", _L("Show wireframes in 3D scene"), [this](wxCommandEvent&) { m_plater->toggle_show_wireframe(); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, @@ -2459,7 +2609,7 @@ void MainFrame::init_menubar_as_editor() #ifdef __APPLE__ wxWindowID bambu_studio_id_base = wxWindow::NewControlId(int(2)); wxMenu* parent_menu = m_menubar->OSXGetAppleMenu(); - //auto preference_item = new wxMenuItem(parent_menu, OrcaSlicerMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\tCtrl+,", ""); + //auto preference_item = new wxMenuItem(parent_menu, BambuStudioMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\tCtrl+,", ""); #else wxMenu* parent_menu = m_topbar->GetTopMenu(); auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); @@ -2534,13 +2684,13 @@ void MainFrame::init_menubar_as_editor() #ifdef __APPLE__ wxString about_title = wxString::Format(_L("&About %s"), SLIC3R_APP_FULL_NAME); - //auto about_item = new wxMenuItem(parent_menu, OrcaSlicerMenuAbout + bambu_studio_id_base, about_title, ""); + //auto about_item = new wxMenuItem(parent_menu, BambuStudioMenuAbout + bambu_studio_id_base, about_title, ""); //parent_menu->Bind(wxEVT_MENU, [this, bambu_studio_id_base](wxEvent& event) { // switch (event.GetId() - bambu_studio_id_base) { - // case OrcaSlicerMenuAbout: + // case BambuStudioMenuAbout: // Slic3r::GUI::about(); // break; - // case OrcaSlicerMenuPreferences: + // case BambuStudioMenuPreferences: // CallAfter([this] { // PreferencesDialog dlg(this); // dlg.ShowModal(); @@ -2607,160 +2757,201 @@ void MainFrame::init_menubar_as_editor() //m_topbar->AddDropDownMenuItem(config_item); m_topbar->AddDropDownSubMenu(helpMenu, _L("Help")); - // SoftFever calibrations - - // Flowrate - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Temperature"), _L("Temperature Calibration"), - [this](wxCommandEvent&) { - if (!m_temp_calib_dlg) - m_temp_calib_dlg = new Temp_Calibration_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_temp_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - auto flowrate_menu = new wxMenu(); - append_menu_item( - flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), - [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(1); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), - [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(2); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow rate")); - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Pressure advance"), _L("Pressure advance"), - [this](wxCommandEvent&) { - if (!m_pa_calib_dlg) + // OrcaSlicer calibrations + { + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Temperature"), _L("Temperature Calibration"), + [this](wxCommandEvent&) { + if (!m_temp_calib_dlg) + m_temp_calib_dlg = new Temp_Calibration_Dlg((wxWindow*)this, wxID_ANY, m_plater); + m_temp_calib_dlg->ShowModal(); + }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); + auto flowrate_menu = new wxMenu(); + append_menu_item( + flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), + [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(1); }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); + append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), + [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(2); }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); + m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow rate")); + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Pressure advance"), _L("Pressure advance"), + [this](wxCommandEvent&) { + //if (!m_pa_calib_dlg) m_pa_calib_dlg = new PA_Calibration_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_pa_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Retraction test"), _L("Retraction test"), - [this](wxCommandEvent&) { - if (!m_retraction_calib_dlg) - m_retraction_calib_dlg = new Retraction_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_retraction_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Orca Tolerance Test"), _L("Orca Tolerance Test"), - [this](wxCommandEvent&) { - m_plater->new_project(); - m_plater->add_model(false, Slic3r::resources_dir() + "/calib/tolerance_test/OrcaToleranceTest.stl"); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - // Advance calibrations - auto advance_menu = new wxMenu(); + m_pa_calib_dlg->ShowModal(); + }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Retraction test"), _L("Retraction test"), + [this](wxCommandEvent&) { + if (!m_retraction_calib_dlg) + m_retraction_calib_dlg = new Retraction_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); + m_retraction_calib_dlg->ShowModal(); + }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item( - advance_menu, wxID_ANY, _L("Max flowrate"), _L("Max flowrate"), - [this](wxCommandEvent&) { - if (!m_vol_test_dlg) - m_vol_test_dlg = new MaxVolumetricSpeed_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_vol_test_dlg->ShowModal(); - }, - "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); + // Advance calibrations + auto advance_menu = new wxMenu(); // sub menu + { + append_menu_item( + advance_menu, wxID_ANY, _L("Max flowrate"), _L("Max flowrate"), + [this](wxCommandEvent &) { + if (!m_vol_test_dlg) m_vol_test_dlg = new MaxVolumetricSpeed_Test_Dlg((wxWindow *) this, wxID_ANY, m_plater); + m_vol_test_dlg->ShowModal(); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); - append_menu_item( - advance_menu, wxID_ANY, _L("VFA"), _L("VFA"), - [this](wxCommandEvent&) { - if (!m_vfa_test_dlg) - m_vfa_test_dlg = new VFA_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_vfa_test_dlg->ShowModal(); - }, - "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - m_topbar->GetCalibMenu()->AppendSubMenu(advance_menu, _L("More...")); + append_menu_item( + advance_menu, wxID_ANY, _L("VFA"), _L("VFA"), + [this](wxCommandEvent &) { + if (!m_vfa_test_dlg) m_vfa_test_dlg = new VFA_Test_Dlg((wxWindow *) this, wxID_ANY, m_plater); + m_vfa_test_dlg->ShowModal(); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + m_topbar->GetCalibMenu()->AppendSubMenu(advance_menu, _L("More...")); + } - // help - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Tutorial"), _L("Calibration help"), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/SoftFever/OrcaSlicer/wiki/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); + // help + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Tutorial"), _L("Calibration help"), + [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://wiki.bambulab.com/e/en/staging/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr, + [this]() {return m_plater->is_view3D_shown();; }, this); + } #else m_menubar->Append(fileMenu, wxString::Format("&%s", _L("File"))); if (editMenu) m_menubar->Append(editMenu, wxString::Format("&%s", _L("Edit"))); if (viewMenu) m_menubar->Append(viewMenu, wxString::Format("&%s", _L("View"))); - /*if (publishMenu) - m_menubar->Append(publishMenu, wxString::Format("&%s", _L("3D Models")));*/ + //if (publishMenu) + // m_menubar->Append(publishMenu, wxString::Format("&%s", _L("3D Models"))); - // SoftFever calibrations - auto calib_menu = new wxMenu(); + // SoftFever calibrations + m_calib_menu = new wxMenu(); - // PA - append_menu_item(calib_menu, wxID_ANY, _L("Temperature"), _L("Temperature"), - [this](wxCommandEvent&) { + // Temp + append_menu_item( + m_calib_menu, wxID_ANY, _L("Temperature"), _L("Temperature"), + [this](wxCommandEvent &) { if (!m_temp_calib_dlg) - m_temp_calib_dlg = new Temp_Calibration_Dlg((wxWindow*)this, wxID_ANY, m_plater); + m_temp_calib_dlg = new Temp_Calibration_Dlg((wxWindow *) this, wxID_ANY, m_plater); m_temp_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + // Flowrate auto flowrate_menu = new wxMenu(); - append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), - [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(1); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), - [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(2); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - append_submenu(calib_menu,flowrate_menu,wxID_ANY,_L("Flow rate"),_L("Flow rate"),"", - [this]() {return m_plater->is_view3D_shown();; }); + append_menu_item( + flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), + [this](wxCommandEvent &) { + if (m_plater) m_plater->calib_flowrate(1); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + append_menu_item( + flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), + [this](wxCommandEvent &) { + if (m_plater) m_plater->calib_flowrate(2); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + append_submenu(m_calib_menu, flowrate_menu, wxID_ANY, _L("Flow rate"), _L("Flow rate"), "", [this]() { + return m_plater->is_view3D_shown(); + ; + }); // PA - append_menu_item(calib_menu, wxID_ANY, _L("Pressure advance"), _L("Pressure advance"), - [this](wxCommandEvent&) { - if (!m_pa_calib_dlg) - m_pa_calib_dlg = new PA_Calibration_Dlg((wxWindow*)this, wxID_ANY, m_plater); + append_menu_item( + m_calib_menu, wxID_ANY, _L("Pressure advance"), _L("Pressure advance"), + [this](wxCommandEvent &) { + m_pa_calib_dlg = new PA_Calibration_Dlg((wxWindow *) this, wxID_ANY, m_plater); m_pa_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); // Retraction - append_menu_item(calib_menu, wxID_ANY, _L("Retraction test"), _L("Retraction test"), - [this](wxCommandEvent&) { - if (!m_retraction_calib_dlg) - m_retraction_calib_dlg = new Retraction_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); + append_menu_item( + m_calib_menu, wxID_ANY, _L("Retraction test"), _L("Retraction test"), + [this](wxCommandEvent &) { + if (!m_retraction_calib_dlg) m_retraction_calib_dlg = new Retraction_Test_Dlg((wxWindow *) this, wxID_ANY, m_plater); m_retraction_calib_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - - // Tolerance Test - append_menu_item(calib_menu, wxID_ANY, _L("Orca Tolerance Test"), _L("Orca Tolerance Test"), - [this](wxCommandEvent&) { - m_plater->new_project(); - m_plater->add_model(false, Slic3r::resources_dir() + "/calib/tolerance_test/OrcaToleranceTest.stl"); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); // Advance calibrations auto advance_menu = new wxMenu(); append_menu_item( advance_menu, wxID_ANY, _L("Max flowrate"), _L("Max flowrate"), - [this](wxCommandEvent&) { - if (!m_vol_test_dlg) - m_vol_test_dlg = new MaxVolumetricSpeed_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); - m_vol_test_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); + [this](wxCommandEvent &) { + if (!m_vol_test_dlg) m_vol_test_dlg = new MaxVolumetricSpeed_Test_Dlg((wxWindow *) this, wxID_ANY, m_plater); + m_vol_test_dlg->ShowModal(); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); append_menu_item( advance_menu, wxID_ANY, _L("VFA"), _L("VFA"), - [this](wxCommandEvent&) { - if (!m_vfa_test_dlg) - m_vfa_test_dlg = new VFA_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater); + [this](wxCommandEvent &) { + if (!m_vfa_test_dlg) m_vfa_test_dlg = new VFA_Test_Dlg((wxWindow *) this, wxID_ANY, m_plater); m_vfa_test_dlg->ShowModal(); - }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - - append_submenu(calib_menu, advance_menu, wxID_ANY, _L("More..."), _L("More calibrations"), "", - [this]() {return m_plater->is_view3D_shown();; }); + }, + "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + + append_submenu(m_calib_menu, advance_menu, wxID_ANY, _L("More..."), _L("More calibrations"), "", [this]() { + return m_plater->is_view3D_shown(); + ; + }); // help - append_menu_item(calib_menu, wxID_ANY, _L("Tutorial"), _L("Calibration help"), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/SoftFever/OrcaSlicer/wiki/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr, - [this]() {return m_plater->is_view3D_shown();; }, this); - - m_menubar->Append(calib_menu,wxString::Format("&%s", _L("Calibration"))); + append_menu_item( + m_calib_menu, wxID_ANY, _L("Tutorial"), _L("Calibration help"), + [this](wxCommandEvent &) { wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/bambu-studio/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr, + [this]() { + return m_plater->is_view3D_shown(); + ; + }, + this); + if (helpMenu) m_menubar->Append(helpMenu, wxString::Format("&%s", _L("Help"))); SetMenuBar(m_menubar); @@ -2784,18 +2975,6 @@ void MainFrame::init_menubar_as_editor() #endif // __APPLE__ } -void MainFrame::show_publish_button(bool show) -{ - if (!m_menubar) return; - - if (show){ - m_menubar->Insert(4, publishMenu, wxString::Format("&%s", _L("3D Models"))); - } - else { - m_menubar->Remove(4); - } -} - void MainFrame::set_max_recent_count(int max) { max = max < 0 ? 0 : max > 10000 ? 10000 : max; @@ -2808,7 +2987,8 @@ void MainFrame::set_max_recent_count(int max) recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i))); } wxGetApp().app_config->set_recent_projects(recent_projects); - m_webview->SendRecentList(""); + wxGetApp().app_config->save(); + m_webview->SendRecentList(-1); } } @@ -3183,6 +3363,12 @@ void MainFrame::request_select_tab(TabPosition pos) wxQueueEvent(this, evt); } +int MainFrame::get_calibration_curr_tab() { + if (m_calibration) + return m_calibration->get_tabpanel()->GetSelection(); + return -1; +} + // Set a camera direction, zoom to all objects. void MainFrame::select_view(const std::string& direction) { @@ -3274,7 +3460,8 @@ void MainFrame::add_to_recent_projects(const wxString& filename) recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i))); } wxGetApp().app_config->set_recent_projects(recent_projects); - m_webview->SendRecentList(""); + wxGetApp().app_config->save(); + m_webview->SendRecentList(0); } } @@ -3328,7 +3515,7 @@ inline void MainFrame::FileHistory::SetMaxFiles(int max) RemoveFileFromHistory(--numFiles); } -void MainFrame::get_recent_projects(boost::property_tree::wptree &tree) +void MainFrame::get_recent_projects(boost::property_tree::wptree &tree, int images) { for (size_t i = 0; i < m_recent_projects.GetCount(); ++i) { boost::property_tree::wptree item; @@ -3340,8 +3527,10 @@ void MainFrame::get_recent_projects(boost::property_tree::wptree &tree) if (!ec) { std::wstring time = wxDateTime(t).FormatISOCombined(' ').ToStdWstring(); item.put(L"time", time); - auto thumbnail = m_recent_projects.GetThumbnailUrl(i); - if (!thumbnail.empty()) item.put(L"image", thumbnail); + if (i <= images) { + auto thumbnail = m_recent_projects.GetThumbnailUrl(i); + if (!thumbnail.empty()) item.put(L"image", thumbnail); + } } else { item.put(L"time", _L("File is missing")); } @@ -3373,7 +3562,8 @@ void MainFrame::open_recent_project(size_t file_id, wxString const & filename) recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i))); } wxGetApp().app_config->set_recent_projects(recent_projects); - m_webview->SendRecentList(""); + wxGetApp().app_config->save(); + m_webview->SendRecentList(-1); } } } @@ -3396,7 +3586,8 @@ void MainFrame::remove_recent_project(size_t file_id, wxString const &filename) recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i))); } wxGetApp().app_config->set_recent_projects(recent_projects); - m_webview->SendRecentList(""); + wxGetApp().app_config->save(); + m_webview->SendRecentList(-1); } void MainFrame::load_url(wxString url) @@ -3418,7 +3609,7 @@ void MainFrame::load_printer_url(wxString url) void MainFrame::load_printer_url() { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.printers.get_edited_preset().has_lidar(&preset_bundle)) + if (preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle)) return; auto cfg = preset_bundle.printers.get_edited_preset().config; @@ -3507,7 +3698,7 @@ void MainFrame::on_select_default_preset(SimpleEvent& evt) { case wxID_YES: { wxGetApp().app_config->set_bool("sync_user_preset", true); - wxGetApp().start_sync_user_preset(true, true); + wxGetApp().start_sync_user_preset(true); break; } case wxID_NO: @@ -3566,7 +3757,7 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe) SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO)); } #else - SetIcon(wxIcon(var("OrcaSlicer_128px.png"), wxBITMAP_TYPE_PNG)); + SetIcon(wxIcon(var("BambuStudio_128px.png"), wxBITMAP_TYPE_PNG)); #endif // _WIN32 //just hide the Frame on closing diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 6550efa88..e9228d474 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -21,13 +21,15 @@ #include "Monitor.hpp" #include "Auxiliary.hpp" #include "Project.hpp" +#include "CalibrationPanel.hpp" #include "UnsavedChangesDialog.hpp" #include "Widgets/SideButton.hpp" #include "Widgets/SideMenuPopup.hpp" // BBS #include "BBLTopbar.hpp" - +#include "PrinterWebView.hpp" +#include "calib_dlg.hpp" #include "PrinterWebView.hpp" #include "calib_dlg.hpp" @@ -95,7 +97,8 @@ class MainFrame : public DPIFrame wxString m_last_config = wxEmptyString; wxMenuBar* m_menubar{ nullptr }; - wxMenu* publishMenu{ nullptr }; + //wxMenu* publishMenu{ nullptr }; + wxMenu * m_calib_menu{nullptr}; #if 0 wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now @@ -217,13 +220,14 @@ public: //BBS GUI refactor enum TabPosition { - tpHome = 0, - tp3DEditor = 1, - //tpSettings = 1, - tpPreview = 2, - tpMonitor = 3, - tpProject = 4, - toDebugTool = 5, + tpHome = 0, + tp3DEditor = 1, + tpPreview = 2, + tpMonitor = 3, + tpProject = 4, + tpCalibration = 5, + tpAuxiliary = 6, + toDebugTool = 7, }; //BBS: add slice&&print status update logic @@ -246,10 +250,15 @@ public: // BBS BBLTopbar* topbar() { return m_topbar; } + // for cali to update tab when save new preset + void update_filament_tab_ui(); + void update_title(); - void show_publish_button(bool show); void set_max_recent_count(int max); + void show_publish_button(bool show); + void show_calibration_button(bool show); + void update_title_colour_after_set_title(); void show_option(bool show); void init_tabpanel(); @@ -307,6 +316,7 @@ public: void select_tab(wxPanel* panel); void select_tab(size_t tab = size_t(-1)); void request_select_tab(TabPosition pos); + int get_calibration_curr_tab(); void select_view(const std::string& direction); // Propagate changed configuration from the Tab to the Plater and save changes to the AppConfig void on_config_changed(DynamicPrintConfig* cfg) const ; @@ -320,7 +330,7 @@ public: bool save_project_as(const wxString& filename = wxString()); void add_to_recent_projects(const wxString& filename); - void get_recent_projects(boost::property_tree::wptree & tree); + void get_recent_projects(boost::property_tree::wptree &tree, int images); void open_recent_project(size_t file_id, wxString const & filename); void remove_recent_project(size_t file_id, wxString const &filename); @@ -333,6 +343,14 @@ public: bool is_printer_view() const; void refresh_plugin_tips(); void RunScript(wxString js); + void show_device(bool bBBLPrinter); + + // OrcaSlicer calibration + PA_Calibration_Dlg * m_pa_calib_dlg{nullptr}; + Temp_Calibration_Dlg * m_temp_calib_dlg{nullptr}; + MaxVolumetricSpeed_Test_Dlg *m_vol_test_dlg{nullptr}; + VFA_Test_Dlg * m_vfa_test_dlg{nullptr}; + Retraction_Test_Dlg * m_retraction_calib_dlg{nullptr}; //SoftFever void show_device(bool bBBLPrinter); @@ -353,6 +371,7 @@ public: //AuxiliaryPanel* m_auxiliary{ nullptr }; ProjectPanel* m_project{ nullptr }; + CalibrationPanel* m_calibration{ nullptr }; WebViewPanel* m_webview { nullptr }; PrinterWebView* m_printer_view{nullptr}; wxLogWindow* m_log_window { nullptr }; @@ -371,6 +390,7 @@ public: // BBS mutable int m_print_select{ ePrintAll }; mutable int m_slice_select{ eSliceAll }; + Button* m_publish_btn{ nullptr }; SideButton* m_slice_btn{ nullptr }; SideButton* m_slice_option_btn{ nullptr }; SideButton* m_print_btn{ nullptr }; diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 20e91953b..e158888d7 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -2,11 +2,22 @@ #include "ImageGrid.h" #include "I18N.hpp" #include "GUI_App.hpp" - +#include "Plater.hpp" #include "Widgets/Button.hpp" #include "Widgets/SwitchButton.hpp" #include "Widgets/Label.hpp" #include "Printer/PrinterFileSystem.h" +#include "MsgDialog.hpp" +#include "Widgets/ProgressDialog.hpp" +#include +#include + +#ifdef __WXMSW__ +#include +#endif +#ifdef __APPLE__ +#include "../Utils/MacDarkMode.hpp" +#endif namespace Slic3r { namespace GUI { @@ -26,9 +37,11 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) top_sizer->SetMinSize({-1, 75 * em_unit(this) / 10}); // Time group - m_time_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_time_panel->SetBackgroundColor(StateColor()); - m_button_year = new ::Button(m_time_panel, _L("Year"), "", wxBORDER_NONE); + auto time_panel = new wxWindow(this, wxID_ANY); + time_panel->SetBackgroundColour(0xEEEEEE); + m_time_panel = new ::StaticBox(time_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_time_panel->SetCornerRadius(0); + m_button_year = new ::Button(m_time_panel, _L("Year"), "", wxBORDER_NONE); m_button_month = new ::Button(m_time_panel, _L("Month"), "", wxBORDER_NONE); m_button_all = new ::Button(m_time_panel, _L("All Files"), "", wxBORDER_NONE); m_button_year->SetToolTip(_L("Group files by year, recent first.")); @@ -49,7 +62,10 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) time_sizer->Add(m_button_month, 0, wxALIGN_CENTER_VERTICAL); time_sizer->Add(m_button_all, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); m_time_panel->SetSizer(time_sizer); - top_sizer->Add(m_time_panel, 1, wxEXPAND); + wxBoxSizer *time_sizer2 = new wxBoxSizer(wxHORIZONTAL); + time_sizer2->Add(m_time_panel, 1, wxEXPAND); + time_panel->SetSizer(time_sizer2); + top_sizer->Add(time_panel, 1, wxEXPAND); // File type StateColor background( @@ -61,30 +77,33 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_type_panel->SetCornerRadius(FromDIP(5)); m_type_panel->SetMinSize({-1, 48 * em_unit(this) / 10}); m_button_timelapse = new ::Button(m_type_panel, _L("Timelapse"), "", wxBORDER_NONE); - m_button_timelapse->SetToolTip(L("Switch to timelapse files.")); + m_button_timelapse->SetToolTip(_L("Switch to timelapse files.")); m_button_video = new ::Button(m_type_panel, _L("Video"), "", wxBORDER_NONE); - m_button_video->SetToolTip(L("Switch to video files.")); - for (auto b : {m_button_timelapse, m_button_video} ) { + m_button_video->SetToolTip(_L("Switch to video files.")); + m_button_model = new ::Button(m_type_panel, _L("Model"), "", wxBORDER_NONE); + m_button_video->SetToolTip(_L("Switch to 3mf model files.")); + for (auto b : {m_button_timelapse, m_button_video, m_button_model}) { b->SetBackgroundColor(background); b->SetCanFocus(false); } wxBoxSizer *type_sizer = new wxBoxSizer(wxHORIZONTAL); type_sizer->Add(m_button_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); - type_sizer->Add(m_button_video, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 24); + //type_sizer->Add(m_button_video, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 24); + m_button_video->Hide(); + type_sizer->Add(m_button_model, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 24); m_type_panel->SetSizer(type_sizer); - m_type_panel->Hide(); - // top_sizer->Add(m_type_panel, 0, wxALIGN_CENTER_VERTICAL); + top_sizer->Add(m_type_panel, 0, wxALIGN_CENTER_VERTICAL); // File management m_manage_panel = new ::StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); m_manage_panel->SetBackgroundColor(StateColor()); m_button_delete = new ::Button(m_manage_panel, _L("Delete")); - m_button_delete->SetToolTip(L("Delete selected files from printer.")); + m_button_delete->SetToolTip(_L("Delete selected files from printer.")); m_button_download = new ::Button(m_manage_panel, _L("Download")); - m_button_download->SetToolTip(L("Download selected files from printer.")); + m_button_download->SetToolTip(_L("Download selected files from printer.")); m_button_management = new ::Button(m_manage_panel, _L("Select")); - m_button_management->SetToolTip(L("Batch manage files.")); + m_button_management->SetToolTip(_L("Batch manage files.")); for (auto b : {m_button_delete, m_button_download, m_button_management}) { b->SetFont(Label::Body_12); b->SetCornerRadius(12); @@ -109,6 +128,7 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) sizer->Add(top_sizer, 0, wxEXPAND); m_image_grid = new ImageGrid(this); + m_image_grid->Bind(EVT_ITEM_ACTION, [this](wxCommandEvent &e) { doAction(size_t(e.GetExtraLong()), e.GetInt()); }); m_image_grid->SetStatus(m_bmp_failed, _L("No printers.")); sizer->Add(m_image_grid, 1, wxEXPAND); @@ -130,19 +150,20 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) // File type auto type_button_clicked = [this](wxEvent &e) { - auto type = PrinterFileSystem::F_TIMELAPSE; - auto b = dynamic_cast